]> git.sur5r.net Git - glabels/commitdiff
Imported Upstream version 2.2.8 upstream/2.2.8
authorJakob Haufe <sur5r@sur5r.net>
Sun, 11 Mar 2012 22:50:00 +0000 (23:50 +0100)
committerJakob Haufe <sur5r@sur5r.net>
Sun, 11 Mar 2012 22:50:00 +0000 (23:50 +0100)
561 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
COPYING-DOCS [new file with mode: 0644]
COPYING-LIBGLABELS [new file with mode: 0644]
COPYING.README_FIRST [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
ChangeLog.pre-2.2 [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
barcode-0.98/COPYING [new file with mode: 0644]
barcode-0.98/ChangeLog [new file with mode: 0644]
barcode-0.98/INSTALL [new file with mode: 0644]
barcode-0.98/Makefile.am [new file with mode: 0644]
barcode-0.98/Makefile.in [new file with mode: 0644]
barcode-0.98/Makefile.in.dist [new file with mode: 0644]
barcode-0.98/README [new file with mode: 0644]
barcode-0.98/README.glabels [new file with mode: 0644]
barcode-0.98/TODO [new file with mode: 0644]
barcode-0.98/barcode.h [new file with mode: 0644]
barcode-0.98/barcode.spec [new file with mode: 0644]
barcode-0.98/bookland/bookland.py [new file with mode: 0644]
barcode-0.98/cmdline.c [new file with mode: 0644]
barcode-0.98/cmdline.h [new file with mode: 0644]
barcode-0.98/codabar.c [new file with mode: 0644]
barcode-0.98/code128.c [new file with mode: 0644]
barcode-0.98/code39.c [new file with mode: 0644]
barcode-0.98/code93.c [new file with mode: 0644]
barcode-0.98/compat/getopt.c [new file with mode: 0644]
barcode-0.98/compat/getopt.h [new file with mode: 0644]
barcode-0.98/configure [new file with mode: 0755]
barcode-0.98/configure.in.dist [new file with mode: 0644]
barcode-0.98/contrib/barcode-SVG.tar.gz [new file with mode: 0644]
barcode-0.98/contrib/barcode-SVG.tar.gz.README [new file with mode: 0644]
barcode-0.98/contrib/barcode-for-delphi.tar.gz [new file with mode: 0644]
barcode-0.98/contrib/barcode-for-delphi.tar.gz.README [new file with mode: 0644]
barcode-0.98/contrib/barcodeps-0.1.tgz [new file with mode: 0644]
barcode-0.98/contrib/barcodeps-0.1.tgz.README [new file with mode: 0644]
barcode-0.98/contrib/grab-0.0.4.tar.gz [new file with mode: 0644]
barcode-0.98/contrib/grab-0.0.4.tar.gz.README [new file with mode: 0644]
barcode-0.98/debian/README.debian [new file with mode: 0644]
barcode-0.98/debian/changelog [new file with mode: 0644]
barcode-0.98/debian/control [new file with mode: 0644]
barcode-0.98/debian/copyright [new file with mode: 0644]
barcode-0.98/debian/dirs [new file with mode: 0644]
barcode-0.98/debian/info [new file with mode: 0644]
barcode-0.98/debian/rules [new file with mode: 0755]
barcode-0.98/doc/Makefile.in [new file with mode: 0644]
barcode-0.98/doc/README [new file with mode: 0644]
barcode-0.98/doc/barcode.info [new file with mode: 0644]
barcode-0.98/doc/barcode.pdf [new file with mode: 0644]
barcode-0.98/doc/barcode.ps [new file with mode: 0644]
barcode-0.98/doc/barcodedoc.txt [new file with mode: 0644]
barcode-0.98/doc/doc.barcode [new file with mode: 0644]
barcode-0.98/doc/infofilter [new file with mode: 0755]
barcode-0.98/doc/manpager [new file with mode: 0755]
barcode-0.98/doc/mktxt [new file with mode: 0755]
barcode-0.98/doc/texi2html [new file with mode: 0755]
barcode-0.98/ean.c [new file with mode: 0644]
barcode-0.98/i25.c [new file with mode: 0644]
barcode-0.98/install-sh [new file with mode: 0644]
barcode-0.98/library.c [new file with mode: 0644]
barcode-0.98/main.c [new file with mode: 0644]
barcode-0.98/missing [new file with mode: 0755]
barcode-0.98/mkinstalldirs [new file with mode: 0755]
barcode-0.98/msi.c [new file with mode: 0644]
barcode-0.98/pcl.c [new file with mode: 0644]
barcode-0.98/plessey.c [new file with mode: 0644]
barcode-0.98/ps.c [new file with mode: 0644]
barcode-0.98/sample.c [new file with mode: 0644]
config.guess [new file with mode: 0755]
config.h.in [new file with mode: 0644]
config.sub [new file with mode: 0755]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
data/Makefile.am [new file with mode: 0644]
data/Makefile.in [new file with mode: 0644]
data/desktop/Makefile.am [new file with mode: 0644]
data/desktop/Makefile.in [new file with mode: 0644]
data/desktop/glabels.desktop.in [new file with mode: 0644]
data/dtd/Makefile.am [new file with mode: 0644]
data/dtd/Makefile.in [new file with mode: 0644]
data/dtd/glabels-2.2.dtd [new file with mode: 0644]
data/glade/Makefile.am [new file with mode: 0644]
data/glade/Makefile.in [new file with mode: 0644]
data/glade/merge-properties-dialog.glade [new file with mode: 0644]
data/glade/new-label-dialog.glade [new file with mode: 0644]
data/glade/object-editor.glade [new file with mode: 0644]
data/glade/prefs-dialog.glade [new file with mode: 0644]
data/glade/print-custom-widget.glade [new file with mode: 0644]
data/glade/property-bar.glade [new file with mode: 0644]
data/glade/template-designer.glade [new file with mode: 0644]
data/glade/wdgt-media-select.glade [new file with mode: 0644]
data/glade/wdgt-rotate-label.glade [new file with mode: 0644]
data/man/Makefile.am [new file with mode: 0644]
data/man/Makefile.in [new file with mode: 0644]
data/man/glabels.1 [new file with mode: 0644]
data/mime/Makefile.am [new file with mode: 0644]
data/mime/Makefile.in [new file with mode: 0644]
data/mime/glabels.applications [new file with mode: 0644]
data/mime/glabels.keys [new file with mode: 0644]
data/mime/glabels.keys.in [new file with mode: 0644]
data/mime/glabels.mime [new file with mode: 0644]
data/mime/glabels.xml [new file with mode: 0644]
data/mime/glabels.xml.in [new file with mode: 0644]
data/pixmaps/Makefile.am [new file with mode: 0644]
data/pixmaps/Makefile.in [new file with mode: 0644]
data/pixmaps/ex-1layout.png [new file with mode: 0644]
data/pixmaps/ex-2layouts.png [new file with mode: 0644]
data/pixmaps/ex-cd-size.png [new file with mode: 0644]
data/pixmaps/ex-rect-size.png [new file with mode: 0644]
data/pixmaps/ex-round-size.png [new file with mode: 0644]
data/pixmaps/glabels-about-logo.png [new file with mode: 0644]
data/pixmaps/glabels-application-x-glabels.png [new file with mode: 0644]
data/pixmaps/glabels-splash.png [new file with mode: 0644]
data/pixmaps/glabels.png [new file with mode: 0644]
data/templates/Makefile.am [new file with mode: 0644]
data/templates/Makefile.in [new file with mode: 0644]
data/templates/avery-iso-templates.xml [new file with mode: 0644]
data/templates/avery-other-templates.xml [new file with mode: 0644]
data/templates/avery-us-templates.xml [new file with mode: 0644]
data/templates/brother-other-templates.xml [new file with mode: 0644]
data/templates/categories.xml [new file with mode: 0644]
data/templates/dymo-other-templates.xml [new file with mode: 0644]
data/templates/misc-iso-templates.xml [new file with mode: 0644]
data/templates/misc-other-templates.xml [new file with mode: 0644]
data/templates/misc-us-templates.xml [new file with mode: 0644]
data/templates/paper-sizes.xml [new file with mode: 0644]
data/templates/pearl-templates.xml [new file with mode: 0644]
data/templates/zweckform-iso-templates.xml [new file with mode: 0644]
depcomp [new file with mode: 0755]
docs/Makefile.am [new file with mode: 0644]
docs/Makefile.in [new file with mode: 0644]
docs/libglabels/Makefile.am [new file with mode: 0644]
docs/libglabels/Makefile.in [new file with mode: 0644]
docs/libglabels/html/ch01.html [new file with mode: 0644]
docs/libglabels/html/ch02.html [new file with mode: 0644]
docs/libglabels/html/ch03.html [new file with mode: 0644]
docs/libglabels/html/home.png [new file with mode: 0644]
docs/libglabels/html/index.html [new file with mode: 0644]
docs/libglabels/html/index.sgml [new file with mode: 0644]
docs/libglabels/html/left.png [new file with mode: 0644]
docs/libglabels/html/libglabels-category.html [new file with mode: 0644]
docs/libglabels/html/libglabels-db.html [new file with mode: 0644]
docs/libglabels/html/libglabels-enums.html [new file with mode: 0644]
docs/libglabels/html/libglabels-paper.html [new file with mode: 0644]
docs/libglabels/html/libglabels-str.html [new file with mode: 0644]
docs/libglabels/html/libglabels-template.html [new file with mode: 0644]
docs/libglabels/html/libglabels-xml-category.html [new file with mode: 0644]
docs/libglabels/html/libglabels-xml-paper.html [new file with mode: 0644]
docs/libglabels/html/libglabels-xml-template.html [new file with mode: 0644]
docs/libglabels/html/libglabels-xml.html [new file with mode: 0644]
docs/libglabels/html/libglabels.devhelp [new file with mode: 0644]
docs/libglabels/html/libglabels.devhelp2 [new file with mode: 0644]
docs/libglabels/html/right.png [new file with mode: 0644]
docs/libglabels/html/style.css [new file with mode: 0644]
docs/libglabels/html/up.png [new file with mode: 0644]
docs/libglabels/libglabels-docs.sgml [new file with mode: 0644]
docs/libglabels/libglabels-overrides.txt [new file with mode: 0644]
docs/libglabels/libglabels-sections.txt [new file with mode: 0644]
docs/libglabels/libglabels.types [new file with mode: 0644]
docs/libglabels/tmpl/category.sgml [new file with mode: 0644]
docs/libglabels/tmpl/db.sgml [new file with mode: 0644]
docs/libglabels/tmpl/enums.sgml [new file with mode: 0644]
docs/libglabels/tmpl/libglabels-unused.sgml [new file with mode: 0644]
docs/libglabels/tmpl/libglabels.sgml [new file with mode: 0644]
docs/libglabels/tmpl/paper.sgml [new file with mode: 0644]
docs/libglabels/tmpl/str.sgml [new file with mode: 0644]
docs/libglabels/tmpl/template.sgml [new file with mode: 0644]
docs/libglabels/tmpl/xml-category.sgml [new file with mode: 0644]
docs/libglabels/tmpl/xml-paper.sgml [new file with mode: 0644]
docs/libglabels/tmpl/xml-template.sgml [new file with mode: 0644]
docs/libglabels/tmpl/xml.sgml [new file with mode: 0644]
docs/libglabels/xml/api-index-deprecated.xml [new file with mode: 0644]
docs/libglabels/xml/api-index-full.xml [new file with mode: 0644]
docs/libglabels/xml/category.xml [new file with mode: 0644]
docs/libglabels/xml/db.xml [new file with mode: 0644]
docs/libglabels/xml/enums.xml [new file with mode: 0644]
docs/libglabels/xml/paper.xml [new file with mode: 0644]
docs/libglabels/xml/str.xml [new file with mode: 0644]
docs/libglabels/xml/template.xml [new file with mode: 0644]
docs/libglabels/xml/xml-category.xml [new file with mode: 0644]
docs/libglabels/xml/xml-paper.xml [new file with mode: 0644]
docs/libglabels/xml/xml-template.xml [new file with mode: 0644]
docs/libglabels/xml/xml.xml [new file with mode: 0644]
glabels.spec [new file with mode: 0644]
glabels.spec.in [new file with mode: 0644]
gnome-doc-utils.make [new file with mode: 0644]
gtk-doc.make [new file with mode: 0644]
help/C/figures/glabels-template-cd.png [new file with mode: 0644]
help/C/figures/glabels-template-label.png [new file with mode: 0644]
help/C/figures/glabels-template-layout.png [new file with mode: 0644]
help/C/figures/main-window-empty.png [new file with mode: 0644]
help/C/figures/merge-ex1-1.png [new file with mode: 0644]
help/C/figures/merge-ex1-2.png [new file with mode: 0644]
help/C/figures/merge-ex1-3.png [new file with mode: 0644]
help/C/figures/merge-ex1-4.png [new file with mode: 0644]
help/C/figures/merge-ex2-1.png [new file with mode: 0644]
help/C/figures/merge-ex2-2.png [new file with mode: 0644]
help/C/figures/merge-ex2-3.png [new file with mode: 0644]
help/C/figures/merge-ex2-4.png [new file with mode: 0644]
help/C/figures/merge-ex3-1.png [new file with mode: 0644]
help/C/figures/merge-ex3-2.png [new file with mode: 0644]
help/C/figures/object-editor-sidebar.png [new file with mode: 0644]
help/C/figures/print-copies.png [new file with mode: 0644]
help/C/figures/print-merge.png [new file with mode: 0644]
help/C/glabels.xml [new file with mode: 0644]
help/C/legal.xml [new file with mode: 0644]
help/Makefile.am [new file with mode: 0644]
help/Makefile.in [new file with mode: 0644]
help/cs/cs.po [new file with mode: 0644]
help/cs/figures/main-window-empty.png [new file with mode: 0644]
help/cs/figures/merge-ex1-1.png [new file with mode: 0644]
help/cs/figures/merge-ex1-2.png [new file with mode: 0644]
help/cs/figures/merge-ex1-3.png [new file with mode: 0644]
help/cs/figures/merge-ex1-4.png [new file with mode: 0644]
help/cs/figures/merge-ex2-1.png [new file with mode: 0644]
help/cs/figures/merge-ex2-2.png [new file with mode: 0644]
help/cs/figures/merge-ex2-3.png [new file with mode: 0644]
help/cs/figures/merge-ex2-4.png [new file with mode: 0644]
help/cs/figures/object-editor-sidebar.png [new file with mode: 0644]
help/cs/figures/print-copies.png [new file with mode: 0644]
help/cs/figures/print-merge.png [new file with mode: 0644]
help/cs/glabels.xml [new file with mode: 0644]
help/de/de.po [new file with mode: 0644]
help/de/figures/main-window-empty.png [new file with mode: 0644]
help/de/figures/merge-ex1-1.png [new file with mode: 0644]
help/de/figures/merge-ex1-2.png [new file with mode: 0644]
help/de/figures/merge-ex1-3.png [new file with mode: 0644]
help/de/figures/merge-ex1-4.png [new file with mode: 0644]
help/de/figures/merge-ex2-1.png [new file with mode: 0644]
help/de/figures/merge-ex2-2.png [new file with mode: 0644]
help/de/figures/merge-ex2-3.png [new file with mode: 0644]
help/de/figures/merge-ex2-4.png [new file with mode: 0644]
help/de/figures/merge-ex3-1.png [new file with mode: 0644]
help/de/figures/merge-ex3-2.png [new file with mode: 0644]
help/de/figures/object-editor-sidebar.png [new file with mode: 0644]
help/de/figures/print-copies.png [new file with mode: 0644]
help/de/figures/print-merge.png [new file with mode: 0644]
help/de/glabels.xml [new file with mode: 0644]
help/es/es.po [new file with mode: 0644]
help/es/glabels.xml [new file with mode: 0644]
help/fr/figures/main-window-empty.png [new file with mode: 0644]
help/fr/figures/merge-ex1-1.png [new file with mode: 0644]
help/fr/figures/merge-ex1-2.png [new file with mode: 0644]
help/fr/figures/merge-ex1-3.png [new file with mode: 0644]
help/fr/figures/merge-ex1-4.png [new file with mode: 0644]
help/fr/figures/merge-ex2-1.png [new file with mode: 0644]
help/fr/figures/merge-ex2-2.png [new file with mode: 0644]
help/fr/figures/merge-ex2-3.png [new file with mode: 0644]
help/fr/figures/merge-ex2-4.png [new file with mode: 0644]
help/fr/figures/object-editor-sidebar.png [new file with mode: 0644]
help/fr/figures/print-copies.png [new file with mode: 0644]
help/fr/figures/print-merge.png [new file with mode: 0644]
help/fr/fr.po [new file with mode: 0644]
help/fr/glabels.xml [new file with mode: 0644]
help/glabels.omf.in [new file with mode: 0644]
iec16022-0.2.1/BUGS [new file with mode: 0644]
iec16022-0.2.1/CHANGELOG [new file with mode: 0644]
iec16022-0.2.1/CREDITS [new file with mode: 0644]
iec16022-0.2.1/INSTALL [new file with mode: 0644]
iec16022-0.2.1/LICENSE [new file with mode: 0644]
iec16022-0.2.1/Makefile.am [new file with mode: 0644]
iec16022-0.2.1/Makefile.dist [new file with mode: 0644]
iec16022-0.2.1/Makefile.in [new file with mode: 0644]
iec16022-0.2.1/README [new file with mode: 0644]
iec16022-0.2.1/README.glabels [new file with mode: 0644]
iec16022-0.2.1/TODO [new file with mode: 0644]
iec16022-0.2.1/iec16022.1 [new file with mode: 0644]
iec16022-0.2.1/iec16022.c [new file with mode: 0644]
iec16022-0.2.1/iec16022ecc200.c [new file with mode: 0644]
iec16022-0.2.1/iec16022ecc200.h [new file with mode: 0644]
iec16022-0.2.1/image.c [new file with mode: 0644]
iec16022-0.2.1/image.h [new file with mode: 0644]
iec16022-0.2.1/reedsol.c [new file with mode: 0644]
iec16022-0.2.1/reedsol.h [new file with mode: 0644]
iec16022-0.2.1/test/testsuite-example.bin [new file with mode: 0644]
iec16022-0.2.1/test/testsuite-example.eps [new file with mode: 0644]
iec16022-0.2.1/test/testsuite-example.hex [new file with mode: 0644]
iec16022-0.2.1/test/testsuite-example.png [new file with mode: 0644]
iec16022-0.2.1/test/testsuite-example.text [new file with mode: 0644]
iec16022-0.2.1/test/testsuite.sh [new file with mode: 0755]
install-sh [new file with mode: 0755]
intltool-extract.in [new file with mode: 0644]
intltool-merge.in [new file with mode: 0644]
intltool-update.in [new file with mode: 0644]
libglabels/Makefile.am [new file with mode: 0644]
libglabels/Makefile.in [new file with mode: 0644]
libglabels/category.c [new file with mode: 0644]
libglabels/category.h [new file with mode: 0644]
libglabels/db.c [new file with mode: 0644]
libglabels/db.h [new file with mode: 0644]
libglabels/enums.h [new file with mode: 0644]
libglabels/libglabels-private.h [new file with mode: 0644]
libglabels/libglabels.h [new file with mode: 0644]
libglabels/libglabels.pc.in [new file with mode: 0644]
libglabels/paper.c [new file with mode: 0644]
libglabels/paper.h [new file with mode: 0644]
libglabels/str.c [new file with mode: 0644]
libglabels/str.h [new file with mode: 0644]
libglabels/template.c [new file with mode: 0644]
libglabels/template.h [new file with mode: 0644]
libglabels/xml-category.c [new file with mode: 0644]
libglabels/xml-category.h [new file with mode: 0644]
libglabels/xml-paper.c [new file with mode: 0644]
libglabels/xml-paper.h [new file with mode: 0644]
libglabels/xml-template.c [new file with mode: 0644]
libglabels/xml-template.h [new file with mode: 0644]
libglabels/xml.c [new file with mode: 0644]
libglabels/xml.h [new file with mode: 0644]
ltmain.sh [new file with mode: 0755]
missing [new file with mode: 0755]
mkinstalldirs [new file with mode: 0755]
po/LINGUAS [new file with mode: 0644]
po/Makefile.in.in [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/ca.po [new file with mode: 0644]
po/cs.po [new file with mode: 0644]
po/da.po [new file with mode: 0644]
po/de.po [new file with mode: 0644]
po/eo.po [new file with mode: 0644]
po/es.po [new file with mode: 0644]
po/fr.po [new file with mode: 0644]
po/it.po [new file with mode: 0644]
po/ja.po [new file with mode: 0644]
po/ko.po [new file with mode: 0644]
po/nb.po [new file with mode: 0644]
po/pl.po [new file with mode: 0644]
po/pt.po [new file with mode: 0644]
po/pt_BR.po [new file with mode: 0644]
po/ru.po [new file with mode: 0644]
po/sl.po [new file with mode: 0644]
po/sv.po [new file with mode: 0644]
po/zh_CN.po [new file with mode: 0644]
po/zh_TW.po [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/base64.c [new file with mode: 0644]
src/base64.h [new file with mode: 0644]
src/bc-gnubarcode.c [new file with mode: 0644]
src/bc-gnubarcode.h [new file with mode: 0644]
src/bc-iec16022.c [new file with mode: 0644]
src/bc-iec16022.h [new file with mode: 0644]
src/bc-postnet.c [new file with mode: 0644]
src/bc-postnet.h [new file with mode: 0644]
src/bc.c [new file with mode: 0644]
src/bc.h [new file with mode: 0644]
src/cairo-ellipse-path.c [new file with mode: 0644]
src/cairo-ellipse-path.h [new file with mode: 0644]
src/cairo-label-path.c [new file with mode: 0644]
src/cairo-label-path.h [new file with mode: 0644]
src/cairo-markup-path.c [new file with mode: 0644]
src/cairo-markup-path.h [new file with mode: 0644]
src/color.c [new file with mode: 0644]
src/color.h [new file with mode: 0644]
src/critical-error-handler.c [new file with mode: 0644]
src/critical-error-handler.h [new file with mode: 0644]
src/debug.c [new file with mode: 0644]
src/debug.h [new file with mode: 0644]
src/file.c [new file with mode: 0644]
src/file.h [new file with mode: 0644]
src/glabels-batch.c [new file with mode: 0644]
src/glabels.c [new file with mode: 0644]
src/hig.h [new file with mode: 0644]
src/label-barcode.c [new file with mode: 0644]
src/label-barcode.h [new file with mode: 0644]
src/label-box.c [new file with mode: 0644]
src/label-box.h [new file with mode: 0644]
src/label-ellipse.c [new file with mode: 0644]
src/label-ellipse.h [new file with mode: 0644]
src/label-image.c [new file with mode: 0644]
src/label-image.h [new file with mode: 0644]
src/label-line.c [new file with mode: 0644]
src/label-line.h [new file with mode: 0644]
src/label-object.c [new file with mode: 0644]
src/label-object.h [new file with mode: 0644]
src/label-text.c [new file with mode: 0644]
src/label-text.h [new file with mode: 0644]
src/label.c [new file with mode: 0644]
src/label.h [new file with mode: 0644]
src/marshal.c [new file with mode: 0644]
src/marshal.h [new file with mode: 0644]
src/marshal.list [new file with mode: 0644]
src/merge-evolution.c [new file with mode: 0644]
src/merge-evolution.h [new file with mode: 0644]
src/merge-init.c [new file with mode: 0644]
src/merge-init.h [new file with mode: 0644]
src/merge-properties-dialog.c [new file with mode: 0644]
src/merge-properties-dialog.h [new file with mode: 0644]
src/merge-text.c [new file with mode: 0644]
src/merge-text.h [new file with mode: 0644]
src/merge-vcard.c [new file with mode: 0644]
src/merge-vcard.h [new file with mode: 0644]
src/merge.c [new file with mode: 0644]
src/merge.h [new file with mode: 0644]
src/mini-preview-pixbuf-cache.c [new file with mode: 0644]
src/mini-preview-pixbuf-cache.h [new file with mode: 0644]
src/mini-preview-pixbuf.c [new file with mode: 0644]
src/mini-preview-pixbuf.h [new file with mode: 0644]
src/mygal/Makefile.am [new file with mode: 0644]
src/mygal/Makefile.in [new file with mode: 0644]
src/mygal/color-group.c [new file with mode: 0644]
src/mygal/color-group.h [new file with mode: 0644]
src/mygal/color-palette.c [new file with mode: 0644]
src/mygal/color-palette.h [new file with mode: 0644]
src/mygal/e-colors.c [new file with mode: 0644]
src/mygal/e-colors.h [new file with mode: 0644]
src/mygal/e-marshal.list [new file with mode: 0644]
src/mygal/e-util.h [new file with mode: 0644]
src/mygal/mygal-combo-box.c [new file with mode: 0644]
src/mygal/mygal-combo-box.h [new file with mode: 0644]
src/mygal/widget-color-combo.c [new file with mode: 0644]
src/mygal/widget-color-combo.h [new file with mode: 0644]
src/new-label-dialog.c [new file with mode: 0644]
src/new-label-dialog.h [new file with mode: 0644]
src/object-editor-bc-page.c [new file with mode: 0644]
src/object-editor-data-page.c [new file with mode: 0644]
src/object-editor-edit-page.c [new file with mode: 0644]
src/object-editor-fill-page.c [new file with mode: 0644]
src/object-editor-image-page.c [new file with mode: 0644]
src/object-editor-line-page.c [new file with mode: 0644]
src/object-editor-lsize-page.c [new file with mode: 0644]
src/object-editor-position-page.c [new file with mode: 0644]
src/object-editor-private.h [new file with mode: 0644]
src/object-editor-shadow-page.c [new file with mode: 0644]
src/object-editor-size-page.c [new file with mode: 0644]
src/object-editor-text-page.c [new file with mode: 0644]
src/object-editor.c [new file with mode: 0644]
src/object-editor.h [new file with mode: 0644]
src/pixbuf-cache.c [new file with mode: 0644]
src/pixbuf-cache.h [new file with mode: 0644]
src/pixmaps/Makefile.am [new file with mode: 0644]
src/pixmaps/Makefile.in [new file with mode: 0644]
src/pixmaps/checkerboard.xpm [new file with mode: 0644]
src/pixmaps/collate.xpm [new file with mode: 0644]
src/pixmaps/cursor_barcode.xbm [new file with mode: 0644]
src/pixmaps/cursor_barcode_mask.xbm [new file with mode: 0644]
src/pixmaps/cursor_box.xbm [new file with mode: 0644]
src/pixmaps/cursor_box_mask.xbm [new file with mode: 0644]
src/pixmaps/cursor_ellipse.xbm [new file with mode: 0644]
src/pixmaps/cursor_ellipse_mask.xbm [new file with mode: 0644]
src/pixmaps/cursor_image.xbm [new file with mode: 0644]
src/pixmaps/cursor_image_mask.xbm [new file with mode: 0644]
src/pixmaps/cursor_line.xbm [new file with mode: 0644]
src/pixmaps/cursor_line_mask.xbm [new file with mode: 0644]
src/pixmaps/cursor_text.xbm [new file with mode: 0644]
src/pixmaps/cursor_text_mask.xbm [new file with mode: 0644]
src/pixmaps/nocollate.xpm [new file with mode: 0644]
src/prefs-dialog.c [new file with mode: 0644]
src/prefs-dialog.h [new file with mode: 0644]
src/prefs-model.c [new file with mode: 0644]
src/prefs-model.h [new file with mode: 0644]
src/prefs.c [new file with mode: 0644]
src/prefs.h [new file with mode: 0644]
src/print-op.c [new file with mode: 0644]
src/print-op.h [new file with mode: 0644]
src/print.c [new file with mode: 0644]
src/print.h [new file with mode: 0644]
src/recent.c [new file with mode: 0644]
src/recent.h [new file with mode: 0644]
src/stock-pixmaps/Makefile.am [new file with mode: 0644]
src/stock-pixmaps/Makefile.in [new file with mode: 0644]
src/stock-pixmaps/stock_align_bottom_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_align_hcenter_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_align_left_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_align_right_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_align_top_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_align_vcenter_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_arrow_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_arrow_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_barcode_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_barcode_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_box_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_box_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_bucket_fill_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_bucket_fill_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_center_horiz_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_center_vert_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_ellipse_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_ellipse_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_flip_horiz_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_flip_vert_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_hchain_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_hchain_broken_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_image_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_image_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_line_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_line_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_merge_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_merge_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_order_bottom_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_order_top_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_pencil_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_pencil_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_properties_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_properties_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_rotate_left_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_rotate_right_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_text_16.png [new file with mode: 0644]
src/stock-pixmaps/stock_text_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_vchain_24.png [new file with mode: 0644]
src/stock-pixmaps/stock_vchain_broken_24.png [new file with mode: 0644]
src/stock-pixmaps/stockpixbufs.h [new file with mode: 0644]
src/stock.c [new file with mode: 0644]
src/stock.h [new file with mode: 0644]
src/template-designer.c [new file with mode: 0644]
src/template-designer.h [new file with mode: 0644]
src/text-node.c [new file with mode: 0644]
src/text-node.h [new file with mode: 0644]
src/ui-commands.c [new file with mode: 0644]
src/ui-commands.h [new file with mode: 0644]
src/ui-property-bar.c [new file with mode: 0644]
src/ui-property-bar.h [new file with mode: 0644]
src/ui-sidebar.c [new file with mode: 0644]
src/ui-sidebar.h [new file with mode: 0644]
src/ui-util.c [new file with mode: 0644]
src/ui-util.h [new file with mode: 0644]
src/ui.c [new file with mode: 0644]
src/ui.h [new file with mode: 0644]
src/util.c [new file with mode: 0644]
src/util.h [new file with mode: 0644]
src/view-barcode.c [new file with mode: 0644]
src/view-barcode.h [new file with mode: 0644]
src/view-box.c [new file with mode: 0644]
src/view-box.h [new file with mode: 0644]
src/view-ellipse.c [new file with mode: 0644]
src/view-ellipse.h [new file with mode: 0644]
src/view-image.c [new file with mode: 0644]
src/view-image.h [new file with mode: 0644]
src/view-line.c [new file with mode: 0644]
src/view-line.h [new file with mode: 0644]
src/view-object.c [new file with mode: 0644]
src/view-object.h [new file with mode: 0644]
src/view-text.c [new file with mode: 0644]
src/view-text.h [new file with mode: 0644]
src/view.c [new file with mode: 0644]
src/view.h [new file with mode: 0644]
src/warning-handler.c [new file with mode: 0644]
src/warning-handler.h [new file with mode: 0644]
src/wdgt-chain-button.c [new file with mode: 0644]
src/wdgt-chain-button.h [new file with mode: 0644]
src/wdgt-media-select.c [new file with mode: 0644]
src/wdgt-media-select.h [new file with mode: 0644]
src/wdgt-mini-preview.c [new file with mode: 0644]
src/wdgt-mini-preview.h [new file with mode: 0644]
src/wdgt-print-copies.c [new file with mode: 0644]
src/wdgt-print-copies.h [new file with mode: 0644]
src/wdgt-print-merge.c [new file with mode: 0644]
src/wdgt-print-merge.h [new file with mode: 0644]
src/wdgt-rotate-label.c [new file with mode: 0644]
src/wdgt-rotate-label.h [new file with mode: 0644]
src/window.c [new file with mode: 0644]
src/window.h [new file with mode: 0644]
src/xml-label-04.c [new file with mode: 0644]
src/xml-label-04.h [new file with mode: 0644]
src/xml-label.c [new file with mode: 0644]
src/xml-label.h [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..0a29f97
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,191 @@
+gLabels Author
+==============
+
+Jim Evins <evins@snaught.com>
+
+Acknowledgments
+===============
+
+- The GNU Barcode Library provides a large chunk of the barcode functionality
+and is distributed with glabels.  See ./barcode-0.98/README for more
+information.  The author:
+
+       Alessandro Rubini <rubini@gnu.org>
+
+- The iec16022 library provides encoding for 2D barcodes.  See
+iec16022-0.2.1/README for more information.
+
+- Glabels includes modified versions of several widgets from the GAL library.
+These are copyright:
+
+       * Copyright 2000, 2001, Ximian, Inc.
+       * Copyright 2000, Michael Levy
+       * Copyright 2001, Almer S. Tigelaar
+
+- Glabels includes a modified version of the gimpchainbutton widget from the
+gimp, as well as several stock icons from the gimp's default theme.
+These are copyright:
+
+        * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
+        * Copyright (C) 1999-2000 Sven Neumann <sven@gimp.org>
+
+Glabels includes contributions from:
+       Frederic Ruaudel  <grumz@users.sf.net>
+       Emmanuel Pacaud <emmanuel.pacaud@univ-poitiers.fr>
+       Wayne Schuller <k_wayne@linuxpower.org>
+       Austin Henry  <ahenry@users.sourceforge.net> -- EDS and vcard backends
+       nestor di <nestordi@usuarios.retecal.es>  --  excellent splash screen
+                                                      that first appeared in
+                                                      0.4.3:
+       Darren Warner <warnerd@users.sourceforge.net>
+       Javier Donaire Segarra <jyuyu@users.sourceforge.net>
+       Alessandro Zummo <azummo@towertech.it>
+       José Dapena Paz <jdapena@igalia.com>
+       Akkana <akkana@shallowsky.com>
+       Dag Wieers <dag@wieers.com>
+       Mário Meyer <mario@meyer.eti.br>
+       Peter Cherriman <glabels-devel2712@bubieyehyeh.me.uk>
+
+Translations:
+
+       Olivier Berger <oberger@april.org> -- French (original)
+       Florent Morel <florent@taket.org> -- French (2.0.2)
+       Claude Paroz <claude@2xlibre.net> -- French (2.1.4)
+       Marcus Bauer <m@7n7.de> -- German (original)
+       Christian Neumair <christian-neumair@web.de> -- German (1.89.1)
+       Mario Blättermann <mariobl@gnome.org> -- German (2.2.5)
+       Takeshi AIHANA <aihana@gnome.gr.jp> -- Japanese
+       Paulo Rogério Ormenese <pormenese@uol.com.br> -- Brazilian Portuguese
+       Víctor Moral <victor@pasmao.net> -- Spanish
+       sergio rivadero <sergiorivadero@argentina.com> -- Spanish (2.0.3)
+       Vitaly Lipatov <lav@altlinux.ru> -- Russian
+       Shell, Hin-lik Hung <shell@home.shellhung.org> -- Chinese (TW)
+       Arkadiusz Lipiec <A.Lipiec@elka.pw.edu.pl> -- Polish
+       David Makovský (Yakeen) <yakeen@sannyas-on.net> -- Czech
+       Zbynek Mrkvicka <zbynek@oachot.cz> -- Czech (2.0.3)
+       Mancio <mancio_and@yahoo.it> -- Italian
+       Daniele Medri <daniele.medri@libero.it> -- Italian (2.0.3)
+       Antonio C. Codazzi "la Filozofo" <f_sophia@libero.it> -- Esperanto
+       David Planella <david.planella@gmail.com> -- Catalan
+       Careon <zzbusagain@yahoo.com.cn> -- Chinese (CN)
+
+The following people have submitted label templates or information about
+particular products (I apologize if I have missed anybody):
+
+       Hap
+       Olivier Berger
+       Marcus Bauer
+       Jochen Hein
+       Jonathan Buzzard
+       Jeff Davis
+       Ludger Solbach
+       Darren Ross
+       George Mitchell
+       Douglas Bollinger
+       Tim Jackson
+       John Stoffel
+       Dany De Bontridder
+       Andy Longton
+       Bostjan Muller
+       John Helms
+       no-exit
+       Mozilla from marela
+       Holger
+       Bill Tihen
+       Dan Gray
+       Keith Hudson
+       Tamas Bondar
+       George Mitchell
+       Erich Pfennig
+       Gwen Patton
+       Miek Gieben
+       Joerg Schmitz-Linneweber
+       David Makovský
+       Oliver Schwank
+       Akkana
+       Ted Poe
+       hans-helmut.belter
+       Uli Wachowitz
+       Stephan Hegel
+       Holger Reinmann
+       Michael Wojciechowski
+       Jim Mueller
+       Mark Fullalove
+       Zamiel Al'Shaitan
+       Philip Paeps
+       Bryan Fields
+       Martin Klaffenboeck
+       Lauri Ampuja
+       Allan Wind
+       Mark S Burgunder
+       Christian Holländer
+       Marvin P. Dickens
+       Julien BLACHE
+       James D Strandboge
+       Linas Jakucionis
+       Henrik Brix Andersen
+       Nigel Titley
+       Sean 'Shaleh' Perry
+       Anthony Brockman
+       Thorsten Hirsch
+       John Ross
+       Mike Machado
+       Rob Elshire
+       Niels
+        Ernst W. Winter
+       regis rampnoux  
+       Sven Salzwedel
+       Dick Middleton
+       Ian Peake
+       Wayne Schuller
+       Thomas Vill
+       Fred Bacon
+       JBadger
+       Frank Altpeter
+       Matthew J. Lockner
+       Larry Harriman
+       Juan Carlos Valero
+       Nick Hill
+       Ali Akcaagac
+       Dan Clark
+       Peter L. Berghold
+       Vitaly Lipatov
+       Steve Saxon
+       Roman Kreisel
+       Steve Reppucci
+       Lionel CONS
+       Richard Lance
+       Anand Kumria
+       Alexandre Sauvé
+       Ironblade
+       Matthias Mailänder
+       Bernhard Walle
+       Stephen Hilliard
+       Alessandro Zummo
+       Herbert Straub
+       Dennis Böckmann
+       Anon
+       D. Leitner
+       Georg Ostertag
+       Manuel Siggen
+       David Huber
+       Harald Welte
+       Richard Rothwell
+       Gernot Hassenpflug
+       Pau Ruŀlan Ferragut
+       Richard Hurt
+       Phil Endecott
+       Koen Wybo
+       Mark Moeller
+       Bertus W.
+       Oliver Friedrich
+       Dr. Oliver Thiel
+       Jonas Stein
+       Thomas Eggers
+       Marina Delic
+       Russell Knighton
+       Anthony Mark Morningstar
+       Ian Shuttleworth
+
+
+And many others for their many helpful suggestions and bug reports -- thanks.
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
+++ b/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.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/COPYING-DOCS b/COPYING-DOCS
new file mode 100644 (file)
index 0000000..b42936b
--- /dev/null
@@ -0,0 +1,355 @@
+               GNU Free Documentation License
+                  Version 1.1, March 2000
+
+ Copyright (C) 2000  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.
+
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially.  Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License.  The "Document", below, refers to any
+such manual or work.  Any member of the public is a licensee, and is
+addressed as "you".
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject.  (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent.  A copy that is
+not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification.  Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols.  If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+   from that of the Document, and from those of previous versions
+   (which should, if there were any, be listed in the History section
+   of the Document).  You may use the same title as a previous version
+   if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+   responsible for authorship of the modifications in the Modified
+   Version, together with at least five of the principal authors of the
+   Document (all of its principal authors, if it has less than five).
+C. State on the Title page the name of the publisher of the
+   Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+   adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+   giving the public permission to use the Modified Version under the
+   terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+   and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section entitled "History", and its title, and add to
+   it an item stating at least the title, year, new authors, and
+   publisher of the Modified Version as given on the Title Page.  If
+   there is no section entitled "History" in the Document, create one
+   stating the title, year, authors, and publisher of the Document as
+   given on its Title Page, then add an item describing the Modified
+   Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+   public access to a Transparent copy of the Document, and likewise
+   the network locations given in the Document for previous versions
+   it was based on.  These may be placed in the "History" section.
+   You may omit a network location for a work that was published at
+   least four years before the Document itself, or if the original
+   publisher of the version it refers to gives permission.
+K. In any section entitled "Acknowledgements" or "Dedications",
+   preserve the section's title, and preserve in the section all the
+   substance and tone of each of the contributor acknowledgements
+   and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+   unaltered in their text and in their titles.  Section numbers
+   or the equivalent are not considered part of the section titles.
+M. Delete any section entitled "Endorsements".  Such a section
+   may not be included in the Modified Version.
+N. Do not retitle any existing section as "Endorsements"
+   or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications".  You must delete all sections
+entitled "Endorsements."
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation.  Such a compilation is called an "aggregate", and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License provided that you also include the
+original English version of this License.  In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License.  Any other attempt to
+copy, modify, sublicense or distribute the Document 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.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation 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.  See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+      Copyright (c)  YEAR  YOUR NAME.
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.1
+      or any later version published by the Free Software Foundation;
+      with the Invariant Sections being LIST THEIR TITLES, with the
+      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+      A copy of the license is included in the section entitled "GNU
+      Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant.  If you have no
+Front-Cover Texts, write "no Front-Cover Texts" instead of
+"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/COPYING-LIBGLABELS b/COPYING-LIBGLABELS
new file mode 100644 (file)
index 0000000..161a3d1
--- /dev/null
@@ -0,0 +1,482 @@
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 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.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, 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 library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+\f
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+\f
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, 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 library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete 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 distribute a copy of this License along with the
+Library.
+
+  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.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+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 Library, 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 Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you 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.
+
+  If distribution of 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 satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  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.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library 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.
+
+  9. 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 Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+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.
+\f
+  11. 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 Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library 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 Library.
+
+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.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library 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.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library 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 Library
+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 Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+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
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "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
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. 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 LIBRARY 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
+LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  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 library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This 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.
+
+    This 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 this library; 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.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/COPYING.README_FIRST b/COPYING.README_FIRST
new file mode 100644 (file)
index 0000000..2d76f43
--- /dev/null
@@ -0,0 +1,28 @@
+   The gLabels official distribution is an aggregate of several components.
+   Each component is licensed as follows
+
+   The gLabels application core, and other portions of the official gLabels
+   distribution not explicitly licensed otherwise, are licensed under
+   the GNU GENERAL PUBLIC LICENSE (GPL); either version 2 of the License, or
+   (at your option) any later version -- see the 'COPYING' file in this
+   directory for details.
+
+   The libglabels library, located in the "libglabels/" subdirectory, is
+   licensed under the GNU LESSER GENERAL PUBLIC LICENSE (LGPL); either
+   version 2 of the License, or (at your option) any later version -- see
+   the 'COPYING-LIBGLABELS' in this directory for details.
+
+   The gLabels and libglabels documentation, located in the "docs/" and "help/"
+   subdirectories, is licensed under the GNU FREE DOCUMENTATION LICENSE (GFDL)
+   with no Invariant Sections; either version 1.1 or (at your option) any
+   later version -- see 'COPYING-DOCS' in this directory for details.
+
+   The "barcode-0.98/" and "iec16022-0.2.1/" subdirectories contain 3rd party
+   libraries, each licensed under the GNU GENERAL PUBLIC LICENSE (GPL); either
+   version 2 of the License, or (at your option) any later version -- see the
+   'LICENSE' or 'COPYING' file in each of these directories for details.
+
+   The XML files in the "data/templates/" subdirectory constitute the glabels
+   label database.  This database is a simple collection of facts so it is
+   therefore considered to be public domain and can be used for any purpose.
+
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..6aff45b
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,3210 @@
+commit 735fbf968d761acb31bee98121686f02cdeab17e
+Author: Jim Evins <evins@snaught.com>
+Date:   2010-04-19
+
+    Preparation for 2.2.8
+
+M      NEWS
+M      configure.in
+
+commit e68a37d0bec952928393abea94326a7ec77b9e38
+Author: Jorge González <jorgegonz@svn.gnome.org>
+Date:  2010-04-11
+
+    Updated Spanish translation
+
+M      po/es.po
+
+commit a17439be4a34d934f0bf4a19dc9bfb2967343b32
+Author: Jim Evins <evins@snaught.com>
+Date:  2010-04-11
+
+    Remove wasted space in "new label dialog"
+
+    Modified the layout spacing of widgets in the "new label dialog."
+    This makes
+    the dialog a little more compact and hopefully fits better on
+    small screens
+    such as netbooks.
+
+M      data/glade/new-label-dialog.glade
+M      data/glade/wdgt-media-select.glade
+M      data/glade/wdgt-rotate-label.glade
+M      src/new-label-dialog.c
+
+commit 333e792ab9daa4cb6fba8f19d360ca27d69ebff0
+Author: Jim Evins <evins@snaught.com>
+Date:  2010-04-11
+
+    Add place-holder field to all empty private structures
+
+    Fixes glabels bug #2981895.  This is a work-around for glib bug
+    #615379.  For
+    objects with no private data, add a place-holder field so that
+    the private
+    structure is not of zero length which causes g_new0() to crash in glib
+    2.24.0.
+
+M      src/view-barcode.c
+M      src/view-box.c
+M      src/view-ellipse.c
+M      src/view-image.c
+M      src/view-line.c
+M      src/view-text.c
+
+commit a3275186debbf0f4addf574bf02b789bcf3776ba
+Author: Jorge González <jorgegonz@svn.gnome.org>
+Date:  2010-04-07
+
+    Updated Spanish translation
+
+M      po/es.po
+
+commit be60f3c5d947d9ae66ec16f5b61045deb76d1b59
+Author: Filipe Roque <fliproque@gmail.com>
+Date:  2010-04-04
+
+    Updated Portuguese translation
+
+M      po/LINGUAS
+A      po/pt.po
+
+commit a26ba4f2eb55cc02f08c1b97fd4c001d3a550fd2
+Author: Jim Evins <evins@snaught.com>
+Date:  2010-04-03
+
+    Added Avery DL33 and look-alike templates.
+
+    DL33 templates provided by Ian Shuttleworth.
+
+M      AUTHORS
+M      data/templates/avery-iso-templates.xml
+M      data/templates/misc-iso-templates.xml
+
+commit 675d5a6a13117ca85ebdc292dd931efece55d406
+Author: Marek Černocký <marek@manet.cz>
+Date:  2010-03-28
+
+    Update Czech translation
+
+M      po/cs.po
+
+commit ad36a71e24d395d641bf495dda96b8dea994d2df
+Author: Andrej Žnidaršič <andrej.znidarsic@gmail.com>
+Date:  2010-03-28
+
+    Updated Slovenian translation
+
+M      po/sl.po
+
+commit 67becb0c44760f68ad5c014866a53707e8ef4630
+Author: Jorge González <jorgegonz@svn.gnome.org>
+Date:  2010-03-21
+
+    Updated Spanish translation
+
+M      po/es.po
+
+commit 1dd629c4b88056fd0ae51ce9c1b2b0921286fb98
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-03-20
+
+    Updated German translation
+
+M      po/de.po
+
+commit bf78adcbbfd7e8fa51308e0fd64c22d6b07754bc
+Author: Bruno Brouard <annoa.b@gmail.com>
+Date:  2010-03-17
+
+    Updated French translation
+
+M      po/fr.po
+
+commit 6414ee7cd3975db6e7a7fe65b51ec7918ddcd7d6
+Author: Jorge González <jorgegonz@svn.gnome.org>
+Date:  2010-03-17
+
+    Updated Spanish translation
+
+M      po/es.po
+
+commit 21ce5c207013d6ee8f28aa02b4db5894422b8942
+Author: Jim Evins <evins@snaught.com>
+Date:  2010-03-16
+
+    Catching up on template submissions.
+
+M      AUTHORS
+M      data/templates/misc-iso-templates.xml
+M      data/templates/misc-us-templates.xml
+M      data/templates/pearl-templates.xml
+
+commit 1a7125903c076189372671b3b1c699bd1a4322c6
+Author: Kjartan Maraas <kmaraas@gnome.org>
+Date:  2010-03-15
+
+    Add Norwegian language entry.
+
+M      po/LINGUAS
+
+commit 501e409e1565d6aaf75fd6125eca323b4fe081f0
+Author: Kjartan Maraas <kmaraas@gnome.org>
+Date:  2010-03-15
+
+    Added Norwegian bokmål translation
+
+A      po/nb.po
+
+commit 99ac6500e2ce897708ac228b4684d3608576b931
+Author: Jorge González <jorgegonz@svn.gnome.org>
+Date:  2010-03-07
+
+    Updated Spanish translation
+
+M      po/es.po
+
+commit c53c6d83333de1ab2d77f1e81e1d151509f7a1d4
+Author: Takeshi AIHANA <takeshi.aihana@gmail.com>
+Date:  2010-03-06
+
+    Updated Japanese translation
+
+M      po/ja.po
+
+commit c142345372faa68185cd5bbeba4e6192d72599ce
+Author: Jim Evins <evins@snaught.com>
+Date:  2010-03-02
+
+    Preparation for 2.2.7
+
+    Updated NEWS.  Updated version information in configure.in.
+    Added pearl
+    templates to makefile.
+
+M      NEWS
+M      configure.in
+M      data/templates/Makefile.am
+D      help/glabels-help.pot
+
+commit c866fbe3c5dd5cdea13efad8107a7d1a82b5a172
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-03-02
+
+    Fixed some bugs in template data
+
+M      data/templates/pearl-templates.xml
+
+commit ca13ecdc3455f0cca218671dfc9c0a31500a264a
+Author: Andrej Žnidaršič <andrej.znidarsic@gmail.com>
+Date:  2010-02-28
+
+    Updated Slovenian translation
+
+M      po/sl.po
+
+commit 7dbee475634553b69ce7dd934608c7a35da59aa2
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-02-27
+
+    Added Staples STAP14 Mailing Labels
+
+M      data/templates/misc-iso-templates.xml
+
+commit e3cb29b2d6c93547112146696b8adb0c35387b6e
+Author: Joe Hansen <joedalton2@yahoo.dk>
+Date:  2010-02-23
+
+    Updated Danish translation
+
+A      po/da.po
+
+commit de137c4bcf7eb19551ce1478f9929891781ef86f
+Author: Kenneth Nielsen <k.nielsen81@gmail.com>
+Date:  2010-02-23
+
+    Added da to list of languages
+
+M      po/LINGUAS
+
+commit aa892ac85b64ba0f069cc8d0e178faef4eb3de05
+Author: Marek Černocký <marek@manet.cz>
+Date:  2010-02-21
+
+    Update Czech translation
+
+M      help/cs/cs.po
+
+commit 4cf933c8d8e1f74e61fac64b3cfd954c51029b4b
+Author: Jorge González <jorgegonz@svn.gnome.org>
+Date:  2010-02-19
+
+    Added initial Spanish translation
+
+A      help/es/es.po
+
+commit 31cb90be5f9219e04e06f33c72e4269c03154873
+Author: Jorge González <jorgegonz@svn.gnome.org>
+Date:  2010-02-19
+
+    Added es to DOC_LINGUAS
+
+M      help/Makefile.am
+
+commit ca216db75311bda7b80e08409b33212729d8a8ff
+Author: Petr Kovar <pknbe@volny.cz>
+Date:  2010-02-18
+
+    Fix Czech translation by Marek Cernocky
+
+M      po/cs.po
+
+commit 59ce2a62e8ff923d6348f84b9e3e0cff59b10e87
+Author: Petr Kovar <pknbe@volny.cz>
+Date:  2010-02-18
+
+    Add Czech help translation by Marek Cernocky
+
+M      help/Makefile.am
+A      help/cs/cs.po
+A      help/cs/figures/main-window-empty.png
+A      help/cs/figures/merge-ex1-1.png
+A      help/cs/figures/merge-ex1-2.png
+A      help/cs/figures/merge-ex1-3.png
+A      help/cs/figures/merge-ex1-4.png
+A      help/cs/figures/merge-ex2-1.png
+A      help/cs/figures/merge-ex2-2.png
+A      help/cs/figures/merge-ex2-3.png
+A      help/cs/figures/merge-ex2-4.png
+A      help/cs/figures/object-editor-sidebar.png
+A      help/cs/figures/print-copies.png
+A      help/cs/figures/print-merge.png
+
+commit f428dd10c86b1102e96fe76ff0c62d209d6c2923
+Author: Jim Evins <evins@snaught.com>
+Date:  2010-02-15
+
+    Create a default frame if missing from template file
+
+    When parsing a template node, if there is no recognized frame node
+    (e.g.
+    Label-rectangle), a default full-page frame with a 1x1 layout
+    is created.
+    This prevents potential crashes if sharing a user '.glabels' directory
+    with future versions of glabels with new frame types, or in the
+    case of
+    typos for hand generated templates.
+
+M      libglabels/xml-template.c
+
+commit 8ce4aff951c126566870d3417aeadcf385ca5886
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-02-13
+
+    Added URL for Geha Z53 again
+
+M      data/templates/misc-iso-templates.xml
+
+commit c990e078f09bfa3bcee172459e883c1231b458b6
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-02-13
+
+    Removed URL from template due to gettext errors
+
+M      data/templates/misc-iso-templates.xml
+
+commit 610cdbbecd84ed54b2aa082c2781be2f0aae3289
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-02-13
+
+    Added PEARL templates
+
+M      AUTHORS
+A      data/templates/pearl-templates.xml
+
+commit 921c7bc0ab840288787d50ffdde15065f5a610ee
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-02-13
+
+    Added Geha Z53 template
+
+M      AUTHORS
+M      data/templates/misc-iso-templates.xml
+
+commit 548abc9542516724ee8029c7186280cb171b085c
+Author: Petr Kovar <pknbe@volny.cz>
+Date:  2010-02-11
+
+    Update Czech translation by Marek Cernocky
+
+M      po/cs.po
+
+commit a309766e4e90d164e487ebc1978f92fbedbb536c
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-02-09
+
+    Updated German translation
+
+M      po/de.po
+
+commit 6ac473f54bf654ebed0e3eaf94769130b74edd1a
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-02-09
+
+    Updated German translation
+
+M      po/de.po
+
+commit 01b54d65f1bc32538314f01cbe89d89b2d0baa77
+Author: Jim Evins <evins@snaught.com>
+Date:  2010-02-06
+
+    Relax libxml limits when parsing label files
+
+    Glabels bug #2940758.  Back port from master:  Use XML_PARSE_HUGE
+    parser option
+    so that we can handle large text nodes, such as encoded images.  This
+    modification is only applied if libxml 2.7+ is available, as to
+    not introduce
+    new dependencies.
+
+M      configure.in
+M      src/Makefile.am
+M      src/xml-label.c
+
+commit 78329ea6424b52a3e8236b69afebc2eddc6386db
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2010-01-16
+
+    Updated German doc translation
+
+M      help/de/de.po
+
+commit 8bc29ac0910c02eba94f9ccd5042c07cb415b7f3
+Author: Petr Kovar <pknbe@volny.cz>
+Date:  2010-01-13
+
+    Updated Czech translation by Marek Cernocky
+
+M      po/cs.po
+
+commit e5ecd2b4e597bf2e509d4c285f59420322dad390
+Author: Claude Paroz <claude@2xlibre.net>
+Date:  2010-01-09
+
+    Add fr to DOC_LINGUAS variable
+
+M      help/Makefile.am
+
+commit a4758401a939c804a3a026f5c5bcf2deb1f8f7c1
+Author: Claude Paroz <claude@2xlibre.net>
+Date:  2010-01-09
+
+    Add French translation of manual
+
+    Contributed by Alain Lojewski and Claude Paroz
+
+A      help/fr/figures/main-window-empty.png
+A      help/fr/figures/merge-ex1-1.png
+A      help/fr/figures/merge-ex1-2.png
+A      help/fr/figures/merge-ex1-3.png
+A      help/fr/figures/merge-ex1-4.png
+A      help/fr/figures/merge-ex2-1.png
+A      help/fr/figures/merge-ex2-2.png
+A      help/fr/figures/merge-ex2-3.png
+A      help/fr/figures/merge-ex2-4.png
+A      help/fr/figures/object-editor-sidebar.png
+A      help/fr/figures/print-copies.png
+A      help/fr/figures/print-merge.png
+A      help/fr/fr.po
+
+commit 908f97ce93793c1ad05e15b1ad9c788dab587a17
+Author: Matej Urbančič <mateju@svn.gnome.org>
+Date:  2009-12-17
+
+    Added sl for Slovenian translation
+
+M      po/LINGUAS
+
+commit b0e6dea0d9c9b2ca0e1e1ba0650cbe990bce1c29
+Author: Andrej Žnidaršič <andrej.znidarsic@gmail.com>
+Date:  2009-12-17
+
+    Updated Slovenian translation
+
+A      po/sl.po
+
+commit 8f4713e9aec5e19ad382d6493119f6cea812ced4
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-11-18
+
+    Fixed focus behavior of view canvas
+
+    Fixes bug #2899305.  Don't just automatically steal focus when
+    entering
+    canvas.  Require a click to get focus back.
+
+M      src/view.c
+
+commit 1f24fba0eafc5f5e13c4e27cc315ac13cd450bbc
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-11-10
+
+    Preparation for 2.2.6
+
+    Updated NEWS and configure.in.
+
+M      NEWS
+M      configure.in
+
+commit 6f8023f3f90e360ed1911aaf95ab07dd9d1fd00d
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-11-05
+
+    Automatically generate ChangeLog when building dist
+
+    Automatically generate ChangeLog when building distributions.
+    Archived
+    pre 2.2 ChangeLog entries.
+
+M      .gitignore
+M      ChangeLog
+C090   ChangeLog       ChangeLog.pre-2.2
+M      Makefile.am
+
+commit 9542ced852f02b4ded00a923ea99bbfc5262234b
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-11-05
+
+    Caught up on user submitted templates.
+
+    Added user submitted templates and acknowledgements.
+
+M      AUTHORS
+M      data/templates/misc-iso-templates.xml
+M      data/templates/zweckform-iso-templates.xml
+
+commit a2ad57fa1a0c1e826ff1b758a3baeed263d4b1a8
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-11-04
+
+    Fixed merge inconsistencies and crash
+
+    merge.c:
+       Fixed crash when trying to print when a "key" radio has been
+       selected
+       but no key has been selected yet.
+
+    object-editor-*-page.c:
+       Fixed potential inconsistencies with "key" radio buttons when
+       a merge
+       source has not been selected but the field indicates that it is
+       using a
+       merge key.  This can happen when opening a glabels file that
+       has a merg
+       type not supported by the current instance of glabels.
+
+    xml-label.c:
+       Also when parsing a merge field that has a merge type not
+       supported,
+       don't continue parsing it.
+
+M      src/merge.c
+M      src/object-editor-bc-page.c
+M      src/object-editor-data-page.c
+M      src/object-editor-fill-page.c
+M      src/object-editor-image-page.c
+M      src/object-editor-line-page.c
+M      src/object-editor-shadow-page.c
+M      src/object-editor-text-page.c
+M      src/xml-label.c
+
+commit 4cbc3bf59c5b3f2fe8310a87a19c86f414e2e0ae
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-11-04
+
+    Updated German translation
+
+M      po/de.po
+
+commit 50e804b0aae8214a4354d084e36be88eace03f67
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-11-04
+
+    Updated German translation
+
+M      po/de.po
+
+commit 499d70c757fe12219337e2ec9da267b723a1004c
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-11-04
+
+    Updated German doc translation
+
+M      help/de/de.po
+
+commit 7e1940ad444877f6fe17cff8befd469e4ee22ee8
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-11-04
+
+    Forgotten to add before
+
+A      help/de/figures/merge-ex3-1.png
+A      help/de/figures/merge-ex3-2.png
+
+commit f01319ec821d3a3a0463010ca001eaf883cfd98a
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-11-04
+
+    New screenshots
+
+M      help/C/figures/merge-ex3-1.png
+M      help/C/figures/merge-ex3-2.png
+
+commit 4b24ee895b75d59225bedee6ee6a1140a54eebcb
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-11-04
+
+    Updated German doc translation
+
+M      po/de.po
+
+commit b9b0ec1e9eaedcf92ac4a2600d2e09a3a9f466c8
+Author: Daniel Nylander <po@danielnylander.se>
+Date:  2009-11-04
+
+    Updated Swedish translation
+
+M      po/sv.po
+
+commit d0777b14a00530d90dab29e85aabad7b6ff57b67
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-11-03
+
+    Updated documentation for 2.2.6
+
+    - Added an example for doing document merge from evolution data
+    server.  (Mario Blättermann)
+    - Updated most screenshots to 2.2.6 with Clearlooks theme.
+    - Minor corrections
+
+A      .gitignore
+M      help/C/figures/main-window-empty.png
+M      help/C/figures/merge-ex1-1.png
+M      help/C/figures/merge-ex1-2.png
+M      help/C/figures/merge-ex1-3.png
+M      help/C/figures/merge-ex1-4.png
+M      help/C/figures/merge-ex2-1.png
+M      help/C/figures/merge-ex2-2.png
+M      help/C/figures/merge-ex2-3.png
+M      help/C/figures/merge-ex2-4.png
+A      help/C/figures/merge-ex3-1.png
+A      help/C/figures/merge-ex3-2.png
+M      help/C/figures/object-editor-sidebar.png
+M      help/C/figures/print-copies.png
+M      help/C/figures/print-merge.png
+M      help/C/glabels.xml
+M      help/Makefile.am
+
+commit 8fe92bd1ae20ab937f2a5de135c80d92e4c685eb
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-10-25
+
+    Start new path when drawing round labels
+
+    Start new path when drawing round labels.  This fixes a bug, where
+    if the
+    top most object is a text object, an extras line would be drawn.
+
+M      src/cairo-label-path.c
+
+commit d55ffd2866c5d6a20c1236f087b18316989c87dd
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-10-25
+
+    Fixed incorrect storage of glPrefsModel's base object
+
+    Parent object was declared as a pointer, so there was not enough
+    room for
+    the parent/base object.  This potentially could have caused havoc
+    with this
+    object.
+
+M      src/prefs-model.h
+
+commit 33821ebe5b65a8191215646fab2be577854bfb17
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-10-10
+
+    Converted translations to UTF-8
+
+M      po/pl.po
+M      po/pt_BR.po
+
+commit 69e71bfe60909459ed177b767b40f0940824ad6b
+Author: Daniel Nylander <po@danielnylander.se>
+Date:  2009-10-06
+
+    Added Swedish translation
+
+M      po/LINGUAS
+A      po/sv.po
+
+commit e04fe3a1a5b378412eb153350e2fb2b8a22eb8b1
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-10-06
+
+    Converted polish translation to UTF-8
+
+M      po/pl.po
+
+commit 37b8623b1615da2b54cf2b22444f89c3e36b429d
+Author: Claude Paroz <claude@2xlibre.net>
+Date:  2009-10-06
+
+    Convert zh_TW translation to UTF-8
+
+M      po/LINGUAS
+R089   po/zh_TW.Big5.po        po/zh_TW.po
+
+commit 885961d5ac802bf487d34b400679b2f15855d1e4
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-10-06
+
+    Updated German translation
+
+M      po/de.po
+
+commit 3a3f0f3859c7ddeeeb9b2251fddf2c066ee9ca99
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-10-05
+
+    Moved files to top-level of branch.
+
+    Moved files to top-level directory of glabels_2_2 branch.  This is
+    an artifact
+    of the old SVN layout.  Fixed problems with zh_CN.po that prevented
+    push.
+
+R100   glabels2/help/de/de.po  help/de/de.po
+R100   glabels2/help/de/figures/main-window-empty.png
+help/de/figures/main-window-empty.png
+R100   glabels2/help/de/figures/merge-ex1-1.png
+help/de/figures/merge-ex1-1.png
+R100   glabels2/help/de/figures/merge-ex1-2.png
+help/de/figures/merge-ex1-2.png
+R100   glabels2/help/de/figures/merge-ex1-3.png
+help/de/figures/merge-ex1-3.png
+R100   glabels2/help/de/figures/merge-ex1-4.png
+help/de/figures/merge-ex1-4.png
+R100   glabels2/help/de/figures/merge-ex2-1.png
+help/de/figures/merge-ex2-1.png
+R100   glabels2/help/de/figures/merge-ex2-2.png
+help/de/figures/merge-ex2-2.png
+R100   glabels2/help/de/figures/merge-ex2-3.png
+help/de/figures/merge-ex2-3.png
+R100   glabels2/help/de/figures/merge-ex2-4.png
+help/de/figures/merge-ex2-4.png
+R100   glabels2/help/de/figures/object-editor-sidebar.png
+help/de/figures/object-editor-sidebar.png
+R100   glabels2/help/de/figures/print-copies.png
+help/de/figures/print-copies.png
+R100   glabels2/help/de/figures/print-merge.png
+help/de/figures/print-merge.png
+R100   glabels2/help/glabels-help.pot  help/glabels-help.pot
+R100   glabels2/help/glabels.omf.in    help/glabels.omf.in
+R100   glabels2/po/LINGUAS     po/LINGUAS
+R100   glabels2/po/ca.po       po/ca.po
+R099   glabels2/po/zh_CN.po    po/zh_CN.po
+
+commit 484197466a1ddace52d14046709ad6e8c4f17bbc
+Merge: 9ebfc49 d3a7257
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-09-28
+
+    Merge original SVN glabels-2_2 branch into glabels_2_2
+
+    Restored history past 2.2.5 release that was lost when originally
+    creating
+    branch from SVN.
+
+commit 9ebfc492936b30b4095ae458278e63c51caf3f67
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-09-26
+
+    Reorganized glabels_2_2 branch so that it is the top-level glabels
+    directory,
+    instead of having a glabels2 subdirectory.
+
+R100   glabels2/AUTHORS        AUTHORS
+R100   glabels2/COPYING        COPYING
+R100   glabels2/COPYING-DOCS   COPYING-DOCS
+R100   glabels2/COPYING-LIBGLABELS     COPYING-LIBGLABELS
+R100   glabels2/COPYING.README_FIRST   COPYING.README_FIRST
+R100   glabels2/ChangeLog      ChangeLog
+R100   glabels2/INSTALL        INSTALL
+R100   glabels2/Makefile.am    Makefile.am
+R100   glabels2/NEWS   NEWS
+R100   glabels2/README README
+R100   glabels2/TODO   TODO
+R100   glabels2/autogen.sh     autogen.sh
+R100   glabels2/barcode-0.98/COPYING   barcode-0.98/COPYING
+R100   glabels2/barcode-0.98/ChangeLog barcode-0.98/ChangeLog
+R100   glabels2/barcode-0.98/INSTALL   barcode-0.98/INSTALL
+R100   glabels2/barcode-0.98/Makefile.am       barcode-0.98/Makefile.am
+R100   glabels2/barcode-0.98/Makefile.in.dist
+barcode-0.98/Makefile.in.dist
+R100   glabels2/barcode-0.98/README    barcode-0.98/README
+R100   glabels2/barcode-0.98/README.glabels
+barcode-0.98/README.glabels
+R100   glabels2/barcode-0.98/TODO      barcode-0.98/TODO
+R100   glabels2/barcode-0.98/barcode.h barcode-0.98/barcode.h
+R100   glabels2/barcode-0.98/barcode.spec      barcode-0.98/barcode.spec
+R100   glabels2/barcode-0.98/bookland/bookland.py
+barcode-0.98/bookland/bookland.py
+R100   glabels2/barcode-0.98/cmdline.c barcode-0.98/cmdline.c
+R100   glabels2/barcode-0.98/cmdline.h barcode-0.98/cmdline.h
+R100   glabels2/barcode-0.98/codabar.c barcode-0.98/codabar.c
+R100   glabels2/barcode-0.98/code128.c barcode-0.98/code128.c
+R100   glabels2/barcode-0.98/code39.c  barcode-0.98/code39.c
+R100   glabels2/barcode-0.98/code93.c  barcode-0.98/code93.c
+R100   glabels2/barcode-0.98/compat/getopt.c
+barcode-0.98/compat/getopt.c
+R100   glabels2/barcode-0.98/compat/getopt.h
+barcode-0.98/compat/getopt.h
+R100   glabels2/barcode-0.98/configure barcode-0.98/configure
+R100   glabels2/barcode-0.98/configure.in.dist
+barcode-0.98/configure.in.dist
+R100   glabels2/barcode-0.98/contrib/barcode-SVG.tar.gz
+barcode-0.98/contrib/barcode-SVG.tar.gz
+R100   glabels2/barcode-0.98/contrib/barcode-SVG.tar.gz.README
+barcode-0.98/contrib/barcode-SVG.tar.gz.README
+R100   glabels2/barcode-0.98/contrib/barcode-for-delphi.tar.gz
+barcode-0.98/contrib/barcode-for-delphi.tar.gz
+R100   glabels2/barcode-0.98/contrib/barcode-for-delphi.tar.gz.README
+barcode-0.98/contrib/barcode-for-delphi.tar.gz.README
+R100   glabels2/barcode-0.98/contrib/barcodeps-0.1.tgz
+barcode-0.98/contrib/barcodeps-0.1.tgz
+R100   glabels2/barcode-0.98/contrib/barcodeps-0.1.tgz.README
+barcode-0.98/contrib/barcodeps-0.1.tgz.README
+R100   glabels2/barcode-0.98/contrib/grab-0.0.4.tar.gz
+barcode-0.98/contrib/grab-0.0.4.tar.gz
+R100   glabels2/barcode-0.98/contrib/grab-0.0.4.tar.gz.README
+barcode-0.98/contrib/grab-0.0.4.tar.gz.README
+R100   glabels2/barcode-0.98/debian/README.debian
+barcode-0.98/debian/README.debian
+R100   glabels2/barcode-0.98/debian/changelog
+barcode-0.98/debian/changelog
+R100   glabels2/barcode-0.98/debian/control
+barcode-0.98/debian/control
+R100   glabels2/barcode-0.98/debian/copyright
+barcode-0.98/debian/copyright
+R100   glabels2/barcode-0.98/debian/dirs       barcode-0.98/debian/dirs
+R100   glabels2/barcode-0.98/debian/info       barcode-0.98/debian/info
+R100   glabels2/barcode-0.98/debian/rules      barcode-0.98/debian/rules
+R100   glabels2/barcode-0.98/doc/Makefile.in
+barcode-0.98/doc/Makefile.in
+R100   glabels2/barcode-0.98/doc/README        barcode-0.98/doc/README
+R100   glabels2/barcode-0.98/doc/barcode.info
+barcode-0.98/doc/barcode.info
+R100   glabels2/barcode-0.98/doc/barcode.pdf
+barcode-0.98/doc/barcode.pdf
+R100   glabels2/barcode-0.98/doc/barcode.ps
+barcode-0.98/doc/barcode.ps
+R100   glabels2/barcode-0.98/doc/barcodedoc.txt
+barcode-0.98/doc/barcodedoc.txt
+R100   glabels2/barcode-0.98/doc/doc.barcode
+barcode-0.98/doc/doc.barcode
+R100   glabels2/barcode-0.98/doc/infofilter
+barcode-0.98/doc/infofilter
+R100   glabels2/barcode-0.98/doc/manpager      barcode-0.98/doc/manpager
+R100   glabels2/barcode-0.98/doc/mktxt barcode-0.98/doc/mktxt
+R100   glabels2/barcode-0.98/doc/texi2html     barcode-0.98/doc/texi2html
+R100   glabels2/barcode-0.98/ean.c     barcode-0.98/ean.c
+R100   glabels2/barcode-0.98/i25.c     barcode-0.98/i25.c
+R100   glabels2/barcode-0.98/install-sh        barcode-0.98/install-sh
+R100   glabels2/barcode-0.98/library.c barcode-0.98/library.c
+R100   glabels2/barcode-0.98/main.c    barcode-0.98/main.c
+R100   glabels2/barcode-0.98/missing   barcode-0.98/missing
+R100   glabels2/barcode-0.98/mkinstalldirs     barcode-0.98/mkinstalldirs
+R100   glabels2/barcode-0.98/msi.c     barcode-0.98/msi.c
+R100   glabels2/barcode-0.98/pcl.c     barcode-0.98/pcl.c
+R100   glabels2/barcode-0.98/plessey.c barcode-0.98/plessey.c
+R100   glabels2/barcode-0.98/ps.c      barcode-0.98/ps.c
+R100   glabels2/barcode-0.98/sample.c  barcode-0.98/sample.c
+R100   glabels2/configure.in   configure.in
+R100   glabels2/data/Makefile.am       data/Makefile.am
+R100   glabels2/data/desktop/Makefile.am       data/desktop/Makefile.am
+R100   glabels2/data/desktop/glabels.desktop.in
+data/desktop/glabels.desktop.in
+R100   glabels2/data/dtd/Makefile.am   data/dtd/Makefile.am
+R100   glabels2/data/dtd/glabels-2.2.dtd       data/dtd/glabels-2.2.dtd
+R100   glabels2/data/glade/Makefile.am data/glade/Makefile.am
+R100   glabels2/data/glade/merge-properties-dialog.glade
+data/glade/merge-properties-dialog.glade
+R100   glabels2/data/glade/new-label-dialog.glade
+data/glade/new-label-dialog.glade
+R100   glabels2/data/glade/object-editor.glade
+data/glade/object-editor.glade
+R100   glabels2/data/glade/prefs-dialog.glade
+data/glade/prefs-dialog.glade
+R100   glabels2/data/glade/print-custom-widget.glade
+data/glade/print-custom-widget.glade
+R100   glabels2/data/glade/property-bar.glade
+data/glade/property-bar.glade
+R100   glabels2/data/glade/template-designer.glade
+data/glade/template-designer.glade
+R100   glabels2/data/glade/wdgt-media-select.glade
+data/glade/wdgt-media-select.glade
+R100   glabels2/data/glade/wdgt-rotate-label.glade
+data/glade/wdgt-rotate-label.glade
+R100   glabels2/data/man/Makefile.am   data/man/Makefile.am
+R100   glabels2/data/man/glabels.1     data/man/glabels.1
+R100   glabels2/data/mime/Makefile.am  data/mime/Makefile.am
+R100   glabels2/data/mime/glabels.applications
+data/mime/glabels.applications
+R100   glabels2/data/mime/glabels.keys.in      data/mime/glabels.keys.in
+R100   glabels2/data/mime/glabels.mime data/mime/glabels.mime
+R100   glabels2/data/mime/glabels.xml.in       data/mime/glabels.xml.in
+R100   glabels2/data/pixmaps/Makefile.am       data/pixmaps/Makefile.am
+R100   glabels2/data/pixmaps/ex-1layout.png
+data/pixmaps/ex-1layout.png
+R100   glabels2/data/pixmaps/ex-2layouts.png
+data/pixmaps/ex-2layouts.png
+R100   glabels2/data/pixmaps/ex-cd-size.png
+data/pixmaps/ex-cd-size.png
+R100   glabels2/data/pixmaps/ex-rect-size.png
+data/pixmaps/ex-rect-size.png
+R100   glabels2/data/pixmaps/ex-round-size.png
+data/pixmaps/ex-round-size.png
+R100   glabels2/data/pixmaps/glabels-about-logo.png
+data/pixmaps/glabels-about-logo.png
+R100   glabels2/data/pixmaps/glabels-application-x-glabels.png
+data/pixmaps/glabels-application-x-glabels.png
+R100   glabels2/data/pixmaps/glabels-splash.png
+data/pixmaps/glabels-splash.png
+R100   glabels2/data/pixmaps/glabels.png       data/pixmaps/glabels.png
+R100   glabels2/data/templates/Makefile.am     data/templates/Makefile.am
+R100   glabels2/data/templates/avery-iso-templates.xml
+data/templates/avery-iso-templates.xml
+R100   glabels2/data/templates/avery-other-templates.xml
+data/templates/avery-other-templates.xml
+R100   glabels2/data/templates/avery-us-templates.xml
+data/templates/avery-us-templates.xml
+R100   glabels2/data/templates/brother-other-templates.xml
+data/templates/brother-other-templates.xml
+R100   glabels2/data/templates/categories.xml
+data/templates/categories.xml
+R100   glabels2/data/templates/dymo-other-templates.xml
+data/templates/dymo-other-templates.xml
+R100   glabels2/data/templates/misc-iso-templates.xml
+data/templates/misc-iso-templates.xml
+R100   glabels2/data/templates/misc-other-templates.xml
+data/templates/misc-other-templates.xml
+R100   glabels2/data/templates/misc-us-templates.xml
+data/templates/misc-us-templates.xml
+R100   glabels2/data/templates/paper-sizes.xml
+data/templates/paper-sizes.xml
+R100   glabels2/data/templates/zweckform-iso-templates.xml
+data/templates/zweckform-iso-templates.xml
+R100   glabels2/docs/Makefile.am       docs/Makefile.am
+R100   glabels2/docs/libglabels/Makefile.am
+docs/libglabels/Makefile.am
+R100   glabels2/docs/libglabels/libglabels-decl-list.txt
+docs/libglabels/libglabels-decl-list.txt
+R100   glabels2/docs/libglabels/libglabels-docs.sgml
+docs/libglabels/libglabels-docs.sgml
+R100   glabels2/docs/libglabels/libglabels-overrides.txt
+docs/libglabels/libglabels-overrides.txt
+R100   glabels2/docs/libglabels/libglabels-sections.txt
+docs/libglabels/libglabels-sections.txt
+R100   glabels2/docs/libglabels/libglabels-undocumented.txt
+docs/libglabels/libglabels-undocumented.txt
+R100   glabels2/docs/libglabels/libglabels.types
+docs/libglabels/libglabels.types
+R100   glabels2/docs/libglabels/tmpl/category.sgml
+docs/libglabels/tmpl/category.sgml
+R100   glabels2/docs/libglabels/tmpl/db.sgml
+docs/libglabels/tmpl/db.sgml
+R100   glabels2/docs/libglabels/tmpl/enums.sgml
+docs/libglabels/tmpl/enums.sgml
+R100   glabels2/docs/libglabels/tmpl/libglabels-unused.sgml
+docs/libglabels/tmpl/libglabels-unused.sgml
+R100   glabels2/docs/libglabels/tmpl/libglabels.sgml
+docs/libglabels/tmpl/libglabels.sgml
+R100   glabels2/docs/libglabels/tmpl/paper.sgml
+docs/libglabels/tmpl/paper.sgml
+R100   glabels2/docs/libglabels/tmpl/str.sgml
+docs/libglabels/tmpl/str.sgml
+R100   glabels2/docs/libglabels/tmpl/template.sgml
+docs/libglabels/tmpl/template.sgml
+R100   glabels2/docs/libglabels/tmpl/xml-category.sgml
+docs/libglabels/tmpl/xml-category.sgml
+R100   glabels2/docs/libglabels/tmpl/xml-paper.sgml
+docs/libglabels/tmpl/xml-paper.sgml
+R100   glabels2/docs/libglabels/tmpl/xml-template.sgml
+docs/libglabels/tmpl/xml-template.sgml
+R100   glabels2/docs/libglabels/tmpl/xml.sgml
+docs/libglabels/tmpl/xml.sgml
+R100   glabels2/glabels.spec.in        glabels.spec.in
+R100   glabels2/gtk-doc.make   gtk-doc.make
+R100   glabels2/help/C/Makefile.am     help/C/Makefile.am
+R100   glabels2/help/C/figures/glabels-template-cd.png
+help/C/figures/glabels-template-cd.png
+R100   glabels2/help/C/figures/glabels-template-label.png
+help/C/figures/glabels-template-label.png
+R100   glabels2/help/C/figures/glabels-template-layout.png
+help/C/figures/glabels-template-layout.png
+R100   glabels2/help/C/figures/main-window-empty.png
+help/C/figures/main-window-empty.png
+R100   glabels2/help/C/figures/merge-ex1-1.png
+help/C/figures/merge-ex1-1.png
+R100   glabels2/help/C/figures/merge-ex1-2.png
+help/C/figures/merge-ex1-2.png
+R100   glabels2/help/C/figures/merge-ex1-3.png
+help/C/figures/merge-ex1-3.png
+R100   glabels2/help/C/figures/merge-ex1-4.png
+help/C/figures/merge-ex1-4.png
+R100   glabels2/help/C/figures/merge-ex2-1.png
+help/C/figures/merge-ex2-1.png
+R100   glabels2/help/C/figures/merge-ex2-2.png
+help/C/figures/merge-ex2-2.png
+R100   glabels2/help/C/figures/merge-ex2-3.png
+help/C/figures/merge-ex2-3.png
+R100   glabels2/help/C/figures/merge-ex2-4.png
+help/C/figures/merge-ex2-4.png
+R100   glabels2/help/C/figures/object-editor-sidebar.png
+help/C/figures/object-editor-sidebar.png
+R100   glabels2/help/C/figures/print-copies.png
+help/C/figures/print-copies.png
+R100   glabels2/help/C/figures/print-merge.png
+help/C/figures/print-merge.png
+R100   glabels2/help/C/glabels-C.omf   help/C/glabels-C.omf
+R100   glabels2/help/C/glabels.xml     help/C/glabels.xml
+R100   glabels2/help/C/legal.xml       help/C/legal.xml
+R100   glabels2/help/Makefile.am       help/Makefile.am
+R100   glabels2/iec16022-0.2.1/BUGS    iec16022-0.2.1/BUGS
+R100   glabels2/iec16022-0.2.1/CHANGELOG       iec16022-0.2.1/CHANGELOG
+R100   glabels2/iec16022-0.2.1/CREDITS iec16022-0.2.1/CREDITS
+R100   glabels2/iec16022-0.2.1/INSTALL iec16022-0.2.1/INSTALL
+R100   glabels2/iec16022-0.2.1/LICENSE iec16022-0.2.1/LICENSE
+R100   glabels2/iec16022-0.2.1/Makefile.am     iec16022-0.2.1/Makefile.am
+R100   glabels2/iec16022-0.2.1/Makefile.dist
+iec16022-0.2.1/Makefile.dist
+R100   glabels2/iec16022-0.2.1/README  iec16022-0.2.1/README
+R100   glabels2/iec16022-0.2.1/README.glabels
+iec16022-0.2.1/README.glabels
+R100   glabels2/iec16022-0.2.1/TODO    iec16022-0.2.1/TODO
+R100   glabels2/iec16022-0.2.1/iec16022.1      iec16022-0.2.1/iec16022.1
+R100   glabels2/iec16022-0.2.1/iec16022.c      iec16022-0.2.1/iec16022.c
+R100   glabels2/iec16022-0.2.1/iec16022ecc200.c
+iec16022-0.2.1/iec16022ecc200.c
+R100   glabels2/iec16022-0.2.1/iec16022ecc200.h
+iec16022-0.2.1/iec16022ecc200.h
+R100   glabels2/iec16022-0.2.1/image.c iec16022-0.2.1/image.c
+R100   glabels2/iec16022-0.2.1/image.h iec16022-0.2.1/image.h
+R100   glabels2/iec16022-0.2.1/reedsol.c       iec16022-0.2.1/reedsol.c
+R100   glabels2/iec16022-0.2.1/reedsol.h       iec16022-0.2.1/reedsol.h
+R100   glabels2/iec16022-0.2.1/test/testsuite-example.bin
+iec16022-0.2.1/test/testsuite-example.bin
+R100   glabels2/iec16022-0.2.1/test/testsuite-example.eps
+iec16022-0.2.1/test/testsuite-example.eps
+R100   glabels2/iec16022-0.2.1/test/testsuite-example.hex
+iec16022-0.2.1/test/testsuite-example.hex
+R100   glabels2/iec16022-0.2.1/test/testsuite-example.png
+iec16022-0.2.1/test/testsuite-example.png
+R100   glabels2/iec16022-0.2.1/test/testsuite-example.text
+iec16022-0.2.1/test/testsuite-example.text
+R100   glabels2/iec16022-0.2.1/test/testsuite.sh
+iec16022-0.2.1/test/testsuite.sh
+R100   glabels2/libglabels/Makefile.am libglabels/Makefile.am
+R100   glabels2/libglabels/category.c  libglabels/category.c
+R100   glabels2/libglabels/category.h  libglabels/category.h
+R100   glabels2/libglabels/db.c        libglabels/db.c
+R100   glabels2/libglabels/db.h        libglabels/db.h
+R100   glabels2/libglabels/enums.h     libglabels/enums.h
+R100   glabels2/libglabels/libglabels-private.h
+libglabels/libglabels-private.h
+R100   glabels2/libglabels/libglabels.h        libglabels/libglabels.h
+R100   glabels2/libglabels/libglabels.pc.in
+libglabels/libglabels.pc.in
+R100   glabels2/libglabels/paper.c     libglabels/paper.c
+R100   glabels2/libglabels/paper.h     libglabels/paper.h
+R100   glabels2/libglabels/str.c       libglabels/str.c
+R100   glabels2/libglabels/str.h       libglabels/str.h
+R100   glabels2/libglabels/template.c  libglabels/template.c
+R100   glabels2/libglabels/template.h  libglabels/template.h
+R100   glabels2/libglabels/xml-category.c      libglabels/xml-category.c
+R100   glabels2/libglabels/xml-category.h      libglabels/xml-category.h
+R100   glabels2/libglabels/xml-paper.c libglabels/xml-paper.c
+R100   glabels2/libglabels/xml-paper.h libglabels/xml-paper.h
+R100   glabels2/libglabels/xml-template.c      libglabels/xml-template.c
+R100   glabels2/libglabels/xml-template.h      libglabels/xml-template.h
+R100   glabels2/libglabels/xml.c       libglabels/xml.c
+R100   glabels2/libglabels/xml.h       libglabels/xml.h
+R100   glabels2/po/POTFILES.in po/POTFILES.in
+R100   glabels2/po/cs.po       po/cs.po
+R100   glabels2/po/de.po       po/de.po
+R100   glabels2/po/eo.po       po/eo.po
+R100   glabels2/po/es.po       po/es.po
+R100   glabels2/po/fr.po       po/fr.po
+R100   glabels2/po/it.po       po/it.po
+R100   glabels2/po/ja.po       po/ja.po
+R100   glabels2/po/ko.po       po/ko.po
+R100   glabels2/po/pl.po       po/pl.po
+R100   glabels2/po/pt_BR.po    po/pt_BR.po
+R100   glabels2/po/ru.po       po/ru.po
+R100   glabels2/po/zh_TW.Big5.po       po/zh_TW.Big5.po
+R100   glabels2/src/Makefile.am        src/Makefile.am
+R100   glabels2/src/base64.c   src/base64.c
+R100   glabels2/src/base64.h   src/base64.h
+R100   glabels2/src/bc-gnubarcode.c    src/bc-gnubarcode.c
+R100   glabels2/src/bc-gnubarcode.h    src/bc-gnubarcode.h
+R100   glabels2/src/bc-iec16022.c      src/bc-iec16022.c
+R100   glabels2/src/bc-iec16022.h      src/bc-iec16022.h
+R100   glabels2/src/bc-postnet.c       src/bc-postnet.c
+R100   glabels2/src/bc-postnet.h       src/bc-postnet.h
+R100   glabels2/src/bc.c       src/bc.c
+R100   glabels2/src/bc.h       src/bc.h
+R100   glabels2/src/cairo-ellipse-path.c       src/cairo-ellipse-path.c
+R100   glabels2/src/cairo-ellipse-path.h       src/cairo-ellipse-path.h
+R100   glabels2/src/cairo-label-path.c src/cairo-label-path.c
+R100   glabels2/src/cairo-label-path.h src/cairo-label-path.h
+R100   glabels2/src/cairo-markup-path.c        src/cairo-markup-path.c
+R100   glabels2/src/cairo-markup-path.h        src/cairo-markup-path.h
+R100   glabels2/src/color.c    src/color.c
+R100   glabels2/src/color.h    src/color.h
+R100   glabels2/src/critical-error-handler.c
+src/critical-error-handler.c
+R100   glabels2/src/critical-error-handler.h
+src/critical-error-handler.h
+R100   glabels2/src/debug.c    src/debug.c
+R100   glabels2/src/debug.h    src/debug.h
+R100   glabels2/src/file.c     src/file.c
+R100   glabels2/src/file.h     src/file.h
+R100   glabels2/src/glabels-batch.c    src/glabels-batch.c
+R100   glabels2/src/glabels.c  src/glabels.c
+R100   glabels2/src/hig.h      src/hig.h
+R100   glabels2/src/label-barcode.c    src/label-barcode.c
+R100   glabels2/src/label-barcode.h    src/label-barcode.h
+R100   glabels2/src/label-box.c        src/label-box.c
+R100   glabels2/src/label-box.h        src/label-box.h
+R100   glabels2/src/label-ellipse.c    src/label-ellipse.c
+R100   glabels2/src/label-ellipse.h    src/label-ellipse.h
+R100   glabels2/src/label-image.c      src/label-image.c
+R100   glabels2/src/label-image.h      src/label-image.h
+R100   glabels2/src/label-line.c       src/label-line.c
+R100   glabels2/src/label-line.h       src/label-line.h
+R100   glabels2/src/label-object.c     src/label-object.c
+R100   glabels2/src/label-object.h     src/label-object.h
+R100   glabels2/src/label-text.c       src/label-text.c
+R100   glabels2/src/label-text.h       src/label-text.h
+R100   glabels2/src/label.c    src/label.c
+R100   glabels2/src/label.h    src/label.h
+R100   glabels2/src/marshal.list       src/marshal.list
+R100   glabels2/src/merge-evolution.c  src/merge-evolution.c
+R100   glabels2/src/merge-evolution.h  src/merge-evolution.h
+R100   glabels2/src/merge-init.c       src/merge-init.c
+R100   glabels2/src/merge-init.h       src/merge-init.h
+R100   glabels2/src/merge-properties-dialog.c
+src/merge-properties-dialog.c
+R100   glabels2/src/merge-properties-dialog.h
+src/merge-properties-dialog.h
+R100   glabels2/src/merge-text.c       src/merge-text.c
+R100   glabels2/src/merge-text.h       src/merge-text.h
+R100   glabels2/src/merge-vcard.c      src/merge-vcard.c
+R100   glabels2/src/merge-vcard.h      src/merge-vcard.h
+R100   glabels2/src/merge.c    src/merge.c
+R100   glabels2/src/merge.h    src/merge.h
+R100   glabels2/src/mini-preview-pixbuf-cache.c
+src/mini-preview-pixbuf-cache.c
+R100   glabels2/src/mini-preview-pixbuf-cache.h
+src/mini-preview-pixbuf-cache.h
+R100   glabels2/src/mini-preview-pixbuf.c      src/mini-preview-pixbuf.c
+R100   glabels2/src/mini-preview-pixbuf.h      src/mini-preview-pixbuf.h
+R100   glabels2/src/mygal/Makefile.am  src/mygal/Makefile.am
+R100   glabels2/src/mygal/color-group.c        src/mygal/color-group.c
+R100   glabels2/src/mygal/color-group.h        src/mygal/color-group.h
+R100   glabels2/src/mygal/color-palette.c      src/mygal/color-palette.c
+R100   glabels2/src/mygal/color-palette.h      src/mygal/color-palette.h
+R100   glabels2/src/mygal/e-colors.c   src/mygal/e-colors.c
+R100   glabels2/src/mygal/e-colors.h   src/mygal/e-colors.h
+R100   glabels2/src/mygal/e-marshal.list       src/mygal/e-marshal.list
+R100   glabels2/src/mygal/e-util.h     src/mygal/e-util.h
+R100   glabels2/src/mygal/mygal-combo-box.c
+src/mygal/mygal-combo-box.c
+R100   glabels2/src/mygal/mygal-combo-box.h
+src/mygal/mygal-combo-box.h
+R100   glabels2/src/mygal/widget-color-combo.c
+src/mygal/widget-color-combo.c
+R100   glabels2/src/mygal/widget-color-combo.h
+src/mygal/widget-color-combo.h
+R100   glabels2/src/new-label-dialog.c src/new-label-dialog.c
+R100   glabels2/src/new-label-dialog.h src/new-label-dialog.h
+R100   glabels2/src/object-editor-bc-page.c
+src/object-editor-bc-page.c
+R100   glabels2/src/object-editor-data-page.c
+src/object-editor-data-page.c
+R100   glabels2/src/object-editor-edit-page.c
+src/object-editor-edit-page.c
+R100   glabels2/src/object-editor-fill-page.c
+src/object-editor-fill-page.c
+R100   glabels2/src/object-editor-image-page.c
+src/object-editor-image-page.c
+R100   glabels2/src/object-editor-line-page.c
+src/object-editor-line-page.c
+R100   glabels2/src/object-editor-lsize-page.c
+src/object-editor-lsize-page.c
+R100   glabels2/src/object-editor-position-page.c
+src/object-editor-position-page.c
+R100   glabels2/src/object-editor-private.h
+src/object-editor-private.h
+R100   glabels2/src/object-editor-shadow-page.c
+src/object-editor-shadow-page.c
+R100   glabels2/src/object-editor-size-page.c
+src/object-editor-size-page.c
+R100   glabels2/src/object-editor-text-page.c
+src/object-editor-text-page.c
+R100   glabels2/src/object-editor.c    src/object-editor.c
+R100   glabels2/src/object-editor.h    src/object-editor.h
+R100   glabels2/src/pixbuf-cache.c     src/pixbuf-cache.c
+R100   glabels2/src/pixbuf-cache.h     src/pixbuf-cache.h
+R100   glabels2/src/pixmaps/Makefile.am        src/pixmaps/Makefile.am
+R100   glabels2/src/pixmaps/checkerboard.xpm
+src/pixmaps/checkerboard.xpm
+R100   glabels2/src/pixmaps/collate.xpm        src/pixmaps/collate.xpm
+R100   glabels2/src/pixmaps/cursor_barcode.xbm
+src/pixmaps/cursor_barcode.xbm
+R100   glabels2/src/pixmaps/cursor_barcode_mask.xbm
+src/pixmaps/cursor_barcode_mask.xbm
+R100   glabels2/src/pixmaps/cursor_box.xbm     src/pixmaps/cursor_box.xbm
+R100   glabels2/src/pixmaps/cursor_box_mask.xbm
+src/pixmaps/cursor_box_mask.xbm
+R100   glabels2/src/pixmaps/cursor_ellipse.xbm
+src/pixmaps/cursor_ellipse.xbm
+R100   glabels2/src/pixmaps/cursor_ellipse_mask.xbm
+src/pixmaps/cursor_ellipse_mask.xbm
+R100   glabels2/src/pixmaps/cursor_image.xbm
+src/pixmaps/cursor_image.xbm
+R100   glabels2/src/pixmaps/cursor_image_mask.xbm
+src/pixmaps/cursor_image_mask.xbm
+R100   glabels2/src/pixmaps/cursor_line.xbm
+src/pixmaps/cursor_line.xbm
+R100   glabels2/src/pixmaps/cursor_line_mask.xbm
+src/pixmaps/cursor_line_mask.xbm
+R100   glabels2/src/pixmaps/cursor_text.xbm
+src/pixmaps/cursor_text.xbm
+R100   glabels2/src/pixmaps/cursor_text_mask.xbm
+src/pixmaps/cursor_text_mask.xbm
+R100   glabels2/src/pixmaps/nocollate.xpm      src/pixmaps/nocollate.xpm
+R100   glabels2/src/prefs-dialog.c     src/prefs-dialog.c
+R100   glabels2/src/prefs-dialog.h     src/prefs-dialog.h
+R100   glabels2/src/prefs-model.c      src/prefs-model.c
+R100   glabels2/src/prefs-model.h      src/prefs-model.h
+R100   glabels2/src/prefs.c    src/prefs.c
+R100   glabels2/src/prefs.h    src/prefs.h
+R100   glabels2/src/print-op.c src/print-op.c
+R100   glabels2/src/print-op.h src/print-op.h
+R100   glabels2/src/print.c    src/print.c
+R100   glabels2/src/print.h    src/print.h
+R100   glabels2/src/recent.c   src/recent.c
+R100   glabels2/src/recent.h   src/recent.h
+R100   glabels2/src/stock-pixmaps/Makefile.am
+src/stock-pixmaps/Makefile.am
+R100   glabels2/src/stock-pixmaps/stock_align_bottom_16.png
+src/stock-pixmaps/stock_align_bottom_16.png
+R100   glabels2/src/stock-pixmaps/stock_align_hcenter_16.png
+src/stock-pixmaps/stock_align_hcenter_16.png
+R100   glabels2/src/stock-pixmaps/stock_align_left_16.png
+src/stock-pixmaps/stock_align_left_16.png
+R100   glabels2/src/stock-pixmaps/stock_align_right_16.png
+src/stock-pixmaps/stock_align_right_16.png
+R100   glabels2/src/stock-pixmaps/stock_align_top_16.png
+src/stock-pixmaps/stock_align_top_16.png
+R100   glabels2/src/stock-pixmaps/stock_align_vcenter_16.png
+src/stock-pixmaps/stock_align_vcenter_16.png
+R100   glabels2/src/stock-pixmaps/stock_arrow_16.png
+src/stock-pixmaps/stock_arrow_16.png
+R100   glabels2/src/stock-pixmaps/stock_arrow_24.png
+src/stock-pixmaps/stock_arrow_24.png
+R100   glabels2/src/stock-pixmaps/stock_barcode_16.png
+src/stock-pixmaps/stock_barcode_16.png
+R100   glabels2/src/stock-pixmaps/stock_barcode_24.png
+src/stock-pixmaps/stock_barcode_24.png
+R100   glabels2/src/stock-pixmaps/stock_box_16.png
+src/stock-pixmaps/stock_box_16.png
+R100   glabels2/src/stock-pixmaps/stock_box_24.png
+src/stock-pixmaps/stock_box_24.png
+R100   glabels2/src/stock-pixmaps/stock_bucket_fill_16.png
+src/stock-pixmaps/stock_bucket_fill_16.png
+R100   glabels2/src/stock-pixmaps/stock_bucket_fill_24.png
+src/stock-pixmaps/stock_bucket_fill_24.png
+R100   glabels2/src/stock-pixmaps/stock_center_horiz_16.png
+src/stock-pixmaps/stock_center_horiz_16.png
+R100   glabels2/src/stock-pixmaps/stock_center_vert_16.png
+src/stock-pixmaps/stock_center_vert_16.png
+R100   glabels2/src/stock-pixmaps/stock_ellipse_16.png
+src/stock-pixmaps/stock_ellipse_16.png
+R100   glabels2/src/stock-pixmaps/stock_ellipse_24.png
+src/stock-pixmaps/stock_ellipse_24.png
+R100   glabels2/src/stock-pixmaps/stock_flip_horiz_16.png
+src/stock-pixmaps/stock_flip_horiz_16.png
+R100   glabels2/src/stock-pixmaps/stock_flip_vert_16.png
+src/stock-pixmaps/stock_flip_vert_16.png
+R100   glabels2/src/stock-pixmaps/stock_hchain_24.png
+src/stock-pixmaps/stock_hchain_24.png
+R100   glabels2/src/stock-pixmaps/stock_hchain_broken_24.png
+src/stock-pixmaps/stock_hchain_broken_24.png
+R100   glabels2/src/stock-pixmaps/stock_image_16.png
+src/stock-pixmaps/stock_image_16.png
+R100   glabels2/src/stock-pixmaps/stock_image_24.png
+src/stock-pixmaps/stock_image_24.png
+R100   glabels2/src/stock-pixmaps/stock_line_16.png
+src/stock-pixmaps/stock_line_16.png
+R100   glabels2/src/stock-pixmaps/stock_line_24.png
+src/stock-pixmaps/stock_line_24.png
+R100   glabels2/src/stock-pixmaps/stock_merge_16.png
+src/stock-pixmaps/stock_merge_16.png
+R100   glabels2/src/stock-pixmaps/stock_merge_24.png
+src/stock-pixmaps/stock_merge_24.png
+R100   glabels2/src/stock-pixmaps/stock_order_bottom_16.png
+src/stock-pixmaps/stock_order_bottom_16.png
+R100   glabels2/src/stock-pixmaps/stock_order_top_16.png
+src/stock-pixmaps/stock_order_top_16.png
+R100   glabels2/src/stock-pixmaps/stock_pencil_16.png
+src/stock-pixmaps/stock_pencil_16.png
+R100   glabels2/src/stock-pixmaps/stock_pencil_24.png
+src/stock-pixmaps/stock_pencil_24.png
+R100   glabels2/src/stock-pixmaps/stock_properties_16.png
+src/stock-pixmaps/stock_properties_16.png
+R100   glabels2/src/stock-pixmaps/stock_properties_24.png
+src/stock-pixmaps/stock_properties_24.png
+R100   glabels2/src/stock-pixmaps/stock_rotate_left_16.png
+src/stock-pixmaps/stock_rotate_left_16.png
+R100   glabels2/src/stock-pixmaps/stock_rotate_right_16.png
+src/stock-pixmaps/stock_rotate_right_16.png
+R100   glabels2/src/stock-pixmaps/stock_text_16.png
+src/stock-pixmaps/stock_text_16.png
+R100   glabels2/src/stock-pixmaps/stock_text_24.png
+src/stock-pixmaps/stock_text_24.png
+R100   glabels2/src/stock-pixmaps/stock_vchain_24.png
+src/stock-pixmaps/stock_vchain_24.png
+R100   glabels2/src/stock-pixmaps/stock_vchain_broken_24.png
+src/stock-pixmaps/stock_vchain_broken_24.png
+R100   glabels2/src/stock.c    src/stock.c
+R100   glabels2/src/stock.h    src/stock.h
+R100   glabels2/src/template-designer.c        src/template-designer.c
+R100   glabels2/src/template-designer.h        src/template-designer.h
+R100   glabels2/src/text-node.c        src/text-node.c
+R100   glabels2/src/text-node.h        src/text-node.h
+R100   glabels2/src/ui-commands.c      src/ui-commands.c
+R100   glabels2/src/ui-commands.h      src/ui-commands.h
+R100   glabels2/src/ui-property-bar.c  src/ui-property-bar.c
+R100   glabels2/src/ui-property-bar.h  src/ui-property-bar.h
+R100   glabels2/src/ui-sidebar.c       src/ui-sidebar.c
+R100   glabels2/src/ui-sidebar.h       src/ui-sidebar.h
+R100   glabels2/src/ui-util.c  src/ui-util.c
+R100   glabels2/src/ui-util.h  src/ui-util.h
+R100   glabels2/src/ui.c       src/ui.c
+R100   glabels2/src/ui.h       src/ui.h
+R100   glabels2/src/util.c     src/util.c
+R100   glabels2/src/util.h     src/util.h
+R100   glabels2/src/view-barcode.c     src/view-barcode.c
+R100   glabels2/src/view-barcode.h     src/view-barcode.h
+R100   glabels2/src/view-box.c src/view-box.c
+R100   glabels2/src/view-box.h src/view-box.h
+R100   glabels2/src/view-ellipse.c     src/view-ellipse.c
+R100   glabels2/src/view-ellipse.h     src/view-ellipse.h
+R100   glabels2/src/view-image.c       src/view-image.c
+R100   glabels2/src/view-image.h       src/view-image.h
+R100   glabels2/src/view-line.c        src/view-line.c
+R100   glabels2/src/view-line.h        src/view-line.h
+R100   glabels2/src/view-object.c      src/view-object.c
+R100   glabels2/src/view-object.h      src/view-object.h
+R100   glabels2/src/view-text.c        src/view-text.c
+R100   glabels2/src/view-text.h        src/view-text.h
+R100   glabels2/src/view.c     src/view.c
+R100   glabels2/src/view.h     src/view.h
+R100   glabels2/src/warning-handler.c  src/warning-handler.c
+R100   glabels2/src/warning-handler.h  src/warning-handler.h
+R100   glabels2/src/wdgt-chain-button.c        src/wdgt-chain-button.c
+R100   glabels2/src/wdgt-chain-button.h        src/wdgt-chain-button.h
+R100   glabels2/src/wdgt-media-select.c        src/wdgt-media-select.c
+R100   glabels2/src/wdgt-media-select.h        src/wdgt-media-select.h
+R100   glabels2/src/wdgt-mini-preview.c        src/wdgt-mini-preview.c
+R100   glabels2/src/wdgt-mini-preview.h        src/wdgt-mini-preview.h
+R100   glabels2/src/wdgt-print-copies.c        src/wdgt-print-copies.c
+R100   glabels2/src/wdgt-print-copies.h        src/wdgt-print-copies.h
+R100   glabels2/src/wdgt-print-merge.c src/wdgt-print-merge.c
+R100   glabels2/src/wdgt-print-merge.h src/wdgt-print-merge.h
+R100   glabels2/src/wdgt-rotate-label.c        src/wdgt-rotate-label.c
+R100   glabels2/src/wdgt-rotate-label.h        src/wdgt-rotate-label.h
+R100   glabels2/src/window.c   src/window.c
+R100   glabels2/src/window.h   src/window.h
+R100   glabels2/src/xml-label-04.c     src/xml-label-04.c
+R100   glabels2/src/xml-label-04.h     src/xml-label-04.h
+R100   glabels2/src/xml-label.c        src/xml-label.c
+R100   glabels2/src/xml-label.h        src/xml-label.h
+
+commit d3a72579798314c893e9dd7b9c1dc0927f0a89f6
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-09-18
+
+    2009-09-17 Jim Evins  <evins@snaught.com>
+
+       * src/stock.c: (add_icons), (add_button_icon):
+               Use proper free function for GtkIconSource
+               (gtk_icon_source_free() not g_free()).
+               Patch provided by Christian Persch <chpe@gnome.org>.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@887
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/stock.c
+
+commit d6ca76c9dbc400c5fb6d53a06213548ec06cb207
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-09-10
+
+    2009-09-09 Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Deleted help/C/Makefile.am.  Fixes "make dist".
+       * help/Makefile.am:
+               Removed trailing whitespace.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@881
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/configure.in
+M      glabels2/gtk-doc.make
+D      glabels2/help/C/Makefile.am
+M      glabels2/help/Makefile.am
+
+commit 6aa23570ca0b86c434a605f3c5a283a0f5d22e73
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-09-09
+
+    Added a translation template for the documentation,
+    created with the latest xml2po version from gnome-doc-utils v0.17.3
+
+    Updated German doc translation
+
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@879
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/help/de/de.po
+A      glabels2/help/glabels-help.pot
+
+commit 681ec7dbf587319f53d3ce59e8e62ac3b16e476c
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-09-09
+
+    Removed unneeded whitespace from subject category in glabels.omf.in.
+
+    Fixed some formatting bugs in glabels.xml.
+
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@878
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/help/C/glabels.xml
+M      glabels2/help/glabels.omf.in
+
+commit fbdd5f00e6cde15930a2c9fd848bd8a6cc124208
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-09-08
+
+    Added screenshots to German docs
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@875
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+A      glabels2/help/de/figures/main-window-empty.png
+A      glabels2/help/de/figures/merge-ex1-1.png
+A      glabels2/help/de/figures/merge-ex1-2.png
+A      glabels2/help/de/figures/merge-ex1-3.png
+A      glabels2/help/de/figures/merge-ex1-4.png
+A      glabels2/help/de/figures/merge-ex2-1.png
+A      glabels2/help/de/figures/merge-ex2-2.png
+A      glabels2/help/de/figures/merge-ex2-3.png
+A      glabels2/help/de/figures/merge-ex2-4.png
+A      glabels2/help/de/figures/object-editor-sidebar.png
+A      glabels2/help/de/figures/print-copies.png
+A      glabels2/help/de/figures/print-merge.png
+
+commit e17c32e30a18a859fcf20bd5d1b8f791e7b2b946
+Author: Mario Blättermann <mariobl@gnome.org>
+Date:  2009-09-08
+
+    Updated German doc translation
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@874
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/help/de/de.po
+
+commit 26a4496bb2e3fe0a4320b68147a88e0e52673f7f
+Author: Alexandre Prokoudine <alexandre.prokoudine@gmail.com>
+Date:  2009-09-08
+
+    Updated Russian translation
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@873
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/po/ru.po
+
+commit 86a8bb0c5f86a84dc85a8238cee4e4b4c2ec895f
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-09-01
+
+    2009-08-31 Jim Evins  <evins@snaught.com>
+
+       * po/fr.po:
+               Updated french translation (Claude Paroz)
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@864
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/po/fr.po
+
+commit 2fdeef77371533c7ae0f627fa14dd683616b8dd5
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-05-20
+
+    2009-05-19 Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+       * po/LINGUAS:
+               Moved translation list from configure.in to po/LINGUAS.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@853
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/configure.in
+A      glabels2/po/LINGUAS
+
+commit ad91b41ce563ebe5b0fcb2a86c02d23f697c3790
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-05-20
+
+    2009-05-19 Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+       * po/zh_CN.po:
+               New Chinese translation (Careon
+               <zzbusagain@yahoo.com.cn>).
+       * AUTHORS:
+               Added above translation to acknowledgements.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@850
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/AUTHORS
+M      glabels2/ChangeLog
+M      glabels2/configure.in
+A      glabels2/po/zh_CN.po
+
+commit d9d21f38de54637ea0713406beb5cfd93598369c
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-05-18
+
+    2009-05-18 Jim Evins  <evins@snaught.com>
+
+       * src/prefs-model.c: (gl_prefs_model_load_settings):
+               Make an educated guess at locale settings when run for the
+               first time.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@848
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/prefs-model.c
+
+commit 19a05da1d464dc893cb20d959f1bf7ec150ad08b
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-05-18
+
+    Deleting file that is unused with last checkin.
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@847
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+D      glabels2/help/C/glabels-C.omf
+
+commit 1ef96f18da1704ef0fc131366b456e6dfa345f01
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-05-18
+
+    2009-05-17 Jim Evins  <evins@snaught.com>
+
+       * Makefile.am:
+       * configure.in:
+       * help/C/glabels-C.omf:
+       * help/C/glabels.xml:
+       * help/Makefile.am:
+       * help/de/de.po:
+       * help/glabels.omf.in:
+       * po/de.po:
+               Updated german translation, gnome-doc-utils support and
+               german translation of glabels manual (Mario Blättermann).
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@844
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/Makefile.am
+M      glabels2/configure.in
+M      glabels2/help/C/glabels-C.omf
+M      glabels2/help/C/glabels.xml
+M      glabels2/help/Makefile.am
+A      glabels2/help/de/de.po
+A      glabels2/help/glabels.omf.in
+M      glabels2/po/de.po
+
+commit d06758ddbbea33616952af7ed1f3518782e15361
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-05-02
+
+    2009-05-01 Jim Evins  <evins@purple>
+
+       * AUTHORS:
+       * configure.in:
+       * po/ca.po:
+               Added catalan translation (David Planella).
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@842
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/AUTHORS
+M      glabels2/ChangeLog
+M      glabels2/configure.in
+A      glabels2/po/ca.po
+
+commit 4ce6f965c7c56a4be543898244fd8f330a3ecd24
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-05-01
+
+    Release 2.2.5
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/tags/glabels-2_2_5@841
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+commit b26cfcc7d50b6980fae589120ccca4f2348642d0
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-04-30
+
+    2009-04-29 Jim Evins  <evins@purple>
+
+       * NEWS:
+       * configure.in:
+       * docs/libglabels/libglabels-decl-list.txt:
+       * gtk-doc.make:
+       * src/ui-commands.c: (gl_ui_cmd_help_about):
+               Prepare for 2.2.5 release.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@840
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/NEWS
+M      glabels2/configure.in
+M      glabels2/docs/libglabels/libglabels-decl-list.txt
+M      glabels2/gtk-doc.make
+M      glabels2/src/ui-commands.c
+
+commit b3db239b39cf13a96008574884f25f4c3e57d5c3
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-04-30
+
+    2009-04-29 Jim Evins  <evins@purple>
+
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/misc-us-templates.xml:
+               Make sure new descriptions are marked translatable.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@839
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/data/templates/avery-iso-templates.xml
+M      glabels2/data/templates/misc-iso-templates.xml
+M      glabels2/data/templates/misc-us-templates.xml
+
+commit 4443dc5d0c2546a028a9cfef97d6ca40a3833d1c
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-04-30
+
+    2009-04-29 Jim Evins  <evins@purple>
+
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/misc-us-templates.xml:
+               Caught up on user submitted templates.
+       * AUTHORS:
+               Acknowledgements for above templates.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@837
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/AUTHORS
+M      glabels2/ChangeLog
+M      glabels2/data/templates/avery-iso-templates.xml
+M      glabels2/data/templates/misc-iso-templates.xml
+M      glabels2/data/templates/misc-us-templates.xml
+
+commit 23c906e6a07f047e932d1812be7668e1b312ad5f
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-04-30
+
+    2009-04-29 Jim Evins  <evins@purple>
+
+       * po/de.po:
+               Updated german translation (Mario Blättermann).
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@836
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+D      glabels2/po/ChangeLog
+M      glabels2/po/de.po
+
+commit 30da2882aea0fedfe88020c61dc642beee5a0a9d
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-04-29
+
+    2009-04-29 Jim Evins  <evins@purple>
+
+       * src/color.c: (gl_color_to_gdk_color), (gl_color_from_gdk_color):
+       * src/mygal/widget-color-combo.c: (color_combo_new):
+       * src/object-editor.c: (gl_object_editor_construct_color_combo):
+       * src/ui-property-bar.c:
+       (gl_ui_property_bar_construct_color_combo):
+               Bug #2760830.  Display correct preview color in color
+               combos when default
+               color selected.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@834
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/color.c
+M      glabels2/src/mygal/widget-color-combo.c
+M      glabels2/src/object-editor.c
+M      glabels2/src/ui-property-bar.c
+
+commit 987a9259d51cfe2fbbed149ded2e93c92e0b17ad
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-04-29
+
+    2009-04-28 Jim Evins  <evins@purple>
+
+       * data/glade/object-editor.glade:
+       * data/glade/prefs-dialog.glade:
+       * data/glade/property-bar.glade:
+       * data/glade/template-designer.glade:
+       * src/wdgt-print-copies.c: (gl_wdgt_print_copies_construct),
+       (first_spin_cb), (last_spin_cb):
+       * src/wdgt-print-merge.c: (gl_wdgt_print_merge_construct):
+               Zero out adjustment->page_size for all spinbuttons.
+               With gtk-2.14 this causes
+               many warning and with gtk-2.16 this actually breaks
+               the spinbuttons.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@833
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/data/glade/object-editor.glade
+M      glabels2/data/glade/prefs-dialog.glade
+M      glabels2/data/glade/property-bar.glade
+M      glabels2/data/glade/template-designer.glade
+M      glabels2/src/wdgt-print-copies.c
+M      glabels2/src/wdgt-print-merge.c
+
+commit ad51cdd46a8bdcb13c0bc4637e81a6d1e80de92c
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-01-08
+
+    2009-01-07 Jim Evins  <evins@snaught.com>
+
+       * src/critical-error-handler.c: (critical_error_handler):
+       * src/ui-commands.c: (gl_ui_cmd_help_contents):
+       * src/warning-handler.c: (warning_handler):
+       * src/view.c: (selection_received_cb):
+               Compile without warning with additional CFLAGS of
+               -O1 -Wall -Wformat=2.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@822
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/critical-error-handler.c
+M      glabels2/src/ui-commands.c
+M      glabels2/src/view.c
+M      glabels2/src/warning-handler.c
+
+commit fad7d2c766ab31ac4f083557d6543ef30fa84115
+Author: Jim Evins <evins@snaught.com>
+Date:  2009-01-03
+
+    2009-01-02 Jim Evins  <evins@snaught.com>
+
+       * COPYING.README_FIRST:
+               Fixed typo.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@820
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/COPYING.README_FIRST
+M      glabels2/ChangeLog
+
+commit 273e96234241a73a9e1f81de1ea691109025f189
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-12-28
+
+    2008-12-27 Jim Evins  <evins@snaught.com>
+
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/avery-other-templates.xml:
+       * data/templates/avery-us-templates.xml:
+       * data/templates/brother-other-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/misc-other-templates.xml:
+       * data/templates/zweckform-iso-templates.xml:
+               Make sure all descriptions are marked as translatable.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@818
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/data/templates/avery-iso-templates.xml
+M      glabels2/data/templates/avery-other-templates.xml
+M      glabels2/data/templates/avery-us-templates.xml
+M      glabels2/data/templates/brother-other-templates.xml
+M      glabels2/data/templates/misc-iso-templates.xml
+M      glabels2/data/templates/misc-other-templates.xml
+M      glabels2/data/templates/zweckform-iso-templates.xml
+
+commit f7097587f69419775838221b7d93d2b84d10ca53
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-12-28
+
+    2008-12-27 Jim Evins  <evins@snaught.com>
+
+       * de.po:
+               Updated german translation (Mario Blättermann)
+       * AUTHORS:
+               Updated credits to reflect above translation.
+       * data/glade/object-editor.glade:
+       * data/glade/prefs-dialog.glade:
+       * data/glade/template-designer.glade:
+               Removed "translatable" attribute from whitespace strings,
+               which are used only to help layout.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@816
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/AUTHORS
+M      glabels2/ChangeLog
+M      glabels2/data/glade/object-editor.glade
+M      glabels2/data/glade/prefs-dialog.glade
+M      glabels2/data/glade/template-designer.glade
+M      glabels2/po/de.po
+
+commit fcaa5234cf2768a9167bc29a2875c56a146017a9
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-12-22
+
+    2008-12-22 Jim Evins  <evins@snaught.com>
+
+       * NEWS:
+       * configure.in:
+               Prepare for 2.2.4 release.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@812
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/NEWS
+M      glabels2/configure.in
+
+commit 1a93a81faad1793bf17bef90238180aa748ee2aa
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-12-22
+
+    2008-12-21 Jim Evins  <evins@snaught.com>
+
+       * data/templates/avery-us-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+               A couple of recent template submissions.
+       * AUTHORS:
+               Acknowledgements for above templates.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@810
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/AUTHORS
+M      glabels2/ChangeLog
+M      glabels2/data/templates/avery-us-templates.xml
+M      glabels2/data/templates/misc-iso-templates.xml
+
+commit eb69c885bee022e5617b4c99e7f6b34de68965a3
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-12-21
+
+    2008-12-21 Jim Evins  <evins@snaught.com>
+
+       * src/view.c: (motion_notify_event_cb), (button_press_event_cb):
+               Don't check for handles on aggregate selections.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@808
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/view.c
+
+commit f87acc99c19ad66b78d6293e887412220a64f189
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-12-19
+
+    2008-12-18 Jim Evins  <evins@snaught.com>
+
+       * src/view.c: (selection_received_cb):
+               Fixed paste bug that caused a duplicate phantom
+               view_object to be created for
+               each new label_object.  This is because the view now
+               (as of r673) the view
+               monitiors the label for new objects and creates
+               view_objects automatically.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@803
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/view.c
+
+commit 033d3d8b724a44306ab3be30b26a39153d3b44bd
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-12-15
+
+    2008-12-14 Jim Evins  <evins@snaught.com>
+
+       * po/POTFILES.in:
+               Bug #2395628.  Reconciled POTFILES.in with current files.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@802
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/po/POTFILES.in
+
+commit 85256c10a275c37d1efaa115840f0b7bb1f3d171
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-12-15
+
+    2008-12-14 Jim Evins  <evins@snaught.com>
+
+       * src/ui.c: (gl_ui_new):
+               Bug #2395628.  Fixed i18n for application shell.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@800
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/ui.c
+
+commit c8f375d7e8aebd472353953976a629730c857978
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-12-15
+
+    2008-12-14 Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Bug #2316013.  Added PKG_PROG_PKG_CONFIG.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@798
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/configure.in
+
+commit b4abc77732a4daf5ada4cd4da0f945453380db7e
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-11-16
+
+    2008-11-15 Jim Evins  <evins@snaught.com>
+
+       * libglabels/db.c: (lgl_db_register_template):
+       * libglabels/xml-template.c:
+       (lgl_xml_template_parse_template_node):
+       * src/glabels-batch.c:
+       * src/view-text.c: (gl_view_text_create_button_press_event):
+               Fixed several issues such as possible use of uninitialized
+               variables found with "-O1 -Wall".
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@795
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/libglabels/db.c
+M      glabels2/libglabels/xml-template.c
+M      glabels2/src/glabels-batch.c
+M      glabels2/src/view-text.c
+
+commit eab7333647b997218395f4f30a5a6a18705c7f7c
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-11-10
+
+    2008-11-09 Jim Evins  <evins@snaught.com>
+
+       * data/templates/misc-iso-templates.xml:
+               Another user submitted template.
+
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@793
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/data/templates/misc-iso-templates.xml
+
+commit 0fa94b3a05a329adf9ca6b52ca41b56b24e12766
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-10-28
+
+    2008-10-27 Jim Evins  <evins@snaught.com>
+
+       * data/templates/avery-us-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/zweckform-iso-templates.xml:
+               Caught up on user submitted templates.
+       * AUTHORS:
+               Acknowledgements for above templates.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@789
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/AUTHORS
+M      glabels2/ChangeLog
+M      glabels2/data/templates/avery-us-templates.xml
+M      glabels2/data/templates/misc-iso-templates.xml
+M      glabels2/data/templates/zweckform-iso-templates.xml
+
+commit f3330ba8ef8348e17bcbb5f236507b94b92fb504
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-10-24
+
+    2008-10-23 Jim Evins  <evins@snaught.com>
+
+       * src/label-text.c: (set_font_family):
+       * src/object-editor-text-page.c:
+       (gl_object_editor_prepare_text_page),
+       (gl_object_editor_set_font_family):
+       * src/prefs-dialog.c: (construct_object_page),
+       (update_object_page_from_prefs):
+       * src/ui-property-bar.c: (gl_ui_property_bar_construct),
+       (reset_to_default_properties):
+       * src/util.c: (gl_util_get_font_family_list):
+       * src/util.h:
+               Bug #1902275 and Bug #2186214.  Cache font list so that
+               it is not re-created everytime
+               the list is requested.
+       * src/object-editor-text-page.c:
+       (gl_object_editor_set_font_family):
+               Don't change font-family if it hasn't actually changed.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@787
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/label-text.c
+M      glabels2/src/object-editor-text-page.c
+M      glabels2/src/prefs-dialog.c
+M      glabels2/src/ui-property-bar.c
+M      glabels2/src/util.c
+M      glabels2/src/util.h
+
+commit 6bfe40b9f5e173eae0b7176e9d0ffe3191bd0201
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-08-30
+
+    2008-08-29 Jim Evins  <evins@snaught.com>
+
+       * src/file.c: (gl_file_open), (gl_file_save_as):
+               Bug #2069668.  Corrected button order in Open and
+               "Save as"
+               dialogs.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@782
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/file.c
+
+commit 9d1db9a86dc38a2828d571e80d2a65f6d28c8ba1
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-08-19
+
+    2008-08-18 Jim Evins  <evins@snaught.com>
+
+       * NEWS:
+       * configure.in:
+       * docs/libglabels/tmpl/paper.sgml:
+               Prepare for 2.2.3 release.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@779
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/NEWS
+M      glabels2/configure.in
+M      glabels2/docs/libglabels/tmpl/paper.sgml
+M      glabels2/gtk-doc.make
+
+commit 0cb3511ff16977b4bcaed8127929171ec8560f8d
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-08-17
+
+    2008-08-17 Jim Evins  <evins@snaught.com>
+
+       * data/dtd/glabels-2.2.dtd:
+       * data/templates/paper-sizes.xml:
+       * libglabels/db.c: (lgl_db_init):
+       * libglabels/paper.c: (lgl_paper_new), (lgl_paper_dup),
+       (lgl_paper_free):
+       * libglabels/paper.h:
+       * libglabels/xml-paper.c: (lgl_xml_paper_parse_paper_node):
+       * src/print-op.c: (set_page_size):
+               Bug #2049431.  Always explicitely set page size.
+               Added pwg_size field (PWG 5101.1-2002
+               size specification) to the libglabels paper database to
+               allow the page size to be
+               communicated to GtkPrintOp un-ambiguously.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@778
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/data/dtd/glabels-2.2.dtd
+M      glabels2/data/templates/paper-sizes.xml
+M      glabels2/libglabels/db.c
+M      glabels2/libglabels/paper.c
+M      glabels2/libglabels/paper.h
+M      glabels2/libglabels/xml-paper.c
+M      glabels2/src/print-op.c
+
+commit 1e2a5ab9232f284bda98dccaedb6016d6e5f2857
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-07-26
+
+    2008-07-25 Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-size-page.c: (size_reset_cb),
+       (gl_object_editor_set_max_size):
+               Bug #1993550.  Set size limits based on longest side
+               of label.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@775
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/object-editor-size-page.c
+
+commit db3c2bd3a3b02e607ae60a08f01c2a50da66d7d3
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-07-20
+
+    2008-07-19 Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+       * src/mygal/Makefile.am:
+               Make sure libtool handles library dependencies for mygal
+               properly.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@773
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/configure.in
+M      glabels2/src/mygal/Makefile.am
+
+commit d7f7d6bd6d757805359b3e997e2978c0012f54a5
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-05-22
+
+    2008-05-21 Jim Evins  <evins@snaught.com>
+
+       * src/glabels-batch.c: (main):
+               Bug #1968653.  Initialize prefs subsystem in
+               glabels-batch.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@771
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/glabels-batch.c
+
+commit 72928ecdf1b1560209e55c3d64fe6e3dfaa19604
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-05-10
+
+    2008-05-09 Jim Evins  <evins@snaught.com>
+
+       * data/glade/object-editor.glade:
+               Bug #1959135.  A couple of radio buttons somehow became
+               ungrouped.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@770
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/data/glade/object-editor.glade
+
+commit bff482ebb178677634fd8f1d00d3e777d52d7ba1
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-04-05
+
+    2008-04-04 Jim Evins  <evins@snaught.com>
+
+       * data/templates/brother-other-templates.xml:
+               Added categories to existing templates.
+       * data/templates/misc-other-templates.xml:
+               Moved dymo templates to their own file.
+       * data/templates/Makefile.am:
+       * data/templates/dymo-other-templates.xml:
+               Additional dymo templates provided by Harald Welte
+               <laforge@gnumonks.org>.
+       * AUTHORS:
+               Acknowledgement for above templates.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@765
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/AUTHORS
+M      glabels2/ChangeLog
+M      glabels2/data/templates/Makefile.am
+M      glabels2/data/templates/brother-other-templates.xml
+A      glabels2/data/templates/dymo-other-templates.xml
+M      glabels2/data/templates/misc-other-templates.xml
+
+commit 77e287c50a70b8f21c1f6168e109ede934eeea15
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-03-25
+
+    2008-03-24 Jim Evins  <evins@snaught.com>
+
+       * src/xml-label.c: (xml_doc_to_label):
+               Bug #1872584.  Don't refuse to parse label file if
+               namespace is
+               unrecognized -- it may be from a newer version of glabels.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@764
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/xml-label.c
+
+commit da84fe8790466157cac18eed1895cffa20d316d4
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-03-16
+
+    2008-03-15 Jim Evins  <evins@snaught.com>
+
+       * data/templates/Makefile.am:
+       * data/templates/brother-other-templates.xml:
+               Added brother templates.
+       * src/cairo-markup-path.c: (gl_cairo_markup_margin_rect_path),
+       (gl_cairo_markup_margin_cd_path):
+       * src/view.c: (draw_markup_layer):
+               Fixed markup drawing errors when label is rotated.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@761
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/data/templates/Makefile.am
+A      glabels2/data/templates/brother-other-templates.xml
+M      glabels2/src/cairo-markup-path.c
+M      glabels2/src/view.c
+
+commit 00e91e339f4184c5af3f026db6da7cb704362fb7
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-03-04
+
+    2008-03-03 Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+       * ko.po:
+               Added korean translation provided by xein@naver.com.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@759
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/configure.in
+A      glabels2/po/ko.po
+
+commit 1af444dffebbf48dd36214aee5d2e7ed8e73c8ab
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-02-22
+
+    2008-02-21 Jim Evins  <evins@snaught.com>
+
+       * src/ui.c:
+               Last minute bug fix for 2.2.2 release.
+               Fixed typo that prevented "Save" from being deactivated
+               when
+               document is not modified.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@754
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/ui.c
+
+commit c7b72805e8f9e88c788dcd8cb599b11515fac170
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-02-22
+
+    2008-02-21 Jim Evins  <evins@snaught.com>
+
+       * NEWS:
+       * configure.in:
+               Prepare for 2.2.2 release.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@753
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/NEWS
+M      glabels2/configure.in
+
+commit 104d0092d40b8bbfef6eb417fdf9ee9c568ab7e3
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-02-19
+
+    2008-02-18 Jim Evins  <evins@snaught.com>
+
+       * src/prefs-model.c: (gl_prefs_model_save_settings),
+       (gl_prefs_model_load_settings):
+               Set default units for file output.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@751
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/prefs-model.c
+
+commit ef2d442e373bf8f26ff49f1d9e2e4415d3690d15
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-02-18
+
+    2008-02-18 Jim Evins  <evins@snaught.com>
+
+       * help/C/glabels.xml:
+               Fixed example template.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@749
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/help/C/glabels.xml
+
+commit df63b87a2eb63897873851c61c1200334aaccfcb
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-02-17
+
+    2008-02-16 Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/avery-us-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/misc-us-templates.xml:
+               Caught up on user submitted templates.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@747
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/AUTHORS
+M      glabels2/ChangeLog
+M      glabels2/data/templates/avery-iso-templates.xml
+M      glabels2/data/templates/avery-us-templates.xml
+M      glabels2/data/templates/misc-iso-templates.xml
+M      glabels2/data/templates/misc-us-templates.xml
+
+commit bb17382205e5bae69c7dc96e394b2da864ef3645
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-02-05
+
+    2008-02-04 Jim Evins  <evins@snaught.com>
+
+       * src/view-image.c: (update_object_from_editor_cb):
+               Bug #1886438.  Don't update the image size unless it
+               is actually
+               triggered by a change in image source.  The result of
+               this bug
+               was that any attempt to edit the size spinboxes,
+               immediately
+               reset the size.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@745
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/view-image.c
+
+commit cd2b98740455cb7a60925aa093fce003ecc8be81
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-02-03
+
+    2008-02-03 Jim Evins  <evins@snaught.com>
+
+       * src/label-image.c: (gl_label_image_class_init), (set_size):
+               Enforce minimum size for images.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@744
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/label-image.c
+
+commit 16f9c5076bfe01daba6a98a6572cee8e69d6375e
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-02-03
+
+    2008-02-03 Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-lsize-page.c:
+       (gl_object_editor_set_max_lsize):
+       * src/object-editor-private.h:
+       * src/object-editor-shadow-page.c:
+       (gl_object_editor_set_max_shadow_offset):
+       * src/object-editor-size-page.c: (gl_object_editor_set_max_size):
+       * src/object-editor.c: (gl_object_editor_finalize),
+       (gl_object_editor_new), (gl_object_notebook_construct_valist),
+       (label_changed_cb):
+       * src/object-editor.h:
+       * src/ui-sidebar.c: (gl_ui_sidebar_construct):
+       * src/view-barcode.c: (construct_properties_editor):
+       * src/view-box.c: (construct_properties_editor):
+       * src/view-ellipse.c: (construct_properties_editor):
+       * src/view-image.c: (construct_properties_editor):
+       * src/view-line.c: (construct_properties_editor):
+       * src/view-object.c: (gl_view_object_finalize):
+       * src/view-text.c: (construct_properties_editor):
+               Move update_editor_from_label callback from individual
+               view objects
+               to the object editor, so that signals can be disconnected
+               when
+               object editor is finalized.
+       * src/view-text.c: (gl_view_text_create_button_press_event):
+               Fixed bug that caused multiple view objects to be created
+               for a
+               single text object.  This bug would manifest itself as
+               a crash
+               when deleting multi-object selections which included
+               text objects.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@742
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/object-editor-lsize-page.c
+M      glabels2/src/object-editor-private.h
+M      glabels2/src/object-editor-shadow-page.c
+M      glabels2/src/object-editor-size-page.c
+M      glabels2/src/object-editor.c
+M      glabels2/src/object-editor.h
+M      glabels2/src/ui-sidebar.c
+M      glabels2/src/view-barcode.c
+M      glabels2/src/view-box.c
+M      glabels2/src/view-ellipse.c
+M      glabels2/src/view-image.c
+M      glabels2/src/view-line.c
+M      glabels2/src/view-object.c
+M      glabels2/src/view-text.c
+
+commit 975cf2793e52a80c09f558064e0987d238b99edf
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-02-01
+
+    2008-01-31 Jim Evins  <evins@snaught.com>
+
+       * src/label-barcode.c: (draw_object):
+               Fixed rendering problem when "Invalid data" is displayed
+               when text
+               object is lower in stacking order.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@739
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/label-barcode.c
+
+commit 4908a24dc1a5d597a853a4806e791f78b522fafd
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-01-31
+
+    2008-01-30 Jim Evins  <evins@snaught.com>
+
+       * src/label-text.c: (get_size), (draw_object), (draw_shadow):
+               Don't turn off cairo_hint_metrics.  This causes serious
+               issues with
+               bitmap fonts.
+
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@737
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/label-text.c
+
+commit c173c24c951943fbdf0a5ecf35b84815ac736fcb
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-01-30
+
+    2008-01-29 Jim Evins  <evins@snaught.com>
+
+       * src/print-op.c: (gl_print_op_construct),
+       (gl_print_op_construct_batch), (set_page_size):
+               Explicitly set page size for "other" page sizes.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@735
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/print-op.c
+
+commit 28c8daaa0657de9c8894a5c9bbad604c8a8a6013
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-01-26
+
+    2008-01-25 Jim Evins  <evins@snaught.com>
+
+       * src/bc.c:
+               Fixed Code128C backend parameters.
+       * src/label-barcode.c: (get_size):
+               Bug #1766425.  If barcode is not renderable with either
+               input data or default data, use a default size.  Also
+               fixed small leak.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@732
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/bc.c
+M      glabels2/src/label-barcode.c
+
+commit 5042beae2d6a1d83f2d0178fe97636b99bedde17
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-01-23
+
+    2008-01-22 Jim Evins  <evins@snaught.com>
+
+       * NEWS:
+       * configure.in:
+               Preparation for 2.2.1 release.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@728
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/NEWS
+M      glabels2/configure.in
+
+commit 147a21ba6c21f68b40654752182f6bbf55d06f2a
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-01-17
+
+    2008-01-16 Jim Evins  <evins@snaught.com>
+
+       * src/print.c: (print_label):
+               Bug #1872568.  Don't apply special transforms (rotate and
+               mirror) to clipping region or outline.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@726
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/print.c
+
+commit 512e3c088acd3f8a14d8152f7318cbbf17a3cdd8
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-01-02
+
+    2008-01-01 Jim Evins  <evins@snaught.com>
+
+       * src/util.c:
+               Sort font lists alphabetically.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@724
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/util.c
+
+commit 655ca82e016d106d6d884ef2caf8f0434f14221a
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-01-02
+
+    2008-01-01 Jim Evins  <evins@snaught.com>
+
+       * src/merge-evolution.c:
+               Do a case-insensitive sort.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@722
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/src/merge-evolution.c
+
+commit 84dd6ce9eb82d51fefcc0f77a104adbf786feea1
+Author: Jim Evins <evins@snaught.com>
+Date:  2008-01-02
+
+    2008-01-01 Jim Evins  <evins@snaught.com>
+
+       * src/merge-evolution.c:
+               Sort evolution by "file_under" field.  Original patch
+               provided
+               by Peter Cherriman <glabels-devel2712@bubieyehyeh.me.uk>
+               in
+               Patch #1860423.
+       * AUTHORS:
+               Added acknowledgement for above patch.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@720
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/AUTHORS
+M      glabels2/ChangeLog
+M      glabels2/src/merge-evolution.c
+
+commit dce85299fd3989e6636675c39317c7280592d86b
+Author: Jim Evins <evins@snaught.com>
+Date:  2007-12-25
+
+    2007-12-25 Jim Evins  <evins@snaught.com>
+
+       * glabels.spec.in:
+               Fix spec file.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@715
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+M      glabels2/glabels.spec.in
+
+commit c8dd36d8d3c61487c28560d11f52310d655ab72a
+Author: Jim Evins <evins@snaught.com>
+Date:  2007-12-25
+
+    2007-12-25 Jim Evins  <evins@snaught.com>
+
+       * MESSAGE-OF-DOOM:
+               Removed for 2.2 stable branch.
+       * Makefile.am:
+       * NEWS:
+       * configure.in:
+               Prepare for 2.2.0 release.
+
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@714
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+M      glabels2/ChangeLog
+D      glabels2/MESSAGE-OF-DOOM
+M      glabels2/Makefile.am
+M      glabels2/NEWS
+M      glabels2/configure.in
+
+commit ea75118a021e733fa7e2281456581dab61d9c811
+Author: Jim Evins <evins@snaught.com>
+Date:  2007-12-25
+
+    Creating glabels-2.2 branch.
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@713
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
+
+A      glabels2/AUTHORS
+A      glabels2/COPYING
+A      glabels2/COPYING-DOCS
+A      glabels2/COPYING-LIBGLABELS
+A      glabels2/COPYING.README_FIRST
+A      glabels2/ChangeLog
+A      glabels2/INSTALL
+A      glabels2/MESSAGE-OF-DOOM
+A      glabels2/Makefile.am
+A      glabels2/NEWS
+A      glabels2/README
+A      glabels2/TODO
+A      glabels2/autogen.sh
+A      glabels2/barcode-0.98/COPYING
+A      glabels2/barcode-0.98/ChangeLog
+A      glabels2/barcode-0.98/INSTALL
+A      glabels2/barcode-0.98/Makefile.am
+A      glabels2/barcode-0.98/Makefile.in.dist
+A      glabels2/barcode-0.98/README
+A      glabels2/barcode-0.98/README.glabels
+A      glabels2/barcode-0.98/TODO
+A      glabels2/barcode-0.98/barcode.h
+A      glabels2/barcode-0.98/barcode.spec
+A      glabels2/barcode-0.98/bookland/bookland.py
+A      glabels2/barcode-0.98/cmdline.c
+A      glabels2/barcode-0.98/cmdline.h
+A      glabels2/barcode-0.98/codabar.c
+A      glabels2/barcode-0.98/code128.c
+A      glabels2/barcode-0.98/code39.c
+A      glabels2/barcode-0.98/code93.c
+A      glabels2/barcode-0.98/compat/getopt.c
+A      glabels2/barcode-0.98/compat/getopt.h
+A      glabels2/barcode-0.98/configure
+A      glabels2/barcode-0.98/configure.in.dist
+A      glabels2/barcode-0.98/contrib/barcode-SVG.tar.gz
+A      glabels2/barcode-0.98/contrib/barcode-SVG.tar.gz.README
+A      glabels2/barcode-0.98/contrib/barcode-for-delphi.tar.gz
+A      glabels2/barcode-0.98/contrib/barcode-for-delphi.tar.gz.README
+A      glabels2/barcode-0.98/contrib/barcodeps-0.1.tgz
+A      glabels2/barcode-0.98/contrib/barcodeps-0.1.tgz.README
+A      glabels2/barcode-0.98/contrib/grab-0.0.4.tar.gz
+A      glabels2/barcode-0.98/contrib/grab-0.0.4.tar.gz.README
+A      glabels2/barcode-0.98/debian/README.debian
+A      glabels2/barcode-0.98/debian/changelog
+A      glabels2/barcode-0.98/debian/control
+A      glabels2/barcode-0.98/debian/copyright
+A      glabels2/barcode-0.98/debian/dirs
+A      glabels2/barcode-0.98/debian/info
+A      glabels2/barcode-0.98/debian/rules
+A      glabels2/barcode-0.98/doc/Makefile.in
+A      glabels2/barcode-0.98/doc/README
+A      glabels2/barcode-0.98/doc/barcode.info
+A      glabels2/barcode-0.98/doc/barcode.pdf
+A      glabels2/barcode-0.98/doc/barcode.ps
+A      glabels2/barcode-0.98/doc/barcodedoc.txt
+A      glabels2/barcode-0.98/doc/doc.barcode
+A      glabels2/barcode-0.98/doc/infofilter
+A      glabels2/barcode-0.98/doc/manpager
+A      glabels2/barcode-0.98/doc/mktxt
+A      glabels2/barcode-0.98/doc/texi2html
+A      glabels2/barcode-0.98/ean.c
+A      glabels2/barcode-0.98/i25.c
+A      glabels2/barcode-0.98/install-sh
+A      glabels2/barcode-0.98/library.c
+A      glabels2/barcode-0.98/main.c
+A      glabels2/barcode-0.98/missing
+A      glabels2/barcode-0.98/mkinstalldirs
+A      glabels2/barcode-0.98/msi.c
+A      glabels2/barcode-0.98/pcl.c
+A      glabels2/barcode-0.98/plessey.c
+A      glabels2/barcode-0.98/ps.c
+A      glabels2/barcode-0.98/sample.c
+A      glabels2/configure.in
+A      glabels2/data/Makefile.am
+A      glabels2/data/desktop/Makefile.am
+A      glabels2/data/desktop/glabels.desktop.in
+A      glabels2/data/dtd/Makefile.am
+A      glabels2/data/dtd/glabels-2.2.dtd
+A      glabels2/data/glade/Makefile.am
+A      glabels2/data/glade/merge-properties-dialog.glade
+A      glabels2/data/glade/new-label-dialog.glade
+A      glabels2/data/glade/object-editor.glade
+A      glabels2/data/glade/prefs-dialog.glade
+A      glabels2/data/glade/print-custom-widget.glade
+A      glabels2/data/glade/property-bar.glade
+A      glabels2/data/glade/template-designer.glade
+A      glabels2/data/glade/wdgt-media-select.glade
+A      glabels2/data/glade/wdgt-rotate-label.glade
+A      glabels2/data/man/Makefile.am
+A      glabels2/data/man/glabels.1
+A      glabels2/data/mime/Makefile.am
+A      glabels2/data/mime/glabels.applications
+A      glabels2/data/mime/glabels.keys.in
+A      glabels2/data/mime/glabels.mime
+A      glabels2/data/mime/glabels.xml.in
+A      glabels2/data/pixmaps/Makefile.am
+A      glabels2/data/pixmaps/ex-1layout.png
+A      glabels2/data/pixmaps/ex-2layouts.png
+A      glabels2/data/pixmaps/ex-cd-size.png
+A      glabels2/data/pixmaps/ex-rect-size.png
+A      glabels2/data/pixmaps/ex-round-size.png
+A      glabels2/data/pixmaps/glabels-about-logo.png
+A      glabels2/data/pixmaps/glabels-application-x-glabels.png
+A      glabels2/data/pixmaps/glabels-splash.png
+A      glabels2/data/pixmaps/glabels.png
+A      glabels2/data/templates/Makefile.am
+A      glabels2/data/templates/avery-iso-templates.xml
+A      glabels2/data/templates/avery-other-templates.xml
+A      glabels2/data/templates/avery-us-templates.xml
+A      glabels2/data/templates/categories.xml
+A      glabels2/data/templates/misc-iso-templates.xml
+A      glabels2/data/templates/misc-other-templates.xml
+A      glabels2/data/templates/misc-us-templates.xml
+A      glabels2/data/templates/paper-sizes.xml
+A      glabels2/data/templates/zweckform-iso-templates.xml
+A      glabels2/docs/Makefile.am
+A      glabels2/docs/libglabels/Makefile.am
+A      glabels2/docs/libglabels/libglabels-decl-list.txt
+A      glabels2/docs/libglabels/libglabels-docs.sgml
+A      glabels2/docs/libglabels/libglabels-overrides.txt
+A      glabels2/docs/libglabels/libglabels-sections.txt
+A      glabels2/docs/libglabels/libglabels-undocumented.txt
+A      glabels2/docs/libglabels/libglabels.types
+A      glabels2/docs/libglabels/tmpl/category.sgml
+A      glabels2/docs/libglabels/tmpl/db.sgml
+A      glabels2/docs/libglabels/tmpl/enums.sgml
+A      glabels2/docs/libglabels/tmpl/libglabels-unused.sgml
+A      glabels2/docs/libglabels/tmpl/libglabels.sgml
+A      glabels2/docs/libglabels/tmpl/paper.sgml
+A      glabels2/docs/libglabels/tmpl/str.sgml
+A      glabels2/docs/libglabels/tmpl/template.sgml
+A      glabels2/docs/libglabels/tmpl/xml-category.sgml
+A      glabels2/docs/libglabels/tmpl/xml-paper.sgml
+A      glabels2/docs/libglabels/tmpl/xml-template.sgml
+A      glabels2/docs/libglabels/tmpl/xml.sgml
+A      glabels2/glabels.spec.in
+A      glabels2/gtk-doc.make
+A      glabels2/help/C/Makefile.am
+A      glabels2/help/C/figures/glabels-template-cd.png
+A      glabels2/help/C/figures/glabels-template-label.png
+A      glabels2/help/C/figures/glabels-template-layout.png
+A      glabels2/help/C/figures/main-window-empty.png
+A      glabels2/help/C/figures/merge-ex1-1.png
+A      glabels2/help/C/figures/merge-ex1-2.png
+A      glabels2/help/C/figures/merge-ex1-3.png
+A      glabels2/help/C/figures/merge-ex1-4.png
+A      glabels2/help/C/figures/merge-ex2-1.png
+A      glabels2/help/C/figures/merge-ex2-2.png
+A      glabels2/help/C/figures/merge-ex2-3.png
+A      glabels2/help/C/figures/merge-ex2-4.png
+A      glabels2/help/C/figures/object-editor-sidebar.png
+A      glabels2/help/C/figures/print-copies.png
+A      glabels2/help/C/figures/print-merge.png
+A      glabels2/help/C/glabels-C.omf
+A      glabels2/help/C/glabels.xml
+A      glabels2/help/C/legal.xml
+A      glabels2/help/Makefile.am
+A      glabels2/iec16022-0.2.1/BUGS
+A      glabels2/iec16022-0.2.1/CHANGELOG
+A      glabels2/iec16022-0.2.1/CREDITS
+A      glabels2/iec16022-0.2.1/INSTALL
+A      glabels2/iec16022-0.2.1/LICENSE
+A      glabels2/iec16022-0.2.1/Makefile.am
+A      glabels2/iec16022-0.2.1/Makefile.dist
+A      glabels2/iec16022-0.2.1/README
+A      glabels2/iec16022-0.2.1/README.glabels
+A      glabels2/iec16022-0.2.1/TODO
+A      glabels2/iec16022-0.2.1/iec16022.1
+A      glabels2/iec16022-0.2.1/iec16022.c
+A      glabels2/iec16022-0.2.1/iec16022ecc200.c
+A      glabels2/iec16022-0.2.1/iec16022ecc200.h
+A      glabels2/iec16022-0.2.1/image.c
+A      glabels2/iec16022-0.2.1/image.h
+A      glabels2/iec16022-0.2.1/reedsol.c
+A      glabels2/iec16022-0.2.1/reedsol.h
+A      glabels2/iec16022-0.2.1/test/testsuite-example.bin
+A      glabels2/iec16022-0.2.1/test/testsuite-example.eps
+A      glabels2/iec16022-0.2.1/test/testsuite-example.hex
+A      glabels2/iec16022-0.2.1/test/testsuite-example.png
+A      glabels2/iec16022-0.2.1/test/testsuite-example.text
+A      glabels2/iec16022-0.2.1/test/testsuite.sh
+A      glabels2/libglabels/Makefile.am
+A      glabels2/libglabels/category.c
+A      glabels2/libglabels/category.h
+A      glabels2/libglabels/db.c
+A      glabels2/libglabels/db.h
+A      glabels2/libglabels/enums.h
+A      glabels2/libglabels/libglabels-private.h
+A      glabels2/libglabels/libglabels.h
+A      glabels2/libglabels/libglabels.pc.in
+A      glabels2/libglabels/paper.c
+A      glabels2/libglabels/paper.h
+A      glabels2/libglabels/str.c
+A      glabels2/libglabels/str.h
+A      glabels2/libglabels/template.c
+A      glabels2/libglabels/template.h
+A      glabels2/libglabels/xml-category.c
+A      glabels2/libglabels/xml-category.h
+A      glabels2/libglabels/xml-paper.c
+A      glabels2/libglabels/xml-paper.h
+A      glabels2/libglabels/xml-template.c
+A      glabels2/libglabels/xml-template.h
+A      glabels2/libglabels/xml.c
+A      glabels2/libglabels/xml.h
+A      glabels2/po/ChangeLog
+A      glabels2/po/POTFILES.in
+A      glabels2/po/cs.po
+A      glabels2/po/de.po
+A      glabels2/po/eo.po
+A      glabels2/po/es.po
+A      glabels2/po/fr.po
+A      glabels2/po/it.po
+A      glabels2/po/ja.po
+A      glabels2/po/pl.po
+A      glabels2/po/pt_BR.po
+A      glabels2/po/ru.po
+A      glabels2/po/zh_TW.Big5.po
+A      glabels2/src/Makefile.am
+A      glabels2/src/base64.c
+A      glabels2/src/base64.h
+A      glabels2/src/bc-gnubarcode.c
+A      glabels2/src/bc-gnubarcode.h
+A      glabels2/src/bc-iec16022.c
+A      glabels2/src/bc-iec16022.h
+A      glabels2/src/bc-postnet.c
+A      glabels2/src/bc-postnet.h
+A      glabels2/src/bc.c
+A      glabels2/src/bc.h
+A      glabels2/src/cairo-ellipse-path.c
+A      glabels2/src/cairo-ellipse-path.h
+A      glabels2/src/cairo-label-path.c
+A      glabels2/src/cairo-label-path.h
+A      glabels2/src/cairo-markup-path.c
+A      glabels2/src/cairo-markup-path.h
+A      glabels2/src/color.c
+A      glabels2/src/color.h
+A      glabels2/src/critical-error-handler.c
+A      glabels2/src/critical-error-handler.h
+A      glabels2/src/debug.c
+A      glabels2/src/debug.h
+A      glabels2/src/file.c
+A      glabels2/src/file.h
+A      glabels2/src/glabels-batch.c
+A      glabels2/src/glabels.c
+A      glabels2/src/hig.h
+A      glabels2/src/label-barcode.c
+A      glabels2/src/label-barcode.h
+A      glabels2/src/label-box.c
+A      glabels2/src/label-box.h
+A      glabels2/src/label-ellipse.c
+A      glabels2/src/label-ellipse.h
+A      glabels2/src/label-image.c
+A      glabels2/src/label-image.h
+A      glabels2/src/label-line.c
+A      glabels2/src/label-line.h
+A      glabels2/src/label-object.c
+A      glabels2/src/label-object.h
+A      glabels2/src/label-text.c
+A      glabels2/src/label-text.h
+A      glabels2/src/label.c
+A      glabels2/src/label.h
+A      glabels2/src/marshal.list
+A      glabels2/src/merge-evolution.c
+A      glabels2/src/merge-evolution.h
+A      glabels2/src/merge-init.c
+A      glabels2/src/merge-init.h
+A      glabels2/src/merge-properties-dialog.c
+A      glabels2/src/merge-properties-dialog.h
+A      glabels2/src/merge-text.c
+A      glabels2/src/merge-text.h
+A      glabels2/src/merge-vcard.c
+A      glabels2/src/merge-vcard.h
+A      glabels2/src/merge.c
+A      glabels2/src/merge.h
+A      glabels2/src/mini-preview-pixbuf-cache.c
+A      glabels2/src/mini-preview-pixbuf-cache.h
+A      glabels2/src/mini-preview-pixbuf.c
+A      glabels2/src/mini-preview-pixbuf.h
+A      glabels2/src/mygal/Makefile.am
+A      glabels2/src/mygal/color-group.c
+A      glabels2/src/mygal/color-group.h
+A      glabels2/src/mygal/color-palette.c
+A      glabels2/src/mygal/color-palette.h
+A      glabels2/src/mygal/e-colors.c
+A      glabels2/src/mygal/e-colors.h
+A      glabels2/src/mygal/e-marshal.list
+A      glabels2/src/mygal/e-util.h
+A      glabels2/src/mygal/mygal-combo-box.c
+A      glabels2/src/mygal/mygal-combo-box.h
+A      glabels2/src/mygal/widget-color-combo.c
+A      glabels2/src/mygal/widget-color-combo.h
+A      glabels2/src/new-label-dialog.c
+A      glabels2/src/new-label-dialog.h
+A      glabels2/src/object-editor-bc-page.c
+A      glabels2/src/object-editor-data-page.c
+A      glabels2/src/object-editor-edit-page.c
+A      glabels2/src/object-editor-fill-page.c
+A      glabels2/src/object-editor-image-page.c
+A      glabels2/src/object-editor-line-page.c
+A      glabels2/src/object-editor-lsize-page.c
+A      glabels2/src/object-editor-position-page.c
+A      glabels2/src/object-editor-private.h
+A      glabels2/src/object-editor-shadow-page.c
+A      glabels2/src/object-editor-size-page.c
+A      glabels2/src/object-editor-text-page.c
+A      glabels2/src/object-editor.c
+A      glabels2/src/object-editor.h
+A      glabels2/src/pixbuf-cache.c
+A      glabels2/src/pixbuf-cache.h
+A      glabels2/src/pixmaps/Makefile.am
+A      glabels2/src/pixmaps/checkerboard.xpm
+A      glabels2/src/pixmaps/collate.xpm
+A      glabels2/src/pixmaps/cursor_barcode.xbm
+A      glabels2/src/pixmaps/cursor_barcode_mask.xbm
+A      glabels2/src/pixmaps/cursor_box.xbm
+A      glabels2/src/pixmaps/cursor_box_mask.xbm
+A      glabels2/src/pixmaps/cursor_ellipse.xbm
+A      glabels2/src/pixmaps/cursor_ellipse_mask.xbm
+A      glabels2/src/pixmaps/cursor_image.xbm
+A      glabels2/src/pixmaps/cursor_image_mask.xbm
+A      glabels2/src/pixmaps/cursor_line.xbm
+A      glabels2/src/pixmaps/cursor_line_mask.xbm
+A      glabels2/src/pixmaps/cursor_text.xbm
+A      glabels2/src/pixmaps/cursor_text_mask.xbm
+A      glabels2/src/pixmaps/nocollate.xpm
+A      glabels2/src/prefs-dialog.c
+A      glabels2/src/prefs-dialog.h
+A      glabels2/src/prefs-model.c
+A      glabels2/src/prefs-model.h
+A      glabels2/src/prefs.c
+A      glabels2/src/prefs.h
+A      glabels2/src/print-op.c
+A      glabels2/src/print-op.h
+A      glabels2/src/print.c
+A      glabels2/src/print.h
+A      glabels2/src/recent.c
+A      glabels2/src/recent.h
+A      glabels2/src/stock-pixmaps/Makefile.am
+A      glabels2/src/stock-pixmaps/stock_align_bottom_16.png
+A      glabels2/src/stock-pixmaps/stock_align_hcenter_16.png
+A      glabels2/src/stock-pixmaps/stock_align_left_16.png
+A      glabels2/src/stock-pixmaps/stock_align_right_16.png
+A      glabels2/src/stock-pixmaps/stock_align_top_16.png
+A      glabels2/src/stock-pixmaps/stock_align_vcenter_16.png
+A      glabels2/src/stock-pixmaps/stock_arrow_16.png
+A      glabels2/src/stock-pixmaps/stock_arrow_24.png
+A      glabels2/src/stock-pixmaps/stock_barcode_16.png
+A      glabels2/src/stock-pixmaps/stock_barcode_24.png
+A      glabels2/src/stock-pixmaps/stock_box_16.png
+A      glabels2/src/stock-pixmaps/stock_box_24.png
+A      glabels2/src/stock-pixmaps/stock_bucket_fill_16.png
+A      glabels2/src/stock-pixmaps/stock_bucket_fill_24.png
+A      glabels2/src/stock-pixmaps/stock_center_horiz_16.png
+A      glabels2/src/stock-pixmaps/stock_center_vert_16.png
+A      glabels2/src/stock-pixmaps/stock_ellipse_16.png
+A      glabels2/src/stock-pixmaps/stock_ellipse_24.png
+A      glabels2/src/stock-pixmaps/stock_flip_horiz_16.png
+A      glabels2/src/stock-pixmaps/stock_flip_vert_16.png
+A      glabels2/src/stock-pixmaps/stock_hchain_24.png
+A      glabels2/src/stock-pixmaps/stock_hchain_broken_24.png
+A      glabels2/src/stock-pixmaps/stock_image_16.png
+A      glabels2/src/stock-pixmaps/stock_image_24.png
+A      glabels2/src/stock-pixmaps/stock_line_16.png
+A      glabels2/src/stock-pixmaps/stock_line_24.png
+A      glabels2/src/stock-pixmaps/stock_merge_16.png
+A      glabels2/src/stock-pixmaps/stock_merge_24.png
+A      glabels2/src/stock-pixmaps/stock_order_bottom_16.png
+A      glabels2/src/stock-pixmaps/stock_order_top_16.png
+A      glabels2/src/stock-pixmaps/stock_pencil_16.png
+A      glabels2/src/stock-pixmaps/stock_pencil_24.png
+A      glabels2/src/stock-pixmaps/stock_properties_16.png
+A      glabels2/src/stock-pixmaps/stock_properties_24.png
+A      glabels2/src/stock-pixmaps/stock_rotate_left_16.png
+A      glabels2/src/stock-pixmaps/stock_rotate_right_16.png
+A      glabels2/src/stock-pixmaps/stock_text_16.png
+A      glabels2/src/stock-pixmaps/stock_text_24.png
+A      glabels2/src/stock-pixmaps/stock_vchain_24.png
+A      glabels2/src/stock-pixmaps/stock_vchain_broken_24.png
+A      glabels2/src/stock.c
+A      glabels2/src/stock.h
+A      glabels2/src/template-designer.c
+A      glabels2/src/template-designer.h
+A      glabels2/src/text-node.c
+A      glabels2/src/text-node.h
+A      glabels2/src/ui-commands.c
+A      glabels2/src/ui-commands.h
+A      glabels2/src/ui-property-bar.c
+A      glabels2/src/ui-property-bar.h
+A      glabels2/src/ui-sidebar.c
+A      glabels2/src/ui-sidebar.h
+A      glabels2/src/ui-util.c
+A      glabels2/src/ui-util.h
+A      glabels2/src/ui.c
+A      glabels2/src/ui.h
+A      glabels2/src/util.c
+A      glabels2/src/util.h
+A      glabels2/src/view-barcode.c
+A      glabels2/src/view-barcode.h
+A      glabels2/src/view-box.c
+A      glabels2/src/view-box.h
+A      glabels2/src/view-ellipse.c
+A      glabels2/src/view-ellipse.h
+A      glabels2/src/view-image.c
+A      glabels2/src/view-image.h
+A      glabels2/src/view-line.c
+A      glabels2/src/view-line.h
+A      glabels2/src/view-object.c
+A      glabels2/src/view-object.h
+A      glabels2/src/view-text.c
+A      glabels2/src/view-text.h
+A      glabels2/src/view.c
+A      glabels2/src/view.h
+A      glabels2/src/warning-handler.c
+A      glabels2/src/warning-handler.h
+A      glabels2/src/wdgt-chain-button.c
+A      glabels2/src/wdgt-chain-button.h
+A      glabels2/src/wdgt-media-select.c
+A      glabels2/src/wdgt-media-select.h
+A      glabels2/src/wdgt-mini-preview.c
+A      glabels2/src/wdgt-mini-preview.h
+A      glabels2/src/wdgt-print-copies.c
+A      glabels2/src/wdgt-print-copies.h
+A      glabels2/src/wdgt-print-merge.c
+A      glabels2/src/wdgt-print-merge.h
+A      glabels2/src/wdgt-rotate-label.c
+A      glabels2/src/wdgt-rotate-label.h
+A      glabels2/src/window.c
+A      glabels2/src/window.h
+A      glabels2/src/xml-label-04.c
+A      glabels2/src/xml-label-04.h
+A      glabels2/src/xml-label.c
+A      glabels2/src/xml-label.h
+
+commit aa41cfa57d2ea352fee26bbacfcd6ac919f1ee76
+Author: Jim Evins <evins@snaught.com>
+Date:  2007-12-25
+
+    Creating glabels-2.2 branch.
+
+    git-svn-id:
+    https://glabels.svn.sourceforge.net/svnroot/glabels/branches/glabels-2_2@712
+    f5e0f49d-192f-0410-a22d-a8d8700d0965
diff --git a/ChangeLog.pre-2.2 b/ChangeLog.pre-2.2
new file mode 100644 (file)
index 0000000..1177cf6
--- /dev/null
@@ -0,0 +1,3891 @@
+2007-12-21  Jim Evins  <evins@snaught.com>
+
+       * COPYING.LIBGLABELS:
+       * COPYING.README_FIRST:
+       * README:
+               Updating license information to make more complete and understandable.
+
+2007-12-16  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Updated version to 2.pre2.
+       * help/C/glabels.xml:
+               Updated documentation.
+       * src/ui-commands.c: (gl_ui_cmd_help_about):
+               Updated copyright string.
+
+2007-12-15  Jim Evins  <evins@snaught.com>
+
+       * data/glade/object-editor.glade:
+               Removed any GtkTable that contained a GtkComboBox because the size of
+               the combo box was not constrained properly.  This sacrifices the nice
+               orderly labels for combo boxes that don't extend beyond the edge of the
+               window.
+
+2007-12-15  Jim Evins  <evins@snaught.com>
+
+       * libglabels/db.c: (lgl_db_lookup_template_from_name):
+       * src/object-editor.c: (gl_object_editor_finalize):
+       * src/wdgt-media-select.c: (gl_wdgt_media_select_finalize):
+               Fixed several small memory leaks.
+
+2007-12-14  Jim Evins  <evins@snaught.com>
+
+       * libglabels/db.c:
+               Optimize template search by name by using a GHashTable.
+       * src/mini-preview-pixbuf-cache.c:
+       * src/mini-preview-pixbuf-cache.h:
+               Store one pixbuf per template, but use a key for each alias.
+       * src/wdgt-media-select.c:
+               Optimize loading of tree data, thus optimizing the "new label" dialog.
+
+2007-12-12  Jim Evins  <evins@snaught.com>
+
+       * data/templates/avery-us-templates.xml:
+               More templates and aliases.
+
+2007-12-08  Jim Evins  <evins@snaught.com>
+
+       * TODO:
+               More prep for 2.1.5/2.2.0.
+
+2007-12-08  Jim Evins  <evins@snaught.com>
+
+       * NEWS:
+       * README:
+       * TODO:
+       * configure.in:
+               Preparation for 2.1.5.
+
+2007-12-08  Jim Evins  <evins@snaught.com>
+
+       * docs/libglabels/libglabels-decl-list.txt:
+       * docs/libglabels/libglabels-docs.sgml:
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/db.sgml:
+       * docs/libglabels/tmpl/str.sgml:
+       * libglabels/str.c:
+               Documentation cleanup for libglabels.
+
+2007-11-29  Jim Evins  <evins@snaught.com>
+
+       * libglabels/db.h:
+       * libglabels/db.c:
+               Added lgl_db_does_template_name_exist().
+               In lgl_db_lookup_template_from_name() substitute brand/part of new template from
+               requested alias.
+       * src/prefs-model.c:
+               Proof read recent templates -- make sure they still exist.
+       * src/wdgt-media-select.c:
+               Default to "search all templates" tab if no recent templates found.
+
+2007-11-28  Jim Evins  <evins@snaught.com>
+
+       * data/glade/wdgt-media-select.glade:
+       * src/wdgt-media-select.c:
+               Added tabbed notebook to allow selection of recent template versus searching the
+               entire database.
+       
+
+2007-11-26  Jim Evins  <evins@snaught.com>
+
+       * libglabels/Makefile.am:
+       * libglabels/libglabels.h:
+               Make str.h public.
+       * src/label.c:
+       * src/prefs-dialog.c:
+       * src/prefs-model.c:
+       * src/prefs-model.h:
+       * src/prefs.c:
+       * src/prefs.h:
+               Added tracking of recently used templates.
+
+2007-11-20  Jim Evins  <evins@snaught.com>
+
+       * data/glade/template-designer.glade:
+       * src/template-designer.c:
+               Added warning icon when match brand and part match an existing template.
+
+2007-11-18  Jim Evins  <evins@snaught.com>
+
+       * libglabels/Makefile.am:
+       * libglabels/str.h:
+       * libglabels/str.c:
+               Added lgl_str_utf8_casecmp().
+       * libglabels/libglabels-private.h:
+               Use lgl_str_utf8_casecmp() for UTF8_EQUAL macro -- do case insensitive comparisons.
+       * libglabels/db.c: (lgl_db_get_brand_list):
+               Use lgl_str_utf8_casecmp() to determine if we have seen brand before when building
+               brand list.
+
+2007-11-18  Jim Evins  <evins@snaught.com>
+
+       * data/glade/template-designer.glade:
+       * src/template-designer.c:
+               Don't advance past name page, if brand and part match an existing template.
+
+2007-11-18  Jim Evins  <evins@snaught.com>
+
+       * libglabels/db.c: (lgl_db_register_template), (read_templates):
+               When registering a new template, don't add to "User defined" category before
+               writing to file.  Add to "User defined" category when reading from "~/.glabels"
+               directory instead.  This will allow legacy templates (and manually created
+               templates) to be automatically added to the "user defined" category.
+       * libglabels/xml-template.c:
+       (lgl_xml_template_create_template_node):
+               Fixed typo/bug causing brand to be wrong.
+       
+2007-11-16  Jim Evins  <evins@snaught.com>
+
+       * libglabels/db.c:
+       * libglabels/db.h:
+               Added return codes to lgl_db_register_template().  Added lgl_db_does_template_exist()
+               function.  Automatically create "User defined" category and add to all user
+               registered templates.
+       * libglabels/xml-template.c:
+       * libglabels/xml-template.h:
+               Return number of bytes written from lgl_xml_template_write_templates_to_file() and
+               lgl_xml_template_write_template_to_file().
+       * docs/libglabels/libglabels-decl-list.txt:
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/db.sgml:
+       * docs/libglabels/tmpl/xml-template.sgml:
+               Update documentation to reflect above changes.
+
+2007-10-28  Jim Evins  <evins@snaught.com>
+
+       * libglabels/xml-template.c:
+               Remove any leading white space from part #s when parsing old names.
+       * src/mini-preview-pixbuf-cache.c:
+               If name isn't in cache add it.
+
+2007-10-26  Jim Evins  <evins@snaught.com>
+
+       * libglabels/Makefile.am:
+       * libglabels/category.c:
+       * libglabels/category.h:
+       * libglabels/db.c:
+       * libglabels/db.h:
+       * libglabels/libglabels-private.h:
+       * libglabels/libglabels.h:
+       * libglabels/paper.c:
+       * libglabels/paper.h:
+       * libglabels/template.c:
+       * libglabels/template.h:
+       * libglabels/xml-template.c:
+               Another pass at screwing with the libglabels API.  Moved all
+               database related stuff to db.[ch].
+       * docs/libglabels/libglabels-decl-list.txt:
+       * docs/libglabels/libglabels-docs.sgml:
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/category.sgml:
+       * docs/libglabels/tmpl/db.sgml:
+       * docs/libglabels/tmpl/init.sgml:
+       * docs/libglabels/tmpl/libglabels-unused.sgml:
+       * docs/libglabels/tmpl/paper.sgml:
+       * docs/libglabels/tmpl/template-construction.sgml:
+       * docs/libglabels/tmpl/template-db.sgml:
+       * docs/libglabels/tmpl/template-misc.sgml:
+       * docs/libglabels/tmpl/template-struct.sgml:
+       * docs/libglabels/tmpl/template.sgml:
+               Updated documentation to reflect above changes to libglabels API.
+       * src/file.c:
+       * src/glabels-batch.c:
+       * src/glabels.c:
+       * src/mini-preview-pixbuf-cache.c:
+       * src/prefs-model.c:
+       * src/print.c:
+       * src/template-designer.c:
+       * src/wdgt-media-select.c:
+       * src/wdgt-mini-preview.c:
+       * src/wdgt-rotate-label.c:
+       * src/xml-label-04.c:
+       * src/xml-label.c:
+               Reconciled usage with above libglabels API changes.
+
+2007-10-21  Jim Evins  <evins@snaught.com>
+
+       * data/glade/wdgt-media-select.glade:
+       * src/wdgt-media-select.c:
+               Added brand to filter settings.
+
+2007-10-21  Jim Evins  <evins@snaught.com>
+
+       * data/dtd/glabels-2.2.dtd:
+               Forgot to replace Alias name attribute with brand and part attributes.
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/avery-other-templates.xml:
+       * data/templates/avery-us-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/misc-other-templates.xml:
+       * data/templates/misc-us-templates.xml:
+       * data/templates/zweckform-iso-templates.xml:
+               Replaced all name attributes with brand/part attribute pairs.
+
+2007-10-20  Jim Evins  <evins@snaught.com>
+
+       * src/stock-pixmaps/*.png
+               Updated icons to use Tango color palette.
+       
+2007-10-20  Jim Evins  <evins@snaught.com>
+
+       * data/dtd/Makefile.am:
+       * data/dtd/glabels-2.0.dtd:
+       * data/dtd/glabels-2.2.dtd:
+               Rename glabels-2.0.dtd to glabels-2.2.dtd.  Added brand and part attributes to
+               template node.
+       * libglabels/template.c:
+       * libglabels/template.h:
+       * libglabels/xml-template.c:
+       * libglabels/xml.h:
+               Added brand and part attributes to template and alias structures and nodes.
+       * src/file.c:
+       * src/label.c:
+       * src/mini-preview-pixbuf-cache.c:
+       * src/template-designer.c:
+       * src/wdgt-media-select.c:
+               Use modified libglabels API.
+       * docs/libglabels/libglabels-decl-list.txt:
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/template-construction.sgml:
+       * docs/libglabels/tmpl/template-db.sgml:
+       * docs/libglabels/tmpl/template-struct.sgml:
+               Update libglabels documentation to reflect above modifications.
+
+2007-10-14  Jim Evins  <evins@snaught.com>
+
+       * docs/libglabels/libglabels-decl-list.txt:
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/category.sgml:
+       * libglabels/category.c:
+       * libglabels/category.h:
+               Added lgl_category_get_id_list() and lgl_category_free_id_list() to have
+       parity with paper functions.
+
+2007-10-12  Jim Evins  <evins@snaught.com>
+
+       * docs/libglabels/libglabels-decl-list.txt:
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/category.sgml:
+       * docs/libglabels/tmpl/enums.sgml:
+       * docs/libglabels/tmpl/libglabels-unused.sgml:
+       * docs/libglabels/tmpl/paper.sgml:
+       * docs/libglabels/tmpl/template-struct.sgml:
+       * libglabels/init.c:
+       * libglabels/template.c:
+       * libglabels/template.h:
+               Another pass at fleshing out the libglabels documentation.
+       * src/cairo-label-path.c:
+       * src/cairo-markup-path.c:
+       * src/label.c:
+       * src/mini-preview-pixbuf.c:
+       * src/print-op.c:
+       * src/print.c:
+       * src/view.c:
+       * src/wdgt-media-select.c:
+       * src/wdgt-mini-preview.c:
+       * src/wdgt-print-copies.c:
+       * src/wdgt-print-merge.c:
+       * src/wdgt-rotate-label.c:
+               Removed lgl_template_get_first_frame() from libglabels API and all references.
+
+2007-10-11  Jim Evins  <evins@snaught.com>
+       * configure.in:
+               Extended checks for deprecated symbols.
+       * libglabels/template.c:
+               Removed g_strcasecmp references, which are deprecated.
+
+2007-10-09  Jim Evins  <evins@snaught.com>
+
+       * src/merge-evolution.c:
+               Create address book if it does not exist.  Also, be more robust about handling
+               error conditions -- don't just assume GError has been set.
+
+2007-10-08  Jim Evins  <evins@snaught.com>
+
+       * libglabels/template.c:
+       * libglabels/xml-template.c:
+       * src/template-designer.c:
+               Missed some symbols with libglabels API work.
+
+2007-10-01  Jim Evins  <evins@snaught.com>
+
+       * docs/libglabels/libglabels-decl-list.txt:
+       * docs/libglabels/libglabels-docs.sgml:
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/category.sgml:
+       * docs/libglabels/tmpl/enums.sgml:
+       * docs/libglabels/tmpl/init.sgml:
+       * docs/libglabels/tmpl/libglabels-unused.sgml:
+       * docs/libglabels/tmpl/paper.sgml:
+       * docs/libglabels/tmpl/template-construction.sgml:
+       * docs/libglabels/tmpl/template-db.sgml:
+       * docs/libglabels/tmpl/template-misc.sgml:
+       * docs/libglabels/tmpl/template-struct.sgml:
+       * docs/libglabels/tmpl/template.sgml:
+       * docs/libglabels/tmpl/xml-category.sgml:
+       * docs/libglabels/tmpl/xml-template.sgml:
+       * libglabels/category.h:
+       * libglabels/init.c:
+       * libglabels/libglabels-private.h:
+       * libglabels/paper.h:
+       * libglabels/template.c:
+       * libglabels/template.h:
+       * libglabels/xml-template.h:
+               Basic documentation framework for libglabels updated.  This still needs some
+               fleshing out.
+       
+2007-09-27  Jim Evins  <evins@snaught.com>
+
+       * docs/libglabels/libglabels-decl-list.txt:
+       * docs/libglabels/libglabels-docs.sgml:
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/enums.sgml:
+       * docs/libglabels/tmpl/init.sgml:
+       * docs/libglabels/tmpl/libglabels-unused.sgml:
+       * docs/libglabels/tmpl/paper.sgml:
+       * docs/libglabels/tmpl/template.sgml:
+       * docs/libglabels/tmpl/xml-paper.sgml:
+       * docs/libglabels/tmpl/xml-template.sgml:
+       * docs/libglabels/tmpl/xml.sgml:
+       * libglabels/Makefile.am:
+       * libglabels/category.c:
+       * libglabels/category.h:
+       * libglabels/enums.h:
+       * libglabels/init.c:
+       * libglabels/init.h:
+       * libglabels/libglabels-private.h:
+       * libglabels/libglabels.h:
+       * libglabels/paper.c:
+       * libglabels/paper.h:
+       * libglabels/template.c:
+       * libglabels/template.h:
+       * libglabels/xml-category.c:
+       * libglabels/xml-category.h:
+       * libglabels/xml-paper.c:
+       * libglabels/xml-paper.h:
+       * libglabels/xml-template.c:
+       * libglabels/xml-template.h:
+       * libglabels/xml.c:
+       * libglabels/xml.h:
+       * src/cairo-label-path.c:
+       * src/cairo-label-path.h:
+       * src/cairo-markup-path.c:
+       * src/cairo-markup-path.h:
+       * src/file.c:
+       * src/glabels-batch.c:
+       * src/glabels.c:
+       * src/label-object.c:
+       * src/label.c:
+       * src/label.h:
+       * src/mini-preview-pixbuf-cache.c:
+       * src/mini-preview-pixbuf.c:
+       * src/mini-preview-pixbuf.h:
+       * src/prefs-dialog.c:
+       * src/prefs-model.c:
+       * src/prefs-model.h:
+       * src/prefs.c:
+       * src/prefs.h:
+       * src/print-op.c:
+       * src/print.c:
+       * src/template-designer.c:
+       * src/view-barcode.c:
+       * src/view-box.c:
+       * src/view-ellipse.c:
+       * src/view-image.c:
+       * src/view-line.c:
+       * src/view.c:
+       * src/wdgt-media-select.c:
+       * src/wdgt-mini-preview.c:
+       * src/wdgt-mini-preview.h:
+       * src/wdgt-print-copies.c:
+       * src/wdgt-print-merge.c:
+       * src/wdgt-rotate-label.c:
+       * src/xml-label-04.c:
+       * src/xml-label.c:
+               Major cleanup of libglabels API -- this breaks API compatibility with older
+               development and stable versions -- as far as I know, there are currently
+               no external users of this library yet.
+       
+2007-09-14  Jim Evins  <evins@snaught.com>
+
+       * src/marshal.list:
+       * src/label.c:
+       * src/label.h:
+       * src/label-object.c:
+       * src/label-object.h:
+       * src/label-barcode.c:
+       * src/label-ellipse.c:
+       * src/view.c:
+       * src/view-object.c:
+       * src/view-barcode.c:
+       * src/view-box.c:
+       * src/view-ellipse.c:
+       * src/view-image.c:
+       * src/view-line.c:
+       * src/view-text.c:
+               Better separation of model from view.
+
+2007-08-21  Jim Evins  <evins@snaught.com>
+
+       * src/print-op.c: (create_custom_widget_cb):
+               Fix problem with force_outline_flag -- don't override with default.
+
+2007-08-21  Jim Evins  <evins@snaught.com>
+
+       * data/dtd/glabels-2.0.dtd:
+       * libglabels/template.c:
+       * libglabels/template.h:
+       * libglabels/xml-template.c:
+       * src/cairo-markup-path.c:
+               Added "Markup-rect" element to template format.
+
+2007-08-21  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Changed version to 2.1.pre5svn.
+       * src/view.c: (draw_markup_layer):
+               Do a stroke for each markup path, otherwise multiple markups
+               get connected.
+
+2007-08-17  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Bump libglabels revision numbers for 2.1.4 release.
+
+2007-08-16  Jim Evins  <evins@snaught.com>
+
+       * Makefile.am:
+               Include subdir iec16022-0.2.1.
+       * NEWS:
+       * configure.in:
+       * glabels.spec.in:
+               Preparation for 2.1.4.
+       
+
+2007-08-11  Jim Evins  <evins@snaught.com>
+
+       * po/POTFILES.in:
+               Updated file list.
+       * configure.in:
+       * po/eo.po:
+               Added Esperanto translation.  Provided by Antonio C.
+               Codazzi "la Filozofo" <f_sophia@libero.it>.
+       * po/fr.po:
+               Updated French translation. Provided by Claude Paroz
+               <claude@2xlibre.net>.
+       * AUTHORS:
+               Updated to reflect above translations.
+
+2007-08-11  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/avery-us-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/misc-other-templates.xml:
+       * data/templates/misc-us-templates.xml:
+       * data/templates/zweckform-iso-templates.xml:
+               Caught up with backlog of template submissions.
+
+2007-08-10  Jim Evins  <evins@snaught.com>
+
+       * src/bc-postnet.c: (gl_barcode_postnet_new):
+       * src/bc.c:
+               Added support for Brazilian CEPNet barcodes.  This is simply an
+               instance of the US POSTNET format with 8 digits.  Patch supplied
+               by Mário Meyer in bug # 1768792.
+       * AUTHORS:
+               Updated acknowledgments to reflect above patch and recent shuffling
+               of underlying technology.
+
+2007-05-13  Jim Evins  <evins@snaught.com>
+
+       * src/merge-text.c: (parse_line), (parse_field):
+               Remove leading and trailing spaces from CSV fields, unless quoted.
+
+2007-05-09  Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-bc-page.c:
+       * src/object-editor-data-page.c:
+       * src/object-editor-fill-page.c:
+       * src/object-editor-image-page.c:
+       * src/object-editor-line-page.c:
+       * src/object-editor-lsize-page.c:
+       * src/object-editor-position-page.c:
+       * src/object-editor-private.h:
+       * src/object-editor-shadow-page.c:
+       * src/object-editor-size-page.c:
+       * src/object-editor-text-page.c:
+       * src/object-editor.c:
+       * src/prefs-dialog.c:
+       * src/template-designer.c:
+       * src/ui-property-bar.c:
+       * src/wdgt-media-select.c:
+               Replaced signal block/unblock pairs with simple flags.  This reduces
+               some code clutter, hopefully making it easier to read.
+
+2007-05-05  Jim Evins  <evins@snaught.com>
+
+       * src/template-designer.c: (apply_cb):
+               Add new template to mini-preview pixbuf cache.
+
+2007-05-03  Jim Evins  <evins@snaught.com>
+
+       * src/label-image.c: (gl_label_image_init), (draw_object):
+               Scale default pixbuf up, to prevent bluring.  Use cairo_fill to
+               render image.
+
+2007-05-02  Jim Evins  <evins@snaught.com>
+
+       * src/view.c: (draw_select_region_layer), (motion_notify_event_cb),
+       (button_release_event_cb):
+               Removed attempt at rendering optimization by clipping the updates
+               to areas affected -- this actually seemed to hurt update performance.
+
+2007-04-30  Jim Evins  <evins@snaught.com>
+
+       * src/color.h:
+       * src/color.c: (gl_color_shadow), (gl_color_node_new_default),
+       (gl_color_node_equal), (gl_color_node_expand):
+       * src/label-barcode.c: (draw_object):
+       * src/label-box.c: (draw_object), (draw_shadow):
+       * src/label-ellipse.c: (draw_object), (draw_shadow):
+       * src/label-line.c: (draw_object), (draw_shadow):
+       * src/label-text.c: (draw_object), (draw_shadow):
+       * src/wdgt-mini-preview.c: (draw_shadow), (draw_labels):
+       * src/wdgt-rotate-label.c: (drawingarea_update):
+               Some cleanup to color related code.
+
+2007-04-30  Jim Evins  <evins@snaught.com>
+
+       * src/label.h:
+               Added glLabelRegion structure type.
+       * src/label-object.c: (gl_label_object_get_extent):
+       * src/label-object.h:
+               Modified gl_label_object_get_extent() to fill in a glLabelRegion struct.
+       * src/view.h:
+       * src/view.c: (gl_view_update_region), (draw_select_region_layer),
+       (gl_view_select_region), (gl_view_align_selection_left),
+       (gl_view_align_selection_right), (gl_view_align_selection_hcenter),
+       (gl_view_align_selection_top), (gl_view_align_selection_bottom),
+       (gl_view_align_selection_vcenter),
+       (gl_view_center_selection_horiz), (gl_view_center_selection_vert),
+       (gl_view_move_selection), (gl_view_can_selection_text),
+       (motion_notify_event_cb), (button_press_event_cb),
+       (button_release_event_cb):
+               - Reconcile with new gl_label_object_get_extent() API.
+               - Use glLabelRegion for view->select_region.
+               - Added gl_view_update_region() to clip updates to region.
+               - Use gl_view_update_region() during manipulation of view->select_region.
+
+2007-04-26  Jim Evins  <evins@snaught.com>
+
+       * src/mini-preview-pixbuf.c: (draw_paper), (draw_label_outlines),
+       (draw_label_outline):
+       * src/print.c: (print_crop_marks), (draw_outline):
+       * src/view-object.c: (gl_view_object_draw_handles):
+       * src/view.c: (draw_bg_layer), (draw_grid_layer),
+       (draw_markup_layer), (draw_fg_layer), (draw_select_region_layer):
+       * src/wdgt-mini-preview.c: (draw_paper), (draw_labels):
+       * src/wdgt-rotate-label.c: (drawingarea_update):
+               Added defines for various magic numbers.
+
+2007-04-25  Jim Evins  <evins@snaught.com>
+
+       * src/label-text.c: (get_size), (draw_object), (draw_shadow):
+               Scale text down.  Cairo seems to render text too large.
+
+2007-04-25  Jim Evins  <evins@snaught.com>
+
+       * src/view.h:
+       * src/view.c: (gl_view_update), (expose_cb),
+       (motion_notify_event_cb), (button_press_event_cb),
+       (button_release_event_cb):
+               - Try not to let updates get backed up.
+               - Grab pointer when doing any drag operations.
+
+2007-04-11  Jim Evins  <evins@snaught.com>
+
+       * src/cairo-label-path.c: (gl_cairo_label_path),
+       (gl_cairo_rect_label_path), (gl_cairo_round_label_path),
+       (gl_cairo_cd_label_path):
+       * src/cairo-label-path.h:
+       * src/mini-preview-pixbuf.c: (draw_paper), (draw_label_outlines),
+       (draw_label_outline):
+       * src/print.c: (draw_outline), (clip_to_outline):
+       * src/view.c: (draw_bg_layer), (draw_fg_layer):
+       * src/wdgt-mini-preview.c: (draw_labels):
+       * src/wdgt-rotate-label.c: (drawingarea_update):
+               Modified to universally use gl_cairo_label_path() to create paths
+               for labels.  Added shadow to mini preview in rotate widget.
+
+2007-04-10  Jim Evins  <evins@snaught.com>
+
+       * libglabels/template.h:
+       * libglabels/template.c: (gl_template_get_name_list_unique),
+       (gl_template_get_name_list_all), (gl_template_from_name):
+               Modified libglabels to allow you to get a list of all template names
+               including all aliases or just a list of primary names of each unique
+               template.
+       * src/Makefile.am:
+       * src/file.c: (gl_file_properties):
+       * src/glabels.c: (main):
+       * src/mini-preview-pixbuf-cache.h:
+       * src/mini-preview-pixbuf-cache.c:
+       * src/wdgt-media-select.c: (gl_wdgt_media_select_construct),
+       (filter_changed_cb), (load_list):
+               Added mini-preview pixbuf cache, so that only one mini-preview is
+               needed for a unique template and gets reused for all aliases.  These
+               pixbufs will also live for the life of the program so they are not
+               rebuilt everytime a new label dialog is invoked.
+       * src/mini-preview-pixbuf.c: (draw_paper),
+       (draw_rect_label_outline), (draw_round_label_outline),
+       (draw_cd_label_outline):
+               Removed some comment artifacts.
+
+2007-04-04  Jim Evins  <evins@snaught.com>
+
+       * src/mini-preview-pixbuf.c: (gl_mini_preview_pixbuf_new),
+       (draw_paper), (draw_label_outlines), (draw_rect_label_outline),
+       (draw_round_label_outline), (draw_cd_label_outline):
+       * src/wdgt-media-select.c: (load_list):
+       * src/wdgt-rotate-label.c: (draw_cd_label_outline):
+               Cosmetic enhancments to mini previews.
+
+2007-04-04  Jim Evins  <evins@snaught.com>
+
+       * src/ui-property-bar.c: (gl_ui_property_bar_finalize),
+       (gl_ui_property_bar_construct):
+               Save copy of GladeXML tree so that we don't lose tooltips.
+
+2007-04-02  Jim Evins  <evins@snaught.com>
+
+       * src/merge-properties-dialog.c:
+       * src/new-label-dialog.c:
+       * src/object-editor.c:
+       * src/prefs-dialog.c:
+       * src/print-op.c:
+       * src/template-designer.c:
+       * src/ui-property-bar.c:
+       * src/wdgt-media-select.c:
+       * src/wdgt-rotate-label.c:
+               Fixed several memory leaks.
+
+2007-04-01  Jim Evins  <evins@snaught.com>
+
+       * src/label-text.c: (gl_label_text_init), (copy),
+       (gl_label_text_set_lines), (buffer_changed_cb), (get_size),
+       (set_font_family), (set_font_size), (set_font_weight),
+       (set_font_italic_flag), (set_text_alignment),
+       (set_text_line_spacing):
+               Cache object size, so that expensive extent calculations are only done
+               when needed.
+
+2007-03-30  Jim Evins  <evins@snaught.com>
+
+       * src/prefs-model.c: (gl_prefs_model_load_settings):
+               Default to an unlimited list of recent documents, since this parameter
+               seems to be pre-filter anyway.
+
+2007-03-30  Jim Evins  <evins@snaught.com>
+
+       * src/label-box.c: (draw_shadow):
+       * src/label-ellipse.c: (draw_shadow):
+               Added missing shadow fill.
+       
+2007-03-28  Jim Evins  <evins@snaught.com>
+
+       * src/ui-commands.c: (gl_ui_cmd_file_print):
+               Unreferencing the print operation sometimes crashes.  Just don't do it
+               right now.
+
+2007-03-28  Jim Evins  <evins@snaught.com>
+
+       * src/print-op.c: (gl_print_op_construct),
+       (gl_print_op_get_settings), (gl_print_op_set_settings),
+       (gl_print_op_free_settings), (create_custom_widget_cb):
+       * src/print-op.h:
+       * src/ui-commands.c: (gl_ui_cmd_file_print):
+       * src/window.c: (gl_window_init):
+       * src/window.h:
+               Save print settings and custom settings between print operations
+               on the same window.
+
+2007-03-24  Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-image-page.c:
+       (gl_object_editor_prepare_image_page),
+       (gl_object_editor_set_image), (img_selection_changed_cb):
+               Workaround for GtkFileChooserButton bug # 327243.  This the root
+               cause for gLabels bug # 1192884.  I have actually observed 3 delayed
+               "selection-changed" signals -- the first 2 return NULL -- this is
+               what caused the image to reset to the default followed by setting
+               it back to the original image, trying to fit it into a new bounding
+               box.  This sequence of events is much more evident with the new
+               cairo rendering.
+
+2007-03-23  Jim Evins  <evins@snaught.com>
+
+       Merged all changes from experimental cairo branch to trunk.
+       Trunk no longer depends on libgnomecanvas or libgnomeprint[ui].
+
+2007-03-23  Jim Evins  <evins@snaught.com>
+
+       * src/label-object.h:
+       * src/label-object.c: (gl_label_object_class_init),
+       (gl_label_object_get_raw_size), (gl_label_object_get_size):
+               Created "get_raw_size" method.
+       * src/label-barcode.c: (get_size):
+       * src/xml-label.c: (xml_create_object_text),
+       (xml_create_object_barcode):
+               Use new "get_raw_size" method on label-objects when apropos.
+       * src/label-text.h:
+       * src/label-text.c: (get_size), (draw_object), (draw_shadow),
+       (auto_shrink_font_size):
+               Added "auto shrink" functionality back.
+
+2007-03-19  Jim Evins  <evins@snaught.com>
+
+       * src/label-text.c: (draw_object), (draw_shadow):
+               Don't use negative scales in workaround from previous commit.
+       
+
+2007-03-18  Jim Evins  <evins@snaught.com>
+
+       * src/xml-label.c:
+               Forgot to remove include of xml-lable-191 in previous commit.
+       * src/label-text.c: (get_size), (draw_object), (draw_shadow):
+               Workaround for pango Bug #341481.  Render text at device scale,
+               and scale font size accordingly.  Also, don't do any hinting.
+
+2007-03-18  Jim Evins  <evins@snaught.com>
+
+       * src/cairo-ellipse-path.c:
+       * src/cairo-ellipse-path.h:
+               Forgot to add these new files during last mass commit.
+
+2007-03-18  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/xml-label-191.c:
+       * src/xml-label-191.h:
+               Removed -- Very buggy.  Version 1.91 is a very old "unstable" version,
+               so there is no need to keep compatability.
+       * src/base64.c:
+       * src/bc-iec16022.c:
+       * src/cairo-label-path.c:
+       * src/cairo-label-path.h:
+       * src/cairo-markup-path.c:
+       * src/color.c:
+       * src/debug.c:
+       * src/file.c:
+       * src/glabels-batch.c:
+       * src/glabels.c:
+       * src/label-barcode.c:
+       * src/label-box.c:
+       * src/label-ellipse.c:
+       * src/label-image.c:
+       * src/label-line.c:
+       * src/label-object.c:
+       * src/label-object.h:
+       * src/label-text.c:
+       * src/label.c:
+       * src/label.h:
+       * src/merge-properties-dialog.c:
+       * src/merge.c:
+       * src/new-label-dialog.c:
+       * src/object-editor-bc-page.c:
+       * src/object-editor-data-page.c:
+       * src/object-editor-edit-page.c:
+       * src/object-editor-fill-page.c:
+       * src/object-editor-image-page.c:
+       * src/object-editor-line-page.c:
+       * src/object-editor-private.h:
+       * src/object-editor-shadow-page.c:
+       * src/object-editor-text-page.c:
+       * src/object-editor.c:
+       * src/pixbuf-cache.c:
+       * src/print-op.c:
+       * src/print.c:
+       * src/recent.c:
+       * src/stock.c:
+       * src/template-designer.c:
+       * src/text-node.c:
+       * src/ui-property-bar.c:
+       * src/ui.c:
+       * src/view-barcode.c:
+       * src/view-box.c:
+       * src/view-ellipse.c:
+       * src/view-image.c:
+       * src/view-line.c:
+       * src/view-object.c:
+       * src/view-object.h:
+       * src/view-text.c:
+       * src/view.c:
+       * src/wdgt-media-select.c:
+       * src/wdgt-print-copies.c:
+       * src/wdgt-print-merge.c:
+       * src/window.c:
+       * src/xml-label-04.c:
+       * src/xml-label.c:
+               Many changes, including:
+               - Move draw methods from view-*() to label-*().
+               - Use same drawing code for on screen view and printing.
+               - Fix all issues exposed with '-Wall -Werror'.
+
+2007-03-14  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/cairo-handle-path.c:
+       * src/cairo-handle-path.h:
+       * src/cairo-object-path.c:
+       * src/cairo-object-path.h:
+               Removed cairo-handle-path.[ch] and cairo-object-path.[ch].
+       * src/view-barcode.c: (gl_view_barcode_class_init), (draw_object),
+       (object_at):
+       * src/view-box.c: (gl_view_box_class_init), (draw_object),
+       (draw_shadow), (object_at):
+       * src/view-ellipse.c: (gl_view_ellipse_class_init),
+       (create_ellipse_path), (draw_object), (draw_shadow), (object_at):
+       * src/view-image.c: (gl_view_image_class_init), (draw_object),
+       (object_at):
+       * src/view-line.c: (gl_view_line_class_init), (draw_object),
+       (draw_shadow), (object_at):
+       * src/view-object.c: (gl_view_object_draw), (gl_view_object_at),
+       (create_handle_path), (gl_view_object_draw_handles),
+       (gl_view_object_handle_at):
+       * src/view-object.h:
+       * src/view-text.c: (gl_view_text_class_init), (draw_object),
+       (draw_shadow), (object_at):
+       * src/view.c: (motion_notify_event_cb), (button_press_event_cb):
+               Some restructuring of new code.
+
+2007-03-12  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/cairo-object-path.c:
+       * src/view-barcode.c:
+       * src/view-barcode.h:
+       * src/view.c:
+               Added barcode object support to view.
+
+2007-03-12  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/view-text.h:
+       * src/view-text.c:
+       * src/view.c:
+       * src/cairo-object-path.c:
+       * src/cairo-object-path.h:
+       * src/view-box.c:
+       * src/view-ellipse.c:
+       * src/view-image.c:
+       * src/view-line.c:
+       * src/view-object.c:
+       * src/view-object.h:
+               Added text object support to view.  Added object_at method to all
+               view_objects.
+
+2007-03-11  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/cairo-object-path.c: (gl_cairo_object_path),
+       (gl_cairo_image_object_path):
+       * src/view-image.c: (gl_view_image_class_init),
+       (gl_view_image_finalize), (gl_view_image_new),
+       (update_editor_from_label_cb), (draw),
+       (gl_view_image_get_create_cursor),
+       (gl_view_image_create_button_press_event),
+       (gl_view_image_create_motion_event),
+       (gl_view_image_create_button_release_event):
+       * src/view-image.h:
+       * src/view.c: (gl_view_construct), (gl_view_object_create_mode),
+       (selection_received_cb), (motion_notify_event_cb),
+       (button_press_event_cb), (button_release_event_cb):
+               Added image object support to view.
+
+2007-03-11  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/cairo-object-path.c: (gl_cairo_object_path),
+       (gl_cairo_line_object_path):
+       * src/view-line.c: (gl_view_line_class_init), (gl_view_line_new),
+       (update_object_from_editor_cb), (update_editor_from_object_cb),
+       (update_editor_from_label_cb), (draw),
+       (gl_view_line_get_create_cursor),
+       (gl_view_line_create_button_press_event),
+       (gl_view_line_create_motion_event),
+       (gl_view_line_create_button_release_event):
+       * src/view-line.h:
+       * src/view-object.c: (gl_view_object_resize_event):
+       * src/view.c: (gl_view_construct), (gl_view_object_create_mode),
+       (selection_received_cb), (motion_notify_event_cb),
+       (button_press_event_cb), (button_release_event_cb):
+               Added line object support to view.
+       * src/cairo-handle-path.c:
+               Made handles slightly larger.
+
+
+2007-03-11  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/cairo-handle-path.c:
+       * src/cairo-label-path.c: (gl_cairo_rect_label_path),
+       (gl_cairo_round_label_path), (gl_cairo_cd_label_path):
+       * src/cairo-markup-path.c: (gl_cairo_markup_margin_rect_path),
+       (gl_cairo_markup_margin_round_path),
+       (gl_cairo_markup_margin_cd_path), (gl_cairo_markup_circle_path):
+       * src/cairo-object-path.c: (gl_cairo_object_path),
+       (gl_cairo_ellipse_object_path):
+       * src/label-object.c: (gl_label_object_rotate):
+       * src/view-box.c:
+       * src/view-box.h:
+       * src/view-ellipse.c: (gl_view_ellipse_class_init),
+       (gl_view_ellipse_new), (update_object_from_editor_cb),
+       (update_editor_from_object_cb), (update_editor_from_label_cb),
+       (draw), (gl_view_ellipse_get_create_cursor),
+       (gl_view_ellipse_create_button_press_event),
+       (gl_view_ellipse_create_motion_event),
+       (gl_view_ellipse_create_button_release_event):
+       * src/view-ellipse.h:
+       * src/view-object.c:
+       * src/view-object.h:
+       * src/view.c: (gl_view_construct), (gl_view_object_create_mode),
+       (select_object_real), (selection_received_cb),
+       (motion_notify_event_cb), (button_press_event_cb),
+       (button_release_event_cb):
+       * src/view.h:
+               Added ellipse object support to view.  Plus other cleanup.
+
+2007-03-11  Jim Evins  <evins@snaught.com>
+
+       * src/view-box.h:
+       * src/view-box.c: (gl_view_box_get_create_cursor),
+       (gl_view_box_create_button_press_event),
+       (gl_view_box_create_motion_event),
+       (gl_view_box_create_button_release_event):
+       * src/view-object.c: (gl_view_object_set_view),
+       (gl_view_object_handle_at):
+       * src/view.h:
+       * src/view.c: (gl_view_arrow_mode), (gl_view_object_create_mode),
+       (motion_notify_event_cb), (button_press_event_cb),
+       (button_release_event_cb), (key_press_event_cb):
+               Added creation code for box object.
+
+2007-03-09  Jim Evins  <evins@snaught.com>
+
+       * src/view-object.c: (gl_view_object_resize_event):
+       * src/view-object.h:
+       * src/view.c: (motion_notify_event_cb):
+               Fix bugs with resizing transformed objects.
+       * src/cairo-handle-path.c: (gl_cairo_handle_path):
+       * src/cairo-object-path.c: (gl_cairo_object_path):
+       * src/cairo-object-path.h:
+       * src/label-object.c: (gl_label_object_init),
+       (gl_label_object_dup), (gl_label_object_get_extent),
+       (gl_label_object_flip_horiz), (gl_label_object_flip_vert),
+       (gl_label_object_rotate), (gl_label_object_set_matrix),
+       (gl_label_object_get_matrix):
+       * src/label-object.h:
+       * src/print.c: (draw_object):
+       * src/view-box.c:
+       * src/view-highlight.c:
+       * src/view-highlight.h:
+       * src/xml-label-191.c: (xml191_parse_object):
+       * src/xml-label.c: (xml_parse_affine_attrs),
+       (xml_create_affine_attrs):
+               Replace libart affine matrices with cairo matrices.
+
+2007-03-08  Jim Evins  <evins@snaught.com>
+
+       * src/view-object.h:
+       * src/view.c: (gl_view_update), (motion_notify_event_cb):
+       * src/view-object.c: (gl_view_object_handle_at),
+       (gl_view_object_resize_event):
+               Added resize code -- still a bit buggy.
+       
+2007-03-07  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/cairo-handle-path.c:
+       * src/cairo-handle-path.h:
+       * src/view-box.c: (gl_view_box_new):
+       * src/view-object.c: (gl_view_object_set_object),
+       (gl_view_object_draw_handles), (gl_view_object_handle_at):
+       * src/view-object.h:
+       * src/view.c: (draw_highlight_layer), (select_object_real),
+       (unselect_object_real), (view_handle_at), (motion_notify_event_cb),
+       (button_press_event_cb), (button_release_event_cb),
+       (key_press_event_cb):
+       * src/view.h:
+               Added beginnings of object resize handles.
+
+2007-03-07  Jim Evins  <evins@snaught.com>
+
+       * src/view.h:
+       * src/view.c: (gl_view_init), (gl_view_arrow_mode),
+       (gl_view_object_create_mode), (motion_notify_event_cb),
+       (button_press_event_cb), (button_release_event_cb),
+       (key_press_event_cb):
+               Added move selection support.
+
+2007-03-05  Jim Evins  <evins@snaught.com>
+
+       * src/cairo-object-path.c: (gl_cairo_object_path):
+       * src/view-object.c: (gl_view_object_draw),
+       (gl_view_object_draw_highlight):
+       * src/view.c: (view_object_at), (motion_notify_event_cb),
+       (button_press_event_cb), (button_release_event_cb):
+               Additional refinements to select logic.
+
+2007-03-05  Jim Evins  <evins@snaught.com>
+
+       * src/view.h:
+       * src/view.c: (gl_view_init), (gl_view_construct),
+       (label_changed_cb), (draw_layers), (draw_select_region_layer),
+       (gl_view_select_region), (object_at), (motion_notify_event_cb),
+       (button_press_event_cb), (button_release_event_cb):
+               Added initial select region support and context menu.
+
+2007-03-04  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+       * src/Makefile.am:
+       * src/debug.c:
+       * src/debug.h:
+       * src/file.c:
+       * src/label.c:
+       * src/label.h:
+       * src/print-op.c:
+       * src/print.c:
+       * src/ui-commands.c:
+       * src/view-box.c:
+       * src/view-box.h:
+       * src/view-object.c:
+       * src/view-object.h:
+       * src/view.c:
+       * src/view.h:
+       * src/wdgt-print-copies.c:
+       * src/wdgt-print-merge.c:
+       * src/xml-label.c:
+               Initial port to a raw Cairo canvas.  This removes all remaining
+               dependencies on libgnomecanvas and libgnomeprint[ui].  Basically
+               the view is becoming a canvas widget in its own right.  Still needs
+               a lot of work.
+       * src/cairo-label-path.c:
+       * src/cairo-label-path.h:
+       * src/cairo-markup-path.c:
+       * src/cairo-markup-path.h:
+       * src/cairo-object-path.c:
+       * src/cairo-object-path.h:
+               New files to support cairo canvas.
+       * src/canvas-hacktext.c:
+       * src/canvas-hacktext.h:
+               Removed.
+
+2007-02-18  Jim Evins  <evins@snaught.com>
+
+       * src/bc.h:
+               GNOME_FONT_BOOK changed to PANGO_WEIGHT_NORMAL.
+
+2007-02-14  Jim Evins  <evins@snaught.com>
+
+       * src/base64.c:
+       * src/base64.h:
+       * src/bc-gnubarcode.c:
+       * src/bc-gnubarcode.h:
+       * src/bc-postnet.c:
+       * src/bc-postnet.h:
+       * src/bc.c:
+       * src/bc.h:
+       * src/canvas-hacktext.c:
+       * src/canvas-hacktext.h:
+       * src/debug.c:
+       * src/debug.h:
+       * src/file.c:
+       * src/file.h:
+       * src/glabels.c:
+       * src/hig.h:
+       * src/label-barcode.c:
+       * src/label-barcode.h:
+       * src/label-box.c:
+       * src/label-box.h:
+       * src/label-ellipse.c:
+       * src/label-ellipse.h:
+       * src/label-image.c:
+       * src/label-image.h:
+       * src/label-line.c:
+       * src/label-line.h:
+       * src/label-object.c:
+       * src/label-object.h:
+       * src/label-text.c:
+       * src/label-text.h:
+       * src/label.c:
+       * src/label.h:
+       * src/merge-evolution.c:
+       * src/merge-evolution.h:
+       * src/merge-init.c:
+       * src/merge-init.h:
+       * src/merge-properties-dialog.c:
+       * src/merge-properties-dialog.h:
+       * src/merge-text.c:
+       * src/merge-text.h:
+       * src/merge-vcard.c:
+       * src/merge-vcard.h:
+       * src/merge.c:
+       * src/merge.h:
+       * src/mini-preview-pixbuf.h:
+       * src/new-label-dialog.c:
+       * src/new-label-dialog.h:
+       * src/object-editor-bc-page.c:
+       * src/object-editor-data-page.c:
+       * src/object-editor-edit-page.c:
+       * src/object-editor-fill-page.c:
+       * src/object-editor-image-page.c:
+       * src/object-editor-line-page.c:
+       * src/object-editor-lsize-page.c:
+       * src/object-editor-position-page.c:
+       * src/object-editor-private.h:
+       * src/object-editor-size-page.c:
+       * src/object-editor-text-page.c:
+       * src/object-editor.c:
+       * src/object-editor.h:
+       * src/pixbuf-cache.c:
+       * src/pixbuf-cache.h:
+       * src/prefs-dialog.c:
+       * src/prefs-dialog.h:
+       * src/prefs-model.c:
+       * src/prefs-model.h:
+       * src/prefs.c:
+       * src/prefs.h:
+       * src/print-op.c:
+       * src/stock.c:
+       * src/stock.h:
+       * src/template-designer.c:
+       * src/text-node.c:
+       * src/text-node.h:
+       * src/ui-commands.c:
+       * src/ui-commands.h:
+       * src/ui-property-bar.c:
+       * src/ui-property-bar.h:
+       * src/ui-sidebar.c:
+       * src/ui-sidebar.h:
+       * src/ui-util.c:
+       * src/ui-util.h:
+       * src/ui.c:
+       * src/ui.h:
+       * src/util.c:
+       * src/util.h:
+       * src/view-barcode.c:
+       * src/view-barcode.h:
+       * src/view-box.c:
+       * src/view-box.h:
+       * src/view-ellipse.c:
+       * src/view-ellipse.h:
+       * src/view-highlight.c:
+       * src/view-highlight.h:
+       * src/view-image.c:
+       * src/view-image.h:
+       * src/view-line.c:
+       * src/view-line.h:
+       * src/view-object.c:
+       * src/view-object.h:
+       * src/view-text.c:
+       * src/view-text.h:
+       * src/view.c:
+       * src/view.h:
+       * src/wdgt-chain-button.c:
+       * src/wdgt-chain-button.h:
+       * src/wdgt-media-select.c:
+       * src/wdgt-mini-preview.c:
+       * src/wdgt-print-copies.c:
+       * src/wdgt-print-copies.h:
+       * src/wdgt-print-merge.c:
+       * src/wdgt-print-merge.h:
+       * src/wdgt-rotate-label.c:
+       * src/window.h:
+       * src/xml-label-04.c:
+       * src/xml-label-04.h:
+       * src/xml-label-191.c:
+       * src/xml-label-191.h:
+       * src/xml-label.c:
+       * src/xml-label.h:
+
+       Assorted superficial cleanup.  Including:
+       - Use G_DEFINE_TYPE for all objects.
+       - Reconcile style of all class initializer functions
+       - Reconcile style of all finalize functions
+       - Add emacs mode line to all source files
+               
+2007-02-06  Jim Evins  <evins@snaught.com>
+
+Assorted cleanup and removal of deprecated items.
+       
+       * src/splash.c:
+       * src/splash.h:
+       * src/Makefile.am:
+               Removed annoying splash screen.
+       * src/glabels-batch.c: (main):
+       * src/glabels.c: (main):
+               Converted from popt to GOption.
+       * src/object-editor-shadow-page.c:
+       (gl_object_editor_set_shadow_state):
+               Removed deprecated method on GtkToggleButton.
+       * src/ui-commands.c: (gl_ui_cmd_help_about):
+               Removed dependency on libgnomui/qnome-url.h.
+       * src/template-designer.c:
+               Removed dependency on libgnome/gnome-program.h.
+       
+
+2007-02-04  Jim Evins  <evins@snaught.com>
+
+       * src/color.c:
+       * src/color.h:
+       * src/prefs-model.c:
+       * src/print.c: (draw_text_object):
+       * src/wdgt-mini-preview.c: (gl_wdgt_mini_preview_construct):
+               Removed GnomeCanvas artifacts from color.[ch] and related modules.
+
+2007-02-04  Jim Evins  <evins@snaught.com>
+
+       * src/wdgt-mini-preview.c:
+       * src/wdgt-mini-preview.h:
+               Ported widget from GnomeCanvas to Cairo.
+
+2007-02-03  Jim Evins  <evins@snaught.com>
+
+       * data/glade/template-designer.glade:
+       * src/template-designer.c:
+       * src/template-designer.h:
+               Ported GnomeDruid to GtkAssistant.  Since libglade does not
+               yet support the GtkAssistant and we derive directly from
+               the Assistant, the pages are layed out in a GtkNotebook in
+               the glade description -- we then append each page to the
+               assistant.
+
+2007-01-25  Jim Evins  <evins@snaught.com>
+
+       * data/glade/object-editor.glade:
+               Added dummy page to notebook, to prevent shadow page from
+               becoming the default current page at creation.
+       * src/view-box.c: (construct_properties_editor):
+       * src/view-ellipse.c: (construct_properties_editor):
+       * src/view-line.c: (construct_properties_editor):
+       * src/view-text.c: (construct_properties_editor):
+               Reconciled order of params.
+
+2007-01-19  Jim Evins  <evins@snaught.com>
+
+       * src/label-barcode.h:
+       * src/label-object.c: (gl_label_object_set_font_weight),
+       (gl_label_object_set_text_alignment),
+       (gl_label_object_get_font_weight),
+       (gl_label_object_get_text_alignment):
+       * src/label-object.h:
+       * src/label-text.c: (gl_label_text_instance_init), (copy),
+       (get_size), (set_font_family), (set_font_weight),
+       (set_text_alignment), (get_font_weight), (get_text_alignment):
+       * src/label-text.h:
+       * src/object-editor-text-page.c:
+       (gl_object_editor_prepare_text_page),
+       (gl_object_editor_set_font_family),
+       (gl_object_editor_set_font_weight),
+       (gl_object_editor_get_font_weight),
+       (gl_object_editor_set_text_alignment),
+       (gl_object_editor_get_text_alignment),
+       (gl_object_editor_set_text_color):
+       * src/object-editor.h:
+       * src/prefs-dialog.c: (construct_object_page),
+       (update_object_page_from_prefs), (update_prefs_from_object_page):
+       * src/prefs-model.c: (gl_prefs_model_save_settings),
+       (gl_prefs_model_load_settings):
+       * src/prefs-model.h:
+       * src/print.c: (draw_text_object):
+       * src/ui-property-bar.c: (gl_ui_property_bar_construct),
+       (reset_to_default_properties), (update_text_properties),
+       (font_bold_toggled_cb), (text_align_toggled_cb):
+       * src/ui-sidebar.c:
+       * src/util.c: (gl_util_align_to_string), (gl_util_string_to_align),
+       (gl_util_weight_to_string), (gl_util_string_to_weight),
+       (gl_util_get_font_family_list), (gl_util_font_family_list_free):
+       * src/util.h:
+       * src/view-text.c: (update_object_from_editor_cb),
+       (update_editor_from_object_cb), (draw_hacktext), (draw_cursor):
+       * src/view.c: (gl_view_set_selection_text_alignment),
+       (gl_view_set_default_text_alignment),
+       (gl_view_get_default_text_alignment):
+       * src/view.h:
+       * src/xml-label-04.c: (xml04_parse_text_props):
+       * src/xml-label-191.c: (xml191_parse_text_props):
+       * src/xml-label.c: (xml_parse_object_text),
+       (xml_parse_toplevel_span), (xml_create_object_text),
+       (xml_create_toplevel_span):
+               Converted all model internals to Pango.  GnomeFont remains in
+       view until GnomeCanvas can be replaced with a cairo-based canvas.
+       
+2007-01-17  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/hig.c:
+               Deleted hig.c.
+       * src/hig.h:
+       * src/wdgt-print-copies.c: (gl_wdgt_print_copies_get_type),
+       (gl_wdgt_print_copies_construct):
+       * src/wdgt-print-copies.h:
+       * src/wdgt-print-merge.c: (gl_wdgt_print_merge_get_type),
+       (gl_wdgt_print_merge_construct):
+       * src/wdgt-print-merge.h:
+               Removed all remaining HIG wrapper widgets.
+
+2007-01-16  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/print-dialog.c:
+       * src/print-dialog.h:
+       * src/print-op.c:
+       * src/print-op.h:
+       * src/template-designer.c: (print_test_cb):
+       * src/ui-commands.c: (gl_ui_cmd_file_print):
+       * src/print.c:
+               Renamed PrintDialog to PrintOp.  Added constructor for batch
+               printing.
+       * src/glabels-batch.c: (main):
+               Converted to use new PrintOp object for printing.
+
+2007-01-15  Jim Evins  <evins@snaught.com>
+
+       * data/glade/Makefile.am:
+       * data/glade/print-custom-widget.glade:
+       * src/print-dialog.c:
+       * src/print-dialog.h:
+       * src/print.c:
+       * src/print.h:
+       * src/template-designer.c: (print_test_cb):
+       * src/ui-commands.c: (gl_ui_cmd_file_print):
+       * src/wdgt-print-merge.c: (gl_wdgt_print_merge_get_copies):
+       * src/wdgt-print-merge.h:
+       * src/window.c: (gl_window_init):
+       * src/window.h:
+               Initial conversion to GtkPrintOperation.
+               Still to do:
+                - Remove font and other libgnomeprint[ui] from elsewhere
+                - Add batch initialization of print operation
+
+2007-01-08  Jim Evins  <evins@snaught.com>
+       * configure.in:
+               Updated dependencies.  Set version to 2.1.pre4cvs.
+
+2007-01-03  Jim Evins  <evins@snaught.com>
+
+       * src/recent-files/*
+               Removed EggRecent stuff.
+       * configure.in:
+       * src/Makefile.am:
+       * src/file.c:
+       * src/recent.c:
+       * src/recent.h:
+       * src/ui-commands.c:
+       * src/ui-commands.h:
+       * src/ui.c:
+               Ported from EggRecent to GtkRecentManager.
+       
+
+2007-01-02  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+       * iec16022-0.2.1/BUGS:
+       * iec16022-0.2.1/CHANGELOG:
+       * iec16022-0.2.1/CREDITS:
+       * iec16022-0.2.1/INSTALL:
+       * iec16022-0.2.1/LICENSE:
+       * iec16022-0.2.1/Makefile.am:
+       * iec16022-0.2.1/Makefile.dist:
+       * iec16022-0.2.1/README:
+       * iec16022-0.2.1/README.glabels:
+       * iec16022-0.2.1/TODO:
+       * iec16022-0.2.1/iec16022.1:
+       * iec16022-0.2.1/iec16022.c:
+       * iec16022-0.2.1/iec16022ecc200.c:
+       * iec16022-0.2.1/iec16022ecc200.h:
+       * iec16022-0.2.1/image.c:
+       * iec16022-0.2.1/image.h:
+       * iec16022-0.2.1/reedsol.c:
+       * iec16022-0.2.1/reedsol.h:
+       * iec16022-0.2.1/test/testsuite-example.bin:
+       * iec16022-0.2.1/test/testsuite-example.eps:
+       * iec16022-0.2.1/test/testsuite-example.hex:
+       * iec16022-0.2.1/test/testsuite-example.png:
+       * iec16022-0.2.1/test/testsuite-example.text:
+       * iec16022-0.2.1/test/testsuite.sh:
+               Include modified copy of iec16022-0.2.1 to provide encoding
+               support for datamatrix 2D barcodes.
+       * src/Makefile.am:
+       * src/bc-iec16022.c:
+       * src/bc-iec16022.h:
+       * src/bc.c:
+               Added initial datamatrix 2D barcode backend to barcode code.
+       * INSTALL:
+       * gtk-doc.make:
+               Automatic updates to later versions of these files.
+
+2006-11-28  Jim Evins  <evins@snaught.com>
+
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/avery-us-templates.xml:
+       * data/templates/categories.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/misc-us-templates.xml:
+       * data/templates/zweckform-iso-templates.xml:
+               More categorization.
+       
+2006-09-12  Jim Evins  <evins@snaught.com>
+
+       * data/dtd/glabels-2.0.dtd:
+       * data/templates/Makefile.am:
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/avery-other-templates.xml:
+       * data/templates/avery-us-templates.xml:
+       * data/templates/categories.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/misc-other-templates.xml:
+       * data/templates/zweckform-iso-templates.xml:
+       * data/glade/Makefile.am:
+       * data/glade/new-label-dialog.glade:
+       * data/glade/wdgt-media-select.glade:
+       * data/glade/wdgt-rotate-label.glade:
+       * libglabels/Makefile.am:
+       * libglabels/category.c:
+       * libglabels/category.h:
+       * libglabels/libglabels.h:
+       * libglabels/paper.c:
+       * libglabels/template.c:
+       * libglabels/template.h:
+       * libglabels/xml-category.c:
+       * libglabels/xml-category.h:
+       * libglabels/xml-template.c:
+               Added support for category meta data.
+       * src/Makefile.am:
+       * src/file.c:
+       * src/mini-preview-pixbuf.c:
+       * src/mini-preview-pixbuf.h:
+       * src/new-label-dialog.c:
+       * src/new-label-dialog.h:
+       * src/wdgt-media-select.c:
+       * src/wdgt-media-select.h:
+       * src/wdgt-rotate-label.c:
+       * src/wdgt-rotate-label.h:
+               New "new label" dialog.
+
+2006-05-27  Jim Evins  <evins@snaught.com>
+
+       * NEWS:
+       * autogen.sh:
+       * configure.in:
+               Preparation for 2.1.3.
+       * acinclude.m4:
+       * omf.make:
+       * xmldocs.make:
+               Removed.
+       
+2006-05-22  Jim Evins  <evins@snaught.com>
+
+       * src/print.c: (draw_barcode_object):
+               Don't print "Invalid barcode data" if data field is empty.  Patch provided
+               by Darren Warner <warnerd@users.sourceforge.net>.  Fixes Bug #1479839.
+       * AUTHORS:
+               Added acknowledgment for above patch.
+       * src/bc-gnubarcode.c: (gl_barcode_gnubarcode_new):
+       * src/bc-postnet.c: (postnet_code):
+               Removed "Invalid barcode data" warnings from stderr.
+       * src/view-barcode.c: (draw_barcode):
+               Draw box around barcode extent if data empty or invalid.  Center a
+               message whether the data is empty or invalid in box.
+
+2006-05-22  Jim Evins  <evins@snaught.com>
+
+       * src/print.c: (draw_text_object):
+               Check shadow state when printing text.
+
+2006-05-20  Jim Evins  <evins@snaught.com>
+
+       * src/ui-commands.c: (gl_ui_cmd_view_grid_toggle),
+       (gl_ui_cmd_view_markup_toggle):
+               Fixed crash when grid or markup have been toggled off during
+               a previous session.  Bug #1434324.
+
+2006-04-05  Jim Evins  <evins@snaught.com>
+
+       * src/object-editor.c: (gl_object_editor_set_key_names):
+               Fixed potential crash when freeing empty key list.
+
+2006-03-11  Jim Evins  <evins@snaught.com>
+
+       * src/print.c: (draw_text_object):
+       * src/view-text.c: (gl_view_text_new),
+       (construct_properties_editor), (update_object_from_editor_cb),
+       (update_editor_from_object_cb), (update_editor_from_label_cb),
+       (draw_hacktext):
+               Added shadow support to text object.
+       
+2006-02-18  Jim Evins  <evins@snaught.com>
+
+       * src/print.c: (draw_line_object):
+       * src/view-line.c: (gl_view_line_new),
+       (construct_properties_editor), (update_canvas_item_from_object_cb),
+       (update_object_from_editor_cb), (update_editor_from_object_cb),
+       (update_editor_from_label_cb):
+               Added shadow support to line object.
+
+2006-02-16  Jim Evins  <evins@snaught.com>
+
+       * src/view-box.c:
+               Comment changes.
+       * src/print.c: (draw_ellipse_object):
+       * src/view-ellipse.c: (gl_view_ellipse_new),
+       (construct_properties_editor), (update_canvas_item_from_object_cb),
+       (update_object_from_editor_cb), (update_editor_from_object_cb),
+       (update_editor_from_label_cb):
+               Added shadow support to ellipse object.
+
+2006-02-15  Jim Evins  <evins@snaught.com>
+
+       * src/label-object.c:
+               Changed default shadow offsets.
+       * src/view-box.c: (gl_view_box_new):
+               Simplified gl_view_box_new() so that is does not duplicate code
+               in update_canvas_item_from_object_cb().
+
+2006-02-07  Jim Evins  <evins@snaught.com>
+
+       * data/glade/object-editor.glade:
+               Fixed color groups of color combos.
+       * src/color.h:
+               Added default shadow color.
+       * src/object-editor.c: (gl_object_editor_construct_color_combo):
+               Added shadow color group.
+
+2006-02-06  Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-shadow-page.c:
+               Forgot to add this file.
+       * src/view-box.c: (gl_view_box_new),
+       (update_canvas_item_from_object_cb), (update_editor_from_label_cb):
+               Update limits on shadow offset spinbuttons.
+
+2006-01-19  Jim Evins  <evins@snaught.com>
+
+       * src/merge-evolution.c: (gl_merge_evolution_get_key_list):
+               Initialize key_list to NULL.
+       * data/glade/object-editor.glade:
+       * src/Makefile.am:
+       * src/color.c:
+       * src/color.h:
+       * src/label-object.c:
+       * src/label-object.h:
+       * src/object-editor-fill-page.c:
+       * src/object-editor-private.h:
+       * src/object-editor.c:
+       * src/object-editor.h:
+       * src/xml-label.c:
+               Created infrastructure for shadow support.
+       * src/view-box.c:
+       * src/print.c:
+               Initial shadow support in box object only.
+       
+2006-01-05  Jim Evins  <evins@snaught.com>
+
+       * src/merge-properties-dialog.c: (src_changed_cb):
+               Be extra paranoid before calling strcmp().
+       * src/merge.c: (gl_merge_set_src):
+               Don't make (merge == NULL) a critical error.
+
+2005-12-22  Jim Evins  <evins@snaught.com>
+
+       * src/glabels-batch.c: (main):
+               Compile warning free with gcc 4.0.
+
+2005-12-21  Jim Evins  <evins@snaught.com>
+
+       * glabels.spec.in:
+               Updated example RPM spec file.
+       
+2005-12-21  Jim Evins  <evins@snaught.com>
+
+       * NEWS:
+       * configure.in:
+               Preparation for 2.1.2.
+       
+2005-12-20  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+               Define unique G_LOG_DOMAIN for glabels.
+       * src/critical-error-handler.c: (gl_critical_error_handler_init):
+       * src/warning-handler.c: (gl_warning_handler_init),
+       (warning_handler):
+               Register for G_LOG_DOMAIN instead of NULL.
+       
+2005-12-10  Jim Evins  <evins@snaught.com>
+
+       * src/merge-evolution.c:
+       * src/merge-vcard.c:
+               Fixed indentation.
+
+2005-12-08  Jim Evins  <evins@snaught.com>
+
+       * libglabels/paper.c: (read_paper_files_from_dir):
+       * libglabels/template.c: (gl_template_register),
+       (read_template_files_from_dir):
+       * libglabels/xml-paper.c: (gl_xml_paper_read_papers_from_file),
+       (gl_xml_paper_parse_papers_doc):
+       * libglabels/xml-template.c:
+       (gl_xml_template_read_templates_from_file),
+       (gl_xml_template_parse_templates_doc),
+       (gl_xml_template_parse_template_node),
+       (xml_parse_label_rectangle_node), (xml_parse_label_round_node),
+       (xml_parse_label_cd_node), (xml_parse_layout_node),
+       (xml_parse_markup_margin_node), (xml_parse_markup_line_node),
+       (xml_parse_markup_circle_node),
+       (gl_xml_template_write_templates_to_file), (xml_create_label_node):
+       * libglabels/xml.c: (gl_xml_get_prop_length):
+               Re-classified g_warnings to g_messages.
+       * src/Makefile.am:
+       * src/glabels.c: (main):
+       * src/warning-handler.c: (gl_warning_handler_init),
+       (warning_handler):
+       * src/warning-handler.h:
+               Added warning message handler to make sure the user is
+               presented with appropriate non-fatal errors.
+       * src/critical-error-handler.c: (critical_error_handler):
+               Changed exit to abort.
+       * src/bc-gnubarcode.c: (gl_barcode_gnubarcode_new), (render_pass1):
+       * src/bc-postnet.c: (postnet_code):
+       * src/bc.c: (id_to_index), (name_to_index):
+       * src/merge.c: (gl_merge_register_backend), (gl_merge_new):
+       * src/object-editor.c: (gl_object_notebook_construct_valist):
+       * src/prefs-dialog.c: (update_locale_page_from_prefs):
+       * src/prefs.c: (gl_prefs_get_units_per_point),
+       (gl_prefs_get_units_precision), (gl_prefs_get_units_step_size),
+       (gl_prefs_get_units_string):
+       * src/print.c: (draw_outline), (clip_to_outline), (clip_punchouts):
+       * src/splash.c: (gl_splash):
+       * src/ui-commands.c: (gl_ui_cmd_help_contents):
+       * src/view-highlight.c: (gl_view_highlight_new),
+       (highlight_resizable_box_construct), (object_changed_cb),
+       (view_scale_changed_cb):
+       * src/view.c: (draw_label_layer), (draw_bg_fg_layers),
+       (draw_markup_layer), (draw_markup_margin),
+       (gl_view_object_create_mode), (canvas_event),
+       (selection_received_cb):
+       * src/wdgt-mini-preview.c: (mini_outline_list_new):
+       * src/wdgt-rotate-label.c: (mini_preview_canvas_update):
+       * src/xml-label-04.c: (gl_xml_label_04_parse),
+       (xml04_parse_media_description), (xml04_parse_text_props),
+       (xml04_parse_barcode_props):
+       * src/xml-label-191.c: (gl_xml_label_191_parse),
+       (xml191_parse_objects), (xml191_parse_object),
+       (xml191_parse_text_props), (xml191_parse_image_props),
+       (xml191_parse_barcode_props), (xml191_parse_data),
+       (xml191_parse_sheet), (xml191_parse_label), (xml191_parse_layout),
+       (xml191_parse_markup):
+       * src/xml-label.c: (gl_xml_label_open), (gl_xml_label_open_buffer),
+       (xml_doc_to_label), (xml_parse_label), (xml_parse_objects),
+       (xml_parse_object_text), (xml_parse_object_image),
+       (xml_parse_object_barcode), (xml_parse_data),
+       (xml_parse_toplevel_span), (gl_xml_label_save),
+       (xml_create_objects):
+               Re-classified g_warnings to g_messages.
+       * src/merge-evolution.c: (gl_merge_evolution_open),
+       (gl_merge_evolution_close), (gl_merge_evolution_get_record):
+               Use g_warning to output errors encountered while
+               communicating with the evolution data server
+               instead of embedding them in the data.
+       
+2005-12-08  Jim Evins  <evins@snaught.com>
+
+       * libglabels/libglabels-private.h:
+               Set G_LOG_DOMAIN
+       * libglabels/paper.c: (read_papers):
+       * libglabels/template.c: (read_templates):
+               Made appropriate warnings critical.
+       * src/Makefile.am:
+       * src/critical-error-handler.h:
+       * src/critical-error-handler.c: (gl_critical_error_handler_init),
+       (critical_error_handler):
+               Created critical error handler.
+       * src/glabels.c: (main):
+               Register critical error handler.
+       * src/merge-properties-dialog.c: (gl_merge_properties_dialog_init):
+       * src/object-editor.c: (gl_object_editor_init):
+       * src/prefs-dialog.c: (gl_prefs_dialog_init):
+       * src/template-designer.c: (gl_template_designer_init):
+       * src/ui-property-bar.c: (gl_ui_property_bar_instance_init):
+               Made appropriate warnings critical.
+
+2005-11-27  Jim Evins  <evins@snaught.com>
+
+       * src/merge-evolution.c: (gl_merge_evolution_get_key_list),
+       (gl_merge_evolution_get_primary_key),
+       (gl_merge_evolution_get_record):
+               Don't create "record_key" pseudo-key.  Don't populate
+               fields with null data.
+
+2005-11-25  Jim Evins  <evins@snaught.com>
+
+       * src/merge-evolution.c: (gl_merge_evolution_finalize),
+       (gl_merge_evolution_get_key_list), (gl_merge_evolution_open),
+       (gl_merge_evolution_get_record), (gl_merge_evolution_copy),
+       (free_field_list):
+               Query EDS for all supported fields.  Patch provided by
+               Austin Henry <ahenry@users.sourceforge.net>.
+
+2005-10-29  Jim Evins  <evins@snaught.com>
+
+       * src/glabels.c: (main):
+       * src/label-barcode.c: (gl_label_barcode_finalize):
+       * src/label-text.c: (gl_label_text_finalize), (set_font_family):
+       * src/label.c: (gl_label_instance_init), (gl_label_finalize):
+       * src/object-editor.c: (gl_object_editor_finalize):
+               Another pass at valgrinding -- plugged several memory leaks.
+       * src/view-text.c: (gl_view_text_new),
+       (update_canvas_item_from_object_cb), (draw_hacktext):
+               Commented out artifacts of edit-in-place code.
+       
+2005-10-28  Jim Evins  <evins@snaught.com>
+
+       * src/canvas-hacktext.c: (gl_canvas_hacktext_set_arg):
+               Fixed use of uninitialized variable.  Caught by
+               d binderman <dcb314@hotmail.com>.
+
+2005-10-27  Jim Evins  <evins@snaught.com>
+
+       * src/merge-evolution.c: (gl_merge_evolution_get_record):
+       * src/merge-vcard.c: (gl_merge_vcard_get_record),
+       (parse_next_vcard):
+               Additional cleanup of EDS and vcard backends.  Provided by
+               Austin Henry <ahenry@users.sourceforge.net>.
+
+2005-10-24  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * src/Makefile.am:
+       * src/merge-evolution.c:
+       * src/merge-evolution.h:
+       * src/merge-init.c: (gl_merge_init):
+       * src/merge-properties-dialog.c: (type_changed_cb):
+       * src/merge-vcard.c:
+       * src/merge-vcard.h:
+       * src/ui-commands.c: (gl_ui_cmd_help_about):
+               Added Evolution Data Server and VCard merge backends.  Original patch
+               provided by Austin Henry <ahenry@users.sourceforge.net>.
+       * configure.in:
+               Only support EDS and VCard backends if libebook is installed.  Allow
+               user to disable support, even if installed.
+       
+2005-10-24  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/avery-us-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/zweckform-iso-templates.xml:
+               Collected all template changes and submissions since last
+               release.
+
+2005-10-23  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+       * data/mime/Makefile.am:
+               Added configure options to disable update-mime-database and
+               update-desktop-database as part of the install.  Patch
+               provided by Leonardo Boshell (qhoracio@sourceforge.net).
+
+2005-10-23  Jim Evins  <evins@snaught.com>
+
+       * libglabels/xml.h:
+       * libglabels/xml.c: (gl_xml_get_prop_string),
+       (gl_xml_get_prop_i18n_string), (gl_xml_set_prop_string),
+       (gl_xml_is_node), (gl_xml_get_node_content):
+               Added new XML utility functions.
+       * libglabels/xml-paper.c:
+       * libglabels/xml-template.c:
+       * src/xml-label.c:
+               Cleanup by using new xml utilities created above.
+       * libglabels/paper.c: (gl_paper_free):
+       * src/file.c: (new_response):
+       * src/object-editor-image-page.c: (add_image_filters_to_chooser):
+       * src/pixbuf-cache.c: (gl_pixbuf_cache_add_pixbuf),
+       (gl_pixbuf_cache_get_pixbuf):
+       * src/ui-property-bar.c:
+       (gl_ui_property_bar_construct_color_combo):
+       * src/view-highlight.c: (gl_view_highlight_finalize):
+       * src/view-image.c: (update_object_from_editor_cb):
+       * src/view.c: (gl_view_finalize), (draw_bg_fg_layers),
+       (draw_bg_fg_rounded_rect), (draw_bg_fg_round), (draw_bg_fg_cd),
+       (draw_bg_fg_cd_bc), (draw_markup_layer), (draw_markup_margin),
+       (draw_markup_margin_rect), (draw_markup_margin_rounded_rect),
+       (draw_markup_margin_round), (draw_markup_margin_cd),
+       (draw_markup_margin_cd_bc):
+       * src/wdgt-mini-preview.c: (mini_outline_list_new):
+       * src/wdgt-rotate-label.c: (gl_wdgt_rotate_label_finalize):
+               Plugged various memory leaks located with valgrind.
+       * src/view-image.c: (update_canvas_item_from_object_cb):
+               Don't allow a width or height of zero when drawing pixbuf.
+
+2005-10-22  Jim Evins  <evins@snaught.com>
+
+       * libglabels/xml-paper.c:
+       * libglabels/xml-template.c:
+       * libglabels/xml.c:
+       * src/base64.c:
+       * src/bc-gnubarcode.c:
+       * src/canvas-hacktext.c:
+       * src/label-text.c:
+       * src/object-editor-data-page.c:
+       * src/print-dialog.c:
+       * src/print.c:
+       * src/recent.c:
+       * src/template-designer.c:
+       * src/text-node.c:
+       * src/ui-property-bar.c:
+       * src/ui.c:
+       * src/view-barcode.c:
+       * src/view-box.c:
+       * src/view-ellipse.c:
+       * src/view-image.c:
+       * src/view-line.c:
+       * src/view-text.c:
+       * src/view.c:
+       * src/wdgt-media-select.c:
+       * src/xml-label-04.c:
+       * src/xml-label-191.c:
+       * src/xml-label.c:
+               Modified to compile warning free with gcc-4.0.  Mostly
+               casting to change signedness of characters.  Did not
+               attack gnu-barcode library yet.
+
+2005-10-22  Jim Evins <evins@snaught.com>
+
+       * src/glabels.c: (main):
+       * src/splash.c: (gl_splash):
+               Removed some small memory leaks.
+       * gtk-doc.make:
+               Added.
+       
+2005-09-19  Jim Evins  <evins@snaught.com>
+
+       * data/glade/property-bar.glade:
+               Remove items from font_family_combo.  This prevents the
+               double entry after adding text model and list of fonts.
+       * src/ui-property-bar.c: (reset_to_default_properties):
+               Free font_family_list.
+
+2005-07-01  Jim Evins  <evins@snaught.com>
+
+       * po/it.po:
+               Updated italian translation (Daniele Medri)
+
+2005-06-26  Jim Evins  <evins@snaught.com>
+
+       * docs/libglabels/libglabels-decl-list.txt:
+               Somehow never got checked in before.
+       * docs/libglabels/libglabels.types:
+               Removed -- don't need it afterall.
+
+2005-06-20  Jim Evins  <evins@snaught.com>
+
+       * NEWS:
+               Final prep for 2.1.1 release.
+
+2005-06-20  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Final preps for 2.1.1 release.
+       * docs/libglabels/libglabels.types:
+               Somehow never got checked in before.
+       * po/POTFILES.in:
+               Bring up-to-date with recent reorg of ui code.
+               
+
+2005-06-19  Jim Evins  <evins@snaught.com>
+
+       * src/template-designer.c: (construct_layout_page):
+               Removed attempt to match background color of mini preview widget to
+               background.
+
+2005-06-17  Jim Evins  <evins@snaught.com>
+
+       * help/C/figures/merge-ex2-4.png:
+       * help/C/glabels.xml:
+               Fixed spelling error.
+
+2005-06-13  Jim Evins  <evins@snaught.com>
+
+       * help/C/figures/merge-ex1-1.png:
+       * help/C/figures/merge-ex1-2.png:
+       * help/C/figures/merge-ex1-3.png:
+       * help/C/figures/merge-ex1-4.png:
+       * help/C/figures/merge-ex2-1.png:
+       * help/C/figures/merge-ex2-2.png:
+       * help/C/figures/merge-ex2-3.png:
+       * help/C/figures/merge-ex2-4.png:
+               Added figures for document merge tutorial.
+       * help/C/glabels.xml:
+               Added document merge tutorial.
+
+2005-05-19  Jim Evins  <evins@snaught.com>
+
+       * data/glade/merge-properties-dialog.glade:
+               Fixed irregular spacing.
+       * src/merge-properties-dialog.c: (gl_merge_properties_dialog_init),
+       (gl_merge_properties_dialog_construct):
+               Set outer padding and remove separator.
+
+2005-05-18  Jim Evins  <evins@snaught.com>
+
+       * src/hig.h:
+       * src/hig.c:
+               Removed glHigDialog class.
+       * src/file.c: (gl_file_new), (create_new_dialog_widgets),
+       (gl_file_properties), (create_properties_dialog_widgets):
+       * src/prefs-dialog.h:
+       * src/prefs-dialog.c: (gl_prefs_dialog_get_type),
+       (gl_prefs_dialog_init), (gl_prefs_dialog_construct):
+       * src/print-dialog.h:
+       * src/prefs-dialog.h:
+       * src/print-dialog.c: (gl_print_dialog_get_type),
+       (gl_print_dialog_init), (gl_print_dialog_construct):
+               Replaced all instances of glHigDialog with GtkDialog.
+       
+2005-05-17  Jim Evins  <evins@snaught.com>
+
+       * src/hig.h:
+       * src/hig.c:
+               Removed HigAlert class since it is obsoleted by the GtkMessageDialog class.
+       * src/file.c: (open_response), (gl_file_open_real), (gl_file_save),
+       (save_as_response), (gl_file_close):
+               Replaced all instances of HigAlert widgets with GtkMessageDialog widgets.
+
+2005-05-15  Jim Evins  <evins@snaught.com>
+
+       * src/ui-commands.h:
+       * src/ui-util.c:
+       * src/ui-util.h:
+       * src/ui.c:
+       * src/ui.h:
+       * src/view.c:
+       * src/window.c:
+       * src/window.h:
+               A little code reformatting -- no functional changes.
+       
+2005-05-14  Jim Evins  <evins@snaught.com>
+
+       * src/Makefile.am:
+               Removed obsolete macros.
+       * src/marshal.list:
+               Added marshalling template to support new view signal: "context_menu_activate."
+       * src/view.h:
+       * src/view.c: (gl_view_class_init), (gl_view_construct),
+       (canvas_event_arrow_mode):
+               - Removed hardcoded context menus and added new signal "context_menu_activate"
+               to push this up to the uimanager.
+               - Removed merge properties and print dialogs so that they can be managed with
+               the window by the uimanager.
+       * src/merge-properties-dialog.h:
+       * src/merge-properties-dialog.c: (gl_merge_properties_dialog_new),
+       (gl_merge_properties_dialog_construct):
+               Changed calling convention of gl_merge_properties_dialog_new() to use
+               glLabel and GtkWindow instead of view to make more consistent with other
+               dialogs.
+       * src/print-dialog.h:
+       * src/print-dialog.c: (gl_print_dialog_new),
+       (gl_print_dialog_construct):
+               Removed last artifact of libbonoboui.
+       * src/ui-commands.c: (gl_ui_cmd_file_print),
+       (gl_ui_cmd_objects_merge_properties), (gl_ui_cmd_help_about):
+               Reconciled style for launching dialogs.
+       * src/ui.c: (gl_ui_new):
+               Added context menus to ui manager.
+       * src/view-object.c: (item_event_arrow_mode):
+               No longer try to select objects with right-click.
+       * src/window.h:
+       * src/window.c: (gl_window_init), (gl_window_set_label),
+       (context_menu_activate_cb):
+               Context menus and all dialogs are now managed in a consistent way in window
+               by the ui manager.
+
+2005-05-11  Jim Evins  <evins@snaught.com>
+
+       * src/window.h:
+       * src/window.c: (gl_window_init), (gl_window_destroy):
+       * src/ui.c: (gl_ui_new), (gl_ui_unref), (recent_tooltip_func):
+       * src/ui-commands.c: (gl_ui_cmd_file_open_recent):
+               Moved management of recent_view back from window.c to ui.c -- it just feels
+               better there.
+       
+2005-05-10  Jim Evins  <evins@snaught.com>
+
+       * src/window.h:
+       * src/window.c: (gl_window_init):
+       * src/ui.h:
+       * src/ui.c: (gl_ui_new), (connect_proxy_cb), (disconnect_proxy_cb),
+       (menu_item_select_cb), (menu_item_deselect_cb):
+               Added GtkStatusbar which displays menu tooltips.
+       
+2005-05-09  Jim Evins  <evins@snaught.com>
+
+       Replaced libbonoboui with GtkUIManager for creation of basic user interface menus
+       and toolbars.
+
+       * configure.in:
+       * glabels.spec.in:
+               Removed dependencies on libbonoboui.
+       * data/Makefile.am:
+       * data/ui/Makefile.am:
+       * data/ui/glabels-ui.xml:
+               Removed data/ui directory.
+       * data/glade/Makefile.am:
+       * data/property-bar.glade:
+               Added glade description of property-bar for new libglade implementation
+               of glUIPropertyBar.
+       * src/Makefile.am:
+       * src/commands.h:
+       * src/commands.c:
+       * src/tools.h:
+       * src/tools.c:
+       * src/ui-commands.h:
+       * src/ui-commands.c:
+               Replaced commands.[ch] and tools.[ch] with the single ui-commands.[ch] module
+               since the distinction between "commands" and "tools" is no longer that clear.
+       * src/file.h:
+       * src/file.c:
+               Modified to expect glWindow instead of GtkWindow.  gl_file_open_recent()
+               no longer has knowledge of eggRecent*.
+       * src/glabels.c: (main):
+               Removed libbonobo initialization and replaced bonobo_main loop with gtk_main
+               loop.
+       * src/object-editor.c: (gl_object_editor_init):
+               Make sure notebook does not respond to a "show_all" on the parent.
+       * src/recent-files/Makefile.am:
+       * src/recent-files/*.[ch]
+               Updated from latest version of libegg which now has a view based on
+               GtkUIManager.  Removed unused bonobo and gtk views.
+       * src/ui-property-bar.h:
+       * src/ui-property-bar.c:
+               New implementation based on libglade.
+       * src/ui-sidebar.h:
+       * src/ui-sidebar.c:
+               Sidebar is now simply a GtkWidget and does not expect to be a part of
+               a libbonoboui interface.
+       * src/ui-util.h:
+       * src/ui-util.c:
+       * src/ui.h:
+       * src/ui.c:
+               Converted for use with GtkUIManager.
+       * src/window.h:
+       * src/window.c:
+               Now derived from GtkWindow instead of BonoboWindow and uses GtkUIManager
+               to create menus and toolbars.
+
+2005-04-25  Jim Evins  <evins@snaught.com>
+
+       * data/templates/misc-iso-templates.xml:
+               Added Fellows 04715 template provided by Steve Saxon.
+       * AUTHORS:
+               Updated acknowledgement for above.
+
+2005-04-23  Jim Evins  <evins@snaught.com>
+
+       * src/util.c: (gl_util_combo_box_set_strings):
+               Make sure to clear model before loading a new list of strings.
+       * src/wdgt-media-select.h:
+       * src/wdgt-media-select.c: (gl_wdgt_media_select_instance_init),
+       (gl_wdgt_media_select_construct), (page_size_combo_changed_cb),
+       (template_combo_changed_cb), (prefs_changed_cb),
+       (gl_wdgt_media_select_get_name), (gl_wdgt_media_select_set_name),
+       (gl_wdgt_media_select_get_page_size),
+       (gl_wdgt_media_select_set_page_size):
+               Replaced the deprecated GtkCombo widget with the new
+               GtkComboBox.
+
+2005-04-21  Jim Evins  <evins@snaught.com>
+
+       * data/glade/template-designer.glade:
+       * src/template-designer.c: (construct_pg_size_page),
+       (pg_size_page_changed_cb), (build_template):
+               Replaced the deprecated GtkCombo widget with the new
+               GtkComboBox.
+
+2005-04-20  Jim Evins  <evins@snaught.com>
+
+       * data/glade/prefs-dialog.glade:
+       * src/prefs-dialog.c: (construct_object_page),
+       (update_object_page_from_prefs), (update_prefs_from_object_page):
+               Replaced the deprecated GtkCombo widget with the new
+               GtkComboBox.
+       
+2005-04-19  Jim Evins  <evins@snaught.com>
+
+       * data/glade/object-editor.glade:
+       * src/object-editor-bc-page.c: (gl_object_editor_prepare_bc_page),
+       (style_changed_cb), (gl_object_editor_set_bc_style),
+       (gl_object_editor_get_bc_style), (gl_object_editor_set_bc_color),
+       (gl_object_editor_get_bc_color):
+       * src/object-editor-data-page.c:
+       (gl_object_editor_prepare_data_page), (gl_object_editor_set_data),
+       (gl_object_editor_get_data):
+       * src/object-editor-edit-page.c:
+       (gl_object_editor_prepare_edit_page), (insert_button_cb):
+       * src/object-editor-fill-page.c:
+       (gl_object_editor_prepare_fill_page),
+       (gl_object_editor_set_fill_color),
+       (gl_object_editor_get_fill_color):
+       * src/object-editor-image-page.c:
+       (gl_object_editor_prepare_image_page),
+       (gl_object_editor_set_image), (gl_object_editor_get_image):
+       * src/object-editor-line-page.c:
+       (gl_object_editor_prepare_line_page),
+       (gl_object_editor_set_line_color),
+       (gl_object_editor_get_line_color):
+       * src/object-editor-private.h:
+       * src/object-editor-text-page.c:
+       (gl_object_editor_prepare_text_page),
+       (gl_object_editor_set_font_family),
+       (gl_object_editor_get_font_family),
+       (gl_object_editor_set_text_color),
+       (gl_object_editor_get_text_color):
+       * src/object-editor.c: (gl_object_editor_set_key_names):
+       * src/ui-sidebar.c:
+               In the object editor: replaced all instances of the deprecated
+               GtkCombo widget with the new GtkComboBox.
+
+2005-04-18  Jim Evins  <evins@snaught.com>
+
+       * src/stock.c:
+               Neglected to save this one in previous checkin to support
+               header cleanup.
+       
+2005-04-17  Jim Evins  <evins@snaught.com>
+
+       * libglabels/libglabels-private.h:
+       * libglabels/paper.c:
+       * libglabels/paper.h:
+       * libglabels/template.c:
+       * libglabels/template.h:
+       * libglabels/xml-paper.c:
+       * libglabels/xml-paper.h:
+       * libglabels/xml-template.c:
+       * libglabels/xml.c:
+       * libglabels/xml.h:
+       * src/base64.c:
+       * src/base64.h:
+       * src/bc-gnubarcode.c:
+       * src/bc-postnet.c:
+       * src/bc.c:
+       * src/bc.h:
+       * src/commands.c:
+       * src/debug.c:
+       * src/debug.h:
+       * src/file.c:
+       * src/file.h:
+       * src/hig.c:
+       * src/hig.h:
+       * src/label-barcode.c:
+       * src/label-box.c:
+       * src/label-ellipse.c:
+       * src/label-image.c:
+       * src/label-image.h:
+       * src/label-line.c:
+       * src/label-object.c:
+       * src/label-text.c:
+       * src/label-text.h:
+       * src/label.c:
+       * src/merge-properties-dialog.c:
+       * src/object-editor-bc-page.c:
+       * src/object-editor-data-page.c:
+       * src/object-editor-edit-page.c:
+       * src/object-editor-fill-page.c:
+       * src/object-editor-image-page.c:
+       * src/object-editor-line-page.c:
+       * src/object-editor-lsize-page.c:
+       * src/object-editor-position-page.c:
+       * src/object-editor-private.h:
+       * src/object-editor-size-page.c:
+       * src/object-editor-text-page.c:
+       * src/object-editor.c:
+       * src/object-editor.h:
+       * src/pixbuf-cache.h:
+       * src/prefs-dialog.c:
+       * src/prefs-dialog.h:
+       * src/prefs-model.c:
+       * src/prefs-model.h:
+       * src/prefs.c:
+       * src/print-dialog.c:
+       * src/print-dialog.h:
+       * src/print.c:
+       * src/print.h:
+       * src/recent.c:
+       * src/recent.h:
+       * src/splash.c:
+       * src/splash.h:
+       * src/stock.h:
+       * src/template-designer.c:
+       * src/template-designer.h:
+       * src/text-node.h:
+       * src/tools.c:
+       * src/ui-property-bar.c: (gl_ui_property_bar_construct):
+       * src/ui-sidebar.c:
+       * src/ui-util.c:
+       * src/ui.c:
+       * src/util.c:
+       * src/util.h:
+       * src/view-barcode.c:
+       * src/view-box.c:
+       * src/view-ellipse.c:
+       * src/view-highlight.c:
+       * src/view-highlight.h:
+       * src/view-image.c:
+       * src/view-line.c:
+       * src/view-object.c:
+       * src/view-object.h:
+       * src/view-text.c:
+       * src/view.c:
+       * src/view.h:
+       * src/wdgt-chain-button.c:
+       * src/wdgt-media-select.c:
+       * src/wdgt-media-select.h:
+       * src/wdgt-mini-preview.c:
+       * src/wdgt-mini-preview.h:
+       * src/wdgt-print-copies.c:
+       * src/wdgt-print-copies.h:
+       * src/wdgt-print-merge.c:
+       * src/wdgt-print-merge.h:
+       * src/wdgt-rotate-label.c:
+       * src/wdgt-rotate-label.h:
+       * src/window.c:
+       * src/window.h:
+       * src/xml-label-04.c:
+       * src/xml-label-191.c:
+       * src/xml-label.c:
+               Cleanup of header files:
+               - all header files are now stand-alone, verified by including
+                 first in corresponding "c" files
+               - replaced blanket includes of gnome, gtk, and glib with
+                 targetted includes
+       
+2005-04-16  Jim Evins  <evins@snaught.com>
+
+       * data/glade/Makefile.am:
+       * data/glade/merge-properties-dialog.glade:
+               Added merge properties dialog glade description file.
+       * src/merge-properties-dialog.h:
+       * src/merge-properties-dialog.c:
+       (gl_merge_properties_dialog_get_type),
+       (gl_merge_properties_dialog_init),
+       (gl_merge_properties_dialog_finalize),
+       (gl_merge_properties_dialog_new),
+       (gl_merge_properties_dialog_construct), (type_changed_cb),
+       (src_changed_cb), (response_cb), (load_tree),
+       (record_select_toggled_cb), (select_all_button_clicked_cb),
+       (unselect_all_button_clicked_cb):
+               Modified merge properties dialog to use libglade.  Added
+               "select all" and "unselect all" buttons.
+       * src/merge-text.c: (parse_line):
+               Handle empty lines better.
+       * src/merge.c: (gl_merge_eval_key):
+               Evaluate the key whether the record is selected or not.
+       * src/util.h:
+       * src/util.c: (gl_util_combo_box_add_text_model):
+               Since libglade does not use the gtk_combo_box_new_text()
+               constructor for GtkComboBoxes, a utility function was created
+               to add an appropriate text model to a GtkComboBox.
+       * src/view.c: (gl_view_edit_merge_props):
+               Removed unnecessary "show all's".
+
+2005-04-15  Jim Evins  <evins@snaught.com>
+
+       * po/ru.po:
+               Updated russian translation (Vitaly Lipatov)
+       * data/templates/misc-iso-templates.xml:
+               Added templates for russian business cards provided by Vitaly Lipatov.
+       * AUTHORS:
+               Updated acknowledgements for above.
+
+2005-04-15  Jim Evins  <evins@snaught.com>
+
+       * data/templates/avery-us-templates.xml:
+               Added Avery 5388 and 5389 templates provided by Peter L. Berghold.
+       * data/templates/misc-iso-templates.xml:
+               Added Ryman standard CD/DVD template, provided by Dan Clark.
+       * AUTHORS:
+               Added acknowledgements for above.
+       
+2005-04-10  Jim Evins <evins@snaught.com>
+
+       * libglabels/xml-paper.c: (gl_xml_paper_parse_paper_node):
+       * libglabels/xml-template.c: (gl_xml_template_parse_template_node),
+       (xml_parse_label_rectangle_node), (xml_parse_label_round_node),
+       (xml_parse_label_cd_node), (xml_parse_alias_node):
+       * libglabels/xml.c: (gl_xml_get_prop_double),
+       (gl_xml_get_prop_boolean), (gl_xml_get_prop_int),
+       (gl_xml_get_prop_uint), (gl_xml_get_prop_length):
+       * src/xml-label-04.c: (xml04_parse_media_description),
+       (xml04_parse_text_props), (xml04_parse_barcode_props),
+       (xml04_parse_merge_properties):
+       * src/xml-label-191.c: (xml191_parse_object),
+       (xml191_parse_text_props), (xml191_parse_barcode_props),
+       (xml191_parse_merge_fields), (xml191_parse_pixdata),
+       (xml191_parse_sheet), (xml191_parse_label), (xml191_parse_markup),
+       (xml191_parse_alias):
+       * src/xml-label.c: (xml_parse_object_text),
+       (xml_parse_object_barcode), (xml_parse_merge_fields),
+       (xml_parse_pixdata), (xml_parse_toplevel_span):
+               Make sure to use xmlFree for anything obtained from libxml
+               in case libxml and glib use different memory management
+               space.
+
+2005-04-08  Jim Evins <evins@snaught.com>
+
+       * src/util.h:
+       * src/util.c: (gl_util_combo_box_set_strings), (search_text_func),
+       (gl_util_combo_box_set_active_text):
+               Added utility functions to simplify working with GtkComboBox
+               widgets in GTK-2.6.
+       * src/ui-property-bar.h:
+       * src/ui-property-bar.c: (gl_ui_property_bar_construct),
+       (reset_to_default_properties), (update_text_properties),
+       (font_family_changed_cb):
+               Replaced deprecated GtkCombo with GtkComboBox.
+       
+       
+2005-04-03  Jim Evins <evins@snaught.com>
+
+       * src/Makefile.am:
+       * src/wdgt-image-select.h:
+       * src/wdgt-image-select.c:
+               Removed obsolete wdgt-image-select.[ch] files.
+       * libglabels/paper.c: (gl_paper_dup):
+               Fixed rename of parameter introduced during documentation
+               updates.
+       * data/glade/object-editor.glade:
+       * src/object-editor-image-page.c:
+       (gl_object_editor_prepare_image_page), (img_radio_toggled_cb),
+       (gl_object_editor_set_image), (gl_object_editor_get_image),
+       (update_preview_cb), (add_image_filters_to_chooser):
+       * src/object-editor-private.h:
+               Replaced deprecated GnomePixmapEntry with
+               GtkFileChooserButton.
+
+2005-04-02  Jim Evins <evins@snaught.com>
+
+       * src/mygal/mygal-combo-box.c: (deactivate_arrow),
+       (mygal_combo_box_popup_hide_unconditional),
+       (mygal_combo_box_popup_hide), (mygal_combo_box_popup_display),
+       (mygal_combo_toggle_pressed), (mygal_combo_box_init),
+       (mygal_combo_popup_tear_off), (mygal_combo_set_tearoff_state),
+       (mygal_combo_tearoff_bg_copy), (mygal_combo_popup_reparent),
+       (cb_tearable_button_release), (mygal_combo_box_set_tearable):
+               Renamed all internal gtk_combo functions to mygal_combo
+               to prevent namespace confusion.
+
+2005-04-02  Jim Evins <evins@snaught.com>
+
+       * src/mygal/color-palette.c: (color_palette_change_custom_color),
+       (cust_color_set), (color_palette_setup):
+       * src/mygal/color-palette.h:
+               Replaced deprecated GnomeColorPicker with GtkColorButton.
+
+2005-04-02  Jim Evins <evins@snaught.com>
+
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/enums.sgml:
+       * docs/libglabels/tmpl/paper.sgml:
+       * docs/libglabels/tmpl/xml-paper.sgml:
+       * docs/libglabels/tmpl/xml-template.sgml:
+       * libglabels/enums.h:
+       * libglabels/paper.c: (gl_paper_dup):
+       * libglabels/paper.h:
+       * libglabels/xml-paper.c:
+       * libglabels/xml-template.c:
+               More documentation updates for libglabels.
+       
+2005-03-23  Jim Evins  <evins@snaught.com>
+
+       * INSTALL:
+               Automatically updated.
+       * Makefile.am:
+       * autogen.sh:
+       * configure.in:
+       * docs/Makefile.am:
+       * docs/libglabels/Makefile.am:
+       * docs/libglabels/libglabels-docs.sgml:
+       * docs/libglabels/libglabels-sections.txt:
+       * docs/libglabels/libglabels-undocumented.txt:
+       * docs/libglabels/tmpl/enums.sgml:
+       * docs/libglabels/tmpl/libglabels-unused.sgml:
+       * docs/libglabels/tmpl/libglabels.sgml:
+       * docs/libglabels/tmpl/paper.sgml:
+       * docs/libglabels/tmpl/template.sgml:
+       * docs/libglabels/tmpl/xml-paper.sgml:
+       * docs/libglabels/tmpl/xml-template.sgml:
+       * docs/libglabels/tmpl/xml.sgml:
+               Added basic gtk-doc stuff to support documenting libglabels
+               API.
+       * libglabels/xml.c:
+               Updated function comments with gtk-doc markup.
+       * missing:
+               Removed.
+
+2005-03-22  Jim Evins  <evins@snaught.com>
+
+       Since the development version now requires gtk-2.6/gnome-2.10, I
+       have made a first pass at removing deprecations.
+
+       * configure.in:
+       * libglabels/Makefile.am:
+       * src/Makefile.am:
+               Added configure option to turn on X_DISABLE_DEPRECATED flags.
+               Also removed all remnants of HAVE_FILECHOOSER.
+       * src/file.c: (gl_file_open_real):
+               Removed code for old GtkFileSelection.
+       * libglabels/libglabels-private.h:
+       * libglabels/paper.c:
+       * libglabels/template.c:
+       * libglabels/xml-paper.c:
+       * libglabels/xml-template.c:
+       * libglabels/xml.c:
+       * src/bc.c:
+       * src/file.c:
+       * src/glabels-batch.c:
+       * src/glabels.c:
+       * src/label.c:
+       * src/merge-init.c:
+       * src/merge-properties-dialog.c:
+       * src/merge.c:
+       * src/object-editor.c:
+       * src/prefs-dialog.c:
+       * src/prefs.c:
+       * src/print-dialog.c:
+       * src/print.c:
+       * src/stock.c:
+       * src/template-designer.c:
+       * src/ui-property-bar.c:
+       * src/ui-sidebar.c:
+       * src/view-barcode.c:
+       * src/view-box.c:
+       * src/view-ellipse.c:
+       * src/view-image.c:
+       * src/view-line.c:
+       * src/view-text.c:
+       * src/view.c:
+       * src/wdgt-image-select.c:
+       * src/wdgt-media-select.c:
+       * src/wdgt-print-copies.c:
+       * src/wdgt-print-merge.c:
+       * src/wdgt-rotate-label.c:
+       * src/window.c:
+       * src/xml-label-04.c:
+       * src/xml-label-191.c:
+       * src/xml-label.c:
+               Added '#include <glib/gi18n.h>" where needed.
+               Removed any unused '#include <gnome.h>"s.
+
+2005-03-22  Jim Evins  <evins@snaught.com>
+
+       * src/commands.c: (activate_url), (gl_cmd_help_about):
+               Replaced GnomeAbout with GtkAboutDialog.  Therefore the
+               development version of glabels now depends on GTK 2.6 and
+               GNOME 2.10.
+       * configure.in:
+               Updated library dependencies.
+
+2005-02-28  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * data/templates/misc-iso-templates.xml:
+               Added 'Ednet 45021' template provided by Ali Akcaagac
+               <aliakc@web.de>.
+
+2005-02-14  Jim Evins  <evins@snaught.com>
+
+       * data/templates/avery-us-templates.xml:
+               Updated templates to use inches instead of points.
+       * src/print-dialog.c: (printer_page_new):
+               Changed packing style when adding printer selector widget.  This fixes
+               debian Bug#295274.
+
+2005-02-13  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * po/es.po:
+               Updated spanish translations. (sergio rivadero)
+
+2005-02-05  Jim Evins  <evins@snaught.com>
+
+       Some cleanup to libglabels.
+       
+       * configure.in:
+               Updated version to 2.1.1cvs.  Added generation of libglabels.pc.
+       * libglabels/libglabels.pc.in
+               Created.
+       * libglabels/enums.h
+               Created.  Currently only contains glUnitsType which provides enumerations
+               for all possible units of distance.
+       * libglabels/Makefile.am:
+               Incorporated new files enums.h and libglabels.pc[.in].
+       * libglabels/libglabels.h:
+               Include enums.h.
+       * libglabels/template.h:
+       * libglabels/template.c: (gl_template_layout_new):
+               Changed parameters nx and ny to gint from gdouble.
+       * libglabels/xml.h:
+       * libglabels/xml.c: (gl_xml_get_prop_length),
+       (gl_xml_set_prop_length), (gl_xml_set_default_units):
+               Added support for different output units.
+       * src/prefs-dialog.c: (update_locale_page_from_prefs),
+       (update_prefs_from_locale_page):
+       * src/prefs-model.c: (string_to_units), (units_to_string):
+       * src/prefs-model.h:
+       * src/prefs.c: (gl_prefs_get_units_per_point),
+       (gl_prefs_get_units_precision), (gl_prefs_get_units_step_size),
+       (gl_prefs_get_units_string):
+       * src/prefs.h:
+       * src/wdgt-media-select.c: (details_update), (get_label_size_desc):
+               Reconciled all length enumerations with the new enumerations provided
+               in libglabels/enums.h.
+
+2005-02-03  Jim Evins  <evins@snaught.com>
+
+       * po/cs.po:
+               Updated Czech translations. (David Makovský and Zbynek Mrkvick)
+       * po/it.po:
+               Updated Italian translations. (Daniele Medri)
+       * AUTHORS:
+               Updated credits to reflect above translations.
+
+
+2005-01-22  Jim Evins  <evins@snaught.com>
+
+       * MESSAGE-OF-DOOM:
+               Added.
+       * Makefile.am:
+               Added MESSAGE-OF-DOOM to EXTRA_DIST.
+       * NEWS:
+               Final prep for 2.1.0.
+       * configure.in:
+               Set version to 2.1.0.  Output MESSAGE-OF-DOOM.
+       * glabels.spec.in:
+               Added '--remove-original' flag to desktop-file-install, so that there is
+               only one menu entry.
+       
+2005-01-20  Jim Evins  <evins@snaught.com>
+
+       * data/glade/object-editor.glade:
+               - Font family entry should not be editable.
+               - img_key_entry should have sensitivity=YES, so that it follows the
+                 sensitivity of img_key_combo.
+       
+2005-01-19  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+               Give credit to Frederic Ruaudel for the color merge patches.
+
+2005-01-18  Frederic Ruaudel  <grumz@users.sf.net>
+       Add support to merge color for all other color attribute (Feature 
+       Requests item #1008635. If the data is invalid, the color used is transparent 
+       (GL_COLOR_NONE). The format     for color in merge data file are those accepted 
+       by gdk_color_parse() these include name for a color from rgb.txt, such as 
+       DarkSlateGray, or a hex specification such as #305050. File format has been 
+       changed but backward compatibility is preserved for all format. For
+       box/ellipse/line, keep attribute "line_color" for static color or replace by
+       "line_color_field" for merge data. For text/barcode objects, keep attribute
+       "color" for static color or replace by "color_field" for merge data. In the
+       edit canvas window, merged color are represented by half-transparent black
+       line/area.
+       * data/dtd/glabels-2.0.dtd:
+               Added line_color_field to line_attrs. Added color_field to 
+               Object-barcode and Span.
+       * data/glade/object-editor.glade:
+               Modify the layout of the editor to add merge possibility to color options
+       * src/color.c:
+               Fix a copy/paste error in a comment
+       * src/color.h:
+               Add default color for merge color representation in the editor canvas.
+       * src/label-barcode.c:
+       * src/object-editor-bc-page.c:
+       * src/view-barcode.c:
+               Add merge color support for barcode color.
+       * src/label-box.c:
+       * src/view-box.c:
+               Add merge color support for box border color.
+       * src/label-ellipse.c:
+       * src/view-ellipse.c:
+               Add merge color support for ellipse border color.
+       * src/label-line.c:
+       * src/view-line.c:
+               Add merge color support for line color.
+       * src/label-object.c:
+       * src/label-object.h:
+       * src/object-editor.c:
+       * src/object-editor.h:
+       * src/ui-property-bar.c:
+       * src/view.c:
+       * src/view.h:
+       * src/xml-label-04.c:
+       * src/xml-label-191.c:
+               Add support for merging to other color attribute.
+       * src/label-text.c:
+       * src/object-editor-text-page.c:
+       * src/view-text.c:
+               Add merge color support for text color.
+       * src/object-editor-fill-page.c:
+               Change a blocked handler that didn't match the good widget. Fix the type
+               of some debug message.
+       * src/object-editor-line-page.c:
+               Add merging support to line color option.
+       * src/object-editor-private.h:
+               Add variables for new widget.
+       * src/print.c:
+               Modify the draw functions to get merge data if needed.
+       * src/window.c:
+               Change the default size of the window in order to see all widget in the
+               "text style tab" of the editor.
+       * src/xml-label.c:
+               Modify the parser to record/retreive the field value for objects that need
+               "color" attribute. For box/ellipse/line, keep attribute "line_color" for 
+               static color or replace by "line_color_field" for merge data. For 
+               text/barcode objects, keep attribute "color" for static color or replace 
+               by "color_field" for merge data.
+       
+2005-01-17  Jim Evins  <evins@snaught.com>
+
+       * src/view.c: (screen_changed_cb):
+               Don't do anything if we don't have a screen.
+
+2005-01-06  Jim Evins  <evins@snaught.com>
+
+       * src/view.c: (get_home_scale):
+               Fixed bad call to gtk_widget_has_screen() -- huh?.
+
+2005-01-06  Jim Evins  <evins@snaught.com>
+
+       * data/dtd/glabels-2.0.dtd:
+               Added fill_color_field to fill_attrs.  Also added xmlns attribute to all
+               top-level elements.
+
+2005-01-06  Jim Evins  <evins@snaught.com>
+
+       * data/glade/object-editor.glade:
+               Set entries for fill and data field key dropdowns to NOT editable.
+       * src/view-box.c: (construct_properties_editor):
+       * src/view-ellipse.c: (construct_properties_editor):
+               Update object editor when label's merge property has changed.
+       * src/xml-label.c: (xml_parse_object_ellipse):
+               Completed the merge color support for the ellipse item.
+
+2005-01-06  Frederic Ruaudel  <grumz@users.sf.net>
+
+       Add support to merge color for object that have a "Fill color" attribute (Feature 
+       Requests item #1008635. If the data is invalid, the color used is transparent 
+       (GL_COLOR_NONE). The format     for color in merge data file are those accepted 
+       by gdk_color_parse() these include name for a color from rgb.txt, such as 
+       DarkSlateGray, or a hex specification such as #305050. File format has been 
+       changed but backward compatibility is preserved for all format. For box/ellipse, 
+       keep attribute "fill_color" for static  color or replace by "fill_color_field" 
+       for merge data.
+
+       * data/glade/object-editor.glade:
+               Modify "Fill" tab to add the merge key combo and convert the labels into 
+               radio button.
+       * src/color.h:
+       * src/color.c:
+               Add "glColorNode" structure and associated functions to manage it. This 
+               structure is equivalent for color than the "glTextNode". It holds the color
+               and the key field.
+       * src/label-object.h:
+       * src/label-object.c:
+       * src/label-box.c:
+       * src/label-ellipse.c:
+       * src/ui-property-bar.c:
+       * src/view.h:
+       * src/view.c:
+       * src/view-box.c:
+       * src/view-ellipse.c:
+       * src/xml-label-04.c:
+       * src/xml-label-191.c:
+               Change functions of objects that have a "fill color" attribute to use the 
+               new "glColorNode" structure. Use barcode code as example.
+       * src/Makefile.am:
+               Add the color.[ch] file to glabels_batch binary that now need support for 
+               "glColorNode".
+       * src/object-editor.h:
+       * src/object-editor.c:
+       * src/object-editor-fill-page.c:
+               Manage the new widget of the editor's "Fill" tab : key combo and radio button
+               to choose between static color or merge key. Use barcode code as example.
+       * src/object-editor-private.h:
+               Add new widget in the "_glObjectEditorPrivate" structure.
+       * src/print.c:
+               Modify the draw functions to get merge data if needed.
+       * src/xml-label.c:
+               Modify the parser to record/retreive the field value for objects that need
+               "Fill color" attribute. For box/ellipse, put attribute "fill_color" for static
+               color or "fill_color_field" for merge data.             
+       
+2005-01-04  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * data/templates/avery-iso-templates.xml:
+       * data/templates/misc-iso-templates.xml:
+       * data/templates/misc-us-templates.xml:
+               Added templates, submitted by Larry Harriman, Juan Carlos Valero, and
+               Nick Hill.
+
+2004-11-26  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * po/fr.po:
+               Updated french translations provided by Florent Morel <florent@taket.org>.
+       * src/view-barcode.c:
+       * src/view-box.c:
+       * src/view-ellipse.c:
+       * src/view-image.c:
+       * src/view-line.c:
+       * src/view-text.c:
+               Added '#include <config.h>' -- HAVE_*GETTEXT macros were not defined and
+               thus _() strings were not being translated.
+
+2004-11-14  Jim Evins  <evins@snaught.com>
+
+       * src/debug.h:
+       * src/debug.c: (gl_debug_init), (gl_debug):
+               Borrowed from gedit:  use environmental variables to select debug
+               sections.
+       * src/splash.c:
+               Removed unused include of debug.h.
+       * src/glabels.c: (main):
+               Added call to gl_debug_init(), and removed debug clutter from command line
+               options.
+       * src/glabels-batch.c: (main):
+               Added call to gl_debug_init().
+
+2004-11-13  Jim Evins  <evins@snaught.com>
+
+       Drawing and property toolbars were being initialized with the "icons and text"
+       look in Fedora Core 3.  Even though none of the buttons had any text attached to
+       them, the buttons were being sized as if they were.  This led to less real estate
+       for the property editor, leading to Bug #1064630.  The
+       
+       * data/ui/glabels-ui.xml:
+               Added explicit "look" property to both drawing and property toolbars.
+       * src/prefs-model.c: (gl_prefs_model_save_settings),
+       (gl_prefs_model_load_settings):
+       * src/prefs-model.h:
+               Removed drawing_toolbar_button_style configuration parameter.
+       * src/ui.c: (view_menu_item_toggled_cb),
+       (set_app_drawing_toolbar_style):
+               Do not attempt to adjust look property of the drawing toolbar.
+
+2004-10-28  Jim Evins  <evins@snaught.com>
+
+       * data/pixmaps/glabels-about-logo.png:
+               Updated about logo.
+       
+2004-10-28  Jim Evins  <evins@snaught.com>
+
+       * data/man/glabels.1:
+       * src/glabels-batch.c: (main):
+       * src/print.h:
+       * src/print.c: (gl_print_batch):
+
+               Added option to glabels-batch to select the first label to begin
+               printing on.
+
+2004-09-26  Jim Evins  <evins@snaught.com>
+
+       * data/desktop/glabels.desktop.in:
+               Point to app icon, "glabels.png"
+       * data/mime/glabels.keys.in:
+               Point at mime icon, "glabels-application-x-glabels.png"
+       * data/pixmaps/Makefile.am:
+               Added glabels_app_icondir.  Renamed icons.
+       * data/pixmaps/glabels.png:
+               New cleaned up app icon.  Deleted glabels-icon.png.
+       * data/pixmaps/glabels-application-x-glabels.png:
+               New mime icon.
+       * data/pixmaps/glabels-splash.png:
+               Renamed glabels-logo to glabels-splash to be more correct about role.
+       * src/glabels.c:
+       * src/template-designer.c:
+               Point at app icon, "glabels.png"
+       * src/splash.c:
+               Point at renamed splash image, "glabels-splash.png"
+
+2004-08-22  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * src/glabels-batch.c: (main):
+               Applied patch with minor mods to allow selecting merge source and
+               crop-marks on glabels-batch's command line.  Original patch provided by
+               José Dapena Paz <jdapena@igalia.com>.
+       
+2004-08-15  Jim Evins  <evins@snaught.com>
+
+       * data/desktop/glabels.desktop.in:
+               - Added encoding line
+               - Removed period from comment
+               - Fixed Terminal line, changed "0" to "false"
+               - Added semicolen to Categories line
+       * po/ja.po:
+               - Made sure desktop.in comment string above still translated properly
+
+2004-08-14  Jim Evins  <evins@snaught.com>
+
+       * libglabels/xml-paper.c: (gl_xml_paper_parse_paper_node):
+       * libglabels/xml-template.c: (gl_xml_template_parse_template_node):
+       * src/xml-label-191.c: (xml191_parse_sheet):
+               Fixed improper freeing of gettext strings.  Merged from 2.0.1.
+       * configure.in:
+               Reconciled libglabels versioning with 2.0.1.
+       
+
+2004-08-14  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Updated version to 2.1cvs.
+       
+2004-08-14  Jim Evins  <evins@snaught.com>
+
+       * po/ja.po:
+               Updated 2.0.x translation by Takeshi AIHANA <aihana@gnome.gr.jp>.
+
+2004-08-14  Jim Evins  <evins@snaught.com>
+
+       Fixes for Bug #1008181.
+
+       * src/bc.c: (gl_barcode_default_digits):
+               Make a format of zero digits, harmless.
+       * src/xml-label.c: (xml_parse_object_barcode):
+               Set default value of the format property of barcode objects to 10, not
+               zero.  This will prevent crashes when reading pre 2.0.x files.
+
+2004-08-09  Jim Evins  <evins@snaught.com>
+
+       * NEWS:
+       * TODO:
+       * help/C/glabels-C.omf:
+       * help/C/glabels.xml:
+               Brought documentation up-to-date for 2.0.0 release.
+       
+2004-08-09  Jim Evins  <evins@snaught.com>
+
+       These are hopefully the final preparations for 2.0.0.
+
+       * data/mime/Makefile.am:
+               Include glabels.xml in EXTRA_DIST.
+       * configure.in:
+               - Updated comment style.
+               - Added LIBGLABELS_VERSION_INFO macro, updated Current.
+               - Added package and version info to configuration printout
+               - Update version to 2.0.0
+       * libglabels/Makefile.am:
+               Use the new LIBGLABELS_VERSION_INFO macro.
+
+2004-08-09  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+       * glabels.spec.in:
+               Cleanup of required library macros.
+
+2004-08-08  Jim Evins  <evins@snaught.com>
+
+       * glabels.spec.in:
+               - Updated URL
+               - More specific of what to install in /usr/bin and /usr/lib
+               - Remove built mime registration files from staging directory
+
+2004-08-08  Jim Evins  <evins@snaught.com>
+
+       * data/mime/Makefile.am:
+               Fixed typo:  key_files should have been keys_files.
+
+2004-08-08  Jim Evins  <evins@snaught.com>
+
+       Reorganization of runtime data files.  Also added registration of mimetype with
+       new freedesktop.org mime database if available.
+       
+       * data/*
+               Moved files to appropriate subdirectories, creating local Makefile.am
+               in each subdirectory.
+               - Moved paper-sizes.xml and *-templates.xml to templates subdirectory.
+                 These are now installed at $datadir/glabels/templates.
+               - Moved glabels.1 to man subdirectory.
+               - Moved glabels-2.0.dtd to dtd subdirectory.
+               - Moved glabels.desktop.in to desktop subdirectory.
+               - Moved glabels.keys.in and glabels.mime to mime subdirectory.
+       * data/pixmaps/*
+               Moved "./pixmaps" to "./data/pixmaps"
+       * data/ui/*
+               Moved src/glabels-ui.xml to data/ui directory. Created Makefile.am.
+       * data/glade/*
+               Moved libglade files from src to data/glade. Created Makefile.am.
+       * Makefile.am:
+               Removed pixmaps from SUBDIRS.
+       * configure.in:
+               - Removed pixmaps from makefiles.
+               - Added makefiles for new subdirs of data.
+               - Added tests for freedesktop.org mime database.
+       * glabels.spec.in:
+               - Added tests for freedesktop.org mime database for post install and
+                 post un-install actions.
+       * libglabels/Makefile.am:
+               Moved system template files to $(datadir)/glabels/templates.
+       * libglabels/libglabels-private.h:
+               Moved system template files to $(datadir)/glabels/templates.
+       * po/POTFILES.in:
+               - Accounted for movement of ui and libglade files.
+               - Added missing .in files.
+               - Reorganized by directory.
+       * src/Makefile.am:
+               Accounted for movement of ui and libglade files.
+       * data/mime/glabels.xml.in:
+               New file for registering with freedesktop.org mime database.
+
+2004-08-07  Jim Evins  <evins@snaught.com>
+
+       * src/recent-files/*:
+               Re-synced to latest libegg/recent-files.
+       
+2004-08-07  Jim Evins  <evins@snaught.com>
+
+       * Makefile.am:
+       * configure.in:
+       * help/*
+               Renamed "./doc" directory to "./help" which contains user documentation,
+               to be more consistent with other GNOME applications.
+       
+
+2004-07-26  Jim Evins  <evins@snaught.com>
+
+       * src/merge-properties-dialog.c: (gl_merge_properties_dialog_init):
+               Corrected button order of merge properties dialog.
+
+2004-07-18  Jim Evins  <evins@snaught.com>
+
+       * data/glabels-2.0.dtd:
+       * src/bc.c: (gl_barcode_default_digits), (gl_barcode_can_freeform),
+       (gl_barcode_get_prefered_n):
+       * src/bc.h:
+       * src/label-barcode.c: (copy), (gl_label_barcode_set_props),
+       (gl_label_barcode_get_props), (get_size):
+       * src/label-barcode.h:
+       * src/object-editor-bc-page.c: (gl_object_editor_prepare_bc_page),
+       (style_changed_cb), (gl_object_editor_set_bc_style),
+       (gl_object_editor_get_bc_style):
+       * src/object-editor-data-page.c: (data_radio_toggled_cb),
+       (gl_object_editor_set_data), (gl_object_editor_get_data):
+       * src/object-editor-private.h:
+       * src/object-editor.c: (gl_object_editor_set_key_names):
+       * src/object-editor.glade:
+       * src/object-editor.h:
+       * src/print.c: (draw_barcode_object):
+       * src/view-barcode.c: (update_object_from_editor_cb),
+       (update_editor_from_object_cb),
+       (gl_view_barcode_create_event_handler), (draw_barcode):
+       * src/xml-label-04.c: (xml04_parse_barcode_props):
+       * src/xml-label-191.c: (xml191_parse_barcode_props):
+       * src/xml-label.c: (xml_parse_object_barcode),
+       (xml_create_object_barcode):
+               Added "format" attribute to barcode objects.  This attribute is used
+               to properly format freeform barcodes barcodes prior to merge data is
+               applied, so that barcodes can be accurately layed out.  This addresses
+               remaining issues of feature request #824787.  Also added an example of
+               the format in the object editor.
+
+2004-07-12  Jim Evins  <evins@snaught.com>
+
+       Various code cleanups.
+
+       * src/label-barcode.c:
+               Removed unneeded include of gnome-glyphlist.h.
+       
+       * src/label-text.c: (get_size):
+               Fixed memory leak: unref glyphlists when done with them.
+       
+       * src/object-editor-bc-page.c: (gl_object_editor_prepare_bc_page):
+       * src/object-editor-data-page.c:
+       (gl_object_editor_prepare_data_page):
+       * src/object-editor-image-page.c:
+       (gl_object_editor_prepare_image_page):
+       * src/object-editor-line-page.c:
+       (gl_object_editor_prepare_line_page):
+       * src/object-editor-lsize-page.c:
+       (gl_object_editor_prepare_lsize_page):
+       * src/object-editor-position-page.c:
+       (gl_object_editor_prepare_position_page):
+       * src/object-editor-size-page.c:
+       (gl_object_editor_prepare_size_page):
+       * src/object-editor-text-page.c:
+       (gl_object_editor_prepare_text_page):
+               Removed unneeded size groups, originally intended to keep widgets aligned.
+               Now use tables to lay these out in object-editor.glade.
+       
+       * src/print.c: (draw_text_object):
+               Fixed memory leak: unref glyphlists when done with them.
+
+       * src/view-barcode.c: (draw_barcode):
+               Fixed memory leak: unref glyphlists when done with them.
+
+       * src/view-text.c: (update_object_from_editor_cb), (draw_hacktext):
+               - Removed unneeded cast of gl_object_editor_get_text_line_spacing()s
+                 return value.
+               - Fixed memory leak: unref glyphlists when done with them.
+
+2004-07-11  Jim Evins  <evins@snaught.com>
+
+       * data/glabels-2.0.dtd:
+       * src/label-text.c: (gl_label_text_instance_init), (copy),
+       (gl_label_text_set_auto_shrink), (gl_label_text_get_auto_shrink):
+       * src/label-text.h:
+       * src/object-editor-private.h:
+       * src/object-editor-text-page.c:
+       (gl_object_editor_prepare_text_page),
+       (gl_object_editor_set_text_auto_shrink),
+       (gl_object_editor_get_text_auto_shrink):
+       * src/object-editor.c: (gl_object_editor_set_key_names):
+       * src/object-editor.glade:
+       * src/object-editor.h:
+       * src/print.c: (draw_text_object):
+       * src/view-text.c: (update_object_from_editor_cb),
+       (update_editor_from_object_cb):
+       * src/xml-label.c: (xml_parse_object_text),
+       (xml_create_object_text):
+               Added option to allow document merge to auto shrink text size to fit
+               within the text box.  The code in print.c that actually shrinks the
+               text is loosely based on a patch submitted by Mark Harrison
+               <mark.harrison@velocitynet.com.au>.  This addresses feature request
+               #661421.
+       
+2004-07-11  Jim Evins  <evins@snaught.com>
+
+       * data/glabels-2.0.dtd:
+       * libglabels/template.c: (gl_template_rect_label_type_new),
+       (gl_template_round_label_type_new),
+       (gl_template_cd_label_type_new), (gl_template_label_type_dup),
+       (template_full_page):
+       * libglabels/template.h:
+       * libglabels/xml-template.c: (xml_parse_label_rectangle_node),
+       (xml_create_label_node):
+       * pixmaps/ex-rect-size.png:
+       * src/print.c: (clip_to_outline), (clip_punchouts):
+       * src/template-designer.c: (construct_rect_size_page),
+       (rect_size_page_prepare_cb), (layout_page_prepare_cb),
+       (build_template):
+       * src/template-designer.glade:
+       * src/xml-label-191.c: (xml191_parse_label):
+               Modifications to allow separate horizontal (x_waste) and vertical (y_waste)
+               properties for rectangular labels.  Templates remain backwards compatible,
+               but this breaks the libglabels API (I don't know of anyone outside of
+               glabels using libglabels at this time -- what can I say, the program is
+               is still "unstable").  This addresses the suggestion in Feature Request
+               #976313.
+
+2004-07-05  Jim Evins  <evins@snaught.com>
+       * src/print.c: (print_crop_marks), (draw_outline):
+               Changed crop marks and label outlines to black, instead of 25% gray.
+               This addresses debian Bug #257460.
+
+2004-07-05  Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-fill-page.c: (gl_object_editor_set_fill_color):
+       * src/object-editor-line-page.c: (gl_object_editor_set_line_color):
+               Preserve "is_default" of fill and line color_combos when creating from
+               existing objects.
+
+2004-07-02  Jim Evins  <evins@snaught.com>
+
+       * data/glabels.1:
+               Created man page.  Based on page submitted by Matthew J. Lockner, however
+               it has been severely edited.
+       
+       * data/avery-other-templates.xml
+       * data/misc-other-templates.xml:
+               Started new files for predefined templates with non-standard sheet sizes.
+               These have been initially populated with the Avery 06141 and
+               OfficeMax #86112, both provided by Matthew J. Lockner.
+       
+       * data/Makefile.am:
+               Install above manpage and template files.
+       
+       * glabels.spec.in:
+               Make sure we install man pages.
+       
+       * src/glabels-batch.c:
+               Changed short form of help option to '-?' to be consistent with glabels.
+       
+       * AUTHORS:
+               Added acknowledgement for above labels.
+
+2004-07-02  Jim Evins  <evins@snaught.com>
+
+       * src/glabels.c: (main), (save_session_cb):
+               - Now include libbonoboui.h, recent.h, and file.h to provide missing
+                 prototypes.
+               - save_session_cb() now returns gboolean.
+               - Minor formatting changes.
+
+       * src/window.h:
+       * src/window.c:
+               - Now include file.h to provide missing prototype.
+               - gl_window_get_type() now returns GType, not guint.  I believe this may
+                 ultimately be cause of the segfault reported in Bug #982287, since
+                 GType is actually a gulong, which may not be compatible on other
+                 architectures (64bit) -- I cannot personally test this at this time.
+                 I was sloppy in several other xxx_get_type() functions which also
+                 returned guint -- see next group of files:
+       
+       * src/window.c: (gl_window_get_type):
+       * src/canvas-hacktext.c: (gl_canvas_hacktext_get_type):
+       * src/canvas-hacktext.h:
+       * src/hig.c: (gl_hig_alert_get_type), (gl_hig_dialog_get_type),
+       (gl_hig_category_get_type), (gl_hig_vbox_get_type),
+       (gl_hig_hbox_get_type):
+       * src/hig.h:
+       * src/label-barcode.c: (gl_label_barcode_get_type):
+       * src/label-barcode.h:
+       * src/label-box.c: (gl_label_box_get_type):
+       * src/label-box.h:
+       * src/label-ellipse.c: (gl_label_ellipse_get_type):
+       * src/label-ellipse.h:
+       * src/label-image.c: (gl_label_image_get_type):
+       * src/label-image.h:
+       * src/label-line.c: (gl_label_line_get_type):
+       * src/label-line.h:
+       * src/label-object.c: (gl_label_object_get_type):
+       * src/label-object.h:
+       * src/label-text.c: (gl_label_text_get_type):
+       * src/label-text.h:
+       * src/label.c: (gl_label_get_type):
+       * src/label.h:
+       * src/merge-properties-dialog.c:
+       (gl_merge_properties_dialog_get_type):
+       * src/merge-properties-dialog.h:
+       * src/merge-text.c: (gl_merge_text_get_type):
+       * src/merge-text.h:
+       * src/merge.c: (gl_merge_get_type):
+       * src/merge.h:
+       * src/object-editor.c: (gl_object_editor_get_type):
+       * src/prefs-dialog.c: (gl_prefs_dialog_get_type):
+       * src/prefs-dialog.h:
+       * src/prefs-model.c: (gl_prefs_model_get_type):
+       * src/prefs-model.h:
+       * src/print-dialog.c: (gl_print_dialog_get_type):
+       * src/print-dialog.h:
+       * src/template-designer.c: (gl_template_designer_get_type):
+       * src/template-designer.h:
+       * src/ui-property-bar.c: (gl_ui_property_bar_get_type):
+       * src/ui-property-bar.h:
+       * src/ui-sidebar.c: (gl_ui_sidebar_get_type):
+       * src/ui-sidebar.h:
+       * src/view-barcode.c: (gl_view_barcode_get_type):
+       * src/view-barcode.h:
+       * src/view-box.c: (gl_view_box_get_type):
+       * src/view-box.h:
+       * src/view-ellipse.c: (gl_view_ellipse_get_type):
+       * src/view-ellipse.h:
+       * src/view-highlight.c: (gl_view_highlight_get_type):
+       * src/view-highlight.h:
+       * src/view-image.c: (gl_view_image_get_type):
+       * src/view-image.h:
+       * src/view-line.c: (gl_view_line_get_type):
+       * src/view-line.h:
+       * src/view-object.c: (gl_view_object_get_type):
+       * src/view-object.h:
+       * src/view-text.c: (gl_view_text_get_type):
+       * src/view-text.h:
+       * src/view.c: (gl_view_get_type):
+       * src/view.h:
+       * src/wdgt-chain-button.c: (gl_wdgt_chain_button_get_type):
+       * src/wdgt-image-select.c: (gl_wdgt_image_select_get_type):
+       * src/wdgt-image-select.h:
+       * src/wdgt-media-select.c: (gl_wdgt_media_select_get_type):
+       * src/wdgt-media-select.h:
+       * src/wdgt-mini-preview.c: (gl_wdgt_mini_preview_get_type):
+       * src/wdgt-mini-preview.h:
+       * src/wdgt-print-copies.c: (gl_wdgt_print_copies_get_type):
+       * src/wdgt-print-copies.h:
+       * src/wdgt-print-merge.c: (gl_wdgt_print_merge_get_type):
+       * src/wdgt-print-merge.h:
+       * src/wdgt-rotate-label.c: (gl_wdgt_rotate_label_get_type):
+       * src/wdgt-rotate-label.h:
+               - Made sure all xxx_get_type functions returned GType, not guint.  This
+                 was the case in hig.[ch], window.[ch], ui-property-bar.[ch],
+                 ui-sidebar.[ch], view.[ch], wdgt-image-select.[ch],
+                 wdgt-media-select.[ch], wdgt-mini-preview.[ch], wdgt-print-copies.[ch],
+                 wdt-print-merge.[ch], and wdgt-rotate-label.[ch].  See separate
+                 window.[ch] details above for more info.
+               - Reconciled various coding style differences in all xxx_get_type()
+                 functions:
+                       * All prototypes include G_GNUC_CONST.
+                       * All prototypes specify the return value as GType, not GtkType
+                         or guint.
+                       * Info structures are all declared as "static const."
+                       * Generalized the names of type and info variables.
+                       * Miscelaneous formatting.
+
+2004-06-08  Jim Evins  <evins@snaught.com>
+
+       * src/label.c:
+       * src/label.h:
+       * src/xml-label.c:
+       * AUTHORS:
+               Don't touch compression of original file -- still defaults to 9 for
+               new files.  Original patch provided by Javier Donaire Segarra
+               (#912252 in patch tracker).
+
+2004-05-05  Jim Evins  <evins@snaught.com>
+
+       * data/glabels-2.0.dtd:
+               Broke DTD previously when adding new barcode types that contain a
+               plus sign (+).  Simply changed the BC_STYLE_TYPE entity to "CDATA"
+               to avoid the problem.
+       * data/avery-iso-templates.xml:
+       * data/zweckform-iso-templates.xml:
+       * AUTHORS:
+               Added templates for Avery 7165, Zweckform 3688, 4732, and 6021.  Templates
+               provided by Frank Altpeter.
+       * libglabels/xml-template.c: (xml_create_label_node):
+               Reordered markup and layout sub-nodes so that resulting templates will
+               validate against DTD.
+
+2004-03-13  Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-size-page.c: (gl_object_editor_prepare_size_page):
+               Changed spin callback signals from "value-changed" back to "changed."
+               This was accidentally introduced in a previous revision, and can cause
+               size changes just by selecting the size tab.
+
+2004-03-06  Jim Evins  <evins@snaught.com>
+
+       * src/view.c: (draw_grid_layer):
+               For round labels (round and cd) adjust grid so that it lines up with
+               center of label.  Also, no longer draw box around label in the grid layer,
+               it is hidden by he fg layer anyway.  Feature suggested by
+               nemolivier@free.fr.  Although the grid is aligned with the center of the
+               label, the coordinate system is still relative to the upper left corner
+               of the rectangle containing the label.
+
+2004-02-25  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Changed version to 2.0pre1cvs
+       
+       * libglabels/xml-template.c: (gl_xml_template_parse_templates_doc):
+               Removed extra xmlFreeDoc() calls upon error.  Also print the doc->URL
+               instead of doc->name fields when errors encountered.
+
+2004-02-21  Jim Evins  <evins@snaught.com>
+
+       * data/avery-iso-templates.xml:
+               Added aliases for Avery 8651.  Patch provided by Wayne Schuller.
+       
+       * glabels.spec.in:
+               Added libglabels library and include file to installed files.
+               
+       * configure.in:
+               Final prep for 1.93.3.
+
+2004-02-20  Jim Evins  <evins@snaught.com>
+
+       * src/glabels-batch.c: (main):
+               Changed key for setting output filename to GNOME_PRINT_KEY_OUTPUT_FILENAME
+               as suggested by Javier Donaire Segarra.  This addresses bug #901063.
+
+2004-02-16  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               If gtk+ >= 2.3.2 then define HAVE_FILE_CHOOSER.
+       
+       * src/Makefile.am:
+               Added HAVE_FILE_CHOOSER to INCLUDES.
+       
+       * src/file.c: (gl_file_open), (open_response), (gl_file_open_real),
+       (gl_file_save_as), (save_as_response):
+               Ported to use GtkFileChooserDialog if HAVE_FILE_CHOOSER is defined.
+
+2004-02-16  Jim Evins  <evins@snaught.com>
+
+       * src/xml-label-04.c: (xml04_parse_image_props):
+       * src/xml-label-191.c: (xml191_parse_image_props):
+       * src/xml-label.c: (xml_parse_object_image):
+               Delay setting image size until after image has been applied to new
+               object.
+       
+2004-02-15  Jim Evins  <evins@snaught.com>
+
+       * src/label-barcode.c: (gl_label_barcode_set_data),
+       (gl_label_barcode_set_props):
+               Don't emit "changed" signal, if no change actually made for these
+               methods.  Reduces number of unnecessary redraws of barcodes.
+       
+       * src/label-object.h:
+       * src/label-object.c: (gl_label_object_set_position),
+       (gl_label_object_set_position_relative), (set_size),
+       (gl_label_object_set_size),
+       (gl_label_object_set_size_honor_aspect):
+               Don't emit "changed" signal, if no change actually made for these
+               methods.
+
+2004-02-15  Jim Evins  <evins@snaught.com>
+
+       * data/glabels-2.0.dtd:
+               Added specific subtypes for various barcode types.
+       
+       * src/bc.h:
+       * src/bc.c: (id_to_index), (name_to_index), (gl_barcode_new),
+       (gl_barcode_get_styles_list), (gl_barcode_default_digits),
+       (gl_barcode_can_text), (gl_barcode_text_optional),
+       (gl_barcode_can_csum), (gl_barcode_csum_optional),
+       (gl_barcode_id_to_name), (gl_barcode_name_to_id):
+               Changed API to use a string id, rather than a fixed enumeration.  Id and
+               name are separate strings.  Added entries to backend table for specific
+               subtypes for various barcode types.
+       
+       * src/bc-postnet.h:
+       * src/bc-postnet.c: (gl_barcode_postnet_new), (postnet_code),
+       (is_length_valid):
+               Modified to conform to above API.  Now more stringent with data length
+               for various subtypes.
+       
+       * src/bc-gnubarcode.h:
+       * src/bc-gnubarcode.c: (gl_barcode_gnubarcode_new),
+       (is_length_valid), (is_length1_valid), (is_length2_valid):
+               Modified to conform to above API.  Now more stringent with data length
+               for various subtypes.
+
+       * src/label-barcode.h:
+       * src/label-barcode.c: (copy), (gl_label_barcode_set_props),
+       (gl_label_barcode_get_props), (get_size):
+               Modified to use above API for storing barcode type.
+       
+       * src/object-editor.h:
+       * src/object-editor-bc-page.c: (style_changed_cb),
+       (gl_object_editor_set_bc_style), (gl_object_editor_get_bc_style):
+               Modified to use above API for storing barcode type.
+       
+       * src/object-editor-size-page.c:
+       (gl_object_editor_prepare_size_page), (aspect_toggle_cb),
+       (w_spin_cb), (h_spin_cb), (size_reset_cb):
+               Added debug markers.
+       
+       * src/object-editor.glade:
+               Made barcode style combo's text entry  non-editable.
+       
+       * src/print.c: (draw_barcode_object):
+               Modified to use above API for barcode type.
+
+       * src/view-barcode.c: (update_object_from_editor_cb),
+       (update_editor_from_object_cb),
+       (gl_view_barcode_create_event_handler), (draw_barcode):
+               Modified to use above API for barcode type.
+       
+       * src/xml-label-04.c: (xml04_parse_barcode_props):
+       * src/xml-label-191.c: (xml191_parse_barcode_props):
+       * src/xml-label.c: (xml_parse_object_barcode),
+       (xml_create_object_barcode):
+               Modified to use above API for barcode type.
+
+2004-02-07  Jim Evins  <evins@snaught.com>
+
+       * src/stock-pixmaps/Makefile.am:
+       * src/stock-pixmaps/stock_hchain_24.png:
+       * src/stock-pixmaps/stock_hchain_broken_24.png:
+       * src/stock-pixmaps/stock_vchain_24.png:
+       * src/stock-pixmaps/stock_vchain_broken_24.png:
+               Added chain pixmaps borrowed from the gimp's default theme.
+
+       * src/stock.h:
+       * src/stock.c: (gl_stock_init), (add_button_icon):
+               Added above pixmaps to stock icon sets.  Created add_button_icon() to
+               add these pixmaps sized as GTK_ICON_SIZE_BUTTON.
+       
+       * src/wdgt-chain-button.h
+       * src/wdgt-chain-button.c
+       * src/Makefile.am:
+       * po/POTFILES.in:
+               Added this Modified version of gimpchainbutton widget, borrowed from
+               the gimp.
+       
+       * AUTHORS:
+               Added acknowledgements of the above borrowing from the gimp.
+       
+       * src/object-editor-size-page.c: (aspect_toggle_cb), (w_spin_cb),
+       (h_spin_cb):
+       * src/object-editor.c: (gl_object_editor_construct_chain_button):
+       * src/object-editor.glade:
+               Replaced the keep aspect ratio check box with the above chain-button
+               widget.
+       
+       * src/text-node.c: (gl_text_node_equal):
+       * src/text-node.h:
+               Added function gl_text_node_equal() to compare text_nodes.
+       
+       * src/label-image.c: (gl_label_image_set_filename):
+               Replaced incomplete text_node comparison code with invocation of
+               gl_text_node_equal.  This fixed the problem of not being able to
+               resize an image using the object_editor if the aspect ratio is not
+               locked.
+
+2004-02-04  Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-image-page.c:
+       (gl_object_editor_prepare_image_page):
+               Track "changed" signal of pixmap entry's GtkEntry rather than its
+               "activate" signal -- this catches all changes to the entry rather than
+               just changes resulting from a browse, so one can easily pull previous
+               entries from the history. (This change is marked below on 2004-02-03,
+               but somehow never got checked in.)
+
+       * src/view-highlight.c: (sl_resize_event_handler),
+       (sr_resize_event_handler), (st_resize_event_handler),
+       (sb_resize_event_handler):
+               Side resize handles will now confirm the actual resize that the object
+               accepted before adjusting position parameters.  Previously some interesting
+               things happened when resizing a barcode to its minimum size.
+
+2004-02-03  Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-image-page.c:
+       (gl_object_editor_prepare_image_page):
+               Track "changed" signal of pixmap entry's GtkEntry rather than its
+               "activate" signal -- this catches all changes to the entry rather than
+               just changes resulting from a browse, so one can easily pull previous
+               entries from the history.
+       
+       * src/view-highlight.c: (tl_resize_event_handler),
+       (tr_resize_event_handler), (bl_resize_event_handler),
+       (br_resize_event_handler):
+               Allow control key to be dropped while dragging a corner resize handle
+               without losing the aspect ratio lock.
+
+2004-02-02  Jim Evins  <evins@snaught.com>
+
+       * src/label-image.c: (gl_label_image_set_filename):
+               When setting a new filename adjust size such that the aspect ratio of
+               the image is preserved using the current size as a bounding box.
+               
+       * src/view-image.c: (update_object_from_editor_cb):
+               When updating object from editor, feed back possible size changes to
+               editor as a result of a possible change in image.
+       
+       * src/object-editor-size-page.c: (size_reset_cb):
+               Fixed typo when blocking spin handlers.  If the base size is larger than
+               the max size, treat max size as a bounding box while keeping aspect
+               ratio.
+               
+
+2004-02-02  Jim Evins  <evins@snaught.com>
+
+       * src/label-object.h:
+       * src/label-object.c: (gl_label_object_set_size),
+       (gl_label_object_set_size_honor_aspect):
+               Added gl_label_object_set_size_honor_aspect() which will maintain the
+               current aspect ratio by modifying the supplied w or h apropriately.
+       
+       * src/view-highlight.c: (tl_resize_event_handler),
+       (tr_resize_event_handler), (bl_resize_event_handler),
+       (br_resize_event_handler):
+               Corner handles will now maintain the current aspect ratio if the
+               control key is pressed while resizing.  This addresses feature
+               request #816603.
+       
+
+2004-01-31  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * data/avery-us-templates.xml:
+               Added entries for "LSK-3," "LSK-5," and "LSK-8."  Submitted by JBadger.
+       
+       * libglabels/template.c: (read_template_files_from_dir):
+               Corrected problem with testing for extensions.
+       
+       * src/object-editor.glade:
+               Corrected grouping of radio buttons in barcode data page.
+
+       * src/print.c: (draw_barcode_object):
+       * src/view-barcode.c: (draw_barcode):
+               Corrected problem with calculation of y_offset for locating characters.
+
+2004-01-24  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+       * data/avery-us-templates.xml:
+               Added Avery 5824, submitted by Fred Bacon.
+       
+2004-01-20  Jim Evins  <evins@snaught.com>
+
+       Catching up on a couple of backlogged user template submissions.
+
+       * data/avery-iso-templates.xml:
+               Added "DECAdry OLW-4731" and "DECAdry DLW-1731" aliases for Avery 7160.
+               Suggested by Linas Jakucionis.
+       
+       * data/zweckform-iso-templates.xml:
+               Added Zweckform 4760, submitted by Thomas Vill.
+
+       * AUTHORS:
+               Updated to reflect above submissions.
+
+2004-01-06  Jim Evins  <evins@snaught.com>
+
+       Split-out template.[ch], paper.[ch], xml-template.[ch], xml-paper.[ch], and
+       xml.[ch] into a separate library called libglabels, to facilitate third
+       party use of glabels template files.  This was suggested by Wayne Schuller.
+       Once split-out, some modifications to the structures and functions to
+       make a cleaner more useful API, hopefully.  Rather extensive changes have
+       propogated to other modules.
+
+       * src/paper.h:
+       * src/paper.c:
+       * src/template.h:
+       * src/template.c:
+       * src/xml-paper.h:
+       * src/xml-paper.c:
+       * src/xml-template.h:
+       * src/xml-template.c:
+       * src/xml.h:
+       * src/xml.c:
+               These files have been moved to libglabels/.  API cleanup performed.
+
+       * libglabels/libglabels.h:
+       * libglabels/libglabels-private.h:
+       * libglabels/Makefile.am:
+               These files have been added to finish out libglabels.
+       
+       * Makefile.am:
+       * configure.in:
+       * glabels.spec.in:
+       * po/POTFILES.in:
+       * src/Makefile.am:
+               Modified to reflect new sets of files in src/ and libglabels/.
+
+       * COPYING.LIBGLABELS:
+       * COPYING-DOCS:
+               Added copy of the LGPL for libglabels, and a copy the GFDL for
+               documentation.
+       
+       * src/glabels-batch.c:
+       * src/glabels.c:
+       * src/label.c: (gl_label_finalize), (gl_label_set_template),
+       (gl_label_get_size):
+       * src/label.h:
+       * src/prefs-model.c: (gl_prefs_model_load_settings):
+       * src/print-dialog.c:
+       * src/print.c: (gl_print_simple), (gl_print_merge_collated),
+       (gl_print_merge_uncollated), (gl_print_batch), (print_info_free),
+       (print_crop_marks), (print_label), (draw_outline),
+       (clip_to_outline), (clip_punchouts):
+       * src/template-designer.c: (construct_pg_size_page),
+       (pg_size_page_changed_cb), (layout_page_changed_cb),
+       (print_test_cb), (build_template):
+       * src/util.c: (gl_util_fraction):
+       * src/util.h:
+       * src/view.c: (draw_bg_fg_layers), (draw_bg_fg_rect),
+       (draw_bg_fg_rounded_rect), (draw_bg_fg_round), (draw_bg_fg_cd),
+       (draw_bg_fg_cd_bc), (draw_markup_layer), (draw_markup_margin),
+       (draw_markup_margin_rect), (draw_markup_margin_rounded_rect),
+       (draw_markup_margin_round), (draw_markup_margin_cd),
+       (draw_markup_margin_cd_bc), (draw_markup_line),
+       (draw_markup_circle), (gl_view_copy):
+       * src/wdgt-media-select.c: (gl_wdgt_media_select_construct),
+       (page_size_entry_changed_cb), (details_update), (get_layout_desc),
+       (get_label_size_desc):
+       * src/wdgt-mini-preview.c:
+       (gl_wdgt_mini_preview_set_label_by_name), (mini_outline_list_new),
+       (cdbc_item):
+       * src/wdgt-print-copies.c: (gl_wdgt_print_copies_construct):
+       * src/wdgt-print-merge.c: (gl_wdgt_print_merge_construct):
+       * src/wdgt-rotate-label.c: (mini_preview_canvas_update),
+       (gl_wdgt_rotate_label_set_template_name), (cdbc_item):
+       * src/wdgt-rotate-label.h:
+       * src/xml-label-04.c: (xml04_parse_media_description):
+       * src/xml-label-191.c: (gl_xml_label_191_parse),
+       (xml191_parse_sheet), (xml191_parse_label), (xml191_parse_layout),
+       (xml191_parse_markup), (xml191_parse_alias):
+       * src/xml-label.c: (xml_doc_to_label), (xml_parse_label),
+       (xml_label_to_doc):
+               Various changes to accomodate new libglabels API.
+       
+2004-01-03  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Release 1.93.2.
+
+2004-01-03  Jim Evins  <evins@snaught.com>
+
+       * AUTHORS:
+               Added acknowledgement of contributions by Wayne Schuller.
+       
+       * src/commands.c: (gl_cmd_file_print):
+               Create extra reference to print dialog, so that it can be properly re-used.
+       
+       * src/mygal/mygal-combo-box.h:
+       * src/mygal/mygal-combo-box.c:
+       (mygal_combo_box_popup_hide_unconditional),
+       (mygal_combo_box_popup_display), (mygal_combo_box_set_display),
+       (gtk_combo_set_tearoff_state), (mygal_combo_box_construct),
+       (mygal_combo_box_set_arrow_relief), (mygal_combo_box_set_title),
+       (mygal_combo_box_set_tearable):
+               Changed all occurances of GTK_IS_COMBO_BOX to MYGAL_IS_COMBO_BOX, to
+               complete the rename of this widget to prevent namespace collisions
+               with Gtk+-2.3.
+       
+       * src/prefs-dialog.glade:
+               Fixed alignment of Fill/Color widgets.
+
+2004-01-03  Jim Evins  <evins@snaught.com>
+
+       * data/avery-iso-templates.xml:
+               Added user submitted templates.
+               Avery 8435A & 8435B, submitted by Ludger Solbach.
+
+       * doc/C/glabels.xml:
+               Added minimal documentation, noting the new template designer.
+
+2004-01-03  Jim Evins  <evins@snaught.com>
+
+       * pixmaps/ex-rect-size.png:
+       * pixmaps/ex-round-size.png:
+       * pixmaps/ex-cd-size.png:
+       * pixmaps/Makefile.am:
+               Added ex-rect-size.png, ex-round-size.png, and ex-cd-size.png image
+               files to be used as illustrations/examples in the template-designer.
+
+       * src/template-designer.c: (construct_rect_size_page),
+       (construct_round_size_page), (construct_cd_size_page),
+       (construct_nlayouts_page), (rect_size_page_prepare_cb),
+       (round_size_page_prepare_cb), (cd_size_page_prepare_cb),
+       (layout_page_prepare_cb), (build_template):
+       * src/template-designer.glade:
+               Added illustrations for rectangle, round, and cd label size pages.
+               Added margin spinboxes to these pages, and now add a margin markup
+               to the constructed template.  Added realistic default values for
+               some of the size spinboxes.  Cleaned up the code for setting spinbox
+               ranges on the layouts page.
+
+2004-01-02  Jim Evins  <evins@snaught.com>
+
+       * src/object-editor-size-page.c: (h_spin_cb):
+               Fixed cut-n-paste error in h_spin_cb that loaded h from
+               the wrong spinbutton.
+
+       * src/object-editor.h:
+       * src/object-editor.c: (gl_object_editor_class_init),
+       (gl_object_editor_changed_cb), (gl_object_editor_size_changed_cb):
+       * src/object-editor-private.h:
+       * src/object-editor-size-page.c: (w_spin_cb), (h_spin_cb),
+       (size_reset_cb):
+               Added "size_changed" signal.
+               
+       * src/view-text.c: (construct_properties_editor),
+       (update_object_from_editor_cb),
+       (update_object_from_editor_size_cb):
+               Track size changes from object editor separately from other
+               properties.  This is so the default size (0,0) of a text
+               object is not modified unintentionally.
+
+2003-12-30  Wayne Schuller  <k_wayne@linuxpower.org>
+
+       Added feature: line spacing - allows you to comfortably space a text box to
+       fit a label perfectly.
+
+       * data/glabels-2.0.dtd:
+       * src/label-object.c: (gl_label_object_set_text_line_spacing),
+       (gl_label_object_get_text_alignment),
+       (gl_label_object_get_text_line_spacing):
+       * src/label-object.h:
+       * src/label-text.c: (gl_label_text_class_init),
+       (gl_label_text_instance_init), (copy), (get_size),
+       (set_text_line_spacing), (get_text_alignment),
+       (get_text_line_spacing):
+       * src/object-editor-private.h:
+       * src/object-editor-text-page.c:
+       (gl_object_editor_prepare_text_page),
+       (gl_object_editor_set_text_line_spacing),
+       (gl_object_editor_get_text_line_spacing):
+       * src/object-editor.glade:
+       * src/object-editor.h:
+       * src/prefs-dialog.c: (construct_object_page),
+       (update_object_page_from_prefs), (update_prefs_from_object_page):
+       * src/prefs-dialog.glade:
+       * src/prefs-model.c: (gl_prefs_model_save_settings),
+       (gl_prefs_model_load_settings), (get_float):
+       * src/prefs-model.h:
+       * src/print.c: (draw_text_object):
+       * src/ui-sidebar.c:
+       * src/view-text.c: (update_object_from_editor_cb),
+       (update_editor_from_object_cb),
+       (gl_view_text_create_event_handler), (draw_hacktext):
+       * src/view.c: (gl_view_construct),
+       (gl_view_set_selection_text_line_spacing),
+       (gl_view_set_default_text_line_spacing),
+       (gl_view_get_default_text_line_spacing):
+       * src/view.h:
+       * src/xml-label.c: (xml_parse_toplevel_span),
+       (xml_create_toplevel_span):
+
+2003-12-30  Jim Evins  <evins@snaught.com>
+
+       * src/template-designer.c:
+       * src/template-designer.h:
+       * src/template-designer.glade:
+               New template designer assistant.
+       
+       * po/POTFILES.in:
+       * src/Makefile.am:
+               Added entries for src/template-designer.* files.
+       
+       * pixmaps/ex-1layout.png
+       * pixmaps/ex-2layouts.png
+       * pixmaps/Makefile.am:
+               Added the new image files ex-*.png used as illustrations in the
+               template designer assistant.
+       
+       * src/print-dialog.h:
+       * src/print-dialog.c: (gl_print_dialog_finalize),
+       (gl_print_dialog_new), (gl_print_dialog_construct),
+       (gl_print_dialog_force_outline_flag):
+               Changed first argument of gl_print_dialog_new() from glView to glLabel,
+               to support printing from the template designer assistant which does not
+               have a full-fledged view.  Nothing else from the view object was being
+               used by the dialog anyway.
+
+               Added the gl_print_dialog_force_outline_flag() method, for better
+               integration with the template designer assistant.
+               
+
+       * src/commands.h:
+       * src/commands.c: (gl_cmd_file_template_designer),
+       (gl_cmd_file_print):
+               Modified print command to provide label instead of view to dialog.
+               Added the gl_cmd_file_template_designer() command to invoke the
+               template designer assistant.
+       
+       * src/ui.c:
+       * src/glabels-ui.xml:
+               Added support for template designer assistant.
+       
+       * src/wdgt-mini-preview.h:
+       * src/wdgt-mini-preview.c: (gl_wdgt_mini_preview_set_template),
+       (gl_wdgt_mini_preview_set_bg_color):
+               Preview is now centered in canvas.  Added
+               gl_wdgt_mini_preview_set_bg_color() to allow the template designer
+               assistant to match the background color with its own.
+       
+       * src/print.c: (clip_to_outline):
+               Fixed really stupid bug when adding waste to clip region of rectangular
+               labels/cards.  Each side of the clip region needs to be extended by
+               twice the waste margin, as well as negatively offset by the waste
+               margin.
+
+2003-12-28  Jim Evins  <evins@snaught.com>
+
+       * src/prefs-dialog.c: (update_object_page_from_prefs):
+               Block intermediary function align_toggle_cb() instead of
+               update_prefs_from_object_page() for the three alignment
+               widgets.
+
+2003-12-28  Wayne Schuller  <k_wayne@linuxpower.org>
+
+       * src/file.c: (gl_file_new), (gl_file_properties):
+               Swap button order and set default for higificatory pleasure.
+
+2003-12-27  Jim Evins  <evins@snaught.com>
+
+       * barcode-0.98/Makefile.am:
+               One last time:  removed doc/Makefile and po/Makefile.in.in from
+               EXTRA_DIST files.
+       
+2003-12-27  Jim Evins  <evins@snaught.com>
+
+       * barcode-0.98/Makefile.am:
+               Removed config.stat entry from EXTRA_DIST files.
+       
+       * barcode-0.98/Makefile.in:
+               Removed.
+
+2003-12-27  Jim Evins  <evins@snaught.com>
+
+       * configure.in:
+               Updated to work with latest gnome-common package from CVS.
+               Removed recursive configuration of barcode-0.98.
+
+       * acconfig.h:
+       * macros/*:
+               Removed.
+       
+       * Makefile.am:
+               Added barcode-0.98/ as a SUBDIR, and removed dist-hook.
+       
+       * barcode-0.98/Makefile.in:
+       * barcode-0.98/configure.in:
+       * barcode-0.98/Makefile.am:
+       * barcode-0.98/README.glabels:
+               Modified to ignore the barcode package's build system, and build
+               as a part of glabels.
+               Renamed Makefile.in to Makefile.in.dist.
+               Renamed configure.in to configure.in.dist.
+               Added barcode-0.98/Makefile.am and barcode-0.98/README.glabels.
+       
+       * src/Makefile.am:
+       * src/mygal/Makefile.am:
+       * src/recent-files/Makefile.am:
+               In order to build against the GNOME 2.5 platform, 
+               all use of *_DISABLE_DEPRECATED compile-time flags has been removed.
+       
+       * src/mygal/Makefile.am:
+       * src/mygal/mygal-combo-box.c:
+       * src/mygal/mygal-combo-box.h:
+       * src/mygal/widget-color-combo.c:
+       * src/mygal/widget-color-combo.h:
+       * po/POTFILES.in:
+               In order to build against the GNOME 2.5 platform, 
+               Renamed gtk_combo_box widget to mygal_combo_box, to prevent namespace
+               collisions with the real gtk_combo_box widget, now a part of gtk.
+       
+2003-12-26  Jim Evins  <evins@snaught.com>
+
+       * src/paper.c:
+       * src/template.c:
+       * src/util.c:
+       * src/util.h:
+               Moved local versions of get_home_data_dir() in paper.c and
+               template.c to util package.  Cleaned up formatting in
+               util.[ch].
+
+       * src/template.c:
+               In gl_template_register() save a copy of the template in
+               ~/.glabels if the template is not known.  Still need to
+               handle duplicate filename case and duplicate name but
+               different template case.
+       
+       * src/xml-label.c:
+       * src/xml.h:
+               Moved local definition of NAME_SPACE macro from xml-label.c
+               to xml.h.
+       
+       * src/xml-template.c:
+       * src/xml-template.h:
+               Added function gl_xml_template_write_template_to_file(), used
+               in gl_template_register().
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..23e5f25
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,236 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+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, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+   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 you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' 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.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+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 support 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' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' 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' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   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 machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+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.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).  Here is a another example:
+
+     /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
+configuration-related scripts to be executed by `/bin/bash'.
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--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.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..b8bc8b3
--- /dev/null
@@ -0,0 +1,51 @@
+## Process this file with automake to produce Makefile.in
+
+LIB_BARCODE_DIR = barcode-0.98
+LIB_IEC16022_DIR = iec16022-0.2.1
+
+SUBDIRS = \
+       po \
+       $(LIB_BARCODE_DIR) \
+       $(LIB_IEC16022_DIR) \
+       libglabels \
+       src \
+       data \
+       help \
+       docs
+
+EXTRA_DIST = \
+       README \
+       COPYING.README_FIRST \
+       COPYING \
+       COPYING-DOCS \
+       COPYING-LIBGLABELS \
+       AUTHORS \
+       ChangeLog \
+       ChangeLog.pre-2.2 \
+       INSTALL \
+       NEWS \
+       TODO \
+       intltool-extract.in \
+       intltool-merge.in \
+       intltool-update.in \
+       glabels.spec.in \
+       glabels.spec
+       gnome-doc-utils.make
+
+DISTCLEANFILES = gnome-doc-utils.make
+
+DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper
+
+dist-hook:
+       @if test -d "$(srcdir)/.git"; \
+       then \
+               echo Creating ChangeLog && \
+               (GIT_DIR=$(top_srcdir)/.git \
+                 ./missing --run git log -M -C --name-status --date=short --no-color) | \
+                 fmt --split-only > ChangeLog.tmp \
+               && mv -f ChangeLog.tmp $(top_distdir)/ChangeLog \
+               || ( rm -f ChangeLog.tmp ; \
+                 echo Failed to generate ChangeLog >&2 ); \
+       else \
+               echo A git clone is required to generate a ChangeLog >&2; \
+       fi
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..fbac3d5
--- /dev/null
@@ -0,0 +1,819 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+       $(srcdir)/glabels.spec.in $(top_srcdir)/configure AUTHORS \
+       COPYING ChangeLog INSTALL NEWS TODO config.guess config.sub \
+       depcomp install-sh ltmain.sh missing mkinstalldirs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = glabels.spec
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LIB_BARCODE_DIR = barcode-0.98
+LIB_IEC16022_DIR = iec16022-0.2.1
+SUBDIRS = \
+       po \
+       $(LIB_BARCODE_DIR) \
+       $(LIB_IEC16022_DIR) \
+       libglabels \
+       src \
+       data \
+       help \
+       docs
+
+EXTRA_DIST = \
+       README \
+       COPYING.README_FIRST \
+       COPYING \
+       COPYING-DOCS \
+       COPYING-LIBGLABELS \
+       AUTHORS \
+       ChangeLog \
+       ChangeLog.pre-2.2 \
+       INSTALL \
+       NEWS \
+       TODO \
+       intltool-extract.in \
+       intltool-merge.in \
+       intltool-update.in \
+       glabels.spec.in \
+       glabels.spec
+
+DISTCLEANFILES = gnome-doc-utils.make
+all: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+             $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+       @if test ! -f $@; then \
+         rm -f stamp-h1; \
+         $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+       else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+       @rm -f stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+       ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+       rm -f stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f config.h stamp-h1
+glabels.spec: $(top_builddir)/config.status $(srcdir)/glabels.spec.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool config.lt
+
+# 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.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d "$(distdir)" || mkdir "$(distdir)"
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+       -test -n "$(am__skip_mode_fix)" \
+       || find "$(distdir)" -type d ! -perm -755 \
+               -exec chmod u+rwx,go+rx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-lzma: distdir
+       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+       $(am__remove_distdir)
+
+dist-xz: distdir
+       tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_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
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.lzma*) \
+         lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.xz*) \
+         xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       test -d $(distdir)/_build || exit 0; \
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && am__cwd=`pwd` \
+         && $(am__cd) $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+         && cd "$$am__cwd" \
+         || exit 1
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @$(am__cd) '$(distuninstallcheck_dir)' \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+       distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+       ctags-recursive install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am am--refresh check check-am clean clean-generic \
+       clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+       dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \
+       dist-zip distcheck distclean distclean-generic distclean-hdr \
+       distclean-libtool distclean-tags distcleancheck distdir \
+       distuninstallcheck dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags tags-recursive uninstall uninstall-am
+
+       gnome-doc-utils.make
+
+dist-hook:
+       @if test -d "$(srcdir)/.git"; \
+       then \
+               echo Creating ChangeLog && \
+               (GIT_DIR=$(top_srcdir)/.git \
+                 ./missing --run git log -M -C --name-status --date=short --no-color) | \
+                 fmt --split-only > ChangeLog.tmp \
+               && mv -f ChangeLog.tmp $(top_distdir)/ChangeLog \
+               || ( rm -f ChangeLog.tmp ; \
+                 echo Failed to generate ChangeLog >&2 ); \
+       else \
+               echo A git clone is required to generate a ChangeLog >&2; \
+       fi
+
+# 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/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..ced6ef5
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,218 @@
+* gLabels 2.2.8 (stable) release.  Release date 2010-04-19
+
+- Fix crash caused by new g_new macros in glib-2.24.0
+- Removed extra padding in "New label" dialog
+- New Norwegian bokmål translation (Kjartan Maraas)
+- New Portuguese translation (Filipe Roque)
+- Updated Japanese translation (Takeshi AIHANA)
+- Updated Spanish translation (Jorge González)
+- Updated Fresh translation (Bruno Brouard)
+- Updated German translation (Mario Blättermann)
+- Updated Slovenian translation (Andrej Žnidaršič)
+- Updated Czech translation (Marek Černocký)
+- New templates
+
+
+* gLabels 2.2.7 (stable) release.  Release date 2010-03-01
+
+- Fixed limitation on encoded image sizes (fix only valid if libxml 2.7+ is installed)
+- Fixed focus behavior of canvas so that focus does not get stolen when
+  highlighting text in the object editor
+- New Slovenian translation (Andrej Žnidaršič)
+- New Danish translation (Joe Hansen)
+- Updated Czech translation (Marek Cernocky)
+- Updated German translation (Mario Blättermann)
+- Updated German help manual translation (Mario Blättermann)
+- New French translation of help manual (Alain Lojewski and Claude Paroz)
+- New Czech translation of help manual (Marek Cernocky)
+- New Spanish translation of help manual (Jorge González)
+- New templates
+
+
+* gLabels 2.2.6 (stable) release.  Release date 2009-11-11
+
+- Fixed drawing artifact with round labels.
+- Fixed several memory issues.
+- Fixed several UI inconsistencies when changing merge source.
+- Fixed potiential crash when doing a document merge.
+- Now makes a better guess at locale defaults (page size and units).
+- Updated user documentation (Mario Blättermann).
+- Updated swedish translation (Daniel Nylander).
+- Updated german translation (Mario Blättermann).
+- Updated russian translation (Alexandre Prokoudine)
+- Updated french translation (Claude Paroz)
+- New chinese translation (Careon)
+- New catalan translation (David Planella)
+- Updated german translation of user documentation (Mario Blättermann).
+- New templates.
+
+
+* gLabels 2.2.5 (stable) release.  Release date 2009-04-30
+
+- Fixed spinbutton/adjustment bugs that made glabels unusable with Gtk 2.16.
+- Fixed default preview colors in color combos.
+- Updated german translation (Mario Blättermann).
+- New templates.
+
+
+* gLabels 2.2.4 (stable) release.  Release date 2008-12-22
+
+- Corrected button order in "Open" and "Save as" dialogs.
+- Fixed performance problem when large number of fonts are installed.
+- Corrected several i18n problems.
+- Fixed "paste" bug that created phantom object views.
+- Fixed performacne problem when many objects are selected.
+- New templates.
+
+
+* gLabels 2.2.3 (stable) release.  Release date 2008-08-17
+
+- Explicitely set page size when printing -- don't let print back-end use
+  a default size (Bug #2049431).
+- Sets more appropriate object size limits for any aspect ratio (Bug #1993550).
+- Fixed crash of glabels-batch (Bug #1968653).
+- Fixed bug with barcode and image merge radio buttons (Bug #1959135).
+- Will now attempt to parse newer namespaces (Bug #1872584).
+- Fixed drawing errors when drawing markup on rotated labels.
+- New korean translation (xein@navir.com).
+- New templates.
+
+
+* gLabels 2.2.2 (stable) release.  Release date 2008-02-22
+
+- Fixed crash when creating Code128C barcode (Bug #1766425).
+- Explicitely set page size when printing "other" page size.
+- Fixed rendering bug with bitmap fonts.
+- Fixed rendering problem when displaying "Invalid barcode data".
+- Fixed crash when deleting multi-object selections.
+- Enforce minimum size for images to prevent rendering of images of zero size.
+- Fixed problem with image size spinboxes (Bug #1886438).
+- Fixed template example in documentation.
+- Use default units when writing xml files.
+- New templates.
+
+* gLabels 2.2.1 (stable) release.  Release date 2008-01-23
+
+- Sort font lists alphabetically.
+- Sort evolution records by "file_under" field.
+- Fixed clipping bug when rotating labels.
+
+
+* gLabels 2.2.0 (stable) release.  Release date 2007-12-26
+
+- Migrated from EggRecent to GtkRecentManager
+- Migrated from libgnomeprint to GtkPrintOperation and Cairo.
+- Migrated from libgnomeprint to Pango for text layout.
+- Migrated GnomeDruid to GtkAssistant for template designer.
+- Migrated from GnomeCanvas to Cairo.
+- Removed all deprecated widgets as of Gnome-2.16/Gtk-2.10.
+- Added categorization of templates and an updated New Label dialog.
+- New label dialog now allows selection of recently used templates
+- Removed splash screen.
+- Added initial support for datamatrix 2D barcodes.
+- Added support for Brazilian CEPNet barcodes.
+- Added shadow attribute to label objects.
+- New merge backend for evolution data server (Austin Henry)
+- Various bug fixes.
+- New templates.
+
+
+* gLabels 2.1.5 (unstable) release.  Release date 2007-12-09.
+
+- New label dialog now allows selection of recently used templates
+- Store brand and part number as separate fields in templates
+- Major cleanup of libglabels API and documentation
+- Minor bug fixes (and probably some new bugs).
+
+
+* gLabels 2.1.4 (unstable) release.  Release date 2007-08-17.
+
+- Added categorization of templates and an updated New Label dialog.
+- Added initial support for datamatrix 2D barcodes.
+- Migrated from EggRecent to GtkRecentManager.
+- Migrated from libgnomeprint to GtkPrintOperation and Cairo.
+- Migrated from libgnomeprint to Pango for text layout.
+- Migrated GnomeDruid to GtkAssistant for template designer.
+- Migrated from GnomeCanvas to Cairo.
+- Removed splash screen.
+- Added support for Brazilian CEPNet barcodes.
+- Updated French translation (Claude Paroz)
+- New Esperanto translation (Antonio C. Codazzi)
+- Minor bug fixes (and probably some new bugs).
+- New templates.
+
+
+* gLabels 2.1.3 (unstable) release.  Release date 2006-05-27.
+
+- Don't print "Invalid barcode data" if data field is empty. (Bug #1479839) (Darren Warner)
+- Fixed hangup when grid or markup have been toggled during a previous session. (Bug #1434324)
+- Added shadow attribute to label objects.
+- Fixed color groups in color combo widgets.
+- Fixed several potential crashes.
+
+
+* gLabels 2.1.2 (unstable) release.  Release date 2005-12-21.
+
+- Updated Italian translation (Daniele Medri)
+- Fixed double entry in property bar's font family combobox
+- Don't allow zero width or height when drawing pixbufs
+- Fixed various memory leaks
+- New configure option to disable update-mime-database and update-desktop-database
+- New merge backend for evolution data server (Austin Henry)
+- New minimal merge backend for VCards using evolution data server API (Austin Henry)
+- New templates and fixes
+
+
+* gLabels 2.1.1 (unstable) release.  Release date 2005-06-21.
+
+- Added document merge tutorial to help documentation
+- Replaced deprecated widgets (now requires Gnome 2.10 and GTK+ 2.6)
+- Replaced libbonoboui with GtkUIManager (now requires Gnome 2.10 and GTK+ 2.6)
+- Updated Russian translation (Vitaly Lipatov)
+- Updated Spanish translation (Sergio Rivadero)
+- Updated Czech translation (David Makovský and Zbynek Mrkvick)
+- Updated Italian translation (Daniele Medri)
+- Added documentation for libglabels
+- Minor bug fixes and cleanup
+- New templates
+
+
+* gLabels 2.1.0 (unstable) release.  Release date 2005-01-22.
+
+- Added ability to select color from merge source (Frederic Ruaudel)
+- See 2.0.2
+
+
+* gLabels 2.0.2 release.  Release date 2005-01-22.
+
+- Desktop file reconciled with desktop-entry-spec
+- New cleaned-up icon
+- Added option to glabels-batch to allow selection of first label.
+- Added options to glabels-batch to allow selection of merge source and crop marks.
+  (José Dapena Paz)
+- Updated french translation (Florent Morel)
+- Fixed translation problem with object editor labels
+- Minor bug fixes and cleanup
+- New templates
+
+* gLabels 2.0.1 release.  Release date 2004-08-15.
+
+- Fixed crash when reading some labels created with 1.93.x.
+- Updated japanese translations (Takeshi AIHANA)
+- Fixed crash from improperly freeing translation strings.
+
+
+* gLabels 2.0.0 release.  Release date 2004-08-09.
+
+- Fixed crash when encountering old template files
+- Align grid to label center for DVD/CD and round labels
+- Don't touch compression of original file
+- 64-bit fixes
+- Added man page
+- Fixed missing outline problem experienced with some printers
+- Added separate horizontal and vertical waste properties for rectangular templates
+- Added option to auto-shrink text during document merge
+- Fixed memory leaks
+- Added format attibute to barcode objects, to allow correct layout of merged labels
+- Fixed mime type registration for GNOME 2.6
+
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..a8c4241
--- /dev/null
+++ b/README
@@ -0,0 +1,44 @@
+Copyright
+=========
+
+   Copyright (C) 2001-2007 Jim Evins
+
+   gLabels contains components copyrighted by others -- see th 'AUTHORS' file in
+   this directory.
+
+   For license information see the 'COPYING.README_FIRST' file in this directory.
+
+
+
+What is gLabels
+===============
+
+gLabels is a small stand-alone program for creating labels and business
+cards using a laser or ink-jet printer.
+
+
+
+System Requirements
+===================
+
+GTK+-2.10.x
+LIBGNOME[UI]-2.16.x
+LIBXML-2.6.x
+LIBGLADE-2.6.x
+
+All of these libraries are available as part of Gnome 2.16
+
+
+
+Author and Acknowledgments:
+===========================
+
+See the AUTHORS file.
+
+
+
+Website
+=======
+
+http://glabels.sourceforge.net/
+
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..ed3140c
--- /dev/null
+++ b/TODO
@@ -0,0 +1,46 @@
+
+Development plan
+----------------
+This development plan sets a specific set of milestones for future versions of glabels.
+
+
+Goals for 2.2.x:
+
+               -  Bugfixes
+
+               -  Translations
+
+
+Possible Goals for 2.3.x (current development branch):
+
+               -  Undo, Redo capability
+
+               -  Make text items rich.  I.e. allow multiple characteristics
+                  to exist within a single object.
+
+               -  Text effects.  (follow contour, non-rectangular text boxes,
+                  ...)
+
+               -  Ability to select/unselect individual records during a merge-print.
+
+               -  Add additional "merge" backends.  Candidates include:
+                       generic XML
+                       freedb (CDDB) for CD labels
+                       gnome-db
+                       ADIF for generating QSL-cards
+
+               -  Printer calibration tool: a facility for tweaking output origin and
+                  scale.  This should really be part of the underlying print system but
+                  currently is not, so I may want to add the hack.
+
+               -  Adjustable grid spacing.  Spacing of visible grid should be user
+                  adjustable.  This grid spacing should be an integral multiple of
+                  a finer invisible grid.  There should be a "snap to grid" toggle,
+                  that causes all posistioning and sizing performed on the canvas
+                  to snap to the closest grid.  The possible grid spacing should be
+                  appropriate for the current units selected (e.g. .1 points, .01 mm,
+                  1/64 inch, 0.001 inch).
+
+               -  Allow for management of custom templates
+                  (i.e. delete, rename, edit).
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..9bdf2c4
--- /dev/null
@@ -0,0 +1,10029 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file 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.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
+[m4_warning([this file was generated for autoconf 2.63.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 1995-2002 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003,2004 Red Hat, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# 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.
+#
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995, 1996
+#
+# Modified to never use included libintl. 
+# Owen Taylor <otaylor@redhat.com>, 12/15/1998
+#
+# Major rework to remove unused code
+# Owen Taylor <otaylor@redhat.com>, 12/11/2002
+#
+# Added better handling of ALL_LINGUAS from GNU gettext version 
+# written by Bruno Haible, Owen Taylor <otaylor.redhat.com> 5/30/3002
+#
+# Modified to require ngettext
+# Matthias Clasen <mclasen@redhat.com> 08/06/2004
+#
+# We need this here as well, since someone might use autoconf-2.5x
+# to configure GLib then an older version to configure a package
+# using AM_GLIB_GNU_GETTEXT
+AC_PREREQ(2.53)
+
+dnl
+dnl We go to great lengths to make sure that aclocal won't 
+dnl try to pull in the installed version of these macros
+dnl when running aclocal in the glib directory.
+dnl
+m4_copy([AC_DEFUN],[glib_DEFUN])
+m4_copy([AC_REQUIRE],[glib_REQUIRE])
+dnl
+dnl At the end, if we're not within glib, we'll define the public
+dnl definitions in terms of our private definitions.
+dnl
+
+# GLIB_LC_MESSAGES
+#--------------------
+glib_DEFUN([GLIB_LC_MESSAGES],
+  [AC_CHECK_HEADERS([locale.h])
+    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, 1,
+        [Define if your <locale.h> file defines LC_MESSAGES.])
+    fi
+  fi])
+
+# GLIB_PATH_PROG_WITH_TEST
+#----------------------------
+dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+glib_DEFUN([GLIB_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 ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+# GLIB_WITH_NLS
+#-----------------
+glib_DEFUN([GLIB_WITH_NLS],
+  dnl NLS is obligatory
+  [USE_NLS=yes
+    AC_SUBST(USE_NLS)
+
+    gt_cv_have_gettext=no
+
+    CATOBJEXT=NONE
+    XGETTEXT=:
+    INTLLIBS=
+
+    AC_CHECK_HEADER(libintl.h,
+     [gt_cv_func_dgettext_libintl="no"
+      libintl_extra_libs=""
+
+      #
+      # First check in libc
+      #
+      AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc,
+        [AC_TRY_LINK([
+#include <libintl.h>
+],
+         [return !ngettext ("","", 1)],
+         gt_cv_func_ngettext_libc=yes,
+          gt_cv_func_ngettext_libc=no)
+        ])
+  
+      if test "$gt_cv_func_ngettext_libc" = "yes" ; then
+             AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
+               [AC_TRY_LINK([
+#include <libintl.h>
+],
+                 [return !dgettext ("","")],
+                 gt_cv_func_dgettext_libc=yes,
+                 gt_cv_func_dgettext_libc=no)
+               ])
+      fi
+  
+      if test "$gt_cv_func_ngettext_libc" = "yes" ; then
+        AC_CHECK_FUNCS(bind_textdomain_codeset)
+      fi
+
+      #
+      # If we don't have everything we want, check in libintl
+      #
+      if test "$gt_cv_func_dgettext_libc" != "yes" \
+        || test "$gt_cv_func_ngettext_libc" != "yes" \
+         || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
+        
+        AC_CHECK_LIB(intl, bindtextdomain,
+           [AC_CHECK_LIB(intl, ngettext,
+                   [AC_CHECK_LIB(intl, dgettext,
+                                 gt_cv_func_dgettext_libintl=yes)])])
+
+       if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
+         AC_MSG_CHECKING([if -liconv is needed to use gettext])
+         AC_MSG_RESULT([])
+         AC_CHECK_LIB(intl, ngettext,
+               [AC_CHECK_LIB(intl, dcgettext,
+                      [gt_cv_func_dgettext_libintl=yes
+                       libintl_extra_libs=-liconv],
+                       :,-liconv)],
+               :,-liconv)
+        fi
+
+        #
+        # If we found libintl, then check in it for bind_textdomain_codeset();
+        # we'll prefer libc if neither have bind_textdomain_codeset(),
+        # and both have dgettext and ngettext
+        #
+        if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS -lintl $libintl_extra_libs"
+          unset ac_cv_func_bind_textdomain_codeset
+          AC_CHECK_FUNCS(bind_textdomain_codeset)
+          LIBS="$glib_save_LIBS"
+
+          if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
+            gt_cv_func_dgettext_libc=no
+          else
+            if test "$gt_cv_func_dgettext_libc" = "yes" \
+               && test "$gt_cv_func_ngettext_libc" = "yes"; then
+              gt_cv_func_dgettext_libintl=no
+            fi
+          fi
+        fi
+      fi
+
+      if test "$gt_cv_func_dgettext_libc" = "yes" \
+       || test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        gt_cv_have_gettext=yes
+      fi
+  
+      if test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        INTLLIBS="-lintl $libintl_extra_libs"
+      fi
+  
+      if test "$gt_cv_have_gettext" = "yes"; then
+       AC_DEFINE(HAVE_GETTEXT,1,
+         [Define if the GNU gettext() function is already present or preinstalled.])
+       GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+         [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
+       if test "$MSGFMT" != "no"; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS $INTLLIBS"
+         AC_CHECK_FUNCS(dcgettext)
+         MSGFMT_OPTS=
+         AC_MSG_CHECKING([if msgfmt accepts -c])
+         GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: test 1.0\n"
+"PO-Revision-Date: 2007-02-15 12:01+0100\n"
+"Last-Translator: test <foo@bar.xx>\n"
+"Language-Team: C <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
+         AC_SUBST(MSGFMT_OPTS)
+         AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+         GLIB_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],
+           [case $host in
+           *-*-solaris*)
+           dnl On Solaris, if bind_textdomain_codeset is in libc,
+           dnl GNU format message catalog is always supported,
+            dnl since both are added to the libc all together.
+           dnl Hence, we'd like to go with DATADIRNAME=share and
+           dnl and CATOBJEXT=.gmo in this case.
+            AC_CHECK_FUNC(bind_textdomain_codeset,
+             [CATOBJEXT=.gmo 
+               DATADIRNAME=share],
+             [CATOBJEXT=.mo
+               DATADIRNAME=lib])
+           ;;
+           *)
+           CATOBJEXT=.mo
+            DATADIRNAME=lib
+           ;;
+           esac])
+          LIBS="$glib_save_LIBS"
+         INSTOBJEXT=.mo
+       else
+         gt_cv_have_gettext=no
+       fi
+      fi
+    ])
+
+    if test "$gt_cv_have_gettext" = "yes" ; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [always defined to indicate that i18n is enabled])
+    fi
+
+    dnl Test whether we really found GNU xgettext.
+    if test "$XGETTEXT" != ":"; then
+      dnl If it is not 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
+
+    AC_OUTPUT_COMMANDS(
+      [case "$CONFIG_FILES" in *po/Makefile.in*)
+        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+      esac])
+
+    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(CATALOGS)
+    AC_SUBST(CATOBJEXT)
+    AC_SUBST(DATADIRNAME)
+    AC_SUBST(GMOFILES)
+    AC_SUBST(INSTOBJEXT)
+    AC_SUBST(INTLLIBS)
+    AC_SUBST(PO_IN_DATADIR_TRUE)
+    AC_SUBST(PO_IN_DATADIR_FALSE)
+    AC_SUBST(POFILES)
+    AC_SUBST(POSUB)
+  ])
+
+# AM_GLIB_GNU_GETTEXT
+# -------------------
+# Do checks necessary for use of gettext. If a suitable implementation 
+# of gettext is found in either in libintl or in the C library,
+# it will set INTLLIBS to the libraries needed for use of gettext
+# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
+# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
+# on various variables needed by the Makefile.in.in installed by 
+# glib-gettextize.
+dnl
+glib_DEFUN([GLIB_GNU_GETTEXT],
+  [AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_HEADER_STDC])dnl
+   
+   GLIB_LC_MESSAGES
+   GLIB_WITH_NLS
+
+   if test "$gt_cv_have_gettext" = "yes"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       AC_MSG_CHECKING(for catalogs to be installed)
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
+           desiredlanguages="$LINGUAS"
+         else
+           desiredlanguages="$ALL_LINGUAS"
+         fi
+         for desiredlang in $desiredlanguages; do
+          # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       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 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 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
+  ])
+
+# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
+# -------------------------------
+# Define VARIABLE to the location where catalog files will
+# be installed by po/Makefile.
+glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
+[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
+glib_save_prefix="$prefix"
+glib_save_exec_prefix="$exec_prefix"
+glib_save_datarootdir="$datarootdir"
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+test "x$exec_prefix" = xNONE && exec_prefix=$prefix
+datarootdir=`eval echo "${datarootdir}"`
+if test "x$CATOBJEXT" = "x.mo" ; then
+  localedir=`eval echo "${libdir}/locale"`
+else
+  localedir=`eval echo "${datadir}/locale"`
+fi
+prefix="$glib_save_prefix"
+exec_prefix="$glib_save_exec_prefix"
+datarootdir="$glib_save_datarootdir"
+AC_DEFINE_UNQUOTED($1, "$localedir",
+  [Define the location where the catalogs will be installed])
+])
+
+dnl
+dnl Now the definitions that aclocal will find
+dnl
+ifdef(glib_configure_in,[],[
+AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
+AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)])
+])dnl
+
+# GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL])
+# 
+# Create a temporary file with TEST-FILE as its contents and pass the
+# file name to PROGRAM.  Perform ACTION-IF-PASS if PROGRAM exits with
+# 0 and perform ACTION-IF-FAIL for any other exit status.
+AC_DEFUN([GLIB_RUN_PROG],
+[cat >conftest.foo <<_ACEOF
+$2
+_ACEOF
+if AC_RUN_LOG([$1 conftest.foo]); then
+  m4_ifval([$3], [$3], [:])
+m4_ifvaln([$4], [else $4])dnl
+echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD
+sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD
+fi])
+
+
+dnl GNOME_COMPILE_WARNINGS
+dnl Turn on many useful compiler warnings
+dnl For now, only works on GCC
+AC_DEFUN([GNOME_COMPILE_WARNINGS],[
+    dnl ******************************
+    dnl More compiler warnings
+    dnl ******************************
+
+    AC_ARG_ENABLE(compile-warnings, 
+                  AC_HELP_STRING([--enable-compile-warnings=@<:@no/minimum/yes/maximum/error@:>@],
+                                 [Turn on compiler warnings]),,
+                  [enable_compile_warnings="m4_default([$1],[yes])"])
+
+    warnCFLAGS=
+    if test "x$GCC" != xyes; then
+       enable_compile_warnings=no
+    fi
+
+    warning_flags=
+    realsave_CFLAGS="$CFLAGS"
+
+    case "$enable_compile_warnings" in
+    no)
+       warning_flags=
+       ;;
+    minimum)
+       warning_flags="-Wall"
+       ;;
+    yes)
+       warning_flags="-Wall -Wmissing-prototypes"
+       ;;
+    maximum|error)
+       warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith"
+       CFLAGS="$warning_flags $CFLAGS"
+       for option in -Wno-sign-compare; do
+               SAVE_CFLAGS="$CFLAGS"
+               CFLAGS="$CFLAGS $option"
+               AC_MSG_CHECKING([whether gcc understands $option])
+               AC_TRY_COMPILE([], [],
+                       has_option=yes,
+                       has_option=no,)
+               CFLAGS="$SAVE_CFLAGS"
+               AC_MSG_RESULT($has_option)
+               if test $has_option = yes; then
+                 warning_flags="$warning_flags $option"
+               fi
+               unset has_option
+               unset SAVE_CFLAGS
+       done
+       unset option
+       if test "$enable_compile_warnings" = "error" ; then
+           warning_flags="$warning_flags -Werror"
+       fi
+       ;;
+    *)
+       AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
+       ;;
+    esac
+    CFLAGS="$realsave_CFLAGS"
+    AC_MSG_CHECKING(what warning flags to pass to the C compiler)
+    AC_MSG_RESULT($warning_flags)
+
+    AC_ARG_ENABLE(iso-c,
+                  AC_HELP_STRING([--enable-iso-c],
+                                 [Try to warn if code is not ISO C ]),,
+                  [enable_iso_c=no])
+
+    AC_MSG_CHECKING(what language compliance flags to pass to the C compiler)
+    complCFLAGS=
+    if test "x$enable_iso_c" != "xno"; then
+       if test "x$GCC" = "xyes"; then
+       case " $CFLAGS " in
+           *[\ \       ]-ansi[\ \      ]*) ;;
+           *) complCFLAGS="$complCFLAGS -ansi" ;;
+       esac
+       case " $CFLAGS " in
+           *[\ \       ]-pedantic[\ \  ]*) ;;
+           *) complCFLAGS="$complCFLAGS -pedantic" ;;
+       esac
+       fi
+    fi
+    AC_MSG_RESULT($complCFLAGS)
+
+    WARN_CFLAGS="$warning_flags $complCFLAGS"
+    AC_SUBST(WARN_CFLAGS)
+])
+
+dnl For C++, do basically the same thing.
+
+AC_DEFUN([GNOME_CXX_WARNINGS],[
+  AC_ARG_ENABLE(cxx-warnings,
+                AC_HELP_STRING([--enable-cxx-warnings=@<:@no/minimum/yes@:>@]
+                               [Turn on compiler warnings.]),,
+                [enable_cxx_warnings="m4_default([$1],[minimum])"])
+
+  AC_MSG_CHECKING(what warning flags to pass to the C++ compiler)
+  warnCXXFLAGS=
+  if test "x$GXX" != xyes; then
+    enable_cxx_warnings=no
+  fi
+  if test "x$enable_cxx_warnings" != "xno"; then
+    if test "x$GXX" = "xyes"; then
+      case " $CXXFLAGS " in
+      *[\ \    ]-Wall[\ \      ]*) ;;
+      *) warnCXXFLAGS="-Wall -Wno-unused" ;;
+      esac
+
+      ## -W is not all that useful.  And it cannot be controlled
+      ## with individual -Wno-xxx flags, unlike -Wall
+      if test "x$enable_cxx_warnings" = "xyes"; then
+       warnCXXFLAGS="$warnCXXFLAGS -Wshadow -Woverloaded-virtual"
+      fi
+    fi
+  fi
+  AC_MSG_RESULT($warnCXXFLAGS)
+
+   AC_ARG_ENABLE(iso-cxx,
+                 AC_HELP_STRING([--enable-iso-cxx],
+                                [Try to warn if code is not ISO C++ ]),,
+                 [enable_iso_cxx=no])
+
+   AC_MSG_CHECKING(what language compliance flags to pass to the C++ compiler)
+   complCXXFLAGS=
+   if test "x$enable_iso_cxx" != "xno"; then
+     if test "x$GXX" = "xyes"; then
+      case " $CXXFLAGS " in
+      *[\ \    ]-ansi[\ \      ]*) ;;
+      *) complCXXFLAGS="$complCXXFLAGS -ansi" ;;
+      esac
+
+      case " $CXXFLAGS " in
+      *[\ \    ]-pedantic[\ \  ]*) ;;
+      *) complCXXFLAGS="$complCXXFLAGS -pedantic" ;;
+      esac
+     fi
+   fi
+  AC_MSG_RESULT($complCXXFLAGS)
+
+  WARN_CXXFLAGS="$CXXFLAGS $warnCXXFLAGS $complCXXFLAGS"
+  AC_SUBST(WARN_CXXFLAGS)
+])
+
+dnl Do not call GNOME_DOC_DEFINES directly.  It is split out from
+dnl GNOME_DOC_INIT to allow gnome-doc-utils to bootstrap off itself.
+AC_DEFUN([GNOME_DOC_DEFINES],
+[
+AC_ARG_WITH([help-dir],
+  AC_HELP_STRING([--with-help-dir=DIR], [path to help docs]),,
+  [with_help_dir='${datadir}/gnome/help'])
+HELP_DIR="$with_help_dir"
+AC_SUBST(HELP_DIR)
+
+AC_ARG_WITH([omf-dir],
+  AC_HELP_STRING([--with-omf-dir=DIR], [path to OMF files]),,
+  [with_omf_dir='${datadir}/omf'])
+OMF_DIR="$with_omf_dir"
+AC_SUBST(OMF_DIR)
+
+AC_ARG_WITH([help-formats],
+  AC_HELP_STRING([--with-help-formats=FORMATS], [list of formats]),,
+  [with_help_formats=''])
+DOC_USER_FORMATS="$with_help_formats"
+AC_SUBST(DOC_USER_FORMATS)
+
+AC_ARG_ENABLE([scrollkeeper],
+       [AC_HELP_STRING([--disable-scrollkeeper],
+                       [do not make updates to the scrollkeeper database])],,
+       enable_scrollkeeper=yes)
+AM_CONDITIONAL([ENABLE_SK],[test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"])
+
+dnl disable scrollkeeper automatically for distcheck
+DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS"
+AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
+
+AM_CONDITIONAL([HAVE_GNOME_DOC_UTILS],[test "$gdu_cv_have_gdu" = "yes"])
+])
+
+# GNOME_DOC_INIT ([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+#
+AC_DEFUN([GNOME_DOC_INIT],
+[AC_REQUIRE([AC_PROG_LN_S])dnl
+
+ifelse([$1],,[gdu_cv_version_required=0.3.2],[gdu_cv_version_required=$1])
+
+AC_MSG_CHECKING([gnome-doc-utils >= $gdu_cv_version_required])
+PKG_CHECK_EXISTS([gnome-doc-utils >= $gdu_cv_version_required],
+       [gdu_cv_have_gdu=yes],[gdu_cv_have_gdu=no])
+
+if test "$gdu_cv_have_gdu" = "yes"; then
+       AC_MSG_RESULT([yes])
+       ifelse([$2],,[:],[$2])
+else
+       AC_MSG_RESULT([no])
+       ifelse([$3],,[AC_MSG_ERROR([gnome-doc-utils >= $gdu_cv_version_required not found])],[$3])
+fi
+
+GNOME_DOC_DEFINES
+])
+
+dnl -*- mode: autoconf -*-
+
+# serial 1
+
+dnl Usage:
+dnl   GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+  AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+  AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+  dnl for overriding the documentation installation directory
+  AC_ARG_WITH([html-dir],
+    AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+    [with_html_dir='${datadir}/gtk-doc/html'])
+  HTML_DIR="$with_html_dir"
+  AC_SUBST([HTML_DIR])
+
+  dnl enable/disable documentation building
+  AC_ARG_ENABLE([gtk-doc],
+    AS_HELP_STRING([--enable-gtk-doc],
+                   [use gtk-doc to build documentation [[default=no]]]),,
+    [enable_gtk_doc=no])
+
+  if test x$enable_gtk_doc = xyes; then
+    ifelse([$1],[],
+      [PKG_CHECK_EXISTS([gtk-doc],,
+                        AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))],
+      [PKG_CHECK_EXISTS([gtk-doc >= $1],,
+                        AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build gtk-doc]))])
+  fi
+
+  AC_MSG_CHECKING([whether to build gtk-doc documentation])
+  AC_MSG_RESULT($enable_gtk_doc)
+
+  AC_PATH_PROGS(GTKDOC_CHECK,gtkdoc-check,)
+
+  AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
+  AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
+])
+
+
+dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml])
+# serial 40 IT_PROG_INTLTOOL
+AC_DEFUN([IT_PROG_INTLTOOL], [
+AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_NLS])dnl
+
+case "$am__api_version" in
+    1.[01234])
+       AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool])
+    ;;
+    *)
+    ;;
+esac
+
+if test -n "$1"; then
+    AC_MSG_CHECKING([for intltool >= $1])
+
+    INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+    INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+    [INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+    ]
+    AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found])
+    test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
+       AC_MSG_ERROR([Your intltool is too old.  You need intltool $1 or later.])
+fi
+
+AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update])
+AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge])
+AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract])
+if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then
+    AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.])
+fi
+
+  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@'
+     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' 
+      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_SERVICE_RULE='%.service: %.service.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+   INTLTOOL_POLICY_RULE='%.policy:    %.policy.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+
+_IT_SUBST(INTLTOOL_DESKTOP_RULE)
+_IT_SUBST(INTLTOOL_DIRECTORY_RULE)
+_IT_SUBST(INTLTOOL_KEYS_RULE)
+_IT_SUBST(INTLTOOL_PROP_RULE)
+_IT_SUBST(INTLTOOL_OAF_RULE)
+_IT_SUBST(INTLTOOL_PONG_RULE)
+_IT_SUBST(INTLTOOL_SERVER_RULE)
+_IT_SUBST(INTLTOOL_SHEET_RULE)
+_IT_SUBST(INTLTOOL_SOUNDLIST_RULE)
+_IT_SUBST(INTLTOOL_UI_RULE)
+_IT_SUBST(INTLTOOL_XAM_RULE)
+_IT_SUBST(INTLTOOL_KBD_RULE)
+_IT_SUBST(INTLTOOL_XML_RULE)
+_IT_SUBST(INTLTOOL_XML_NOMERGE_RULE)
+_IT_SUBST(INTLTOOL_CAVES_RULE)
+_IT_SUBST(INTLTOOL_SCHEMAS_RULE)
+_IT_SUBST(INTLTOOL_THEME_RULE)
+_IT_SUBST(INTLTOOL_SERVICE_RULE)
+_IT_SUBST(INTLTOOL_POLICY_RULE)
+
+# Check the gettext tools to make sure they are GNU
+AC_PATH_PROG(XGETTEXT, xgettext)
+AC_PATH_PROG(MSGMERGE, msgmerge)
+AC_PATH_PROG(MSGFMT, msgfmt)
+AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then
+    AC_MSG_ERROR([GNU gettext tools not found; required for intltool])
+fi
+xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`"
+mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`"
+mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`"
+if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then
+    AC_MSG_ERROR([GNU gettext tools not found; required for intltool])
+fi
+
+AC_PATH_PROG(INTLTOOL_PERL, perl)
+if test -z "$INTLTOOL_PERL"; then
+   AC_MSG_ERROR([perl not found])
+fi
+AC_MSG_CHECKING([for perl >= 5.8.1])
+$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
+if test $? -ne 0; then
+   AC_MSG_ERROR([perl 5.8.1 is required for intltool])
+else
+   IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`"
+   AC_MSG_RESULT([$IT_PERL_VERSION])
+fi
+if test "x$2" != "xno-xml"; then
+   AC_MSG_CHECKING([for XML::Parser])
+   if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+       AC_MSG_RESULT([ok])
+   else
+       AC_MSG_ERROR([XML::Parser perl module is required for intltool])
+   fi
+fi
+
+# Substitute ALL_LINGUAS so we can use it in po/Makefile
+AC_SUBST(ALL_LINGUAS)
+
+# Set DATADIRNAME correctly if it is not set yet
+# (copied from glib-gettext.m4)
+if test -z "$DATADIRNAME"; then
+  AC_LINK_IFELSE(
+    [AC_LANG_PROGRAM([[]],
+                     [[extern int _nl_msg_cat_cntr;
+                       return _nl_msg_cat_cntr]])],
+    [DATADIRNAME=share],
+    [case $host in
+    *-*-solaris*)
+    dnl On Solaris, if bind_textdomain_codeset is in libc,
+    dnl GNU format message catalog is always supported,
+    dnl since both are added to the libc all together.
+    dnl Hence, we'd like to go with DATADIRNAME=share
+    dnl in this case.
+    AC_CHECK_FUNC(bind_textdomain_codeset,
+      [DATADIRNAME=share], [DATADIRNAME=lib])
+    ;;
+    *)
+    [DATADIRNAME=lib]
+    ;;
+    esac])
+fi
+AC_SUBST(DATADIRNAME)
+
+IT_PO_SUBDIR([po])
+
+])
+
+
+# IT_PO_SUBDIR(DIRNAME)
+# ---------------------
+# All po subdirs have to be declared with this macro; the subdir "po" is
+# declared by IT_PROG_INTLTOOL.
+#
+AC_DEFUN([IT_PO_SUBDIR],
+[AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS.
+dnl
+dnl The following CONFIG_COMMANDS should be exetuted at the very end
+dnl of config.status.
+AC_CONFIG_COMMANDS_PRE([
+  AC_CONFIG_COMMANDS([$1/stamp-it], [
+    if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then
+       AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.])
+    fi
+    rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp"
+    >"$1/stamp-it.tmp"
+    [sed '/^#/d
+        s/^[[].*] *//
+        /^[    ]*$/d
+       '"s|^|  $ac_top_srcdir/|" \
+      "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES"
+    ]
+    [sed '/^POTFILES =/,/[^\\]$/ {
+               /^POTFILES =/!d
+               r $1/POTFILES
+         }
+        ' "$1/Makefile.in" >"$1/Makefile"]
+    rm -f "$1/Makefile.tmp"
+    mv "$1/stamp-it.tmp" "$1/stamp-it"
+  ])
+])dnl
+])
+
+# _IT_SUBST(VARIABLE)
+# -------------------
+# Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST
+#
+AC_DEFUN([_IT_SUBST],
+[
+AC_SUBST([$1])
+m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])])
+]
+)
+
+# deprecated macros
+AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL])
+# A hint is needed for aclocal from Automake <= 1.9.4:
+# AC_DEFUN([AC_PROG_INTLTOOL], ...)
+
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file 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.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+                  [m4_fatal([Libtool version $1 or higher is required],
+                            63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\    *)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+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 "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+       [m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+       [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+          m4_quote(lt_decl_varnames),
+       m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+                                          [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+       dnl If the libtool generation code has been placed in $CONFIG_LT,
+       dnl instead of duplicating it all over again into config.status,
+       dnl then we will have config.status run $CONFIG_LT later, so it
+       dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# 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 "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+       [lt_cv_ld_exported_symbols_list=yes],
+       [lt_cv_ld_exported_symbols_list=no])
+       LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+        [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "[$]0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen="dlopen"],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+       [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+       [], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    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'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[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]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      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(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_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])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; 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
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+       [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# 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='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       else
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+           fi
+           ;;
+         aCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64 which still supported -KPIC.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd*)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+       ;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+       [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+       [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+       [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         _LT_TAGVAR(whole_archive_flag_spec, $1)=
+         tmp_sharedflag='--shared' ;;
+       xl[[cC]]*)                      # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       _LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[[012]]|aix4.[[012]].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         _LT_TAGVAR(hardcode_direct, $1)=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # 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*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         _LT_TAGVAR(hardcode_direct, $1)=no
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         ;;
+       *)
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       else
+         case $host_os in
+          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+            ;;
+          *)
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+         _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+       motorola)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+       pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  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
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           _LT_TAGVAR(hardcode_direct, $1)=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           _LT_TAGVAR(hardcode_minus_L, $1)=yes
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           _LT_SYS_MODULE_PATH_AIX
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+           ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+               ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+           case $host_os in
+             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+               *)
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+          else
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+        else
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+          _LT_TAGVAR(predep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+        fi
+       else
+        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+          _LT_TAGVAR(postdep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    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
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    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
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+    ;;
+  esac
+])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+                     [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+                  [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [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.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+       [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [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.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+       [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+        [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+                [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+                [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+                [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+                [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+                [m4_define([_LTDL_TYPE], [convenience])])
+
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+            [m4_foreach([_Lt_suffix],
+               ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+       [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+                [lt_append([$1], [$2], [$3])$4],
+                [$5])],
+         [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+       [$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
+
+# ltversion.m4 -- version numbers                      -*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file 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.
+
+# Generated from ltversion.in.
+
+# serial 3017 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
+
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file 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.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],             [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+
+# nls.m4 serial 3 (gettext-0.15)
+dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file 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
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+AC_DEFUN([AM_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)
+])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# 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.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=m4_default([$1], [0.9.0])
+       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               PKG_CONFIG=""
+       fi
+               
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+                    [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+        else 
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+       ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+               [AC_MSG_RESULT([no])
+                $4])
+elif test $pkg_failed = untried; then
+       ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+               [$4])
+else
+       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+       ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# This was merged into AC_PROG_CC in Autoconf.
+
+AU_DEFUN([AM_PROG_CC_STDC],
+[AC_PROG_CC
+AC_DIAGNOSE([obsolete], [$0:
+       your code should no longer depend upon `am_cv_prog_cc_stdc', but upon
+       `ac_cv_prog_cc_stdc'.  Remove this warning and the assignment when
+       you adjust the code.  You can also remove the above call to
+       AC_PROG_CC if you already called it elsewhere.])
+am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc
+])
+AU_DEFUN([fp_PROG_CC_STDC])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 16
+
+# 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.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+             [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                 [_AM_DEPENDENCIES(CC)],
+                 [define([AC_PROG_CC],
+                         defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES(CXX)],
+                 [define([AC_PROG_CXX],
+                         defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES(OBJC)],
+                 [define([AC_PROG_OBJC],
+                         defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well.  Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+       [enable], [m4_define([am_maintainer_other], [disable])],
+       [disable], [m4_define([am_maintainer_other], [enable])],
+       [m4_define([am_maintainer_other], [enable])
+        m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+  AC_ARG_ENABLE([maintainer-mode],
+[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
+                         (and sometimes confusing) to the casual installer],
+      [USE_MAINTAINER_MODE=$enableval],
+      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# 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" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $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]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/barcode-0.98/COPYING b/barcode-0.98/COPYING
new file mode 100644 (file)
index 0000000..a43ea21
--- /dev/null
@@ -0,0 +1,339 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, 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.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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
+\f
+       Appendix: 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., 675 Mass Ave, Cambridge, MA 02139, 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/barcode-0.98/ChangeLog b/barcode-0.98/ChangeLog
new file mode 100644 (file)
index 0000000..024706d
--- /dev/null
@@ -0,0 +1,460 @@
+2002-03-01  Alessandro Rubini  <rubini@linux.it>
+
+       * library.c (Barcode_Encode): handle bitsets separately, like
+               in Barcode_Print (otherwise, you might loose NO_CHECKSUM).
+
+       * debian/changelog: moved to 0.98 (but should fix all debian/ stuff)
+
+       * contrib/barcode-for-delphi.tar.gz: new, contributed by Michael Geddes
+
+       * contrib/barcode-for-delphi.tar.gz.README: short info for file above
+
+       * main.c (main): allow "-g" to set size of code in a table as well
+               -- suggested and initiallt implemented by Joachim Reichelt.
+       (main): fixed missing "Page: 1 1" in postscript for tables
+       (main): for tables don't use Encode_and_Print, use a local
+               unrolled version, so the default margin can be removed and
+               we avoid problems with negative xoff in the output phase
+               (first column may be offset, as noted by Karl Magnus Kolstoe)
+
+       * doc/doc.barcode: documented change above.
+       
+       * README: removed refernces to systemy.it, I'm no more there
+       Added link to FreeBSD ports tree and GLabels
+       Organized as sections with titles
+
+       * contrib/barcode-SVG.tar.gz: new contribution, by David J. Humphreys
+
+       * contrib/barcode-SVG.tar.gz.README: short description of file above
+
+       * contrib/grab-0.0.4.tar.gz: new program, by Tuukka Toivonen.
+
+       * contrib/grab-0.0.4.tar.gz.README: short description of file above
+       
+2002-03-01  Boszormenyi Zoltan <zboszor@externet.hu>
+
+       * barcode.spec: new file
+
+2002-02-27  Alessandro Rubini  <rubini@linux.it>
+
+       * bookland/bookland.py: updated to version 0.92 by Judah Milgram
+
+2001-11-13  Alessandro Rubini  <rubini@linux.it>
+
+       * README: Added a pointer to the Windows port.
+
+2001-11-09  Cloyce D. Spradling  <cloyce@headgear.org>
+       
+       * code128.c (Barcode_128b_verify): prototype fix (unsigned char).
+       
+       * ps.c (Barcode_ps_print): the comment for ascii codes must only
+               be printed if ascii is being printed (benign bug).
+
+2001-11-06  Christoph Pross  <c.pross@beck-ipc.com>
+
+       * pcl.c (Barcode_pcl_print): bugfix: bars were misplaced
+       
+2001-10-16  Nathan D. Holmes <nh412124@ursa.cosd.fedex.com>
+
+       ====> Version 0.97 released to ftp.systemy.it and ftp.gnu.org
+
+       * code93.c: new file (I modified something as well - Alessandro)
+
+       * doc/doc.barcode (Supported Encodings): added docs for code93
+
+       * main.c: added code93 names
+
+       * Makefile.in (LIBOBJECTS): added code93.o
+
+       * library.c: added code93 entry points
+
+2001-10-16  Alessandro Rubini  <rubini@linux.it>
+
+       * doc/manpager: added (trivial) support for @itemize, added copyright
+
+       * sample.c (main): accept -P to create PCL output
+
+       * doc/doc.barcode (PCL Output): added the section, using text
+       provided by Andrea Scopece and turning it into texinfo.
+       Removed also a few extra newlines that made bad man pages
+
+2001-10-16  Andrea Scopece  <a.scopece@vizzavi.it>
+
+       * barcode.h: added BARCODE_OUT_PCL and BARCODE_OUT_PCL_III
+
+       * library.c (Barcode_Print): use BARCODE_OUT_PCL to select pcl_print()
+
+       * Makefile.in (LIBOBJECTS): added pcl.o
+
+       * pcl.c: new file, with PCL output support
+
+2001-10-16  Alessandro Rubini  <rubini@linux.it>
+
+       * doc/doc.barcode (Supported Encodings): added documentation for
+               EAN and UPC with checksum, as coded by mr. Böszörményi (below)
+
+2001-10-16  Boszormenyi Zoltan <zboszor@externet.hu>
+
+       * ean.c: 
+
+       I found that barcode-0.96 does not correctly encodes UPC-E.
+       This was mainly because in upc_e_to_a() the switch() branches
+       all ended without "break;".
+
+       Printing UPC-E did not print the leading encoding number and
+       the trailing UPC-A checksum. Now it does.
+
+       Accept EAN-13 and EAN-8 with and without the checksum.
+       So always treat 7 and 12 digit sequences as valid EAN codes
+       and accept 8 and 13 digit sequences as valid EAN codes when
+       the last digit is the same as the calculated one.
+
+       Accept UPC-A as above (11 or 12 digit sequences.)
+
+       Accepts UPC-E as:
+       6 digit sequence: the middle part of the code (leading '0' assumed)
+       7 digit sequence: the middle part and either a leading '0' or '1',
+           or a trailing UPC-A checksum. In that case, leading '0' assumed.
+       8 digit sequence: a leading '0' or '1', middle part, checksum
+
+       UPC-A, UPC-E, EAN-13, and EAN-8 may all include
+       an additional barcode to the right of the main barcode.
+
+       As a 7 or a 12 digit sequence may be ambiguous, please remember
+       that EAN is checked before UPC if you specified BARCODE_ANY.
+
+2001-08-20  Alessandro Rubini  <rubini@linux.it>
+
+       * sample.c (main): added upc-e and ean-8 samples
+
+2001-08-11  Boszormenyi Zoltan <zboszor@externet.hu>
+
+       * ps.c (Barcode_ps_print): don't output "showpage" in EPS mode
+
+2001-08-11  Alessandro Rubini  <rubini@linux.it>
+
+       * README: Changed host names, added barcode-commit list.
+
+2000-11-29  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * doc/doc.barcode (The Field List): 1pt == 0.352mm, not 0.0352
+               (thanks to Stephen Irven for reporting)
+
+2000-11-09  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       ====> Version 0.96 released to ftp.systemy.it and ftp.gnu.org
+
+       * doc/Makefile.in ($(TARGET).html): fixed bug introduced on Sep 08
+
+       * doc/doc.barcode (top): correctly deal with "makeinfo --html"
+
+2000-11-08  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * README: new network pointers added
+
+       * codabar.c (Barcode_cbr_encode): don't print ascii text for the
+               checksum.
+
+       * doc/doc.barcode (The Intermediate Representaion): new section
+       Documented the new encodings by Leonid.
+       Promoted two sections to chapters
+       Added Leonid in the AUTHORS section of the manpage.
+
+       * Makefile.in: don't remove docs in distclean, as the distribution
+               now includes the docs
+       
+2000-11-07  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * Makefile.in (clean): don't remove docs, do that only in distclean
+
+       * doc/Makefile.in: a new life for the former Makefile (to build
+               with both gmake and pmake with features added on 2000-09-08)
+
+       * configure.in: use $MAKE in checking for gmake if set
+               (to allow testing with BSD make)
+       Check if makeinfo can manage html, used for doc/Makefile.in
+
+2000-11-07  Leonid A. Broukhis <leob@mailcom.com>
+
+       * code128.c (Barcode_encode_as): fixed a bug that prevented F
+               symbols to be correctly encoded.
+
+       * plessey.c: new file, for Plessey encoding.
+
+       * msi.c: new file, for MSI encoding.
+
+       * codabar.c: new file, for CodaBar encoding.
+
+       * code128.c (Barcode_128raw_encode): new encoding
+       (Barcode_128raw_verify): checker for new encoding
+
+       * barcode.h, library.c, main.c: added code128raw, codabar,
+               MSI and Plessey
+
+2000-11-07  Hans Schou <chlor@schou.dk>
+
+       * contrib/barcodeps-0.1.tgz: new file, sent to Alessandro on Oct 7
+
+2000-10-10  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * doc/manpager: use gsub instead of gensub, even though it may
+               leas to problems with some input. This achieves compatibility
+               with the original awk, so gawk is not needed any more
+
+2000-10-02  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * ps.c (Barcode_ps_print): add a backslash in front of '(' too.
+               Suggested by H Y <hlyi@yahoo.com>.
+       (Barcode_ps_print): use ps arrays to get compact (and prettier)
+               PostScript output. Suggested by Hans Schou <chlor@schou.dk>.
+
+       * main.c (get_geometry): accept "+offset+offset" to keep default size.
+               Suggested by Godmar Back <gback@cs.utah.edu>.
+
+2000-09-16  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * ps.c (Barcode_ps_print): use "half text height" instead of 
+               "two text heights" as minimum bar height. Suggested by
+               Oliver Vecernik <vecernik@aon.at>.
+
+2000-09-14  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * barcode.h: added the standard  ``extern "C"'' stuff for C++
+       (bug reported by Dany Pardo <dani@minerva.enpl.es>)
+
+2000-09-08  Andrea Ferraris  <andrea@gnu.systemy.it>
+
+       * doc/Makefile: added support for pdf and html via makeinfo
+
+       * doc/doc.barcode: added a missing trailing dot in an xref
+
+2000-08-28  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * i25.c (Barcode_i25_encode): fixed checksum calculation
+               (thanks to Hans Schou <chlor@schou.dk> for reporting)
+
+2000-05-19  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       ====> Version 0.95.1 released to ftp.prosa.it
+
+       * code128.c (Barcode_128_make_array): use code C if encoding 2 digits
+
+2000-05-08  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * cmdline.c (commandline_errormsg): removed "?:" gcc extension
+
+       * configure.in: added checks for unistd.h and strcasecmp, as
+               windows doesn't have them (thanks Marten Karl)
+
+2000-04-21  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * doc/Makefile: modified to build with both gmake and pmake
+
+       * Makefile: modified to build with both gmake and pmake
+
+2000-04-20  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * Makefile.in (.depend): removed gmake-specific features.
+               Thanks to Jukka A. Ukkonen for reporting.
+
+       * configure.in: detect gmake and avoid its features if not there
+
+       * ps.c (Barcode_ps_print): fix: codes with (relatively) short bars
+               were enlarged in height instead of reduced in width (also
+               the enlarging was wrong). Thanks to Rob Seace for reporting.
+
+2000-04-09  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * code128.c (Barcode_128_encode): removed extra messages to stderr,
+               forgot in the code when I finished code128 support
+
+       * doc/doc.barcode: bugfix: in the description of geometry, the unit
+               of measure is configurable 
+
+2000-02-03  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+====> Version 0.95 released to ftp.prosa.it and ftp.gnu.org
+
+2000-01-26  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * code128.c (Barcode_128_encode): new encoding: full-featured code128
+
+       * README: added reference to original ftp site
+
+2000-01-05  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * main.c (get_page_geometry): avoid using snprintf(), missing in HP/UX
+
+       * code39.c (Barcode_39_verify): added missing parens (a syntax error,
+               but only apparent where islower() is not a macro). Thanks to
+               Alexandre Oliva for finding it out.
+
+2000-01-04  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * doc/doc.barcode (The API): removed spurious "flags" argument
+               from description of Barcode_Encode_and_Print().
+               Thanks to Willy Wittesaele for noting the error.
+
+1999-12-24  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * main.c (get_geometry): fixed the y margin (thanks to Steve Kunath)
+
+====> Version 0.94 released to ftp.prosa.it and ftp.gnu.org
+
+1999-10-24  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * INSTALL: added instructions to install on a Debian GNU/Linux system
+
+       * debian/*: edited information for proper Debian support
+       
+       * debian/rules (binary-arch): new file, from "deb-make"
+
+       * Makefile.in (install): added "-m 0644" to install non-executables
+
+       * code128.c (Barcode_128b_encode): fixed checksum calculation.
+
+====> Version 0.93 released to ftp.prosa.it and ftp.gnu.org
+
+1999-09-26  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * doc/doc.barcode: fixed the rendering of complex options (-g and -t)
+       Removed extra "table of contents" heading in the ps output
+       Changed attribution on cover page
+
+       * main.c (get_table and others): be more specific in error msgs
+       (get_page_geometry): numeric specification is according to "-u"
+       (get_table): accept unsymmetric margin specification
+       (option_table): added "-u" to accept "cm", "mm", "in", "pt"
+       (get_page_geometry): bugfix: numeric spec was always consideder mm
+
+       * cmdline.c (commandline): don't always print help
+
+       * Makefile.in ($(INFO)): added missing dependency: distributed docs
+               formats were out of date with distributed doc source.
+
+1999-09-13  Alessandro Rubini  <rubini@amelia.prosa.it>
+
+       * main.c (main): print tables: y used xmargin (Tim Withers,Jon Bakken)
+
+1999-09-06  Alessandro Rubini  <rubini@plinio.prosa.it>
+
+       * Makefile.in: prevent -Wall when compiling getopt.
+
+       * i25.c, ean.c, ps.c: switched to unsigned char, to prevent warnings
+               on newer gcc's (thanks Al Piszcz)
+
+====> Version 0.92 released to ftp.prosa.it and ftp.gnu.org
+
+1999-08-31  Alessandro Rubini  <rubini@plinio.prosa.it>
+
+       * i25.c: the right guard was thinner than other bars
+
+       * doc/doc.barcode: spelling and manpage fixes (thanks Joachim Schaaf)
+
+====> Version 0.91.4 released to ftp.prosa.it
+
+1999-08-23  Thad Floryan <thad@thadlabs.com>
+
+       * main.c (strerror): replacement strerror selected by autoconf
+
+1999-08-06  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * changed all "ENODATA" in "EINVAL", as some system miss ENODATA
+
+       * Makefile.in (all): removed ".depend" from all, as it needs gcc
+
+       * i25.c (Barcode_i25_encode): fixed wrong free() in an unlinely path
+
+       * ean.c (Barcode_ean_encode): don't use sprintf's result, as some
+       systems return a char pointer instead of the number of chars.
+
+       * configure.in: new file, as autoconf support is being added
+
+====> Version 0.91.3 released to ftp.prosa.it
+
+1999-08-05  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * code128.c (Barcode_128c_encode): fixed malloc of textinfo (was short)
+
+       * i25.c (Barcode_i25_encode): new encoding: interleaved 2 of 5
+
+       * ean.c (Barcode_ean_encode): enlarged static "text", to fit add-5
+
+       * code128.c (Barcode_128b_encode): new encoding: 128-B 
+
+====> Version 0.91.2 released to ftp.prosa.it
+
+1999-08-04  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * bookland/bookland.py: upgraded to version 0.06 (Judas Milgram)
+
+       * ean.c (Barcode_ean_encode): fixed layout of 1st/last digit in UPC-A
+
+       * code128.c (Barcode_128c_encode): fixed checksum calculation
+
+====> Version 0.91.1 released to ftp.prosa.it
+
+1999-07-09  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * sample.c (main): due changes to show code128-C
+
+       * code128.c (Barcode_128c_encode): implemented code 128-C
+
+       * ps.c (Barcode_ps_print): Accept float position and font size
+
+       * code39.c (Barcode_39_encode): reduced font (looked too big)
+
+====> Version 0.91 released to both ftp.prosa.it and ftp.gnu.org
+
+1999-07-08  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * ps.c (Barcode_ps_print): shrink all the bars by 0.15 points
+       (Barcode_ps_print): Use Helvetica as font, not Courier-Bold
+       (Barcode_ps_print): remember previous font to make shorter ps output
+
+1999-07-07  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * bookland/bookland.py: new enntry, by Judah Milgram.
+
+       * ean.c (Barcode_isbn_verify): fixed bug with "-X" codes (thanks Judah)
+
+====> Version 0.90.3 released to ftp.prosa.it/pub/software
+
+1999-07-07  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * doc/doc.barcode: fixed the "BUGS" section (remove fixed stuff)
+
+       * ean.c (Barcode_ean_encode): added '+' markers in partial and textinfo
+
+       * ps.c (Barcode_ps_print): added support for text over bars ('+' mode)
+
+====> Version 0.90.2, internal checkpoint
+
+1999-07-06  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * Makefile: dirty autodetect of libpaper
+
+       * main.c (get_page_geometry): parse a cmdline argument (mcm@glisco.it)
+       (main): added "--version"
+       (main): added diagnostic message for unencodable strings
+
+====> Version 0.90.1 released to ftp.prosa.it/pub/software
+
+1999-07-03  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * barcode.h: removed BARCODE_OUT_PG_* as only the library doesn't
+       need to hack with the page size.
+
+       * ean.c (Barcode_ean_encode): supplemental 2 and 5 encodings (no text)
+
+       * library.c: use unsigned char all over the place, to prevent warnings
+
+1999-07-01  Alessandro Rubini  <rubini@morgana.systemy.it>
+
+       * ean.c: added EAN-8 and UPC-E support
+
+       * Updated the address of the FSF in any source file 
+
+       * README: new file. 
+
+====> Version 0.90 is the first public release. No Changelog up to now.
diff --git a/barcode-0.98/INSTALL b/barcode-0.98/INSTALL
new file mode 100644 (file)
index 0000000..5a6cb87
--- /dev/null
@@ -0,0 +1,31 @@
+
+Installing on generic Unix systems
+----------------------------------
+
+The package includes both a library and a standalone program.
+To install everything try
+
+       ./configure && make && make install
+
+To uninstall, try
+
+       make uninstall
+
+You may have problems compiling the package on non-GNUish systems,
+because the tool currently uses both gmake and gawk features, and I have
+no access to non-gnu systems. If your operating system isn't able to
+compile barcode and you are willing to help porting, feel free to call me.
+
+
+Installing on Debian/GNU systems
+--------------------------------
+
+The suggested installation here includes creation of a Debian package:
+
+       debian/rules binary
+
+Then, just install using dpkg:
+
+       dpkg -i ../barcode-0.98_*.deb
+
+(the "*" here will represent your architecture: "i386", "alpha", "sparc", ...)
diff --git a/barcode-0.98/Makefile.am b/barcode-0.98/Makefile.am
new file mode 100644 (file)
index 0000000..e7456ab
--- /dev/null
@@ -0,0 +1,73 @@
+INCLUDES = \
+       $(GLABELS_CFLAGS)
+
+
+BC_FILES =             \
+       library.c       \
+       ean.c           \
+       code128.c       \
+       code39.c        \
+       code93.c        \
+       i25.c           \
+       msi.c           \
+       plessey.c       \
+       codabar.c       \
+       ps.c            \
+       pcl.c           \
+       barcode.h       
+
+noinst_LTLIBRARIES = libbarcode.la
+
+libbarcode_la_SOURCES = $(BC_FILES)
+
+EXTRA_DIST =                   \
+       barcode.spec            \
+       ChangeLog               \
+       cmdline.c               \
+       cmdline.h               \
+       configure               \
+       configure.in.dist       \
+       COPYING                 \
+       INSTALL                 \
+       install-sh              \
+       main.c                  \
+       Makefile.in.dist        \
+       missing                 \
+       mkinstalldirs           \
+       README                  \
+       README.glabels          \
+       sample.c                \
+       TODO                    \
+       bookland/bookland.py    \
+       compat/getopt.c         \
+       compat/getopt.h         \
+       contrib/barcode-for-delphi.tar.gz               \
+       contrib/barcode-SVG.tar.gz.README               \
+       contrib/barcode-for-delphi.tar.gz.README        \
+       contrib/barcodeps-0.1.tgz                       \
+       contrib/grab-0.0.4.tar.gz                       \
+       contrib/barcodeps-0.1.tgz.README                \
+       contrib/grab-0.0.4.tar.gz.README                \
+       contrib/barcode-SVG.tar.gz                      \
+       debian/changelog                \
+       debian/control                  \
+       debian/copyright                \
+       debian/dirs                     \
+       debian/info                     \
+       debian/README.debian            \
+       debian/rules                    \
+       doc/barcodedoc.txt              \
+       doc/barcode.ps          \
+       doc/infofilter          \
+       doc/manpager            \
+       doc/texi2html           \
+       doc/barcode.info        \
+       doc/mktxt               \
+       doc/barcode.pdf         \
+       doc/doc.barcode         \
+       doc/Makefile.in         \
+       doc/README
+
+
+
+
diff --git a/barcode-0.98/Makefile.in b/barcode-0.98/Makefile.in
new file mode 100644 (file)
index 0000000..4bbfd2a
--- /dev/null
@@ -0,0 +1,596 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = barcode-0.98
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       COPYING ChangeLog INSTALL TODO install-sh missing \
+       mkinstalldirs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libbarcode_la_LIBADD =
+am__objects_1 = library.lo ean.lo code128.lo code39.lo code93.lo \
+       i25.lo msi.lo plessey.lo codabar.lo ps.lo pcl.lo
+am_libbarcode_la_OBJECTS = $(am__objects_1)
+libbarcode_la_OBJECTS = $(am_libbarcode_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libbarcode_la_SOURCES)
+DIST_SOURCES = $(libbarcode_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       $(GLABELS_CFLAGS)
+
+BC_FILES = \
+       library.c       \
+       ean.c           \
+       code128.c       \
+       code39.c        \
+       code93.c        \
+       i25.c           \
+       msi.c           \
+       plessey.c       \
+       codabar.c       \
+       ps.c            \
+       pcl.c           \
+       barcode.h       
+
+noinst_LTLIBRARIES = libbarcode.la
+libbarcode_la_SOURCES = $(BC_FILES)
+EXTRA_DIST = \
+       barcode.spec            \
+       ChangeLog               \
+       cmdline.c               \
+       cmdline.h               \
+       configure               \
+       configure.in.dist       \
+       COPYING                 \
+       INSTALL                 \
+       install-sh              \
+       main.c                  \
+       Makefile.in.dist        \
+       missing                 \
+       mkinstalldirs           \
+       README                  \
+       README.glabels          \
+       sample.c                \
+       TODO                    \
+       bookland/bookland.py    \
+       compat/getopt.c         \
+       compat/getopt.h         \
+       contrib/barcode-for-delphi.tar.gz               \
+       contrib/barcode-SVG.tar.gz.README               \
+       contrib/barcode-for-delphi.tar.gz.README        \
+       contrib/barcodeps-0.1.tgz                       \
+       contrib/grab-0.0.4.tar.gz                       \
+       contrib/barcodeps-0.1.tgz.README                \
+       contrib/grab-0.0.4.tar.gz.README                \
+       contrib/barcode-SVG.tar.gz                      \
+       debian/changelog                \
+       debian/control                  \
+       debian/copyright                \
+       debian/dirs                     \
+       debian/info                     \
+       debian/README.debian            \
+       debian/rules                    \
+       doc/barcodedoc.txt              \
+       doc/barcode.ps          \
+       doc/infofilter          \
+       doc/manpager            \
+       doc/texi2html           \
+       doc/barcode.info        \
+       doc/mktxt               \
+       doc/barcode.pdf         \
+       doc/doc.barcode         \
+       doc/Makefile.in         \
+       doc/README
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu barcode-0.98/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu barcode-0.98/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libbarcode.la: $(libbarcode_la_OBJECTS) $(libbarcode_la_DEPENDENCIES) 
+       $(LINK)  $(libbarcode_la_OBJECTS) $(libbarcode_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/codabar.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/code128.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/code39.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/code93.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ean.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i25.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/library.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plessey.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ps.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# 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/barcode-0.98/Makefile.in.dist b/barcode-0.98/Makefile.in.dist
new file mode 100644 (file)
index 0000000..848aa26
--- /dev/null
@@ -0,0 +1,141 @@
+#
+# This Makefile should run fine with both pmake and gmake
+#
+
+CC = @CC@
+CFLAGS = @CFLAGS@ @DEFS@ @NO_GETOPT@ @NO_LIBPAPER@ @NO_STRERROR@
+RANLIB = @RANLIB@
+
+INSTALL = @INSTALL@
+
+LDFLAGS = -L. -l$(TARGET) @LIBPAPER@
+
+prefix = @prefix@
+BINDIR = $(prefix)/bin
+LIBDIR = $(prefix)/lib
+INCDIR = $(prefix)/include
+MAN1DIR = $(prefix)/man/man1
+MAN3DIR = $(prefix)/man/man3
+INFODIR = $(prefix)/info
+
+# getopt may be installed or not, if not take our copy
+GETOPT_O = @GETOPT_O@
+
+TARGET = barcode
+LIBRARY = lib$(TARGET).a
+MAN1 = $(TARGET).1
+MAN3 = $(TARGET).3
+INFO = doc/$(TARGET).info
+HEADER = $(TARGET).h
+
+LIBOBJECTS = library.o ean.o code128.o code39.o code93.o i25.o \
+               msi.o plessey.o codabar.o \
+               ps.o pcl.o
+EXEOBJECTS = main.o cmdline.o $(GETOPT_O)
+ALLSOURCES = $(LIBOBJECTS:.o=.c) $(EXEOBJECT:.o=.c)
+
+
+#Hmm... "RM" is undefined in pmake
+RM = rm
+
+all: $(TARGET) $(LIBRARY) $(MAN1) $(MAN3) $(INFO) sample
+
+$(TARGET): $(LIBRARY) $(EXEOBJECTS)
+       $(CC) $(CFLAGS) $(EXEOBJECTS) $(LDFLAGS) -o $(TARGET)
+
+sample: sample.o $(LIBRARY)
+       $(CC) $(CFLAGS) sample.o $(LDFLAGS) -o $@ 
+
+# Avoid the standard CFLAGS, to avoid -Wall and -DNO_GETOPT
+compat/getopt.o: compat/getopt.c
+       $(CC) -O -c compat/getopt.c -o $@
+
+$(LIBRARY): $(LIBOBJECTS)
+       $(AR) r $(LIBRARY) $(LIBOBJECTS)
+       $(RANLIB) $(LIBRARY)
+
+$(MAN1) $(MAN3): doc/doc.$(TARGET)
+       awk -f doc/manpager doc/doc.$(TARGET)
+
+
+# Unfortunately, pmake has no "-C". Also, "pmake -n" doesn't follow the cd.
+$(INFO): doc/doc.$(TARGET)
+       cd doc && $(MAKE) 
+
+install:
+       $(INSTALL) -d $(BINDIR) $(INCDIR) $(LIBDIR) $(MAN1DIR) \
+               $(MAN3DIR) $(INFODIR)
+       $(INSTALL) -c $(TARGET) $(BINDIR)
+       $(INSTALL) -c -m 0644 $(HEADER) $(INCDIR)
+       $(INSTALL) -c -m 0644  $(LIBRARY) $(LIBDIR)
+       $(INSTALL) -c -m 0644  $(MAN1) $(MAN1DIR)
+       $(INSTALL) -c -m 0644  $(MAN3) $(MAN3DIR)
+       $(INSTALL) -c -m 0644  $(INFO) $(INFODIR)
+
+uninstall:
+       $(RM) -f $(BINDIR)/$(TARGET)
+       $(RM) -f $(INCDIR)/$(HEADER)
+       $(RM) -f $(LIBDIR)/$(LIBRARY)
+       $(RM) -f $(MAN1DIR)/$(MAN1)
+       $(RM) -f $(MAN3DIR)/$(MAN3)
+       $(RM) -f $(INDODIR)/$(INFO)
+
+#Make clean keeps the compiled documents
+clean:
+       $(RM) -f *.o */*.o *~ */*~ $(TARGET) $(LIBRARY)
+       $(RM) -f  $(MAN1) $(MAN3) core sample
+       cd doc && $(MAKE) terse
+       $(RM) -f .depend
+
+distclean: clean
+       if [ -f build ]; then debian/rules clean; fi
+       # remove the configure stuff as well
+       $(RM) -f Makefile config.h config.log config.status config.cache \
+               doc/Makefile
+
+cleanest: clean
+       cd doc && $(MAKE) clean
+
+Makefile: Makefile.in configure
+       ./configure
+
+configure: configure.in
+       autoconf
+
+.depend: $(ALLSOURCES)
+       $(CC) $(CFLAGS) -MM $(ALLSOURCES) > $@
+
+depend: .depend
+
+tar:
+       @if [ "x" = "x$(RELEASE)" ]; then \
+           n=`basename \`pwd\``; cd ..; tar cvf - $$n | gzip > $$n.tar.gz; \
+           echo 'you can set a numeric $$(RELEASE) to make a named tar'; \
+       else \
+           if [ -d ../$(TARGET)-$(RELEASE) ]; then \
+               rm -rf ../$(TARGET)-$(RELEASE); \
+           fi; \
+           mkdir ../$(TARGET)-$(RELEASE) || exit 1; \
+           cp -a . ../$(TARGET)-$(RELEASE) && cd .. && \
+               tar --exclude '*/CVS*' \
+                   -cvzf $(TARGET)-$(RELEASE).tar.gz $(TARGET)-$(RELEASE); \
+       fi
+
+# print the version, as I usually forget to update it when distributing
+printv:
+       @grep -n VERSION $(HEADER) /dev/null
+       @grep -n set.version doc/doc.$(TARGET) /dev/null
+       @grep -n dpkg.-i INSTALL /dev/null
+
+# and this is how I make the distribution
+distrib: $(INFO) distclean tar printv
+
+
+.PHONY: all install uninstall mostlyclean clean disclean depend \
+       tar printv distrib
+
+# Only if make is gmake, have a rule to conditionally include .depend
+@GMAKEDEPEND0@
+@GMAKEDEPEND1@
+@GMAKEDEPEND2@
+
diff --git a/barcode-0.98/README b/barcode-0.98/README
new file mode 100644 (file)
index 0000000..d3ae2a7
--- /dev/null
@@ -0,0 +1,93 @@
+
+NETWORK LINKS
+=============
+
+This is GNU-barcode. The latest release can be downloaded from ftp.gnu.org
+and mirrors:
+       ftp://ftp.gnu.org/pub/gnu/barcode/
+
+It is also available from my own ftp/http server
+       ftp://ar.linux.it/pub/barcode/
+       http://ar.linux.it/pub/barcode/ (same as above).
+       
+The current source tree is available by anonymous CVS. See
+       http://ar.linux.it/software/#cvs
+
+Plesae note that ar.linux.it/pub/barcode also includes CVS snapshots,
+semi-atumatically taken when I commit stuff to CVS. Note that CVS
+snapshots include "CVS/" directories, so you can then "cvs update" for
+further updates.
+
+The documentation is online at:
+       http://ar.linux.it/software/barcode
+
+The MS-Windows port is maintained at:
+       http://gnuwin32.sourceforge.net/packages/barcode.htm
+
+It as also been included in the FreeBSD ports tree in the "graphics" section.
+This means /usr/ports/graphics/barcode. It's thus available from:
+       http://www.freebsd.org/ports/graphics.html
+
+GLabels, at http://snaught.com/glabels/, uses barcode internally, too.
+
+DESCRIPTION
+===========
+
+The package is meant to solve most needs in barcode creation with a
+conventional printer. It can create printouts for the conventional
+product tagging standards: UPC-A, UPC-E, EAN-13, EAN-8, ISBN, as well
+as a few other formats. Ouput is generated as either Postscript or
+Encapsulated Postscript (other back-ends may be added if needed).
+
+The package is released as both a library and a command-line frontend,
+so that you can include barcode-generation into your application.  The
+program is released in the hope that is proves useful but without any
+warranty, according to the GPL Licence (see ./COPYING).
+
+If you're specifically interested in making an ISBN (Bookland EAN)
+symbol, you might try to get "bookland.py" by Judah Milgram
+(http://www.cgpp.com/bookland/, whose version 0.92 is also included in
+the directory "bookland" within this package, for your convenience).
+While my main target is flexibility his main target is strict
+adherence to the standards. Bookland is free software like the barcode
+library and will probabily have its role in the GNU project.
+Bookland.py is a self-documenting program, you'll enjoy browsing its
+source code.
+
+Other contributed patches and/or software are available in the
+contrib/ directory.
+
+Please take the "no-warranty" disclaimer seriously: even though I
+spent reasonable efforts to make sure the output is useable in
+production you should verify it suits your needs as a faulty bar can
+cost you a bundle, and you'll be on your own. It's up to you to verify
+that the symbol is valid (and, obviously, I'd like to know about any
+problem you encounter). [This paragraph copied verbatim from bookland.py]
+
+
+ACKNOWLEDGMENTS
+===============
+
+I would like to thank both Judah Milgram and Michele Comitini
+(mcm@glisco.it) for their help with this tool, as well as Jim Westveer
+for introducing me to Debian packaging. Several encodings have been
+implemented by Leonid A. Broukhis (leob@mailcom.com).
+
+
+MAILING LISTS
+=============
+
+There is a mailing list where development is coordinated, called
+barcode@lists.linux.it . To get subscribed you should
+       echo subscribe | mail barcode-request@lists.linux.it
+or anything equivalent.
+
+To receive notification of CVS commit messages, please subscribe to
+barcode-commit@ar.linux.it, by issuing:
+       echo subscribe | mail barcode-commit-request@ar.linux.it
+
+(if you guess, "ar" or "arcana" is my own server, while lists.linux.it
+is the mail server of the italian association of gnu/linux users).
+
+/alessandro (rubini@gnu.org)
+
diff --git a/barcode-0.98/README.glabels b/barcode-0.98/README.glabels
new file mode 100644 (file)
index 0000000..b0dc959
--- /dev/null
@@ -0,0 +1,7 @@
+The following changes have been made to the stock barcode-0.98 distribution
+to facilitate compilation with glabels:
+
+       Makefile.in renamed to Makefile.in.dist
+       configure.in renamed to configure.in.dist
+       added Makefile.am, which is configured from ../configure.in
+
diff --git a/barcode-0.98/TODO b/barcode-0.98/TODO
new file mode 100644 (file)
index 0000000..c91c79c
--- /dev/null
@@ -0,0 +1,23 @@
+
+       Possible enhancements that I'd like to add
+
+* verbose mode, printing position information to stderr
+
+* document how a new encoding standard can be added
+
+* add Barcode_String, which has been contributed
+
+* EAN128 (as agreed with Dani Pardo)
+
+* Postnet and associated encoding-specific bar definitions
+
+* Use texinfo 4 with images
+
+* shrink the bars to account for ink spreading
+
+       Currently, small barcodes don't get rendered well. While
+       version 0.91 and later subtracts 0.15 points from the size of
+       the bars (I found that this makes good results for small
+       bars), a smart alghorithm to shrink the bars is needed to get
+       lighter prints at small sizes without loosing readability.
+
diff --git a/barcode-0.98/barcode.h b/barcode-0.98/barcode.h
new file mode 100644 (file)
index 0000000..6b9bdf4
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * barcode.h -- definitions for libbarcode
+ *
+ * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ *
+ *   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.
+ */
+
+#ifndef _BARCODE_H_
+#define _BARCODE_H_
+
+#include <stdio.h>
+
+#define BARCODE_VERSION     "0.98" 
+#define BARCODE_VERSION_INT   9800
+
+/*
+ * The object
+ */
+struct Barcode_Item {
+    int flags;         /* type of encoding and decoding */
+    char *ascii;       /* malloced */
+    char *partial;     /* malloced too */
+    char *textinfo;    /* information about text positioning */
+    char *encoding;    /* code name, filled by encoding engine */
+    int width, height; /* output units */
+    int xoff, yoff;    /* output units */
+    int margin;        /* output units */
+    double scalef;     /* requested scaling for barcode */
+    int error;         /* an errno-like value, in case of failure */
+};
+
+/*
+ * The flags field
+ */
+#define BARCODE_DEFAULT_FLAGS 0x00000000
+
+#define BARCODE_ENCODING_MASK 0x000000ff   /* 256 possibilites... */
+#define BARCODE_NO_ASCII      0x00000100   /* avoid text in output */
+#define BARCODE_NO_CHECKSUM   0x00000200   /* avoid checksum in output */
+
+#define BARCODE_OUTPUT_MASK   0x000ff000   /* 256 output types */
+#define BARCODE_OUT_EPS       0x00001000
+#define BARCODE_OUT_PS        0x00002000
+#define BARCODE_OUT_PCL       0x00004000   /* by Andrea Scopece */
+/*                  PCL_III   0x00008000   */
+#define BARCODE_OUT_PCL_III   0x0000C000
+#define BARCODE_OUT_NOHEADERS 0x00100000   /* no header nor footer */
+
+enum {
+    BARCODE_ANY = 0,     /* choose best-fit */
+    BARCODE_EAN,
+    BARCODE_UPC,        /* upc == 12-digit ean */
+    BARCODE_ISBN,       /* isbn numbers (still EAN13) */
+    BARCODE_39,         /* code 39 */
+    BARCODE_128,        /* code 128 (a,b,c: autoselection) */
+    BARCODE_128C,       /* code 128 (compact form for digits) */
+    BARCODE_128B,       /* code 128, full printable ascii */
+    BARCODE_I25,        /* interleaved 2 of 5 (only digits) */
+    BARCODE_128RAW,     /* Raw code 128 (by Leonid A. Broukhis) */
+    BARCODE_CBR,        /* Codabar (by Leonid A. Broukhis) */
+    BARCODE_MSI,        /* MSI (by Leonid A. Broukhis) */
+    BARCODE_PLS,        /* Plessey (by Leonid A. Broukhis) */
+    BARCODE_93          /* code 93 (by Nathan D. Holmes) */
+};
+
+#define BARCODE_DEFAULT_MARGIN 10
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+/*
+ * Create and destroy barcode structures
+ */
+extern struct Barcode_Item *Barcode_Create(char *text);
+extern int                  Barcode_Delete(struct Barcode_Item *bc);
+
+/*
+ * Encode and print
+ */
+extern int Barcode_Encode(struct Barcode_Item *bc, int flags);
+extern int Barcode_Print(struct Barcode_Item *bc, FILE *f, int flags);
+
+/*
+ * Choose the position
+ */
+extern int Barcode_Position(struct Barcode_Item *bc, int wid, int hei,
+                           int xoff, int yoff, double scalef);
+
+/*
+ * Do it all in one step
+ */
+extern int Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei,
+                                   int xoff, int yoff, int flags);
+
+
+/*
+ * Return current version (integer and string)
+ */
+extern int Barcode_Version(char *versionname);
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* _BARCODE_H_ */
diff --git a/barcode-0.98/barcode.spec b/barcode-0.98/barcode.spec
new file mode 100644 (file)
index 0000000..eccb602
--- /dev/null
@@ -0,0 +1,84 @@
+%define name    barcode
+%define ver     0.98
+%define rel    1
+%define prefix   /usr
+%define sysconfdir     /etc
+
+Summary: GNU barcode
+Name: %name
+Version: %ver
+Release: %rel
+Copyright: GPL
+Group: Applications/Productivity
+Source:  ftp://ar.linux.it/pub/barcode/%name-%{ver}.tar.gz
+BuildRoot: /var/tmp/%name-%{ver}-root
+URL: http://gnu.systemy.it/software/barcode
+Prefix: %prefix
+
+%description
+This is GNU-barcode.
+The package is meant to solve most needs in barcode creation with a
+conventional printer. It can create printouts for the conventional
+product tagging standards: UPC-A, UPC-E, EAN-13, EAN-8, ISBN, as well
+as a few other formats. Ouput is generated as either Postscript or
+Encapsulated Postscript (other back-ends may be added if needed).
+
+%package devel
+Summary: GNU barcode files for development
+Group: Development/Libraries
+
+%description devel
+This is GNU-barcode.
+The package is meant to solve most needs in barcode creation with a
+conventional printer. It can create printouts for the conventional
+product tagging standards: UPC-A, UPC-E, EAN-13, EAN-8, ISBN, as well
+as a few other formats. Ouput is generated as either Postscript or
+Encapsulated Postscript (other back-ends may be added if needed).
+
+This package contain the C header, the static library and man page
+for development.
+
+%prep
+%setup
+
+%ifarch alpha
+  ARCH_FLAGS="--host=alpha-redhat-linux"
+%endif
+
+export -n LANG LINGUAS LC_ALL 
+if [ ! -f configure ]; then
+  CFLAGS="$RPM_OPT_FLAGS" ./autogen.sh $ARCH_FLAGS --prefix=%{prefix} --sysconfdir=%{sysconfdir}
+else
+  CFLAGS="$RPM_OPT_FLAGS" ./configure $ARCH_FLAGS --prefix=%{prefix} --sysconfdir=%{sysconfdir}
+fi
+
+%build
+export -n LANG LINGUAS LC_ALL 
+
+if [ "$SMP" != "" ]; then
+  (make "MAKE=make -k -j $SMP"; exit 0)
+  make
+else
+  make
+fi
+
+%install
+[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT
+make prefix=$RPM_BUILD_ROOT%{prefix} sysconfdir=$RPM_BUILD_ROOT%{sysconfdir} install
+
+%clean
+[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-, root, root)
+
+%doc COPYING ChangeLog INSTALL README TODO doc/*.html doc/*.pdf doc/*.ps
+
+%attr(0755,root,root) %{prefix}/bin/barcode
+%attr(0644,root,root) %{prefix}/info/barcode.info*
+%attr(0644,root,root) %{prefix}/man/man1/barcode.1*
+
+%files devel
+%attr(0644,root,root) %{prefix}/include/barcode.h
+%attr(0644,root,root) %{prefix}/lib/libbarcode.a
+%attr(0644,root,root) %{prefix}/man/man3/barcode.3*
diff --git a/barcode-0.98/bookland/bookland.py b/barcode-0.98/bookland/bookland.py
new file mode 100644 (file)
index 0000000..373587c
--- /dev/null
@@ -0,0 +1,884 @@
+#!/usr/local/bin/python
+
+MYNAME="bookland.py"
+MYVERSION="0.92"
+COPYRIGHT="(C) 1999-2001 J. Milgram"
+DATE = "Jan. 2002"
+MAINTAINER = "bookland-bugs@cgpp.com"
+
+#   Copyright (C) 1999,2000 Judah Milgram     
+#
+#   bookland.py - generate Bookland EAN symbol for ISBN encoding
+#
+#   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.
+#
+# ==============================================================================
+#
+#  usage: bookland.py [ISBN] [price-code] > output.eps
+#
+#         ISBN - the ISBN, with or without check digit, with or without hyphens.
+#                default: 1-56592-197-6 ("Programming Python"). If the check digit
+#                is provided on the command line, it is verified. If not, it is
+#                calculated. It's up to you to get the hyphenation right - it's
+#                important, and something the program can't calculate for you.
+#
+#         price - the five digit add-on code. Usually used to indicate the price,
+#                 in which case the first digit indicates the currency (4=$CAN,
+#                 5=$US, etc.). The remaining digits indicate the price, with
+#                 decimal point assumed to be between the digit 3 and 4.
+#                 For example: $US 6.95 = 50695, $CAN 35.00 = 43500. Instead of a
+#                 price code, a 5 digit add-on ranging from 90000-98999 can be
+#                 used for internal purposes. BISG recommends just using 90000 if
+#                 you don't want to specify a price. Add-ons ranging from 99000 to
+#                 99999 have been reserved for special use.
+#
+#  An Encapsulated Postscript file (eps) is sent to standard out. This may in turn
+#  be converted to other formats using the pbmplus package. You may have trouble
+#  getting the OCRB to map correctly. If you already have the font, you can look in
+#  the Fontmap file to see what your system calls it, and edit the fontnames accordingly
+#  (see below). If you don't have it, you might find it on your DOS system. You
+#  need a .pfa/.pfb (Type 1) or .ttf (TrueType). Your Postscript interpreter might
+#  or might not be able to deal with TrueType. In any event, in an emergency, you
+#  might get away with Helvetica. Note that as of 1990 BISG no longer requires the
+#  ISBN to be printed in OCR-A.
+#
+#  Take the "no-warranty" disclaimer seriously. Going to print with a faulty bar
+#  can cost you a bundle, and you'll be on your own. It's up to you to verify that
+#  the symbol is valid. If you need "corporate accountability", try the Book
+#  Industry Study Group at (212) 929-1393 or the US ISBN Agency at (908) 665-6770
+#  and ask for a list of commercial vendors. Outside the US, don't know.
+#
+#  Feedback welcome. If you discover a case where the program generates a faulty
+#  symbol, I definitely want to hear about it - write me at milgram@cgpp.com or
+#  P.O. Box 8376, Langley Park, MD 20787, USA
+#
+#  INSTALLATION:
+#
+#  If you have a Python interpreter on your system, you're done. Just put this file
+#  somewhere in your path and give it execute permission. If you haven't installed
+#  Python, see http://www.python.org. It has been ported to Macs, DOS, and MS-Windows.
+#
+#  ABOUT THE BOOKLAND EAN
+#
+#  The most difficult part of this project was finding the documents that define
+#  the Bookland EAN. There appears to be no single, authoritative source that
+#  provides all the information required. Some good sources:
+#
+#  [1] "Machine-Readable Coding Guidelines for the U.S. Book Industry", Book
+#      Industry Study Group, New York, Jan., 1992. (212) 929-1393
+#  [2] "UPC Symbol Specification Manual", Uniform Code Council Inc.,
+#      Dayton, Ohio, January 1986 (May 1995 Reprint). (937) 435-3870; I found it
+#      at http://www.uc-council.org/d36-t.htm
+#  [3] "EAN Identification for Retail/Trade Items", EAN International. I found it
+#      in Feb. 1999 at http://www.ean.be/html/Numbering.html
+#  [4] "Hyphenation Instructions", web page at:
+#      http://www.isbn.org/standards/home/isbn/international/hyphenation-instructions.asp
+#
+#  The starting point of the exercise is the ISBN, assigned by the national ISBN
+#  Agency. This is a 10 digit number, the last being a check digit. The ISBN is
+#  converted to a 13 digit EAN number. The first three digits of the EAN-13 indicate
+#  the country or region. A prefix of 978 has been assigned to books, regardless
+#  of country of origin (hence, "Bookland") [3]. The remaining ten digits are the
+#  first 9 digits of the ISBN followed by the EAN-13 check digit.
+#
+#  It seems the EAN-13 check digit can be calculated using the same algorithm as the
+#  UPC Version A number. Note that the EAN-13 check digit is always between 0 and 9,
+#  compare with ISBN check digit which can range to 10 ("X"). See Reference [2],
+#  Section 2 and Appendix G for details of creation of the EAN-13 symbol. Table 2 of
+#  Appendix G provides a good comparison of the UPC-A and EAN-13 symbols.
+#
+#  The 5 digit add-on (here called, "UPC5") is defined in Ref. [2] Appendix D.
+#  The ">" to the right of the five digit code serves to enforce the "quiet zone" to
+#  the right of the bar pattern. Can't remember where I read that. It's probably
+#  optional. According to [1], in the UK, three horizontal bars appear over price
+#  add-ons. Haven't implemented that here. The UPC5 encoding is based on UPC-A and
+#  UPC-E.
+#
+#  According to [2], Section 3, the EAN-13 numbers and 5-digit add-ons are supposed
+#  to be printed in OCR-B. The ISBN itself is printed above the EAN-13 symbol. At
+#  one time it was to be printed in OCR-A, but as of 1990 this requirement has been
+#  dropped [1], and I assume this means you can use any font you like.
+#
+#  SEE ALSO:
+#
+#  "TinyHelp 5 - Making ISBN Barcodes", D. Byram-Wigfield. Another approach to making
+#                the ISBN barcode symbol. I saw it at
+#                http://www.cappella.demon.co.uk/index.html/
+#                but haven't tried it.
+#
+#  "XBarcode" - nice open-source X-Windows program for generating all sorts of bar codes.
+#               It does much more than this program, but didn't seem to do the UPC
+#               5-digit add-on or do the ISBN->EAN13 calculation (as of v. 2.11). Might
+#               have made more sense to add this capability, but I needed a Python project.
+#               In any event, their license forbids distribution in modified form!
+#
+#  HYPHENATION
+#
+#  bookland.py includes automatic hyphenation for ISBN's in group 0 and 1
+#  (English-language). This is based on my reading of Ref [4]. If in doubt,
+#  users can use the "-y" option to force the program to accept the hyphenation
+#  as input. For other ISBN groups and for ISMN's, no hyphenation is performed
+#  other than to ensure a hyphen is placed after the group identifier and before
+#  the check digit.
+#
+#  ABOUT THE ISMN:
+#
+#  See the ISMN Users' Manual, 3rd Edition, 1998, ISBN 3-88053-070-X, published by
+#  the International ISMN Agency, Staatsbibliothek Preussischer Kulturbesitz, Berlin.
+#  I found my copy at http://www.ismn.spk-berlin.de/download/ISMNmanual.pdf
+#
+#  An ISMN is just like an ISBN, except:
+#   - first character is an "M"
+#   - the "M" counts as a "3" for computing the ISMN check digit (last digit)
+#   - the checksum weights are 3,1,3,1,3,1,3,1,3, sum to be divisible by "10". This
+#     means the last character is always a numerical digit, never an "X".
+#   - the EAN number is "979" plus the *entire* ten character ISMN, except the
+#     "M" is replaced by "0". Note this means the ISMN checksum is identical to the
+#     corresponding EAN-13 checksum (excercise left to the reader).
+#
+#  When bookland.py detects an "M" in the first position of the ISBN, it interprets
+#  it as an ISMN and proceeds accordingly. The 5-digit price code symbol is suppressed.
+#
+#  BAR WIDTH REDUCTIONS
+#
+#  Starting Version 0.92, the widths of the individual bars can be reduced using the
+#  "-r" option (units are inches). This is to compensate for bleed during printing.
+#  I don't know when it's a good idea to actually use this; in any event consult with
+#  your printer first. If not input, it defaults to zero (no reduction).
+#
+#  ABOUT PYTHON
+#
+#  See http://www.python.org
+#
+#  TO DO:
+#
+#  - Generalize to more bar codes, starting with UPC-A and UPC-E. "Plain" EAN13 is
+#    already built in, could add command line argument to generate that instead of
+#    Bookland.
+#  - Make font sizes and placement easier to configure - not sure I have it right.
+#    Does human-readable 5-digit code take wider font spacing?
+#  - Clean up bounding box stuff.
+#  - Bells and whistles.
+#  - GUI?
+#
+#  HISTORY:
+#
+#  1/2002  -  v 0.92 add ISMN support (thanks to Lars-Henrik Nysten for this suggestion)
+#                    re-wrote bar generation to preclude possibility of white hairlines
+#                        between adjacent black modules. Thanks to Tero Lindfors for
+#                        reporting this bug.
+#                    new -o option to write eps to file rather than stdout
+#                    new -x option for "check only" (verifies check digit)
+#                    new -r option for bar width reduction (compensate for print bleed)
+#                    new -s option to scale module (bar) height (Lars-Henrik Nysten again)
+#                    can suppress UPC-5 price code by entering empty string. (thanks to
+#                        Jacques Du Pasquier for this suggestion)
+#                    re-wrote ISBN/ISMN sanity checks
+#                    lowercase alphas ("x" for ISBN and "m" for ISMN) now ok on input
+#                    fix "long" command line options.
+#  10/2001 -  v 0.91 add -z option for quiet zone ">"
+#                    add -f option for fonts
+#                    re-write command line parsing to use getopt
+#  1/2000  -  v 0.09 eliminate use of eval
+#  9/99    -  v 0.08 accomodate different versions of OCRB by fitting
+#                    all strings to prescribed width. Thanks to Toby Gadd
+#                    for reporting this problem and Peter Deutsch for
+#                    help finding the fix.
+#  7/99    -v0.05-0.07 improve error handling.
+#  3/27/99 - v0.04 add "--help" and "--version".
+#  3/13/99 - v0.03, do a showpage at end (it's allowed)
+#            fixed checksum calculations for certain cases
+#  2/7/99 - v0.02, fixed LH parity pattern for EAN13. It's not the check digit!
+#  2/7/99 - initial release
+# ================================================================================
+
+#
+#  barCodeSymbol - the whole printed symbol, including bar code(s) and product code(s).
+#  UPC, UPCA, UPC5, EAN13 - the number itself, with check digit, string representation,
+#                         and barcode bits
+#
+
+import re       # we should get rid of regsub and regex in favor of re
+                # hope there's no conflict.
+import string
+import sys
+import regsub
+from regex_syntax import *
+import regex
+regex.set_syntax(RE_SYNTAX_AWK)
+from types import *
+
+BooklandError = "Something wrong"
+
+
+A="A";B="B";C="C";O="O";E="E"
+UPCABITS = [{O:"0001101",E:"1110010"},
+            {O:"0011001",E:"1100110"},
+            {O:"0010011",E:"1101100"},
+            {O:"0111101",E:"1000010"},
+            {O:"0100011",E:"1011100"},
+            {O:"0110001",E:"1001110"},
+            {O:"0101111",E:"1010000"},
+            {O:"0111011",E:"1000100"},
+            {O:"0110111",E:"1001000"},
+            {O:"0001011",E:"1110100"}]
+UPCAPARITY = [ "OOOOOOEEEEEE" ] * 10
+UPCEBITS = [{O:"0001101",E:"0100111"},
+            {O:"0011001",E:"0110011"},
+            {O:"0010011",E:"0011011"},
+            {O:"0111101",E:"0100001"},
+            {O:"0100011",E:"0011101"},
+            {O:"0110001",E:"0111001"},
+            {O:"0101111",E:"0000101"},
+            {O:"0111011",E:"0010001"},
+            {O:"0110111",E:"0001001"},
+            {O:"0001011",E:"0010111"}]
+# what about UPCEPARITY? Don't need for isbn.
+UPC5BITS = UPCEBITS
+UPC5PARITY = ["EEOOO","EOEOO","EOOEO","EOOOE","OEEOO",
+              "OOEEO","OOOEE","OEOEO","OEOOE","OOEOE"]
+EAN13BITS = [{A:"0001101", B:"0100111", C:"1110010"},
+             {A:"0011001", B:"0110011", C:"1100110"},
+             {A:"0010011", B:"0011011", C:"1101100"},
+             {A:"0111101", B:"0100001", C:"1000010"},
+             {A:"0100011", B:"0011101", C:"1011100"},
+             {A:"0110001", B:"0111001", C:"1001110"},
+             {A:"0101111", B:"0000101", C:"1010000"},
+             {A:"0111011", B:"0010001", C:"1000100"},
+             {A:"0110111", B:"0001001", C:"1001000"},
+             {A:"0001011", B:"0010111", C:"1110100"}]
+EAN13PARITY = map(lambda x: x+"CCCCCC",
+                  ["AAAAAA","AABABB","AABBAB","AABBBA","ABAABB",
+                   "ABBAAB","ABBBAA","ABABAB","ABABBA","ABBABA"])
+
+PSFORMAT = "%.6f"
+# Default fonts.
+# Fonts might have a different name on your system.
+# Edit if required.
+ISBNFONT = "OCRB"      #  Doesn't have to be OCR-B
+EAN13FONT = "OCRB"
+UPC5FONT = "OCRB"
+
+class psfile:
+    
+    def __init__(self):
+        self.x0 = 100; self.y0 = 100
+        self.lines=[]
+        self.bb=[self.x0,self.y0,self.x0,self.y0]
+
+    def orbb(self,arg):
+        self.bb[0] = min(self.bb[0],self.x0+arg[0])
+        self.bb[1] = min(self.bb[1],self.y0+arg[1])
+        self.bb[2] = max(self.bb[2],self.x0+arg[2])
+        self.bb[3] = max(self.bb[3],self.y0+arg[3])
+
+    def translate(self,dx,dy):
+        self.x0 = self.x0 + dx
+        self.y0 = self.y0 + dy
+        return "%d %d translate 0 0 moveto" % (dx,dy)
+        
+    def out(self,file=None):
+        if file:
+            outfid=open(file,"w")
+        else:
+            outfid=sys.stdout
+        for line in self.lines:
+            outfid.write("%s\n"%line)
+        outfid.close()
+
+    def do(self,arg):
+        self.lines = self.lines + arg
+
+    def setbb(self):
+        for i in range(len(self.lines)):
+            if self.lines[i]=="%%BoundingBox: TBD":
+                self.lines[i]= "%%BoundingBox:" + \
+                               " %d"%self.bb[0] + \
+                               " %d"%self.bb[1] + \
+                               " %d"%self.bb[2] + \
+                               " %d"%self.bb[3]
+                return
+
+    def header(self,title,comments,ean13font,isbnfont,upc5font):
+        for i in range(len(comments)):
+            comments[i] = regsub.gsub("^","%  ",comments[i])
+        # There's a more elegant way to do the bounding box line:
+        return [ "%!PS-Adobe-2.0 EPSF-1.2",
+                 "%%Creator: " + MYNAME + "  " + MYVERSION + "  " + DATE,
+                 "%%Title: " + title,
+                 "%%BoundingBox: TBD",
+                 "%%EndComments" ] +\
+                 comments + \
+               [ "\n% These font names might be different on your system:",
+                 "/ean13font { /" + ean13font + " findfont 10 scalefont setfont } def",
+                 "/isbnfont { /" + isbnfont + " findfont 8 scalefont setfont } def",
+                 "/upc5font { /" + upc5font +" findfont 14 scalefont setfont } def\n",
+                 "/nextModule { moduleWidth 0 rmoveto } def",
+                 "% The following shenanigans is to deal with different implementations",
+                 "% of same font having different char sizes and spacing.",
+                 "% function fitstring:",
+                 "% usage: width string font fitstring",
+                 "% set font, scaled so that string exactly fits desired width",
+                 "% leave string on stack",
+                 "/fitstring { dup findfont 1 scalefont setfont % w s f",
+                 "3 1 roll % f w s",
+                 "dup stringwidth pop % f w s sw",
+                 "3 2 roll exch div % f s x",
+                 "3 2 roll findfont exch scalefont setfont",
+                 "} def",
+                 "/barHeight { 72 } def",
+                 "/nextModule { moduleWidth 0 rmoveto } def",
+                 "/topcentershow {dup stringwidth pop neg 2 div -9 rmoveto show} def",
+                 "/toprightshow {dup stringwidth pop neg -9 rmoveto show} def",
+                 "/bottomcentershow {dup stringwidth pop neg 2 div 0 rmoveto show} def",
+                 "/bottomrightshow {dup stringwidth pop neg 0 rmoveto show} def",
+                 "/W { moduleWidth mul 0 rmoveto } def",
+                 "/B { dup moduleWidth mul 2 div 0 rmoveto",
+                 "dup moduleWidth mul barWidthReduction sub setlinewidth",
+                 "0 barHeight rlineto 0 barHeight neg rmoveto",
+                 "currentpoint stroke moveto",
+                 "moduleWidth mul 2 div 0 rmoveto } def",
+                 "/L { dup moduleWidth mul 2 div 0 rmoveto",
+                 "dup moduleWidth mul barWidthReduction sub setlinewidth",
+                 "0 -5 rmoveto 0 5 rlineto",
+                 "0 barHeight rlineto 0 barHeight neg rmoveto",
+                 "currentpoint stroke moveto",
+                 "moduleWidth mul 2 div 0 rmoveto } def",
+                 self.x0,self.y0,"translate",
+                 "0 0 moveto" ]
+
+    def trailer(self):
+        return ["stroke","% showpage supposedly OK in EPS",
+                "showpage","\n% Good luck!"]
+
+        
+class UPC:
+    
+    # Includes UPC-A, UPC-E, EAN-13 (sorry), UPC-5 et al.
+
+    def __init__(self,arg):
+        # arg is a string, either:
+        # - product code including checksum
+        # - same, with hyphens (hyphens not verified)
+        # - same, but with last digit (checksum) dropped, possibly leaving a
+        #   trailing hyphen.
+        # If checksum is included, it will be verified.        
+        # N.B. "integer" representation is still a string! Just has no hyphens.
+
+        self.s=arg
+        self.verifyChars(self.s)
+        self.n = regsub.gsub("-","",self.s)    # create "integer" representation
+        self.x = self.checkDigit(self.n)       # always calculate check digit
+        if len(self.n) == self.ndigits:
+            self.verifyCheckDigit()                # if check digit given, verify it
+        elif len(self.n) == self.ndigits-1:
+            self.tackonCheckDigit()                # tack on check digit
+        else:
+            raise BooklandError, "UPC: wrong number of digits in \"" + self.s + "\""
+
+    def setbits(self,arg):                       # UPC (all)
+        self.bits=""
+        parityPattern=self.parityPattern()
+        bitchar=self.bitchar()
+        for p in range(len(arg)):
+            digit=int(arg[p])
+            # maybe better to define parityPattern with a leading blank?
+            parity=parityPattern[p]
+            bit=bitchar[digit][parity]
+            self.bits=self.bits + bit
+
+    def verifyChars(self,s):                     # UPC (all)
+        # Trailing hyphen allowed.
+        nevergood = "--|^-|[^0-9-]"
+        ierr=regex.search(nevergood,s)
+        if ierr != -1:
+            raise BooklandError, \
+                  "UPCA: in %s: illegal characters beginning with: %s" % (s,s[ierr])
+
+    def verifyCheckDigit(self):               # UPC (all)
+        # first verify correct number of digits.
+        soll=self.checkDigit(self.n)
+        ist=self.s[-1:]
+        if ist != soll:
+            raise BooklandError, "For %s checksum %s is wrong, should be %s" % \
+                             (self.s,ist,soll)
+
+    def xstring(self,p):                      # UPC (all)
+        return "%d" % p
+
+    def tackonCheckDigit(self):
+        self.n = self.n + self.x              # UPC (all)
+        self.s = self.s + self.x
+
+class UPCA(UPC):
+
+    def __init__(self,arg):
+        UPC.__init__(self,arg)
+        self.setbits(self.n[1:])                 # skip first digit
+        
+    def parityPattern(self):
+        return UPCAPARITY[int(self.x)]
+    def bitchar(self):
+        return UPCABITS
+    
+    def checkDigit(self,arg):               # UPCA/EAN13
+          weight=[1,3]*6; magic=10; sum = 0
+          for i in range(12):         # checksum based on first 12 digits.
+              sum = sum + int(arg[i]) * weight[i]
+          z = ( magic - (sum % magic) ) % magic
+          if z < 0 or z >= magic:
+              raise BooklandError, "UPC checkDigit: something wrong."
+          return self.xstring(z)
+
+
+class ISBN:
+    # Includes ISMN, if the plan falls together.
+    def __init__(self,arg):
+        self.ndigits=10            #  Includes check digit!
+        self.s=string.upper(arg)
+        self.n=re.sub("[ -]","",self.s) # "integer" representation
+        # In ISMN, I allow spaces in place of hyphens. See ISMN User's manual.
+        if re.match("^M( |-)?\d(( |-)?\d){7,7}(-| )?\d?$",self.s):
+            # ISMN
+            self.name="ISMN"
+            self.n=re.sub("^M","3",self.n)
+            self.weight=[3,1,3,1,3,1,3,1,3]
+            self.magic=10
+        elif re.match("^\d-?\d(-?\d){7,7}-?(\d|X)?$",self.s):
+            # ISBN
+            self.name="ISBN"
+            self.weight=[10,9,8,7,6,5,4,3,2]
+            self.magic=11
+        else:
+            raise BooklandError, "%s invalid (hyphenation, characters, or length)" % self.s
+        self.x = self.checkDigit()
+        if len(self.n) == self.ndigits:
+            self.verifyCheckDigit()                # if check digit given, verify it
+        elif len(self.n) == self.ndigits-1:
+            self.tackonCheckDigit()                # tack on check digit
+        else:
+            raise BooklandError, "%s failed. Please report as bug" % self.s
+
+
+    def checkDigit(self):     # ISBN and ISMN; UPCA/EAN13 similar but for weights etc.
+        # now that we're checking regex's in init, we don't have to check the
+        # argument at all. (used to check length and bad characters)
+        sum = 0
+        for i in range(9):      # checksum based on first nine digits.
+            sum = sum + int(self.n[i]) * self.weight[i]
+        z = ( self.magic - (sum % self.magic) ) % self.magic
+        if z < 0 or z >= self.magic:
+            raise BooklandError, \
+                  "%s: checksum %d is wrong - please report as bug" % (self.s,z)
+        return self.xstring(z)
+
+    def xstring(self,p):
+        if p == 10:
+            return "X"
+        else:
+            return "%d" % p
+
+    def tackonCheckDigit(self):
+        if self.s[-1:] == "-":
+            # Already have a trailing hyphen
+            self.s = self.s + self.x
+        else:
+            self.s = self.s + "-" + self.x
+
+    def verifyCheckDigit(self):               # UPC A; EAN13
+        # first verify correct number of digits.
+        soll=self.x
+        ist=self.s[-1:]
+        if ist != soll: raise BooklandError, \
+                  "For %s checksum %s is wrong, should be %s\n" % (self.s,ist,soll)
+
+class Bar:
+    # a run of adjacent modules of identical value.
+    def __init__(self,val):
+        self.val=val
+        if not self.val in "L01":
+            raise BooklandError, "bar bit: %s, pls report as a bug" % self.val
+        self.width=1
+        if self.val=="1":
+            self.color="Black"
+        elif self.val=="0":
+            self.color="White"
+        elif self.val=="L":
+            self.color="Long Black"
+    def __cmp__(self,other):
+        if self.val==other or (self.val=="L" and other=="1"):
+            return 0
+        else:
+            return 1
+    def inc(self):
+        self.width=self.width+1
+    def pslines(self):
+        if self.val=="L":
+            rval = [ "%d L " % self.width ]
+        elif self.val=="1":
+            rval = [ "%d B " % self.width ]
+        else:
+            rval = [ "%d W " % self.width ]
+        return rval
+    def __repr__(self):
+        return "%s bar of width %d" % (self.color,self.width)
+
+class barCodeSymbol:
+
+    def __init__(self):
+        self.patternWidth = len(self.bits)*self.moduleWidth
+        # Anything else?
+
+    def bitsComment(self):
+        return [ "%% Bits:\n%% %s" % self.bits ]
+        
+    def psbars(self):
+        # new version, try to prevent all hairlines between adjacent modules.
+        bars = []
+        bar=Bar(self.bits[0])
+        for bit in self.bits[1:]:
+            if bit==bar:
+                bar.inc()
+            else:
+                bars.append(bar)
+                bar=Bar(bit)
+        bars.append(bar)
+        rval = ["0 0 moveto"]
+        for bar in bars:
+            rval = rval + bar.pslines()
+        rval = rval + [ "stroke" ]
+        return rval
+
+    def psbarsold(self):
+        psbits=regsub.gsub("1","I ",self.bits)
+        psbits=regsub.gsub("0","O ",psbits)
+        psbits=regsub.gsub("L","L ",psbits)
+        linewidth=50
+        p=0; j=linewidth; m=len(psbits); psbarlines=[]; blanks="^ | $"
+        while p <= m:
+            j = min(linewidth,m-p)
+            psbarlines = psbarlines + [ regsub.gsub(blanks,"",psbits[p:p+j]) ]
+            p=p+linewidth
+        return [ "0 0 moveto" ] + psbarlines + [ "stroke" ]
+        
+    def psSetBarHeight(self):
+        return [ "/barHeight { " + PSFORMAT % self.moduleHeight + " 72 mul } def" ]
+
+    def psSetBarWidthReduction(self):
+        return [ "/barWidthReduction { " + \
+                 PSFORMAT % self.barWidthReduction + " 72 mul } def" ]
+
+    def psSetModuleWidth(self):
+        rval = [ "/moduleWidth { " + PSFORMAT % self.moduleWidth + " 72 mul } def" ]
+        return rval
+
+    def psBottomRightText(self,text,font):
+        # this is specifically for the upc5 price code.
+        # this is all starting to get messy.
+        return [ PSFORMAT % self.patternWidth + " 72 mul dup 2 div",
+                 PSFORMAT % self.moduleHeight + " 72 mul 2 add moveto",
+                 "(" + text + ") /" + font + " fitstring bottomcentershow" ]    
+
+    def psTopCenterText(self,text,font):
+        # the text at the top center of the bar pattern (i.e. the ISBN)
+        return [ PSFORMAT % self.patternWidth + " 72 mul dup 2 div",
+                 PSFORMAT % self.moduleHeight + " 72 mul 3 add moveto",
+                 " (" + text + ") /" + font  + " fitstring bottomcentershow" ]
+
+    def psFittedText(self,width,text,font):
+        return [ PSFORMAT % width + " (" + text + ") " + font + " fitstring" ]
+
+    # This is optional; serves to enforce quiet zone to right of UPC 5 add-on
+    def psGreaterThan(self,font):
+        return [ PSFORMAT % self.patternWidth + " 72 mul",
+                 PSFORMAT % self.moduleHeight + " 72 mul 2 add moveto",
+                 "/%s (>) show" % font ]
+
+class EAN13Symbol(barCodeSymbol):
+
+    def __init__(self,arg,font=EAN13FONT,heightMultiplier=1,barWidthReduction=0):
+        # arg is a string with the EAN product code
+        self.barWidthReduction=barWidthReduction
+        self.ean13 = EAN13(arg)
+        self.moduleWidth = 0.0130
+        specModuleHeight = 1.00
+        self.moduleHeight = 1.00 * heightMultiplier
+        self.bits = self.ean13.bits
+        barCodeSymbol.__init__(self)
+        self.font=font
+
+    def bb(self):
+        return  [ -12, -10, self.patternWidth*72+10, self.moduleHeight*72+12 ]
+
+    def pslines(self):
+        return self.bitsComment() + \
+               self.psSetModuleWidth() + \
+               self.psSetBarWidthReduction() + \
+               self.psSetBarHeight() + \
+               self.psbars() + \
+               self.psLRDigitLines()
+              
+    def psLRDigitLines(self):
+        # 24 = 3+6*7/2
+        # 70 = 3+6*7+4+6*7/2   "4" so we center on the "L" bars (the rightmost of
+        #      the center guard bars is an "O".
+        # "5" in check digit is the five-module spacing recommended by [2], section 3.
+        return [ "% We do the left digits first and leave the font scaled",
+                 "% as is for the 9-digit and the right-digits.",
+                 "% EAN13 Left Digits:",
+                 "moduleWidth 24 mul 0 moveto",
+                 "moduleWidth 40 mul (" + self.ean13.leftDigits + ") ",
+                 "/" + self.font + " fitstring topcentershow",
+                 "\n% EAN13 human-readable number",
+                 "% The \"9\" digit (only when encoding ISBN's and ISMN's, I think):",
+                 "-5 0 moveto (" + self.ean13.n[0] + ") toprightshow",                 
+                 "% EAN13 Right Digits:",
+                 "moduleWidth 70 mul 0 moveto",
+                 "moduleWidth 40 mul (" + self.ean13.rightDigits + ") topcentershow" ]
+
+class EAN13(UPCA):
+
+    def __init__(self,arg):
+        self.ndigits=13            #  Includes check digit!
+        UPCA.__init__(self,arg)
+        leftBits = self.bits[0:42]
+        rightBits = self.bits[42:]
+        leftGuard="L0L"
+        rightGuard="L0L"
+        center="0L0L0"
+        self.bits = leftGuard + leftBits + center + rightBits + rightGuard
+        self.leftDigits = self.n[1:7]
+        self.rightDigits = self.n[7:13]
+
+    def parityPattern(self):
+        # N.B. parity pattern based on leftmost digit, the UCC Spec calls this
+        # the "13th" digit. It's not the check digit!
+        return EAN13PARITY[int(self.n[0])]
+    def bitchar(self):
+        return EAN13BITS
+
+class UPC5Symbol(barCodeSymbol):
+
+    def __init__(self,arg,heightMultiplier=1,barWidthReduction=0):
+        # arg is a string with the 5 digit add-on.
+        self.barWidthReduction=barWidthReduction
+        self.upc5 = UPC5(arg)
+        self.moduleWidth = 0.0130
+        specModuleHeight = 0.852
+        self.moduleHeight = 0.852 * heightMultiplier
+        self.bits = self.upc5.bits
+        barCodeSymbol.__init__(self)
+
+    def pslines(self):
+        return self.bitsComment() + \
+               self.psSetModuleWidth() + \
+               self.psSetBarHeight() + \
+               self.psbars()
+
+    def bb(self):
+        # Note quiet zone is there even if we don't print the ">".
+        return  [ 0, 0, self.patternWidth*72+10, self.moduleHeight*72+10 ]
+
+UPC5Error = "Something wrong with 5-digit price code add-on."
+class UPC5(UPC):
+
+    def __init__(self,arg):
+        self.ndigits=5            #  Includes check digit!
+        p=re.search("[^0-9]",arg)
+        if p:
+          badchar=arg[p.start()]
+          raise UPC5Error, "\"%s\" is wrong. The character \"%s\" is not allowed. Price code add-on should contain %d digits and nothing else. Or leave blank to suppress the UPC-5 code." % (arg,badchar,self.ndigits)
+        elif len(arg) != self.ndigits:
+          raise UPC5Error, \
+            "\"%s\" is wrong. Price code add-on should have exactly %d digits." % (arg,self.ndigits)
+        UPC.__init__(self,arg)
+        self.setbits(self.n)
+        leftGuard="1011"
+        # no right guard for UPC 5-digit add-on
+        # Have to insert pesky delineators:
+        delineator = "01"
+        self.bits = leftGuard + \
+                    self.bits[0:7] + delineator + \
+                    self.bits[7:14] + delineator + \
+                    self.bits[14:21] + delineator + \
+                    self.bits[21:28] + delineator + \
+                    self.bits[28:35]
+
+    def checkDigit(self,arg):     # UPC5
+          weight=[3,9,3,9,3]; sum = 0
+          for i in range(5):
+              sum = sum + int(arg[i]) * weight[i]
+          return self.xstring(sum % 10)
+
+    def verifyCheckDigit(self):               # UPC2/5 checksum not in number
+        return
+
+    def parityPattern(self):
+        return UPC5PARITY[int(self.x)]
+    def bitchar(self):
+        return UPC5BITS
+
+class bookland(barCodeSymbol):
+
+    def __init__(self,isbn,price="",*rest):
+
+
+        # Some defaults:
+        ean13font=EAN13FONT
+        isbnfont=ISBNFONT
+        upc5font = UPC5FONT
+        zone=None
+        heightMultiplier=1.0
+        commandLine=""
+        barWidthReduction=0
+
+        # Maybe different fonts:
+        if len(rest)>0:
+            font=rest[0]
+            if font:
+                ean13font=font
+                isbnfont=font
+                upc5font=font
+        if len(rest)>1:
+            zone=rest[1]
+        if len(rest)>2:
+            heightMultiplier=float(rest[2])
+        if len(rest) > 3:
+            commandLine=rest[3]
+        if len(rest) > 4:
+            barWidthReduction=float(rest[4])
+
+        # Initial setup:
+        
+        self.ps = psfile()
+        self.isbn = ISBN(isbn)
+
+        # Header, EAN13 bars, EAN13 number, and ISBN:
+
+        if self.isbn.name=="ISMN":
+            self.ean13Symbol = EAN13Symbol("9790"+self.isbn.n[1:9],ean13font,heightMultiplier,barWidthReduction)
+        elif self.isbn.name=="ISBN":
+            self.ean13Symbol = EAN13Symbol("978"+self.isbn.n[:9],ean13font,heightMultiplier,barWidthReduction)
+        else:
+            raise BooklandError, "Internal error doing %s, please report as bug" % isbn
+
+        self.ps.orbb(self.ean13Symbol.bb())
+        comments = ["",
+                    "     This is free software and comes with NO WARRANTY WHATSOVER",
+                    "     Think twice before going to press with this bar code!",
+                    "",
+                    "Command line: %s" % commandLine,
+                    "" ]
+        self.ps.lines = self.ps.header(self.isbn.s,comments,ean13font,isbnfont,upc5font) + \
+                        [ "ean13font" ] + \
+                        self.ean13Symbol.pslines() +\
+                        [ "isbnfont" ] + \
+                        self.ean13Symbol.psTopCenterText("%s %s" % (self.isbn.name,self.isbn.s),isbnfont)
+
+        # 5-digit add-on:  (optional for ISBN only)
+        BLANK=re.compile("^ *$")
+        if self.isbn.name=="ISBN" and not BLANK.match(price):
+            # 105 = 95 + 10; 10 = separation (min is 9)        
+            translate=[ self.ps.translate( self.ean13Symbol.moduleWidth * 72 * 105, 0 ) ]
+            self.upc5Symbol = UPC5Symbol(price,heightMultiplier,barWidthReduction)
+            self.ps.orbb(self.upc5Symbol.bb())
+            self.ps.lines = self.ps.lines + \
+                            translate + \
+                            self.upc5Symbol.pslines() + \
+                            [ "upc5font" ] +\
+                            self.upc5Symbol.psBottomRightText(price,upc5font)
+            if zone: self.ps.lines=self.ps.lines + self.upc5Symbol.psGreaterThan(upc5font)
+        else:
+            self.ps.lines.append("%% Skipping UPC-5 price code symbol per request")
+
+        self.ps.lines=self.ps.lines + self.ps.trailer()
+
+        # Can now set bounding box.
+
+        self.ps.setbb()
+    
+# Here we go ...
+        
+if __name__ == '__main__':
+
+    def printUsage():
+        print "Usage: bookland [-h|--help] [-v|--version] [-x|--check] [-f|--font=<font>] [-s|--height=<height scale>] [-r|--reduction=<reduction factor>] [-o|outfile=<filename>] [-z|--quietzone] [<isbn>|<isbn> <price>]"
+        print "Report bugs to " + MAINTAINER
+
+    def printVersion():
+        sys.stderr.write("%s version %s %s.\n" % (MYNAME,MYVERSION,COPYRIGHT))
+        sys.stderr.write("Bugs to %s\n" % MAINTAINER)
+        sys.stderr.write("This is free software and comes with NO WARRANTY\n")
+
+    import getopt
+    try:
+        opts,args = getopt.getopt(sys.argv[1:],
+                                  "xr:s:uvf:hzo:",
+                                  ["reduction=","outfile=","height=","noupc",
+                                   "check","version","help","font=","quietzone"])
+    except:
+        printUsage()
+        sys.exit(0)
+
+    # some initial defaults:
+    isbn = "1-56592-197-6" # Mark Lutz, "Programming Python",
+                           # O'Reilly, Sebastopol CA, 1996
+    price = "90000"
+    font=None
+    zone=None
+    checkonly=None
+    outfile=None
+    heightMultiplier=1
+    commandLine = string.join(sys.argv)
+    barWidthReduction = 0
+
+    # parse command line:
+    for opt,val in opts:
+        if opt in ("-v","--version"):
+            printVersion()
+            sys.exit(0)
+        elif opt in ("-h","--help"):
+            printUsage()
+            sys.exit(0)
+        elif opt in ("-f","--font"):
+            font=val
+        elif opt in ("-z","--quietzone"):
+            zone=1
+        elif opt in ("-x","--check"):
+            checkonly=1
+        elif opt in ("-s","--height"):
+            heightMultiplier = float(val)
+        elif opt in ("-r","--reduction"):
+            barWidthReduction = val
+        elif opt in ("-o","--outfile"):
+            outfile=val
+    if len(args)==1:
+        isbn=args[0]
+    elif len(args)==2:
+        isbn=args[0]
+        price=args[1]
+
+    # Do stuff.
+
+    printVersion()
+    try:
+        b = bookland(isbn,price,font,zone,heightMultiplier,
+                     commandLine,barWidthReduction)
+        if not checkonly: b.ps.out(outfile)
+        if outfile:
+            sys.stderr.write("Output written to %s\n" % outfile)
+    except BooklandError, message:
+        sys.stderr.write(BooklandError + ": " + message + "\n")
+        sys.exit(1)
diff --git a/barcode-0.98/cmdline.c b/barcode-0.98/cmdline.c
new file mode 100644 (file)
index 0000000..a69a825
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ * cmdline.c -- parse a command line using getopt, environment and defaults
+ *
+ * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ * 
+ *   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.
+ *
+ *   Changes:
+ *      Michele Comitini (mcm@glisco.it): better handling of numeric type args.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef NO_GETOPT
+  /* use replacement */
+  #include "compat/getopt.h"
+#else
+  #include <getopt.h>
+#endif
+
+#include "cmdline.h"
+
+/* In case of error, print help string and return error (-1) */
+int commandline_errormsg(FILE *f, struct commandline *args,
+                                      char *prgname, char *messagehead)
+{
+    char *buffer;
+    char *buffer2;
+    int len;
+    struct commandline *ptr;
+
+    if (!messagehead) {
+       fprintf(f,"%s: Error in cmdline\nPossible options:\n",prgname);
+    } else {
+       fprintf(f,"%s: %s",prgname,messagehead);
+    }
+
+    for (ptr = args; ptr->option; ptr++) {
+       if (ptr->descrip) {
+           len = strlen(ptr->descrip);
+           len +=  ptr->default_v ? strlen(ptr->default_v) : 6;
+           len += ptr->env ? strlen(ptr->env) : 6;
+           buffer2 = malloc(len+3); /* 3 to be safe :) */
+           len += 32;
+           if (buffer2) {
+               buffer = malloc(len);
+               if (buffer) {
+                   sprintf(buffer2, ptr->descrip,
+                           ptr->default_v ? ptr->default_v : "(none)",
+                           ptr->env ? ptr->env : "(none)");
+                   sprintf(buffer, "   -%c %s     %s", ptr->option,
+                           ptr->type ? "<arg>" : "     ", buffer2);
+                   fprintf(f, "%s\n",buffer);
+                   free(buffer);
+               }
+               free(buffer2);
+           }
+       }
+    }
+    return -1;
+}
+
+/*
+ * Associate formats to type.
+ */
+struct type_fmt {
+    enum option_type type;
+    char *fmt;
+};
+static struct type_fmt formats[] = {
+    {CMDLINE_I, "%i%s"},   /* the trailing "%s" is used for error check */
+    {CMDLINE_D, "%d%s"},
+    {CMDLINE_X, "%x%s"},
+    {CMDLINE_O, "%o%s"},
+    {CMDLINE_F, "%lf%s"},
+    {CMDLINE_P, "%p%s"},
+    {0, NULL}  /* If we get here, it's CMDLINE_S: no sscanf buf strcpy() */
+};
+
+
+/* Parse one argument (default or provided) */
+static int commandline_oneopt(struct commandline *ptr, char *value)
+{
+    struct type_fmt *tptr;
+    char *trash = value ? strdup(value) : NULL;
+
+    /* convert it, if needed */
+    if ((ptr->type != CMDLINE_NONE) && ptr->result) {
+       for (tptr = formats; tptr->type; tptr++)
+           if (tptr->type == ptr->type)
+               break;
+       if (!tptr->type) /* not found: it is a string */
+           *(char **)(ptr->result) = value;
+       else
+           if (sscanf(value, tptr->fmt, ptr->result, trash)!=1) {
+               free(trash);
+               return -1;
+           }
+    }
+    if (trash)
+       free(trash);
+    
+    if ((ptr->type == CMDLINE_NONE) && ptr->result) /* no type, just count */
+       (*(int *)(ptr->result))++;
+
+    /* call the function, if needed */
+    if (ptr->fun) {
+       if (ptr->type) {
+           if (ptr->result) return ptr->fun(ptr->result); /* converted */
+           return ptr->fun(value); /* type, but not converted */
+       }
+       return ptr->fun(NULL); /* no type: just call it */
+    }
+    return 0;
+}
+
+/* The main function */
+int commandline(struct commandline *args, int argc, char **argv,
+               char *errorhead)
+{
+    struct commandline *ptr;
+    char *getopt_desc = (char *)calloc(512, 1);
+    int desc_offset = 0;
+    int opt, retval;
+    char *value;
+
+    /* Build getopt string and process defaults values */
+    for (ptr = args; ptr->option; ptr++) {
+       getopt_desc[desc_offset++] = ptr->option;
+       if (ptr->type) getopt_desc[desc_offset++] = ':';
+
+       value = NULL;
+       if (ptr->env)
+           value = getenv(ptr->env);
+       if (!value)
+           value = ptr->default_v;
+       if (value && (retval = commandline_oneopt(ptr, value))) {
+           /*
+            * if the function returns a specific (not -1) value, it already
+            * printed its message, so avoid the generic help
+            */
+           if (retval == -1)
+               commandline_errormsg(stderr, args, argv[0], errorhead);
+           return retval;
+       }
+    }
+
+    /* Run getopt and process material */
+    while ((opt = getopt(argc, argv, getopt_desc)) != -1) {
+       for (ptr = args; ptr->option; ptr++)
+           if (opt == ptr->option)
+               break;
+       if (!ptr->option) /* unknown option */
+           return commandline_errormsg(stderr, args, argv[0], errorhead);
+       if ( (retval = commandline_oneopt(ptr, optarg)) ) { /*  wrong arg */
+           if (retval == -1)
+               commandline_errormsg(stderr, args, argv[0], errorhead);
+           return retval;
+       }
+    }
+    return 0;
+}
diff --git a/barcode-0.98/cmdline.h b/barcode-0.98/cmdline.h
new file mode 100644 (file)
index 0000000..6931991
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * cmdline.h -- generic commandline editing (uses getopt, only short)
+ *
+ * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ * 
+ *   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.
+ *
+ */
+
+/*
+ * The options may have different arguments of different type
+ */
+enum  option_type {
+    CMDLINE_NONE=0,  /* no argument after option */
+    CMDLINE_I,       /* integer (any base)       */
+    CMDLINE_D,       /* decimal integer          */
+    CMDLINE_X,       /* hex integer              */
+    CMDLINE_O,       /* octal integer            */
+    CMDLINE_S,       /* string                   */
+    CMDLINE_F,       /* double float             */
+    CMDLINE_P,       /* pointer                  */
+};
+
+
+struct commandline {
+    int option;         /* Single byte: option id */
+    int type;           /* Type of argument, used in sscanf */
+    void *result;       /* Store data here, if non null */
+    int (*fun)(void *); /* Call if defined: arg is "result" or input string */
+    char *env;          /* Where to get runtime defaults, may be NULL */
+    char *default_v;    /* The compile-time default, may be NULL */
+    char *descrip;      /* For err msg. May have %s's for default and env */
+};
+
+/* returns: 0 or -1. "optarg" is global (see getopt) */
+extern int commandline(struct commandline *args,
+                      int argc, char **argv, char *errorhead);
+
+/* prints an error message based on "args" */
+extern int commandline_errormsg(FILE *f, struct commandline *args,
+                               char *prgname, char *messagehead);
+
+
+
+
diff --git a/barcode-0.98/codabar.c b/barcode-0.98/codabar.c
new file mode 100644 (file)
index 0000000..7065b9e
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+ * codabar.c -- encoding for Codabar
+ *
+ * Copyright (c) 2000 Leonid A. Broukhis (leob@mailcom.com)
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+
+/* this is ordered in decades to simplify encoding */
+static char alphabet[] = 
+   "0123456789" "-$:/.+ABCD";
+
+#define CODE_A 16
+#define CODE_B 17
+
+#define NARROW 12
+#define WIDE   14
+
+/* Patterns */
+static char *patterns[] = {
+"1111133","1111331","1113113","3311111","1131131",
+"3111131","1311113","1311311","1331111","3113111",
+"1113311","1133111","3111313","3131113","3131311",
+"1131313","1133131","1313113","1113133","1113331" };
+
+/*
+ * Check that the text can be encoded. Returns 0 or -1.
+ * If it's all lowecase convert to uppercase and accept it.
+ * If the first character is a letter (A to D), the last one must be too;
+ * no other character should be a letter.
+ */
+int Barcode_cbr_verify(unsigned char *text)
+{
+    int i, lower=0, upper=0;
+    int startpresent = 0;
+
+    if (!strlen(text))
+       return -1;
+    for (i=0; text[i]; i++) {
+       char * pos;
+        if (isupper(text[i])) upper++;
+        if (islower(text[i])) lower++;
+       pos = strchr(alphabet,toupper(text[i]));
+        if (!pos)
+            return -1;
+       if (i == 0 && pos - alphabet >= CODE_A)
+           startpresent = 1;
+       else if (pos - alphabet >= CODE_A &&
+                (!startpresent || i != strlen(text) - 1))
+           return -1;  
+    }
+    if (lower && upper)
+        return -1;
+    return 0;
+}
+
+static int add_one(char *ptr, int code)
+{
+    sprintf(ptr,"1%s", /* separator */ patterns[code]);
+    return 0;
+}
+
+/*
+ * The encoding functions fills the "partial" and "textinfo" fields.
+ * Lowercase chars are converted to uppercase
+ */
+int Barcode_cbr_encode(struct Barcode_Item *bc)
+{
+    static char *text;
+    static char *partial;  /* dynamic */
+    static char *textinfo; /* dynamic */
+    char *c, *ptr, *textptr;
+    int i, code, textpos, usesum, checksum = 0, startpresent;
+
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("codabar");
+
+    text = bc->ascii;
+    if (!text) {
+        bc->error = EINVAL;
+        return -1;
+    }
+    /* the partial code is 8 * (head + text + check + tail) + margin + term. */
+    partial = malloc( (strlen(text) + 3) * 8 + 2);
+    if (!partial) {
+        bc->error = errno;
+        return -1;
+    }
+
+    /* the text information is at most "nnn:fff:c " * (strlen + check) +term */
+    textinfo = malloc(10*(strlen(text) + 1) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+        return -1;
+    }
+
+    ptr = partial;
+    textptr = textinfo;
+    textpos = 0;
+    usesum = bc->flags & BARCODE_NO_CHECKSUM ? 0 : 1;
+    /* if no start character specified, A is used as a start character */
+    if (!isalpha(text[0])) {
+       add_one(ptr, CODE_A);
+       ptr += strlen(ptr);
+       textpos = WIDE;
+       checksum = CODE_A;
+       startpresent = 0;
+    } else {
+       startpresent = 1;
+    }
+    for (i=0; i<strlen(text); i++) {
+        c = strchr(alphabet, toupper(text[i]));
+        if (!c) {
+            bc->error = EINVAL; /* impossible if text is verified */
+            free(partial);
+            free(textinfo);
+            return -1;
+        }
+        code = c - alphabet;
+        add_one(ptr, code);
+        sprintf(textptr, "%i:12:%c ", textpos, toupper(text[i]));
+        textpos += code < 12 ? NARROW : WIDE;
+        textptr += strlen(textptr);
+        ptr += strlen(ptr); 
+       checksum += code;
+       if (startpresent && usesum && i == strlen(text) - 2) {
+           /* stuff a check symbol before the stop */
+           c = strchr(alphabet, toupper(text[i+1]));
+           if (!c) /* impossible */
+               continue;
+           code = c - alphabet;
+           checksum += code;
+
+           /* Complement to a multiple of 16 */
+           checksum = (checksum + 15) / 16 * 16 - checksum;
+           add_one(ptr, checksum);
+           ptr += strlen(ptr);
+       }
+    }
+    if (!startpresent) {
+       if (usesum) {
+           /* if no start character specified, B is used as a stop char */
+           checksum += CODE_B;
+           checksum = (checksum + 15) / 16 * 16 - checksum;
+           add_one(ptr, checksum);
+           ptr += strlen(ptr);
+       }
+       add_one(ptr, CODE_B);
+    }
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+
+    return 0;
+}
diff --git a/barcode-0.98/code128.c b/barcode-0.98/code128.c
new file mode 100644 (file)
index 0000000..cebba54
--- /dev/null
@@ -0,0 +1,607 @@
+/*
+ * code128.c -- encoding for code128 (A, B, C)
+ *
+ * Copyright (c) 1999,2000 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ * Copyright (c) 2000 Leonid A. Broukhis (leob@mailcom.com)
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+static char *codeset[] = {
+    "212222", "222122", "222221", "121223", "121322",  /*  0 -  4 */
+    "131222", "122213", "122312", "132212", "221213",
+    "221312", "231212", "112232", "122132", "122231",  /* 10 - 14 */
+    "113222", "123122", "123221", "223211", "221132",
+    "221231", "213212", "223112", "312131", "311222",  /* 20 - 24 */
+    "321122", "321221", "312212", "322112", "322211",
+    "212123", "212321", "232121", "111323", "131123",  /* 30 - 34 */
+    "131321", "112313", "132113", "132311", "211313",
+    "231113", "231311", "112133", "112331", "132131",  /* 40 - 44 */
+    "113123", "113321", "133121", "313121", "211331",
+    "231131", "213113", "213311", "213131", "311123",  /* 50 - 54 */
+    "311321", "331121", "312113", "312311", "332111",
+    "314111", "221411", "431111", "111224", "111422",  /* 60 - 64 */
+    "121124", "121421", "141122", "141221", "112214",
+    "112412", "122114", "122411", "142112", "142211",  /* 70 - 74 */
+    "241211", "221114", "413111", "241112", "134111",
+    "111242", "121142", "121241", "114212", "124112",  /* 80 - 84 */
+    "124211", "411212", "421112", "421211", "212141",
+    "214121", "412121", "111143", "111341", "131141",  /* 90 - 94 */
+    "114113", "114311", "411113", "411311", "113141",
+    "114131", "311141", "411131", "b1a4a2", "b1a2a4",  /* 100 - 104 */
+    "b1a2c2", "b3c1a1b"
+};
+
+#define START_A 103
+#define START_B 104
+#define START_C 105
+#define STOP    106
+#define SHIFT    98 /* only A and B */
+#define CODE_A  101 /* only B and C */
+#define CODE_B  100 /* only A and C */
+#define CODE_C   99 /* only A and B */
+#define FUNC_1  102 /* all of them */
+#define FUNC_2   97 /* only A and B */
+#define FUNC_3   96 /* only A and B */
+/* FUNC_4 is CODE_A when in A and CODE_B when in B */
+
+#define SYMBOL_WID 11 /* all of them are 11-bar wide */
+
+/*
+ * code 128-b includes all printable ascii chars
+ */
+
+int Barcode_128b_verify(unsigned char *text)
+{
+    if (text[0] == '\0')
+       return -1;
+    while (*text && *text>=32 && !(*text&0x80))
+       text++;
+    if (*text)
+       return -1; /* a non-ascii char */
+    return 0; /* ok */
+}
+
+int Barcode_128b_encode(struct Barcode_Item *bc)
+{
+    static char *text;
+    static char *partial;  /* dynamic */
+    static char *textinfo; /* dynamic */
+    char *textptr;
+    int i, code, textpos, checksum = 0;
+
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("code 128-B");
+
+    text = bc->ascii;
+    if (!text) {
+        bc->error = EINVAL;
+        return -1;
+    }
+    /* the partial code is 6* (head + text + check + tail) + final + term. */
+    partial = malloc( (strlen(text) + 4) * 6 +2);
+    if (!partial) {
+        bc->error = errno;
+        return -1;
+    }
+
+    /* the text information is at most "nnn:fff:c " * strlen +term */
+    textinfo = malloc(10*strlen(text) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+        return -1;
+    }
+
+    /* up to now, it was the same code as other encodings */
+
+    strcpy(partial, "0"); /* the first space */
+    strcat(partial, codeset[START_B]);
+    checksum += START_B; /* the start char is counted in the checksum */
+    textptr = textinfo;
+    textpos = SYMBOL_WID;
+
+    for (i=0; i<strlen(text); i++) {
+        if ( text[i] < 32 || (text[i] & 0x80)) {
+            bc->error = EINVAL; /* impossible if text is verified */
+            free(partial);
+            free(textinfo);
+            return -1;
+        }
+       code = text[i]-32;
+       strcat(partial, codeset[code]);
+       checksum += code * (i+1); /* first * 1 + second * 2 + third * 3... */
+        sprintf(textptr, "%i:12:%c ", textpos, text[i]);
+        textptr += strlen(textptr);
+        textpos += SYMBOL_WID; /* width of each code */
+    }
+    /* Add the checksum, independent of BARCODE_NO_CHECKSUM */
+    checksum %= 103;
+    strcat(partial, codeset[checksum]);
+    /* and the end marker */
+    strcat(partial, codeset[STOP]);
+
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+
+    return 0;
+}
+
+/*
+ * code 128-c is only digits, but two per symbol
+ */
+
+int Barcode_128c_verify(unsigned char *text)
+{
+    if (text[0] == '\0')
+       return -1;
+    /* must be an even number of digits */
+    if (strlen(text)%2)
+       return -1;
+    /* and must be all digits */
+    for (; *text; text++)
+       if (!isdigit(*text))
+           return -1;
+    return 0;
+}
+
+int Barcode_128c_encode(struct Barcode_Item *bc)
+{
+    static char *text;
+    static char *partial;  /* dynamic */
+    static char *textinfo; /* dynamic */
+    char *textptr;
+    int i, code, textpos, checksum = 0;
+
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("code 128-C");
+
+    text = bc->ascii;
+    if (!text) {
+        bc->error = EINVAL;
+        return -1;
+    }
+    /* the partial code is 6* (head + text + check + tail) + final + term. */
+    partial = malloc( (strlen(text) + 3) * 6 +2);
+    if (!partial) {
+        bc->error = errno;
+        return -1;
+    }
+
+    /* the text information is at most "nnn.5:fff:c " * strlen +term */
+    textinfo = malloc(12*strlen(text) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+        return -1;
+    }
+
+    strcpy(partial, "0"); /* the first space */
+    strcat(partial, codeset[START_C]);
+    checksum += START_C; /* the start char is counted in the checksum */
+    textptr = textinfo;
+    textpos = SYMBOL_WID;
+
+    for (i=0; text[i]; i+=2) {
+        if (!isdigit(text[i]) || !isdigit(text[i+1])) {
+            bc->error = EINVAL; /* impossible if text is verified */
+            free(partial);
+            free(textinfo);
+            return -1;
+        }
+        code = (text[i]-'0') * 10 + text[i+1]-'0';
+       strcat(partial, codeset[code]);
+       checksum += code * (i/2+1); /* first * 1 + second * 2 + third * 3... */
+
+       /* print as "%s", because we have ".5" positions */
+        sprintf(textptr, "%g:9:%c %g:9:%c ", (double)textpos, text[i],
+               textpos + (double)SYMBOL_WID/2, text[i+1]);
+        textptr += strlen(textptr);
+        textpos += SYMBOL_WID; /* width of each code */
+    }
+    /* Add the checksum, independent of BARCODE_NO_CHECKSUM */
+    checksum %= 103;
+    strcat(partial, codeset[checksum]);
+    /* and the end marker */
+    strcat(partial, codeset[STOP]);
+
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+
+    return 0;
+}
+
+/*
+ * generic (full-featured) code128 implementation: it selects between
+ * A, B, C according to the data being encoded. F1, F2, F3, F4 are expressed
+ * using ascii chars 0xc1, 0xc2, 0xc3, 0xc4 (0301, 0302, 0303, 0304).
+ * Char '\0' is expressed by 0x80 (0200).
+ */
+
+int Barcode_128_verify(unsigned char *text)
+{
+    if (text[0] == '\0')
+       return -1;
+    while (*text && (*text<=0x80 || (*text >= 0xc1 && *text <= 0xc4)))
+       text++;
+    if (*text)
+       return -1; /* unencodable character */
+    return 0; /* ok */
+}
+
+
+/*
+ * These functions are extracted from Barcode_128_encode for clarity.
+ * It deals with choosing the symbols used to represent the text
+ * and returns a dynamic array of integers, terminated by -1.
+ *
+ * The algorithm used in choosing the codes comes from App 2 of
+ * "El Codigo Estandar EAN/UCC 128", courtesy of AECOC, Spain.
+ * Thanks to Dani Pardo for getting permission and giving me a copy
+ * of the document
+ */
+
+#define NEED_CODE_A(c) ((c)<32 || (c)==0x80) 
+#define NEED_CODE_B(c) ((c)>=96 && (c)<128)
+
+static int Barcode_a_or_b(unsigned char *text)
+{
+    for ( ; *text; text++) {
+       if (NEED_CODE_A(*text))
+           return 'A';
+       if (NEED_CODE_B(*text))
+           return 'B';
+    }
+    return 0; /* any */
+}
+
+/* code is either 'A' or 'B', and value must be valid */
+static int Barcode_encode_as(int code, int value)
+{
+
+    /* first check the special chars */
+    if (value == 0xC1) return FUNC_1;
+    if (value == 0xC2) return FUNC_2;
+    if (value == 0xC3) return FUNC_3;
+    if (value == 0xC4) { /* F4 */
+       if (code == 'A') return CODE_A;
+       return CODE_B;
+    }
+
+    /* then check ascii values */
+    if (value >= 0x20 && value <= 0x5F)
+       return value - 0x20; /* both codes */
+    if (value == 0x80) return 64; /* code A */
+    if (value < 0x20) return value+64; /* code A */
+    if (value >= 0x60) return value - 0x20; /* code B */
+    /* can't happen */
+    return -1;
+}
+
+static int *Barcode_128_make_array(struct Barcode_Item *bc, int *lptr)
+{
+    int len, *codes;
+    unsigned char *s;
+    int i=0, j, code, checksum;
+
+    /* allocate twice the text length + 5, as this is the worst case */
+    len = 2 * strlen(bc->ascii) + 5;
+    codes = malloc(len * sizeof(int));
+    s = bc->ascii;
+
+    /* choose the starting code */
+    if (s[2]=='\0' && isdigit(s[0]) && isdigit(s[1])) {
+      code = 'C';
+    } else if (isdigit(s[0])&&isdigit(s[1]) && isdigit(s[2])&&isdigit(s[3])) {
+       code = 'C';
+    } else {
+       code = Barcode_a_or_b(s);
+       if (!code) code = 'B'; /* default */
+    }
+    codes[i++] = START_A + code - 'A';
+    
+    for (s = bc->ascii; *s; /* increments are in the loop */) {
+       switch(code) {
+
+           case 'C':
+               if (s[0] == 0xC1) { /* F1 is valid */
+                   codes[i++] = FUNC_1;
+                   s++;
+               } else if (isdigit(s[0]) && isdigit(s[1])) {
+                   /* encode two digits */
+                   codes[i++] = (s[0]-'0') * 10 + s[1]-'0';
+                   s += 2;
+               } else {
+                   /* change code */
+                   code = Barcode_a_or_b(s);
+                   if (!code) code = 'B';
+                   codes[i++] = (code == 'A') ? CODE_A : CODE_B;
+               }
+               break;
+                   
+           case 'B':
+           case 'A':
+               for (j=0; isdigit(s[j]); j++)
+                   ;
+               if (j>=4) { /* if there are 4 or more digits, turn to C */
+                   if (j&1) {
+                       /* odd number: encode one first */
+                       codes[i++] = *(s++) - ' ';
+                   }
+                   codes[i++] = CODE_C;
+                   code = 'C';
+               } else if (code == 'A' && NEED_CODE_B(*s)) {
+                   /* check whether we should use SHIFT or change code */
+                   j = Barcode_a_or_b(s+1);
+                   if (j == 'B') {
+                       codes[i++] = CODE_B;
+                       code = 'B';
+                   } else {
+                       codes[i++] = SHIFT;
+                       codes[i++] = Barcode_encode_as('B', *s);
+                       s++;
+                   }
+               } else if (code == 'B' && NEED_CODE_A(*s)) {
+                   /* check whether we should use SHIFT or change code */
+                   j = Barcode_a_or_b(s+1);
+                   if (j == 'A') {
+                       codes[i++] = CODE_A;
+                       code = 'A';
+                   } else {
+                       codes[i++] = SHIFT;
+                       codes[i++] = Barcode_encode_as('A', *s);
+                       s++;
+                   }
+               } else {
+                   codes[i++] = Barcode_encode_as(code, *s);
+                   s++;
+               }
+               break;
+       }           
+    }
+    /* add the checksum */
+    checksum = codes[0];
+    for (j=1; j<i; j++)
+       checksum += j * codes[j];
+    checksum %= 103;
+    codes[i++] = checksum;
+    codes[i++] = STOP;
+    if (i > len) {
+       fprintf(stderr, "impossible: length is > allocated len\n");
+    }
+    *lptr = i;
+    return codes;
+}
+
+/*
+ * Encoding is tricky, in that we cannot print the ascii
+ * representation in an easy way. Therefore, just skip non-printable
+ * chars and try to fit the rest somehow.
+ */
+int Barcode_128_encode(struct Barcode_Item *bc)
+{
+    static char *text;
+    static char *partial;  /* dynamic */
+    static char *textinfo; /* dynamic */
+    char *textptr;
+    int *codes; /* dynamic */
+    int i, c, len;
+    double textpos, size, step;
+
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("code 128");
+
+    text = bc->ascii;
+    if (!text) {
+        bc->error = EINVAL;
+        return -1;
+    }
+
+    codes = Barcode_128_make_array(bc, &len);
+    if (!codes) return -1;
+
+    /* the partial code is 6*codelen + ini + term (+margin) */
+    partial = malloc( 6 * len + 4);
+    if (!partial) {
+        bc->error = errno;
+       free(codes);
+        return -1;
+    }
+
+    /* the text information is at most "nnn.n:ff.f:c " * strlen +term */
+    textptr = textinfo = malloc(13*strlen(text) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+       free(codes);
+        return -1;
+    }
+
+    /* up to now, it was almost the same code as other encodings */
+
+    strcpy(partial, "0"); /* the first space */
+    for (i=0; i<len; i++) /* the symbols */
+       strcat(partial, codeset[codes[i]]);
+
+    /* avoid bars that fall lower than other bars */
+    for (i=0; partial[i]; i++)
+       if (isalpha(partial[i]))
+           partial[i] += '1' - 'a';
+
+    /*
+     * the accompanying text: reserve a space for every char.
+     * F[1-4] are rendered as spaces (separators), other unprintable chars
+     * are rendered as underscoress (placeholders)
+     */
+
+    /*
+     * A size of 9 is good for code-C (used above), so 18 for each symbol,
+     * but we place an upper limit of 12 to avoid overlapping on the bars.
+     */
+    size = (int)(180.0 * (len-3) / strlen(text) + .5) / 10.0;
+    if (size > 12.0) size = 12.0;
+
+    /* align the text to the left, using its natural size */
+    step = (int)(10 * (size/18.0 * SYMBOL_WID) + .5) / 10.0;
+    textpos = SYMBOL_WID;
+
+    for (i=0; i<strlen(text); i++) {
+       c = text[i];
+       if (c < 32 || c == 0x80) c = '_'; /* not printable */
+       if (c > 0xc0) c = ' '; /* F code */
+        sprintf(textptr, "%g:%g:%c ", textpos, size, c);
+        textptr += strlen(textptr);
+        textpos += step;
+    }
+
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+    free(codes);
+    return 0;
+}
+
+/*
+ * A raw 128 code is given as a sequence of space separated numbers
+ * from 0 to 105, starting from the start code to be (Leonid)
+ */
+
+int Barcode_128raw_verify(unsigned char *text)
+{
+    int n;
+    unsigned val;
+
+    if (!strlen(text))
+       return -1;
+    while (*text) {
+       if (sscanf(text, "%u%n", &val, &n) < 1)
+           return -1;
+       if (val > 105)
+           return -1;
+       text += n;
+    }
+    return 0;
+}
+
+int Barcode_128raw_encode(struct Barcode_Item *bc)
+{
+    static char *text;
+    static char *partial;  /* dynamic */
+    static char *textinfo; /* dynamic */
+    char *textptr;
+    int i, n, count, code, textpos, checksum = 0;
+
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("128raw");
+
+    text = bc->ascii;
+    if (!text) {
+        bc->error = EINVAL;
+        return -1;
+    }
+    /*
+     * length of partial code is unknown in advance, but it is
+     * at most  6* (1+text/2 + check + tail) + final + terminator
+     */
+    partial = malloc( (3+ strlen(text)/2) * 6 + 2);
+    if (!partial) {
+        bc->error = errno;
+        return -1;
+    }
+
+    /* the text information is at most "nnn.5:fff:c " * 1+strlen/2 +term */
+    textinfo = malloc(12 * (1+strlen(text)/2) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+        return -1;
+    }
+
+    strcpy(partial, "0"); /* the first space */
+    textptr = textinfo;
+    textpos = 0;
+
+    for (i=0, count = 0; i < strlen(text); count++) {
+       if (sscanf(text + i, "%u%n", &code, &n) < 1) {
+            bc->error = EINVAL; /* impossible if text is verified */
+            free(partial);
+            free(textinfo);
+            return -1;
+       }
+       strcat(partial, codeset[code]);
+       
+       /*
+        * since the start code is part of the "raw" input, it is
+        * counted in the checksum by itself
+        */
+       if (!count) checksum += code; /* the start code */
+       else        checksum += code * count; /* first * 1 + second * 2 ... */
+
+       /*
+        * print as "%s", because we have ".5" positions
+        * also, use a size of 9 like codeC above, as each symbol is
+        * represented by two chars
+        */
+        sprintf(textptr, "%g:9:%c %g:9:%c ", (double)textpos, 
+               code >= 100 ? 'A' : code/10 + '0',
+               textpos + (double)SYMBOL_WID/2, code%10 + '0');
+        textptr += strlen(textptr);
+        textpos += SYMBOL_WID; /* width of each code */
+       i += n;
+    }
+    /* Add the checksum, independent of BARCODE_NO_CHECKSUM */
+    checksum %= 103;
+    strcat(partial, codeset[checksum]);
+    /* and the end marker */
+    strcat(partial, codeset[STOP]);
+
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+
+    return 0;
+}
+
diff --git a/barcode-0.98/code39.c b/barcode-0.98/code39.c
new file mode 100644 (file)
index 0000000..3308c95
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+ * code39.c -- encoding for code39
+ *
+ * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+
+/* this is ordered in decades to simplify encoding */
+static char alphabet[] = 
+   "1234567890" "ABCDEFGHIJ" "KLMNOPQRST" "UVWXYZ-. *" "$/+%";
+
+/* the checksum alphabet has a different order */
+static char checkbet[] = 
+   "0123456789" "ABCDEFGHIJ" "KLMNOPQRST" "UVWXYZ-. $" "/+%";
+
+/* The first 40 symbols repeat this bar pattern */
+static char *bars[] = {
+   "31113","13113","33111","11313","31311",
+   "13311","11133","31131","13131","11331"};
+
+/* The first 4 decades use these space patterns */
+static char *spaces[] = {"1311","1131","1113","3111"};
+
+/* the last four symbols are special */
+static char *specialbars[] = {
+   "11111","11111","11111","11111"};
+
+static char *specialspaces[] = {
+   "3331","3313","3133","1333"};
+
+static char *fillers[]= {
+    "0a3a1c1c1a",
+    "1a3a1c1c1a"
+};
+
+
+/*
+ * Check that the text can be encoded. Returns 0 or -1.
+ * If it's all lowecase convert to uppercase and accept it
+ */
+int Barcode_39_verify(unsigned char *text)
+{
+    int i, lower=0, upper=0;
+
+    if (text[0] == '\0')
+       return -1;
+    for (i=0; text[i]; i++) {
+        if (isupper(text[i])) upper++;
+        if (islower(text[i])) lower++;
+        if (!strchr(alphabet,toupper(text[i])))
+            return -1;
+    }
+    if (lower && upper)
+        return -1;
+    return 0;
+}
+
+static int add_one(char *ptr, int code)
+{
+    char *b, *s;
+
+    if (code < 40) {
+        b = bars[code%10];
+        s = spaces[code/10];
+    } else {
+        b = specialbars[code-40];
+        s = specialspaces[code-40];
+    }
+    sprintf(ptr,"1%c%c%c%c%c%c%c%c%c", /* separator */
+            b[0], s[0], b[1], s[1], b[2], s[2],
+            b[3], s[3], b[4]);
+    return 0;
+}
+
+/*
+ * The encoding functions fills the "partial" and "textinfo" fields.
+ * Lowercase chars are converted to uppercase
+ */
+int Barcode_39_encode(struct Barcode_Item *bc)
+{
+    static char *text;
+    static char *partial;  /* dynamic */
+    static char *textinfo; /* dynamic */
+    char *c, *ptr, *textptr;
+    int i, code, textpos, checksum = 0;
+
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("code 39");
+
+    text = bc->ascii;
+    if (!text) {
+        bc->error = EINVAL;
+        return -1;
+    }
+    /* the partial code is 10* (head + text + check + tail) + margin + term. */
+    partial = malloc( (strlen(text) + 3) * 10 +2);
+    if (!partial) {
+        bc->error = errno;
+        return -1;
+    }
+
+    /* the text information is at most "nnn:fff:c " * strlen +term */
+    textinfo = malloc(10*strlen(text) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+        return -1;
+    }
+
+    strcpy(partial, fillers[0]);
+    ptr = partial + strlen(partial);
+    textptr = textinfo;
+    textpos = 22;
+
+    for (i=0; text[i]; i++) {
+        c = strchr(alphabet, toupper(text[i]));
+        if (!c) {
+            bc->error = EINVAL; /* impossible if text is verified */
+            free(partial);
+            free(textinfo);
+            return -1;
+        }
+        code = c - alphabet;
+        add_one(ptr, code);
+        c = strchr(checkbet,*c);
+        if (c) /* the '*' is not there */
+            checksum += (c-checkbet);
+        sprintf(textptr, "%i:12:%c ", textpos, toupper(text[i]));
+        
+        textpos += 16; /* width of each code */
+        textptr += strlen(textptr);
+        ptr += strlen(ptr); 
+    }
+    /* Add the checksum */
+    if ( (bc->flags & BARCODE_NO_CHECKSUM)==0 ) {
+       code = (strchr(alphabet, checkbet[checksum % 43]) - alphabet);
+       add_one(ptr, code);
+    }
+    strcat(ptr, fillers[1]); /* end */
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+
+    return 0;
+}
diff --git a/barcode-0.98/code93.c b/barcode-0.98/code93.c
new file mode 100644 (file)
index 0000000..73f8cee
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * code39.c -- encoding for code39
+ *
+ * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org) 
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ * Copyright (c) 2001 Nathan D. Holmes / FedEx Services (ndholmes@fedex.com) 
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+
+/* this is ordered in decades to simplify encoding */
+static char alphabet[] = 
+   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";
+
+static char *codeset[] = {
+       "131112", "111213", "111312", "111411", "121113",  /*  0  -  4 */
+       "121212", "121311", "111114", "131211", "141111",  /*  5  -  9 */
+       "211113", "211212", "211311", "221112", "221211",  /*  A  -  E */
+       "231111", "112113", "112212", "112311", "122112",  /*  F  -  J */
+       "132111", "111123", "111222", "111321", "121122",  /*  K  -  O */
+       "131121", "212112", "212211", "211122", "211221",  /*  P  -  T */
+       "221121", "222111", "112122", "112221", "122121",  /*  U  -  Y */
+       "123111", "121131", "311112", "311211", "321111",  /*  Z  -  $ */
+       "112131", "113121", "211131", "121221", "312111",  /*  /  - (%) */
+       "311121", "122211", "111141"                       /* (/) -  (terminator) */
+};
+
+
+/*      00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111 */
+/*      00000000001111111111222222222233333333334444444444555555555566666666667777777777888888888899999999990000000000111111111122222222 */
+/*      01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567 */
+static char shiftset[] =
+       "%$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%% ///  ///// /             /%%%%%%                          %%%%%%++++++++++++++++++++++++++%%%%%";
+static char shiftset2[] =
+       "UABCDEFGHIJKLMNOPQRSTUVWXYZABCDE ABC  FGHIJ L             ZFGHIJV                          KLMNOWABCDEFGHIJLKMNOPQRSTUVWXYZPQRST";
+
+#define START_STOP 47
+#define EXTEND_DOLLAR   43
+#define EXTEND_PERCENT   44
+#define EXTEND_SLASH   45
+#define EXTEND_PLUS   46
+
+/*
+ * Check that the text can be encoded. Returns 0 or -1.
+ * All of ASCII-7 is accepted.
+ */
+int Barcode_93_verify(unsigned char *text)
+{
+    int i;
+
+    if (!strlen(text))
+       return -1;
+    for (i=0; text[i]; i++) {
+
+        /* Test if beyond the range of 7-bit ASCII */
+        if ((int)text[i] > 127)
+            return -1;
+    }
+    return 0;
+}
+
+/*
+ * The encoding functions fills the "partial" and "textinfo" fields.
+ * Lowercase chars are converted to uppercase
+ */
+int Barcode_93_encode(struct Barcode_Item *bc)
+{
+    static unsigned char *text;
+    static char *partial;  /* dynamic */
+    static char *textinfo; /* dynamic */
+    char *c, *textptr;
+    int *checksum_str;
+    int i, code, textpos, checksum_len=0;
+    int c_checksum = 0;
+    int k_checksum = 0;
+
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("code 93");
+
+    text = bc->ascii;
+    if (!text) {
+        bc->error = EINVAL;
+        return -1;
+    }
+
+    /* the partial code is 6 * (head + 2* text + 2* check + tail) + margin + term. */
+    partial = malloc( (strlen(text) *2 + 4) * 6 +2);
+    if (!partial) {
+        bc->error = errno;
+        return -1;
+    }
+
+    checksum_str = (int *)malloc( (strlen(text) + 3) * 2 * sizeof(int));
+    if (!checksum_str) {
+       free(partial);
+        bc->error = errno;
+        return -1;
+    }
+
+    /* the text information is at most "nnn:fff:c " * strlen +term */
+    textinfo = malloc(10*strlen(text) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+       free(checksum_str);
+        return -1;
+    }
+
+    textptr = textinfo;
+    textpos = 22;
+    strcpy(partial, "0");
+    strcat(partial, codeset[START_STOP]);
+
+    for (i=0; i<strlen(text); i++) {
+        c = strchr(alphabet, text[i]);
+        if (!c) {
+           /* Encode the shift character */
+          switch(shiftset[text[i]])
+           {
+              case '$':
+                 code = EXTEND_DOLLAR;
+                 break;
+              case '%':
+                 code = EXTEND_PERCENT;
+                 break;
+              case '/':
+                 code = EXTEND_SLASH;
+                 break;
+              case '+':
+                 code = EXTEND_PLUS;
+                 break;
+              default:
+                 code = 0;
+                 break;
+           }
+
+           strcat(partial, codeset[code]);
+           checksum_str[checksum_len++] = code;
+
+           /* Encode the second character */
+           code = strchr(alphabet, shiftset2[text[i]]) - alphabet;
+           strcat(partial, codeset[code]);
+           checksum_str[checksum_len++] = code;
+        } else {
+            /* Character is natively supported by the symbology, encode directly */
+            code = c - alphabet;
+            strcat(partial, codeset[c -alphabet]);
+            checksum_str[checksum_len++] = code;
+        }
+        sprintf(textptr, "%i:12:%c ", textpos, text[i]);
+        textptr += strlen(textptr);
+       /*
+        * width of each code is 9; composed codes are 18, but aligning
+        * the text behind the right bars would be ugly, so use 9 anyways
+        */
+        textpos += 9;
+    }
+    c_checksum=0;
+    k_checksum=0;
+
+    /* Add the checksum */
+    if ( (bc->flags & BARCODE_NO_CHECKSUM)==0 ) 
+    {
+        for(i=1; i<=checksum_len; i++)
+        {
+           c_checksum += i * (int)checksum_str[checksum_len - i];
+           k_checksum += (i+1) * (int)checksum_str[checksum_len - i];
+        }
+
+        c_checksum = c_checksum % 47;
+        k_checksum += c_checksum;                           
+        k_checksum = k_checksum % 47;
+
+        strcat(partial, codeset[c_checksum]);
+        strcat(partial, codeset[k_checksum]);
+
+    }
+    strcat(partial, codeset[START_STOP]); /* end */
+
+    /* Encodes final 1-unit width bar to turn the start character into a stop char */
+    strcat(partial, "1");
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+
+    return 0;
+}
diff --git a/barcode-0.98/compat/getopt.c b/barcode-0.98/compat/getopt.c
new file mode 100644 (file)
index 0000000..91f00b5
--- /dev/null
@@ -0,0 +1,831 @@
+/* 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 roland@gnu.ai.mit.edu
+   before changing it!
+
+   Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+\f
+/* 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.  */
+
+#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
+
+
+/* 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>
+#if defined (_LIBC) || defined (HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+#endif /* GNU C library.  */
+
+#ifdef VMS
+#include <unixlib.h>
+#if HAVE_STRING_H - 0
+#include <string.h>
+#endif
+#endif
+
+#ifdef WIN32
+/* It's not Unix, really.  See?  Capital letters.  */
+#include <windows.h>
+#define getpid() GetCurrentProcessId()
+#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 EOF, 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.  */
+
+/* XXX 1003.2 says this must be 1 before any call.  */
+int optind = 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 EOF with `optind' != ARGC.  */
+
+static enum
+{
+  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+} ordering;
+
+/* Value of POSIXLY_CORRECT environment variable.  */
+static char *posixly_correct;
+\f
+#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
+
+/* Avoid depending on library functions or files
+   whose names are inconsistent.  */
+
+char *getenv ();
+
+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__
+/* 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__ */
+\f
+/* 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;
+
+/* Bash 2.0 gives us an environment variable containing flags
+   indicating ARGV elements that should not be considered arguments.  */
+
+static const char *nonoption_flags;
+static int nonoption_flags_len;
+
+/* 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.  */
+
+  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;
+           }
+         /* 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;
+           }
+         /* 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 (const char *);
+#endif
+static const char *
+_getopt_initialize (optstring)
+     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 = 1;
+
+  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;
+
+  if (posixly_correct == NULL)
+    {
+      /* Bash 2.0 puts a special variable in the environment for each
+        command it runs, specifying which ARGV elements are the results of
+        file name wildcard expansion and therefore should not be
+        considered as options.  */
+      char var[100];
+      sprintf (var, "_%d_GNU_nonoption_argv_flags_", getpid ());
+      nonoption_flags = getenv (var);
+      if (nonoption_flags == NULL)
+       nonoption_flags_len = 0;
+      else
+       nonoption_flags_len = strlen (nonoption_flags);
+    }
+
+  return optstring;
+}
+\f
+/* 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 `EOF'.
+   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)
+    {
+      optstring = _getopt_initialize (optstring);
+      optind = 1;              /* Don't scan ARGV[0], the program name.  */
+    }
+
+  /* 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.  */
+#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0'       \
+                    || (optind < nonoption_flags_len                         \
+                        && nonoption_flags[optind] == '1'))
+
+  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 EOF;
+       }
+
+      /* 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 EOF;
+         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;
+      int option_index;
+
+      for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
+       /* Do nothing.  */ ;
+
+#ifdef lint            /* Suppress `used before initialized' warning.  */
+      indfound = 0;
+#endif
+
+      /* 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 (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 `%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 '?';
+      }
+    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 /* _LIBC or not __GNU_LIBRARY__.  */
+\f
+#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 == EOF)
+       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/barcode-0.98/compat/getopt.h b/barcode-0.98/compat/getopt.h
new file mode 100644 (file)
index 0000000..952f483
--- /dev/null
@@ -0,0 +1,129 @@
+/* Declarations for getopt.
+   Copyright (C) 1989, 90, 91, 92, 93, 94 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, 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 EOF, 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/barcode-0.98/configure b/barcode-0.98/configure
new file mode 100755 (executable)
index 0000000..f0e5d45
--- /dev/null
@@ -0,0 +1,5197 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.57.
+#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)$' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+        case $as_dir in
+        /*)
+          if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+            CONFIG_SHELL=$as_dir/$as_base
+            export CONFIG_SHELL
+            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+          fi;;
+        esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="barcode.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CPP EGREP GETOPT_O NO_GETOPT NO_LIBPAPER LIBPAPER NO_STRERROR GMAKEDEPEND0 GMAKEDEPEND1 GMAKEDEPEND2 LIBOBJS LTLIBOBJS MAKEINFO REMOVEHTMLTAGS INFOTOHTML'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+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'
+
+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
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # 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_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$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 ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) 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 | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$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 | -n)
+    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_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    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 "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+              localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# 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_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$0" : 'X\(//\)[^/]' \| \
+         X"$0" : 'X\(//\)$' \| \
+         X"$0" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  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 "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # 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 <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\_ACEOF
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+           test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.57.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"   "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+        ac_must_keep_next=false # Got value, back to normal.
+      else
+        case $ac_arg in
+          *=* | --config-cache | -C | -disable-* | --disable-* \
+          | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+          | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+          | -with-* | --with-* | -without-* | --without-* | --x)
+            case "$ac_configure_args0 " in
+              "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+            esac
+            ;;
+          -* ) ac_must_keep_next=true ;;
+        esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=$`echo $ac_var`
+        echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core core.* *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# 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
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# 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 "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+        { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+        { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+        { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+        ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"   "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+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 $# != 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
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+        ;;
+    conftest.$ac_ext )
+        # This is the source file.
+        ;;
+    [ab].out )
+        # We found the default executable, but exeext='' is most
+        # certainly right.
+        break;;
+    *.* )
+        ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+        # FIXME: I believe we export ac_cv_exeext for Libtool,
+        # but it would be cool to find out if it's true.  Does anybody
+        # maintain Libtool? --akim.
+        export ac_cv_exeext
+        break;;
+    * )
+        break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+          export ac_cv_exeext
+          break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX                  -qlanglvl=ansi
+# Ultrix and OSF/1     -std1
+# HP-UX 10.20 and later        -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4                 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   ''\
+   '#include <stdlib.h>' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+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
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $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
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# 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 "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+          if test $ac_prog = install &&
+            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+            # AIX install.  It has an incompatible calling convention.
+            :
+          elif test $ac_prog = install &&
+            grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+            # program-specific install script used by HP pwplus--don't use.
+            :
+          else
+            ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+            break 3
+          fi
+        fi
+      done
+    done
+    ;;
+esac
+done
+
+
+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 "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&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_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+if test x$GCC = xyes; then
+       CFLAGS="$CFLAGS -Wall"
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                   (('a' <= (c) && (c) <= 'i') \
+                     || ('j' <= (c) && (c) <= 'r') \
+                     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#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);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+if test "${ac_cv_header_getopt_h+set}" = set; then
+  echo "$as_me:$LINENO: checking for getopt.h" >&5
+echo $ECHO_N "checking for getopt.h... $ECHO_C" >&6
+if test "${ac_cv_header_getopt_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_getopt_h" >&5
+echo "${ECHO_T}$ac_cv_header_getopt_h" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking getopt.h usability" >&5
+echo $ECHO_N "checking getopt.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <getopt.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking getopt.h presence" >&5
+echo $ECHO_N "checking getopt.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <getopt.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+  yes:no )
+    { echo "$as_me:$LINENO: WARNING: getopt.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: getopt.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: getopt.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: getopt.h: proceeding with the preprocessor's result" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+  no:yes )
+    { echo "$as_me:$LINENO: WARNING: getopt.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: getopt.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: getopt.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: getopt.h: check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: getopt.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: getopt.h: proceeding with the preprocessor's result" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for getopt.h" >&5
+echo $ECHO_N "checking for getopt.h... $ECHO_C" >&6
+if test "${ac_cv_header_getopt_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_getopt_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_getopt_h" >&5
+echo "${ECHO_T}$ac_cv_header_getopt_h" >&6
+
+fi
+if test $ac_cv_header_getopt_h = yes; then
+  :
+else
+  NO_GETOPT=-DNO_GETOPT;GETOPT_O=compat/getopt.o
+fi
+
+
+if test "${ac_cv_header_paper_h+set}" = set; then
+  echo "$as_me:$LINENO: checking for paper.h" >&5
+echo $ECHO_N "checking for paper.h... $ECHO_C" >&6
+if test "${ac_cv_header_paper_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_paper_h" >&5
+echo "${ECHO_T}$ac_cv_header_paper_h" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking paper.h usability" >&5
+echo $ECHO_N "checking paper.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <paper.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking paper.h presence" >&5
+echo $ECHO_N "checking paper.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <paper.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+  yes:no )
+    { echo "$as_me:$LINENO: WARNING: paper.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: paper.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: paper.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: paper.h: proceeding with the preprocessor's result" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+  no:yes )
+    { echo "$as_me:$LINENO: WARNING: paper.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: paper.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: paper.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: paper.h: check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: paper.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: paper.h: proceeding with the preprocessor's result" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for paper.h" >&5
+echo $ECHO_N "checking for paper.h... $ECHO_C" >&6
+if test "${ac_cv_header_paper_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_paper_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_paper_h" >&5
+echo "${ECHO_T}$ac_cv_header_paper_h" >&6
+
+fi
+if test $ac_cv_header_paper_h = yes; then
+  LIBPAPER=-lpaper
+else
+  NO_LIBPAPER=-DNO_LIBPAPER
+fi
+
+
+
+for ac_header in unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+  yes:no )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+  no:yes )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for strerror" >&5
+echo $ECHO_N "checking for strerror... $ECHO_C" >&6
+if test "${ac_cv_func_strerror+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char strerror (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strerror ();
+/* 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_strerror) || defined (__stub___strerror)
+choke me
+#else
+char (*f) () = strerror;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != strerror;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_strerror=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_strerror=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_strerror" >&5
+echo "${ECHO_T}$ac_cv_func_strerror" >&6
+if test $ac_cv_func_strerror = yes; then
+  :
+else
+  NO_STRERROR=-DNO_STRERROR
+fi
+
+
+for ac_func in strcasecmp
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* 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 ();
+/* 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
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+echo "$as_me:$LINENO: checking \"for gmake\"" >&5
+echo $ECHO_N "checking \"for gmake\"... $ECHO_C" >&6
+GMAKE=no
+${MAKE=make} --version 2> /dev/null | grep GNU > /dev/null && GMAKE=yes
+echo "$as_me:$LINENO: result: $GMAKE" >&5
+echo "${ECHO_T}$GMAKE" >&6
+if test "$GMAKE" = "yes"; then
+       GMAKEDEPEND0='ifeq (.depend,$(wildcard .depend))'
+       GMAKEDEPEND1='include .depend'
+       GMAKEDEPEND2='endif'
+fi
+
+echo "$as_me:$LINENO: checking \"if makeinfo can output html\"" >&5
+echo $ECHO_N "checking \"if makeinfo can output html\"... $ECHO_C" >&6
+MAKEINFOHTML=no
+${MAKEINFO=makeinfo} --help | grep .--html > /dev/null && MAKEINFOHTML=yes
+echo "$as_me:$LINENO: result: $MAKEINFOHTML" >&5
+echo "${ECHO_T}$MAKEINFOHTML" >&6
+if test "$MAKEINFOHTML" = "yes"; then
+   REMOVEHTMLTAGS="cat"
+   INFOTOHTML="$MAKEINFO --html"
+else
+   REMOVEHTMLTAGS="sed 's/ifnottex/ifinfo/; s/ifnotinfo/iftex/'"
+   INFOTOHTML="perl texi2html -monolithic"
+fi
+
+
+
+
+
+
+
+
+
+
+
+          ac_config_files="$ac_config_files Makefile"
+cat >confcache <<\_ACEOF
+# 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, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# 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 | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+        "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[   ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[     ]*$//;
+}'
+fi
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then we branch to the quote section.  Otherwise,
+# look for a macro that doesn't take arguments.
+cat >confdef2opt.sed <<\_ACEOF
+t clear
+: clear
+s,^[   ]*#[    ]*define[       ][      ]*\([^  (][^    (]*([^)]*)\)[   ]*\(.*\),-D\1=\2,g
+t quote
+s,^[   ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\),-D\1=\2,g
+t quote
+d
+: quote
+s,[    `~#$^&*(){}\\|;'"<>?],\\&,g
+s,\[,\\&,g
+s,\],\\&,g
+s,\$,$$,g
+p
+_ACEOF
+# We use echo to avoid assuming a particular line-breaking character.
+# The extra dot is to prevent the shell from consuming trailing
+# line-breaks from the sub-command output.  A line-break within
+# single-quotes doesn't work because, if this script is created in a
+# platform that uses two characters for line-breaks (e.g., DOS), tr
+# would break.
+ac_LF_and_DOT=`echo; echo .`
+DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
+rm -f confdef2opt.sed
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+         sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)$' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+        case $as_dir in
+        /*)
+          if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+            CONFIG_SHELL=$as_dir/$as_base
+            export CONFIG_SHELL
+            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+          fi;;
+        esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.57.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.57,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@GETOPT_O@,$GETOPT_O,;t t
+s,@NO_GETOPT@,$NO_GETOPT,;t t
+s,@NO_LIBPAPER@,$NO_LIBPAPER,;t t
+s,@LIBPAPER@,$LIBPAPER,;t t
+s,@NO_STRERROR@,$NO_STRERROR,;t t
+s,@GMAKEDEPEND0@,$GMAKEDEPEND0,;t t
+s,@GMAKEDEPEND1@,$GMAKEDEPEND1,;t t
+s,@GMAKEDEPEND2@,$GMAKEDEPEND2,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # 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_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # 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" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+       ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+       ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+        cat >$tmp/stdin
+        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$ac_file" : 'X\(//\)[^/]' \| \
+         X"$ac_file" : 'X\(//\)$' \| \
+         X"$ac_file" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$as_dir" : 'X\(//\)[^/]' \| \
+         X"$as_dir" : 'X\(//\)$' \| \
+         X"$as_dir" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+                                     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+         # Absolute (can't be DOS-style, as IFS=:)
+         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         echo $f;;
+      *) # Relative
+         if test -f "$f"; then
+           # Build tree
+           echo $f
+         elif test -f "$srcdir/$f"; then
+           # Source tree
+           echo $srcdir/$f
+         else
+           # /dev/null tree
+           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+
+
+
+
+          ac_config_files="$ac_config_files doc/Makefile"
+cat >confcache <<\_ACEOF
+# 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, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# 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 | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+        "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[   ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[     ]*$//;
+}'
+fi
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then we branch to the quote section.  Otherwise,
+# look for a macro that doesn't take arguments.
+cat >confdef2opt.sed <<\_ACEOF
+t clear
+: clear
+s,^[   ]*#[    ]*define[       ][      ]*\([^  (][^    (]*([^)]*)\)[   ]*\(.*\),-D\1=\2,g
+t quote
+s,^[   ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\),-D\1=\2,g
+t quote
+d
+: quote
+s,[    `~#$^&*(){}\\|;'"<>?],\\&,g
+s,\[,\\&,g
+s,\],\\&,g
+s,\$,$$,g
+p
+_ACEOF
+# We use echo to avoid assuming a particular line-breaking character.
+# The extra dot is to prevent the shell from consuming trailing
+# line-breaks from the sub-command output.  A line-break within
+# single-quotes doesn't work because, if this script is created in a
+# platform that uses two characters for line-breaks (e.g., DOS), tr
+# would break.
+ac_LF_and_DOT=`echo; echo .`
+DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
+rm -f confdef2opt.sed
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+         sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)$' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+        case $as_dir in
+        /*)
+          if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+            CONFIG_SHELL=$as_dir/$as_base
+            export CONFIG_SHELL
+            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+          fi;;
+        esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.57.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.57,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@GETOPT_O@,$GETOPT_O,;t t
+s,@NO_GETOPT@,$NO_GETOPT,;t t
+s,@NO_LIBPAPER@,$NO_LIBPAPER,;t t
+s,@LIBPAPER@,$LIBPAPER,;t t
+s,@NO_STRERROR@,$NO_STRERROR,;t t
+s,@GMAKEDEPEND0@,$GMAKEDEPEND0,;t t
+s,@GMAKEDEPEND1@,$GMAKEDEPEND1,;t t
+s,@GMAKEDEPEND2@,$GMAKEDEPEND2,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@REMOVEHTMLTAGS@,$REMOVEHTMLTAGS,;t t
+s,@INFOTOHTML@,$INFOTOHTML,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # 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_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # 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" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+       ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+       ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+        cat >$tmp/stdin
+        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$ac_file" : 'X\(//\)[^/]' \| \
+         X"$ac_file" : 'X\(//\)$' \| \
+         X"$ac_file" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$as_dir" : 'X\(//\)[^/]' \| \
+         X"$as_dir" : 'X\(//\)$' \| \
+         X"$as_dir" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+                                     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+         # Absolute (can't be DOS-style, as IFS=:)
+         test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         echo $f;;
+      *) # Relative
+         if test -f "$f"; then
+           # Build tree
+           echo $f
+         elif test -f "$srcdir/$f"; then
+           # Source tree
+           echo $srcdir/$f
+         else
+           # /dev/null tree
+           { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
diff --git a/barcode-0.98/configure.in.dist b/barcode-0.98/configure.in.dist
new file mode 100644 (file)
index 0000000..07120b4
--- /dev/null
@@ -0,0 +1,65 @@
+dnl Process this file with autoconf to produce a configure script.
+
+AC_INIT(barcode.h)
+AC_PREREQ(2.12)
+
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_PROG_INSTALL
+
+dnl Add "-Wall" if this is gcc
+if test x$GCC = xyes; then
+       CFLAGS="$CFLAGS -Wall"
+fi
+
+
+dnl Check for getopt and libpaper. If getopt is missing, use our version
+AC_CHECK_HEADER(getopt.h, ,NO_GETOPT=-DNO_GETOPT;GETOPT_O=compat/getopt.o)
+AC_CHECK_HEADER(paper.h, LIBPAPER=-lpaper, NO_LIBPAPER=-DNO_LIBPAPER)
+AC_CHECK_HEADERS(unistd.h)
+
+AC_CHECK_FUNC(strerror, , NO_STRERROR=-DNO_STRERROR)
+AC_CHECK_FUNCS(strcasecmp)
+
+dnl Check if this is gmake, but allow ovverriding using $MAKE
+AC_MSG_CHECKING("for gmake")
+GMAKE=no
+${MAKE=make} --version 2> /dev/null | grep GNU > /dev/null && GMAKE=yes
+AC_MSG_RESULT($GMAKE)
+if test "$GMAKE" = "yes"; then
+       GMAKEDEPEND0='ifeq (.depend,$(wildcard .depend))'
+       GMAKEDEPEND1='include .depend'
+       GMAKEDEPEND2='endif'
+fi
+
+dnl Check if we use makeinfo or the local texi2html tool
+AC_MSG_CHECKING("if makeinfo can output html")
+MAKEINFOHTML=no
+${MAKEINFO=makeinfo} --help | grep .--html > /dev/null && MAKEINFOHTML=yes
+AC_MSG_RESULT($MAKEINFOHTML)
+if test "$MAKEINFOHTML" = "yes"; then
+   REMOVEHTMLTAGS="cat"
+   INFOTOHTML="$MAKEINFO --html"
+else
+   REMOVEHTMLTAGS="sed 's/ifnottex/ifinfo/; s/ifnotinfo/iftex/'"
+   INFOTOHTML="perl texi2html -monolithic"
+fi
+
+
+AC_SUBST(GETOPT_O)
+AC_SUBST(NO_GETOPT)
+AC_SUBST(NO_LIBPAPER)
+AC_SUBST(LIBPAPER)
+AC_SUBST(NO_STRERROR)
+AC_SUBST(GMAKEDEPEND0)
+AC_SUBST(GMAKEDEPEND1)
+AC_SUBST(GMAKEDEPEND2)
+
+AC_OUTPUT(Makefile)
+
+AC_SUBST(MAKEINFO)
+AC_SUBST(REMOVEHTMLTAGS)
+AC_SUBST(INFOTOHTML)
+
+AC_OUTPUT(doc/Makefile)
+
diff --git a/barcode-0.98/contrib/barcode-SVG.tar.gz b/barcode-0.98/contrib/barcode-SVG.tar.gz
new file mode 100644 (file)
index 0000000..69df956
Binary files /dev/null and b/barcode-0.98/contrib/barcode-SVG.tar.gz differ
diff --git a/barcode-0.98/contrib/barcode-SVG.tar.gz.README b/barcode-0.98/contrib/barcode-SVG.tar.gz.README
new file mode 100644 (file)
index 0000000..1608eba
--- /dev/null
@@ -0,0 +1,24 @@
+
+[readme written by GNU-barcode maintainer]
+
+This is a stripped version of what you can find at:
+       http://www.onefour.net/barcode/SVG/barcode097-SVG.tar.gz
+
+It's by David J. Humphreys, it's GPL code and the original tarball
+(as per the previous URL) contains:
+
+-rwxr--r-- david/david     243 2002-01-02 04:18:00 Makefile
+-rwxr--r-- david/david    1284 2002-01-08 00:26:42 main.c
+-rwxr--r-- david/david   37796 2002-01-02 04:33:00 screen1.png
+-rwxr--r-- david/david    5503 2002-01-08 00:30:00 svg.c
+-rwxr--r-- david/david    2499 2002-01-02 03:37:00 test1.svg
+-rwxr--r-- david/david    2499 2002-01-02 03:44:00 test2.svg
+-rwxr--r-- david/david    2499 2002-01-02 03:49:00 test3.svg
+-rwxr--r-- david/david   34185 2002-01-02 04:41:00 test4.png
+-rwxr--r-- david/david    1834 2002-01-02 04:19:00 test4.svg
+-rwxr--r-- david/david   92713 2002-01-02 04:36:00 transformation.png
+-rwxr--r-- david/david     586 2002-01-02 04:11:00 transformation.svg
+
+Here I only included Makefile, main.c, svg.c, after converting
+newlines to unix-style and changing permissions.
+
diff --git a/barcode-0.98/contrib/barcode-for-delphi.tar.gz b/barcode-0.98/contrib/barcode-for-delphi.tar.gz
new file mode 100644 (file)
index 0000000..cbc8e67
Binary files /dev/null and b/barcode-0.98/contrib/barcode-for-delphi.tar.gz differ
diff --git a/barcode-0.98/contrib/barcode-for-delphi.tar.gz.README b/barcode-0.98/contrib/barcode-for-delphi.tar.gz.README
new file mode 100644 (file)
index 0000000..36d216d
--- /dev/null
@@ -0,0 +1,10 @@
+
+The barcode-for-delphi tarball includes a version of this package
+ported to run under Delphi. Please note that you can't distribute the
+executable because of the GPL (i.e., disitributing it would be
+copyright violation, because the executable is a derived work of GNU
+barcode, whose authors don't allow distributing under non-GPL terms.
+
+I still think it may be useful to some users.
+
+The code has been contributed by Michael Geddes <michael@webease.com.au>.
diff --git a/barcode-0.98/contrib/barcodeps-0.1.tgz b/barcode-0.98/contrib/barcodeps-0.1.tgz
new file mode 100644 (file)
index 0000000..1dadb1c
Binary files /dev/null and b/barcode-0.98/contrib/barcodeps-0.1.tgz differ
diff --git a/barcode-0.98/contrib/barcodeps-0.1.tgz.README b/barcode-0.98/contrib/barcodeps-0.1.tgz.README
new file mode 100644 (file)
index 0000000..b0364f6
--- /dev/null
@@ -0,0 +1,25 @@
+
+                         ***** barcodeps  0.1 *****
+                                 2000-10-07
+
+Barcodes generated in PostScript
+by Hans Schou http://www.schou.dk
+
+PostScript is a programming language. It has all the control structures
+needed for creating barcodes on the fly. With this example it is not
+needed to have another programming language than PostScript as the
+barcodes are generated within the PostScript printer.
+
+This contribution gives some examples of how to generate Interleave 2 of 5
+barcodes. Edit the bottom of i25.ps with a new number and send it to
+a PostScript printer to see an example.
+
+Usage, in PostScript:
+To draw a Interleave 2 of 5 use the following command in i25.ps
+  (123456789) BarCodeI25
+
+This method is very usefull used together with other scripts
+or programming language as it is only necessary to copy some
+files to the printer. No program execution is needed.
+
+
diff --git a/barcode-0.98/contrib/grab-0.0.4.tar.gz b/barcode-0.98/contrib/grab-0.0.4.tar.gz
new file mode 100644 (file)
index 0000000..91fa9e6
Binary files /dev/null and b/barcode-0.98/contrib/grab-0.0.4.tar.gz differ
diff --git a/barcode-0.98/contrib/grab-0.0.4.tar.gz.README b/barcode-0.98/contrib/grab-0.0.4.tar.gz.README
new file mode 100644 (file)
index 0000000..4a04807
--- /dev/null
@@ -0,0 +1,13 @@
+
+The purpose of this program is to read a (scanned) image containing a
+barcode. The image is then interpreted and the barcode is decoded.
+The decoded string is outputted to stdout.
+Currently, only Code-128 is supported.
+
+The program is GPL'd and it's the work of Tuukka Toivonen.
+
+The home page for this and other programs by Tuukka is 
+       http://www.ee.oulu.fi/~tuukkat/releases.html
+while a bare ls-like listing of all packages is at
+       http://www.ee.oulu.fi/~tuukkat/rel/
diff --git a/barcode-0.98/debian/README.debian b/barcode-0.98/debian/README.debian
new file mode 100644 (file)
index 0000000..7223023
--- /dev/null
@@ -0,0 +1,9 @@
+The Debian Package barcode
+----------------------------
+
+This Debian package is integrated in the upstream release of GNU
+barcode, maintained by Alessandro Rubini (rubini@gnu.org,
+rubini@prosa.it).  Since I have no extended experience with Debian
+packages, I'm willing to accept any fixes that seem fit, as well as a
+real Debian maintainer for the Debian package.
+
diff --git a/barcode-0.98/debian/changelog b/barcode-0.98/debian/changelog
new file mode 100644 (file)
index 0000000..b43e686
--- /dev/null
@@ -0,0 +1,27 @@
+barcode (0.98) unstable; urgency=low
+
+  * New upstream release 
+
+ -- Alessandro Rubini <rubini@gnu.org>  Fri,  1 Mar 2002 23:04:14 +0100
+
+barcode (0.96) unstable; urgency=low
+
+  * New upstream release 
+
+ -- Alessandro Rubini <rubini@gnu.org>  Wed,  8 Nov 2000 18:29:18 +0200
+
+barcode (0.95) unstable; urgency=low
+
+  * New upstream release 
+
+ -- Alessandro Rubini <rubini@gnu.org>  Thu,  3 Feb 2000 21:16:59 +0200
+
+barcode (0.94) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Alessandro Rubini <rubini@gnu.org>  Sun, 24 Oct 1999 01:10:23 +0200
+
+Local variables:
+mode: debian-changelog
+End:
diff --git a/barcode-0.98/debian/control b/barcode-0.98/debian/control
new file mode 100644 (file)
index 0000000..aacbfd4
--- /dev/null
@@ -0,0 +1,14 @@
+Source: barcode
+Section: misc
+Priority: optional
+Maintainer: Alessandro Rubini <rubini@prosa.it>
+Standards-Version: 2.5.0
+
+Package: barcode
+Architecture: any
+Depends: ${shlibs:Depends}
+Description:  Creates barcodes in .ps format
+ GNU barcode can create printouts for the conventional
+ product packagging standards: UPC-A, UPC-E, EAN-13, EAN-8, ISBN, code 39
+ code 128 (b and c), and interleaved 2 of 5 . Ouput is generated as 
+ either Postscript or Encapsulated Postscript.
diff --git a/barcode-0.98/debian/copyright b/barcode-0.98/debian/copyright
new file mode 100644 (file)
index 0000000..c193af2
--- /dev/null
@@ -0,0 +1,8 @@
+This package was written by Alessandro Rubini rubini@gnu.org on Sun, 24 Oct 1999 01:10:23 +0200.
+
+The pristine source can be downloaded from ftp://ftp.gnu.org/pub/barcode
+and GNU mirrors. Latest and greatest version (also beta) are immediately
+uploaded to ftp://ftp.prosa.it/pub/software.
+
+Copyright: GPL (see /usr/doc/copyright/GPL)
+
diff --git a/barcode-0.98/debian/dirs b/barcode-0.98/debian/dirs
new file mode 100644 (file)
index 0000000..6822e40
--- /dev/null
@@ -0,0 +1,3 @@
+usr/bin
+usr/include
+usr/info
diff --git a/barcode-0.98/debian/info b/barcode-0.98/debian/info
new file mode 100644 (file)
index 0000000..18336bf
--- /dev/null
@@ -0,0 +1,15 @@
+# This is a configuration files for installing a .info menu
+# The Description to be placed into the directory
+DESCR="Barcode library and frontend"
+
+# The section this info file should be placed in (Regexp) followed by
+# the new section name to be created if the Regexp does not match
+# (Optional. If not given the .info will be appended to the directory)
+SECTION_MATCH="[cC]ommands"
+SECTION_NAME="General Commands"
+
+# The file referred to from the Info directory
+FILE=barcode.info
+
+# Optional. The files to be copied to /usr/info
+FILES=doc/*.info
diff --git a/barcode-0.98/debian/rules b/barcode-0.98/debian/rules
new file mode 100755 (executable)
index 0000000..c48c5a1
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/make -f
+# Made with the aid of debmake, by Christoph Lameter,
+# based on the sample debian/rules file for GNU hello by Ian Jackson.
+
+package=barcode
+
+build:
+       $(checkdir)
+       ./configure --prefix=/usr
+       $(MAKE) CFLAGS="-O2 -g -Wall"
+       touch build
+
+clean:
+       $(checkdir)
+       -rm -f build
+       -$(MAKE) distclean
+       -rm -f `find . -name "*~"`
+       -rm -rf debian/tmp debian/files* core debian/substvars
+
+binary-indep: checkroot build
+       $(checkdir)
+# There are no architecture-independent files to be uploaded
+# generated by this package.  If there were any they would be
+# made here.
+
+binary-arch: checkroot build
+       $(checkdir)
+       -rm -rf debian/tmp
+       install -d debian/tmp
+       cd debian/tmp && install -d `cat ../dirs`
+       $(MAKE) install prefix=`pwd`/debian/tmp/usr
+# Must have debmake installed for this to work. Otherwise please copy
+# /usr/bin/debstd into the debian directory and change debstd to debian/debstd
+       debstd ChangeLog README TODO INSTALL
+       dpkg-gencontrol
+       chown -R root.root debian/tmp
+       chmod -R go=rX debian/tmp
+       dpkg --build debian/tmp ..
+
+define checkdir
+       test -f debian/rules
+endef
+
+binary: binary-indep binary-arch
+
+checkroot:
+       $(checkdir)
+       test root = "`whoami`"
+
+.PHONY: binary binary-arch binary-indep clean checkroot
diff --git a/barcode-0.98/doc/Makefile.in b/barcode-0.98/doc/Makefile.in
new file mode 100644 (file)
index 0000000..dae8f6b
--- /dev/null
@@ -0,0 +1,135 @@
+#
+# Makefile (now .in) for the documentation directory
+#
+# Copyright 1994,2000   rubini@gnu.org (Alessandro Rubini)
+#
+#################
+#
+# BE CAREFUL in editing:
+#      due to the large number of index files, and my use of a non standard
+#      info input file, any file $(TARGET).* is removed by "make clean"
+#
+#      I chose to use a prefix for the input file ("doc.$(TARGET)"), to ease
+#      makeing clean and applying my own rules.
+#
+###################################################################
+#
+# First of all, retrieve features of makeinfo, to know if we can do images
+# and --html. Also, allow MAKEINFO to be specified on the commandline to
+# allow me testing with various versions.
+
+# NOTE: it looks like semi-old versions can do images too, so CANDOIMAGES
+#      is not (yet?) used
+
+
+MAKEINFO = @MAKEINFO@
+# According to whether this makeinfo can output html, autoconf define these
+REMOVEHTMLTAGS = @REMOVEHTMLTAGS@
+INFOTOHTML = @INFOTOHTML@
+
+##############################################
+
+
+TARGET = barcode
+ALL    = $(TARGET).ps $(TARGET).info $(TARGET)doc.txt $(TARGET).html \
+               $(TARGET).pdf 
+
+all: $(ALL) terse
+
+info: $(TARGET).info
+
+$(TARGET)doc.txt: mktxt
+
+mpage: all
+       mv $(TARGET).ps $(TARGET)1.ps
+       mpage -2A $(TARGET)1.ps > $(TARGET)2.ps && rm $(TARGET)1.ps
+
+terse:
+       # preserve the pdf copy
+       -mv -f $(TARGET).pdf PDF 2> /dev/null && \
+               rm -f *~ *.dvi *.log *.aux \
+                     $(TARGET).*.bak $(TARGET).??? $(TARGET).texinfo && \
+               mv PDF $(TARGET).pdf;
+
+       # preserve the ps copy
+       -mv $(TARGET).ps PS;
+       -rm -f $(TARGET).??;
+       -mv PS $(TARGET).ps;
+
+clean: terse
+       rm -f $(ALL) $(TARGET)_toc.html
+
+
+####################################################
+
+# These rules used to be expressed as "%.texinfo: doc.%" etc. However, this
+# is gmake-specific, so I turned every % to $(TARGET), thus loosing generality
+# but gaining portability. I also had to drop "$^": it worked with gmake
+# and not pmake, while "$<" worked with pmake and not gmake.
+# with gmake and not pmake.
+#    ARub 2000-04-21
+
+$(TARGET).texinfo: doc.$(TARGET)
+       @rm -f $@ 2> /dev/null
+       sed -f ./infofilter doc.$(TARGET) | $(REMOVEHTMLTAGS) > $@
+       chmod 400 $@
+
+
+# This rule is somewhat a rewrite of texi2dvi. I like make more than sh :-)
+# This had to be rewritten too, as "$*" is different in gmake and pmake
+
+$(TARGET).dvi: $(TARGET).texinfo
+
+# create a spurious  index file to please silly sh (bash will work anyway)
+       touch $(TARGET).oo
+
+# get the index list
+       if test "x`ls $(TARGET).?? $(TARGET).aux`" != "x"; then \
+         for i in `ls $(TARGET).?? $(TARGET).aux`; do \
+           cp $$i $$i~; \
+         done; \
+       fi
+       tex $(TARGET).texinfo
+
+#check the file list, the file and if needed run TeX again
+       old="`ls $(TARGET).??~ $(TARGET).aux~ | sed 's/~//g'`"; \
+       new="`ls $(TARGET).?? $(TARGET).aux`"; \
+       need="n"; \
+       if test "$$old" != "$$new"; then need="y"; \
+       else \
+         for i in  `ls $(TARGET).?? $(TARGET).aux`; do \
+           cmp -s $$i $$i~; if test $$? -ne 0; then need="y" break; fi; \
+         done; \
+       fi; \
+       if test "$$need" = "y"; then \
+         texindex $(TARGET).?? && tex $(TARGET).texinfo; \
+       fi
+
+
+$(TARGET).ps: $(TARGET).dvi
+       dvips -f $(TARGET).dvi > $@
+
+$(TARGET).pdf: $(TARGET).ps
+       ps2pdf $(TARGET).ps > $@
+
+$(TARGET).lj: $(TARGET).dvi
+       dvilj -e- $(TARGET).dvi > $@
+
+$(TARGET).info: $(TARGET).texinfo
+       makeinfo $(TARGET).texinfo -o $@
+
+$(TARGET).html: $(TARGET).texinfo
+       $(INFOTOHTML) -o $@ $<
+
+#$(TARGET).man: doc.$(TARGET)
+#              manpages are created by the toplevel Makefile
+
+$(TARGET)doc.txt: $(TARGET).info
+       awk -f ./mktxt $(TARGET).info > $@
+
+
+
+
+
+
+
diff --git a/barcode-0.98/doc/README b/barcode-0.98/doc/README
new file mode 100644 (file)
index 0000000..5af5490
--- /dev/null
@@ -0,0 +1,5 @@
+
+The input file is "doc.barcode". I preprocess this file to
+build both a "barcode.texinfo" file and manual pages.
+
+The intermediat
diff --git a/barcode-0.98/doc/barcode.info b/barcode-0.98/doc/barcode.info
new file mode 100644 (file)
index 0000000..66b59d0
--- /dev/null
@@ -0,0 +1,747 @@
+This is barcode.info, produced by makeinfo version 4.0b from
+barcode.texinfo.
+
+   This file is the User's Manual for the barcode library (version
+0.98).
+
+\1f
+File: barcode.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)
+
+Barcode tools
+*************
+
+   This file documents version 0.98 of the barcode library and sample
+programs (March 2002).
+
+* Menu:
+
+* Overview::
+* The Barcode Object::
+* Supported Flags::
+* The API::
+* The barcode Executable::
+* Supported Encodings::
+* PCL Output::
+* Bugs and Pending Issues::
+
+\1f
+File: barcode.info,  Node: Overview,  Next: The Barcode Object,  Prev: Top,  Up: Top
+
+Overview
+********
+
+   The "barcode" package is mainly a C library for creating bar-code
+output files. It also includes a command line front-end and (in a
+foreseeable future) a graphic frontend.
+
+   The package is designed as a library because we think the main use
+for barcode-generation tools is inside more featured applications. The
+library addresses bar code printing as two distinct problems: creation
+of bar information and actual conversion to an output format. To this
+aim we use an intermediate representation for bar codes, which is
+currently documented in the `ps.c' source file (not in this document).
+
+   Note that the library and the accompanying material is released
+according to the GPL license, not the LGPL one. A copy of the GPL is
+included in the distribution tarball.
+
+\1f
+File: barcode.info,  Node: The Barcode Object,  Next: Supported Flags,  Prev: Overview,  Up: Top
+
+The Underlying Data Structure
+*****************************
+
+   Every barcode-related function acts on a data structure defined in
+the `barcode.h' header, which must be included by any C source file
+that uses the library. The header is installed by make install.
+
+   The definition of the data structure is included here for reference:
+
+     struct Barcode_Item {
+         int flags;         /* type of encoding and other flags */
+         char *ascii;       /* malloced */
+         char *partial;     /* malloced too */
+         char *textinfo;    /* information about text placement */
+         char *encoding;    /* code name, filled by encoding engine */
+         int width, height; /* output units */
+         int xoff, yoff;    /* output units */
+         int margin;        /* output units */
+         double scalef;     /* requested scaling for barcode */
+         int error;         /* an errno-like value, in case of failure */
+     };
+
+   The exact meaning of each field and the various flags implemented are
+described in the following sections.
+
+   Even though you won't usually need to act on the contents of this
+structure, some of the functions in the library receive arguments that
+are directly related to one or more of these fields.
+
+* Menu:
+
+* The Field List::
+* The Intermediate Representation::
+
+\1f
+File: barcode.info,  Node: The Field List,  Next: The Intermediate Representation,  Prev: The Barcode Object,  Up: The Barcode Object
+
+The Fields
+==========
+
+`int flags;'
+     The flags are, as you may suspect, meant to specify the exact
+     behaviour of the library. They are often passed as an argument to
+     barcode functions and are discussed in the next section.
+
+`char *ascii;'
+`char *partial;'
+`char *textinfo;'
+`char *encoding;'
+     These fields are internally managed by the library, and you are
+     not expected to touch them if you use the provided API. All of
+     them are allocated with malloc.
+
+`int width;'
+`int height;'
+     They specify the width and height of the active barcode region
+     (i.e., excluding the white margin), in the units used to create
+     output data (for postscript they are points, 1/72th of an inch,
+     0.352 mm). The fields can be either assigned to in the structure
+     or via Barcode_Position(), at your choice.  If either value or
+     both are left to their default value of zero, the output engine
+     will assign default values according to the specified scaling
+     factor. If the specified width is bigger than needed (according to
+     the scaling factor), the output barcode will be centered in its
+     requested region. If either the width of the height are too small
+     for the specified scale factor, the output bar code will expand
+     symmetrically around the requested region.
+
+`int xoff;'
+`int yoff;'
+     The fields specify offset from the coordinate origin of the output
+     engine (for postscript, position 0,0 is the lower left corner of
+     the page).  The fields can be either assigned to in the structure
+     or via Barcode_Position(), at your choice.  The offset specifies
+     where the white margin begins, not where the first bar will be
+     printed. To print real ink to the specified position you should
+     set margin to 0.
+
+`int margin;'
+     The white margin that will be left around the printed area of the
+     bar code. The same margin is applied to all sides of the printed
+     area. The default value for the margin is defined in `barcode.h'
+     as BARCODE_DEFAULT_MARGIN (10).
+
+`double scalef;'
+     The enlarge or shrink value for the bar code over its default
+     dimension. The width and scalef fields interact deeply in the
+     creation of the output, and a complete description of the issues
+     appears later in this section.
+
+`int error;'
+     The field is used when a barcode function fails to host an
+     errno-like integer value.
+
+Use of the width and scalef fields.
+-----------------------------------
+
+   A width unit is the width of the thinnest bar and/or space in the
+chosen code; it defaults to 1 point if the output is postscript or
+encapsulated postscript.
+
+   Either or both the code width and the scale factor can be left
+unspecified (i.e., zero). The library deals with defaults in the
+following way:
+
+Both unspecified
+     If both the width and the scale factor are unspecified, the scale
+     factor will default to 1.0 and the width is calculated according
+     to the actual width of the bar code being printed.
+
+Width unspecified
+     If the width is not specified, it is calculated according to the
+     values of scalef.
+
+Scale factor unspecified
+     If the scale factor is not specified, it will be chosen so that
+     the generated bar code exactly fits the specified width.
+
+Both specified
+     The code will be printed inside the specified region according to
+     the specified scale factor. It will be aligned to the left.  If,
+     however, the chosen width is too small for the specific bar code
+     and scaling factor, then the code will extend symmetrically to the
+     left and to the right of the chosen region.
+
+\1f
+File: barcode.info,  Node: The Intermediate Representation,  Prev: The Field List,  Up: The Barcode Object
+
+The Intermediate Representation
+===============================
+
+   The encoding functions print their output into the partial and
+texinfo fields of the barcode data structure. Those fields, together
+with position information, are then used to generate actual output.
+This is an informal description of the intermediate format.
+
+   The first char in partial tells how much extra space to add to the
+left of the bars. For EAN-13, it is used to leave space to print the
+first digit, other codes may have '0' for no-extra-space-needed.
+
+   The next characters are alternating bars and spaces, as multiples of
+the base dimension which is 1 unless the code is rescaled. Rescaling is
+calculated as the ratio from the requested width and the calculated
+width.  Digits represent bar/space dimensions. Lower-case letters
+represent those bars that should extend lower than the others: 'a' is
+equivalent to '1', 'b' is '2' and so on up to 'i' which is equivalent to
+'9'. Other letters will be used for encoding-specific meanings, as soon
+as I implement them.
+
+   The textinfo string is made up of fields %lf:%lf:%c separated by
+blank space. The first integer is the x position of the character, the
+second is the font size (before rescaling) and the char item is the
+character to be printed.
+
+   Both the partial and textinfo strings may include "-" or "+" as
+special characters (in textinfo the char should be a stand-alone word).
+They state where the text should be printed: below the bars ("-",
+default) or above the bars. This is used, for example, to print the
+add-5 and add-2 codes to the right of UPC or EAN codes (the add-5
+extension is mostly used in ISBN codes).
+
+\1f
+File: barcode.info,  Node: Supported Flags,  Next: The API,  Prev: The Barcode Object,  Up: Top
+
+The Flags
+*********
+
+   The following flags are supported by version 0.98 of the library:
+
+`BARCODE_ENCODING_MASK'
+     The mask is used to extract the encoding-type identifier from the
+     flags field.
+
+`BARCODE_EAN'
+`BARCODE_UPC'
+`BARCODE_ISBN'
+`BARCODE_128B'
+`BARCODE_128C'
+`BARCODE_128'
+`BARCODE_128RAW'
+`BARCODE_39'
+`BARCODE_I25'
+`BARCODE_CBR'
+`BARCODE_MSI'
+`BARCODE_PLS'
+`BARCODE_93'
+     The currently supported encoding types: EAN (13 digits, 8 digits,
+     13 + 2 add-on and 13 + 5 add-on), UPC (UPC-A, UPC-E, UPC-A with 2
+     or 5 digit add-on), ISBN (with or without the 5-digit add-on),
+     CODE128-B (the whole set of printable ASCII characters), CODE128-C
+     (two digits encoded by each barcode symbol), CODE128 (all ASCII
+     values), a "raw-input" pseudo-code that generates CODE128 output,
+     CODE39 (alphanumeric), "interleaved 2 of 5" (numeric), Codabar
+     (numeric plus a few symbols), MSI (numeric) and Plessey (hex
+     digits).  *Note Supported Encodings::.
+
+`BARCODE_ANY'
+     This special encoding type (represented by a value of zero, so it
+     will be the default) tells the encoding procedure to look for the
+     first encoding type that can deal with a textual string.
+     Therefore, a 11-digit code will be printed as UPC (as well as
+     6-digit, 11+2 and 11+5), a 12-digit (or 7-digit, or 12+2 or 12+5)
+     as EAN13, an ISBN code (with or without hyphens, with or without
+     add-5) will be encoded in its EAN13 representation, an even number
+     of digits is encoded using CODE128C and a generic string is
+     encoded using CODE128B. Since code-39 offers a much larger
+     representation for the same text string, code128-b is preferred
+     over code39 for alphanumeric strings.
+
+`BARCODE_NO_ASCII'
+     Instructs the engine not to print the ascii string on output. By
+     default the bar code is accompanied with an ascii version of the
+     text it encodes.
+
+`BARCODE_NO_CHECKSUM'
+     Instructs the engine not to add the checksum character to the
+     output. Not all the encoding types can drop the checksum; those
+     where the checksum is mandatory (like EAN and UPC) just ignore the
+     flag.
+
+`BARCODE_OUTPUT_MASK'
+     The mask is used to extract the output-type identifier from the
+     flags field.
+
+`BARCODE_OUT_PS'
+`BARCODE_OUT_EPS'
+`BARCODE_OUT_PCL'
+`BARCODE_OUT_PCL_III'
+     The currently supported encoding types: full-page postscript and
+     encapsulated postscript; PCL (print command language, for HP
+     printers) and PCL-III (same as PCL, but uses a font not available
+     on older printers).
+
+`BARCODE_OUT_NOHEADERS'
+     The flag instructs the printing engine not to print the header and
+     footer part of the file. This makes sense for the postscript
+     engine but might not make sense for other engines; such other
+     engines will silently ignore the flag just like the PCL back-end
+     does.
+
+\1f
+File: barcode.info,  Node: The API,  Next: The barcode Executable,  Prev: Supported Flags,  Up: Top
+
+Functions Exported by the Library
+*********************************
+
+   The functions included in the barcode library are declared in the
+header file barcode.h.  They perform the following tasks:
+
+`struct Barcode_Item *Barcode_Create(char *text);'
+     The function creates a new barcode object to deal with a specified
+     text string.  It returns NULL in case of failure and a pointer to
+     a barcode data structure in case of success.
+
+`int Barcode_Delete(struct Barcode_Item *bc);'
+     Destroy a barcode object. Always returns 0 (success)
+
+`int Barcode_Encode(struct Barcode_Item *bc, int flags);'
+     Encode the text included in the bc object. Valid flags are the
+     encoding type (other flags are ignored) and BARCODE_NO_CHECKSUM
+     (other flags are silently ignored); if the flag argument is zero,
+     bc->flags will apply. The function returns 0 on success and -1 in
+     case of error. After successful termination the data structure
+     will host the description of the bar code and its textual
+     representation, after a failure the error field will include the
+     reason of the failure.
+
+`int Barcode_Print(struct Barcode_Item *bc, FILE *f, int flags);'
+     Print the bar code described by bc to the specified file.  Valid
+     flags are the output type, BARCODE_NO_ASCII and
+     BARCODE_OUT_NOHEADERS, other flags are ignored. If any of these
+     flags is zero, it will be inherited from bc->flags which therefore
+     takes precedence. The function returns 0 on success and -1 in case
+     of error (with bc->error set accordingly). In case of success, the
+     bar code is printed to the specified file, which won't be closed
+     after use.
+
+`int Barcode_Position(struct Barcode_Item *bc, int wid, int hei, int xoff, int yoff, double scalef);'
+     The function is a shortcut to assign values to the data structure.
+
+`int Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei, int xoff, int yoff, int flags);'
+     The function deals with the whole life of the barcode object by
+     calling the other functions; it uses all the specified flags.
+
+`int Barcode_Version(char *versionname);'
+     Returns the current version as an integer number of the form major
+     * 10000 + minor * 100 + release. Therefore, version 1.03.5 will be
+     returned as 10305 and version 0.53 as 5300.  If the argument is
+     non-null, it will be used to return the version number as a
+     string. Note that the same information is available from two
+     preprocessor macros: BARCODE_VERSION (the string) and
+     BARCODE_VERSION_INT (the integer number).
+
+\1f
+File: barcode.info,  Node: The barcode Executable,  Next: Supported Encodings,  Prev: The API,  Up: Top
+
+The barcode frontend program
+****************************
+
+   The barcode program is a front-end to access some features of the
+library from the command line.  It is able to read user supplied
+strings from the command line or a data file (standard input by default)
+and encode all of them.
+
+* Menu:
+
+* The Command Line::
+
+\1f
+File: barcode.info,  Node: The Command Line,  Prev: The barcode Executable,  Up: The barcode Executable
+
+The Command Line
+================
+
+   barcode accepts the following options:
+
+`--help or -h'
+     Print a usage summary and exit.
+
+`-i filename'
+     Identify a file where strings to be encoded are read from. If
+     missing (and if -b is not used) it defaults to standard input.
+     Each data line of the input file will be used to create one
+     barcode output.
+
+`-o filename'
+     Output file. It defaults to standard output.
+
+`-b string'
+     Specify a single "barcode" string to be encoded.  The option can
+     be used multiple times in order to encode multiple strings (this
+     will result in multi-page postscript output or a table of barcodes
+     if -t is specified).  The strings must match the encoding chosen;
+     if it doesn't match the program will print a warning to stderr and
+     generate "blank" output (although not zero-length).  Please note
+     that a string including spaces or other special characters must be
+     properly quoted.
+
+`-e encoding'
+     encoding is the name of the chosen encoding format being used. It
+     defaults to the value of the environment variable BARCODE_ENCODING
+     or to auto detection if the environment is also unset.
+
+`-g geometry'
+     The geometry argument is of the form "[<width> x <height>] [+
+     <xmargin> + <ymargin>]" (with no intervening spaces). Unspecified
+     margin values will result in no margin; unspecified size results
+     in default size.  The specified values represent print points by
+     default, and can be inches, millimeters or other units according
+     to the -u option or the BARCODE_UNIT environment variable.  The
+     argument is used to place the printout code on the page. Note that
+     an additional white margin of 10 points is added to the printout.
+     If the option is unspecified, BARCODE_GEOMETRY is looked up in the
+     environment, if missing a default size and no margin (but the
+     default 10 points) are used.
+
+`-t table-geometry'
+     Used to print several barcodes to a single page, this option is
+     meant to be used to print stickers. The argument is of the form
+     "<columns> x <lines> [+ <leftmargin> + <bottommargin> [-
+     <rightmargin> [- <topmargin>]]]" (with no intervening spaces); if
+     missing, the top and right margin will default to be the same as
+     the bottom and left margin. The margins are specified in print
+     points or in the chosen unit (see -u below).  If the option is not
+     specified, BARCODE_TABLE is looked up in the environment,
+     otherwise no table is printed and each barcode will get its own
+     page.  The size (but not the position) of a barcode item within a
+     table can also be selected using -g (see "geometry" above),
+     without struggling with external and internal margins.  I still
+     think management of geometries in a table is suboptimal, but I
+     can't make it better without introducing incompatibilities.
+
+`-m margin(s)'
+     Specifies an internal margin for each sticker in the table. The
+     argument is of the form "<xmargin>,<ymargin>" and the margin is
+     applied symmetrically to the sticker. If unspecified, the
+     environment variable BARCODE_MARGIN is used or a default internal
+     margin of 10 points is used.
+
+`-n'
+     "Numeric" output: don't print the ASCII form of the code, only the
+     bars.
+
+`-c'
+     No checksum character (for encodings that allow it, like code 39,
+     other codes, like UPC or EAN, ignore this option).
+
+`-E'
+     Encapsulated postscript (default is normal postscript). When the
+     output is generated as EPS only one barcode is encoded.
+
+`-P'
+     PCL output. Please note that the Y direction goes from top to
+     bottom for PCL, and the origin for an image is the top-left corner
+     instead of the bottom-left
+
+`-p pagesize'
+     Specify a non-default page size. The page size can be specified in
+     millimeters, inches or plain numbers (for example: "210x297mm",
+     "8.5x11in", "595x842"). A page specification as numbers will be
+     interpreted according to the current unit specification (see -u
+     below). If libpaper is available, you can also specify the page
+     size with its name, like "A3" or "letter" (libpaper is a standard
+     component of Debian GNU/Linux, but may be missing elsewhere). The
+     default page size is your system-wide default if libpaper is
+     there, A4 otherwise.
+
+`-u unit'
+     Choose the unit used in size specifications. Accepted values are
+     "mm", "cm", "in" and "pt". By default, the program will check
+     BARCODE_UNIT in the environment, and assume points otherwise (this
+     behaviour is compatible with 0.92 and previous versions. If -u
+     appears more than once, each instance will modified the behaviour
+     for the arguments at its right, as the command line is processes
+     left to right. The program internally works with points, and any
+     size is approximated to the nearest multiple of one point. The -u
+     option affect -g (geometry), -t (table) and -p (page size).
+
+\1f
+File: barcode.info,  Node: Supported Encodings,  Next: PCL Output,  Prev: The barcode Executable,  Up: Top
+
+Supported Encodings
+*******************
+
+   The program encodes text strings passed either on the command line
+(with -b) or retrieved from standard input. The text representation is
+interpreted according to the following rules. When auto-detection of
+the encoding is enabled (i.e, no explicit encoding type is specified),
+the encoding types are scanned to find one that can digest the text
+string.  The following list of supported types is sorted in the same
+order the library uses when auto-detecting a suitable encoding for a
+string.
+
+EAN
+     The EAN frontend is similar to UPC; it accepts strings of digits,
+     12 or 7 characters long. Strings of 13 or 8 characters are
+     accepted if the provided checksum digit is correct.  I expect most
+     users to feed input without a checksum, though. The add-2 and
+     add-5 extension are accepted for both the EAN-13 and the EAN-8
+     encodings.  The following are example of valid input strings:
+     "123456789012" (EAN-13), "1234567890128" (EAN-13 wih checksum),
+     "1234567" (EAN-8), "12345670 12345" (EAN-8 with checksum and
+     add-5), "123456789012 12" (EAN-13 with add-2), "123456789012
+     12345" (EAN-13 with add-5).
+
+UPC
+     The UPC frontend accepts only strings made up of digits (and, if a
+     supplemental encoding is used, a blank to separate it).  It
+     accepts strings of 11 or 12 digits (UPC-A) and 6 or 7 or 8 digits
+     (UPC-E).
+
+     The 12th digit of UPC-A is the checksum and is added by the
+     library if not specified in the input; if it is specified, it must
+     be the right checksum or the code is rejected as invalid.  For
+     UPC-E, 6 digit are considered to be the middle part of the code, a
+     leading 0 is assumed and the checksum is added; 7 digits are
+     either considered the initial part (leading digit 0 or 1, checksum
+     missing) or the final part (checksum specified, leading 0
+     assumed); 8 digits are considered to be the complete code, with
+     leading 0 or 1 and checksum.  For both UPC-A and UPC-E, a trailing
+     string of 2 digits or 5 digits is accepted as well. Therefore, the
+     following are examples of valid strings that can be encoded as UPC:
+     "01234567890" (UPC-A) "012345678905" (UPC-A with checksum),
+     "012345" (UPC-E), "01234567890 12" (UPC-A, add-2) and "01234567890
+     12345" (UPC-A, add-5), "0123456 12" (UPC-E, add-2).  Please note
+     that when setting BARCODE_ANY to auto-detect the encoding to be
+     used, 12-digit strings and 7-digit strings will always be
+     identified as EAN. This because I expect most user to provide
+     input without a checksum. If you need to specify UPC-with-checksum
+     as input you must explicitly set BARCODE_UPC as a flag or use -e
+     upc on the command line.
+
+ISBN
+     ISBN numbers are encoded as EAN-13 symbols, with an optional add-5
+     trailer. The ISBN frontend of the library accepts real ISBN
+     numbers and deals with any hyphen and, if present, the ISBN
+     checksum character before encoding data. Valid representations for
+     ISBN strings are for example: "1-56592-292-1", "3-89721-122-X" and
+     "3-89721-122-X 06900".
+
+CODE 128-B
+     This encoding can represent all of the printing ASCII characters,
+     from the space (32) to DEL (127). The checksum digit is mandatory
+     in this encoding.
+
+CODE 128-C
+     The "C" variation of Code-128 uses Code-128 symbols to represent
+     two digits at a time (Code-128 is made up of 104 symbols whose
+     interpretation is controlled by the start symbol being used). Code
+     128-C is thus the most compact way to represent any even number of
+     digits. The encoder refuses to deal with an odd number of digits
+     because the caller is expected to provide proper padding to an
+     even number of digits. (Since Code-128 includes control symbols to
+     switch charset, it is theoretically possible to represent the odd
+     digit as a Code 128-A or 128-B symbol, but this tool doesn't
+     currently implement this option).
+
+CODE 128 RAW
+     Code-128 output represented symbol-by-symbol in the input string.
+     To override part of the problems outlined below in specifying
+     code128 symbols, this pseudo-encoding allows the used to specify a
+     list of code128 symbols separated by spaces. Each symbol is
+     represented by a number in the range 0-105.  The list should
+     include the leading character.The checksum and the stop character
+     are automatically added by the library. Most likely this
+     pseudo-encoding will be used with BARCODE_NO_ASCII and some
+     external program to supply the printed text.
+
+CODE 39
+     The code-39 standard can encode uppercase letters, digits, the
+     blank space, plus, minus, dot, star, dollar, slash, percent.  Any
+     string that is only composed of such characters is accepted by the
+     code-39 encoder. To avoid loosing information, the encoder refuses
+     to encode mixed-case strings (a lowercase string is nonetheless
+     accepted as a shortcut, but is encoded as uppercase).
+
+INTERLEAVED 2 OF 5
+     This encoding can only represent an even number of digits (odd
+     digits are represented by bars, and even digits by the
+     interleaving spaces). The name stresses the fact that two of the
+     five items (bars or spaces) allocated to each symbol are wide,
+     while the rest are narrow. The checksum digit is optional (can be
+     disabled via BARCODE_NO_CHECKSUM).  Since the number of digits,
+     including the checksum, must be even, a leading zero is inserted
+     in the string being encoded if needed (this is specifically stated
+     in the specs I have access to).
+
+CODE 128
+     Automatic selection between alphabet A, B and C of the Code-128
+     standard. This encoding can represent all ASCII symbols, from 0
+     (NUL) to 127 (DEL), as well as four special symbols, named F1, F2,
+     F3, F4. The set of symbols available in this encoding is not
+     easily represented as input to the barcode library, so the
+     following convention is used.  In the input string, which is a
+     C-language null-terminated string, the NUL char is represented by
+     the value 128 (0x80, 0200) and the F1-F4 characters are
+     represented by the values 193-196 (0xc1-0xc4, 0301-0304).  The
+     values have been chosen to ease their representation as escape
+     sequences.
+
+     Since the shell doesn't seem to interpret escape sequences on the
+     command line, the "-b" option cannot be easily used to designate
+     the strings to be encoded. As a workaround you can resort to the
+     command echo, either within back-ticks or used separately to
+     create a file that is then fed to the standard-input of barcode -
+     assuming your echo command processes escape sequences.  The
+     newline character is especially though to encode (but not
+     impossible unless you use a csh variant.
+
+     These problems only apply to the command-line tool; the use of
+     library functions doesn't give any problem. In needed, you can use
+     the "code 128 raw" pseudo-encoding to represent code128 symbols by
+     their numerical value. This encoding is used late in the
+     auto-selection mechanism because (almost) any input string can be
+     represented using code128.
+
+CODABAR
+     Codabar can encode the ten digits and a few special symbols
+     (minus, plus, dollar, colon, bar, dot). The characters "A", "B",
+     "C" and "D" are used to represent four different start/stop
+     characters. The input string to the barcode library can include
+     the start and stop characters or not include them (in which case
+     "A" is used as start and "B" as stop). Start and stop characters
+     in the input string can be either all lowercase or all uppercase
+     and are always printed as uppercase.
+
+PLESSEY
+     Plessey barcodes can encode all the hexadecimal digits. Alphabetic
+     digits in the input string must either be all lowercase or all
+     uppercase. The output text is always uppercase.
+
+MSI
+     MSI can only encode the decimal digits. While the standard
+     specifies either one or two check digits, the current
+     implementation in this library only generates one check digit.
+
+CODE 93
+     The code-93 standard can natively encode 48 different characters,
+     including uppercase letters, digits, the blank space, plus, minus,
+     dot, star, dollar, slash, percent, as well as five special
+     characters:  a start/stop delimiter and four "shift characters"
+     used for extended encoding.    Using this "extended encoding"
+     method, any standard 7-bit ASCII character can be encoded, but it
+     takes up two symbol lengths in barcode if the character is not
+     natively supported (one of the 48).  The encoder here fully
+     implements the code 93 encoding standard.  Any characters natively
+     supported (A-Z, 0-9, ".+-/$&%") will be encoded as such - for any
+     other characters (such as lower case letters, brackets,
+     parentheses, etc.), the encoder will revert to extended encoding.
+     As a note, the option to exclude the checksum will eliminate the
+     two modulo-47 checksums (called C and K) from the barcode, but this
+     probably will make it unreadable by 99% of all scanning systems.
+     These checksums are specified to be used at the firmware level,
+     and their absence will be interpreted as an invalid barcode.
+
+\1f
+File: barcode.info,  Node: PCL Output,  Next: Bugs and Pending Issues,  Prev: Supported Encodings,  Up: Top
+
+PCL Output
+**********
+
+   While the default output is Postscript (possibly EPS), and Postscript
+can be post-processed to almost anything, it is sometimes desirable to
+create output directly usable by the specific printer at hand.  PCL is
+currently supported as an output format for this reason.  Please note
+that the Y coordinate for PCL goes from top to bottom, while for
+Postscript it goes from bottom to top. Consistently, while in
+Postscript you specify the bottom-left corner as origin, for PCL you
+specify the top-left corner.
+
+   Barcode output for PCL Printers (HP LaserJet and compatibles), was
+developed using PCL5 Reference manuals from HP.  that really refers to
+these printers:
+   * LaserJet III, III P, III D, III Si,
+
+   * LaserJet 4 family
+
+   * LaserJet 5 family
+
+   * LaserJet 6 family
+
+   * Color LaserJet
+
+   * DeskJet 1200 and 1600.
+
+
+   However, barcode printing uses a very small subset of PCL, probably
+also LaserJet II should print it without problem, but the resulting
+text may be horrible.
+
+   The only real difference from one printer to another really depends
+on which font are available in the printer, used in printing the label
+associated to the bars (if requested).
+
+   Earlier LaserJet supports only bitmaps fonts, so these are not
+"scalable". (Ljet II ?), Also these fonts, when available, have a
+specified direction, and not all of them are available in both Portrait
+and Landscape mode.
+
+   From LaserJet 4 series, (except 4L/5L that are entry-level printers),
+Arial scalable font should be available, so it's the "default font"
+used by this program.
+
+   LaserJet III series printers (and 4L, 5L), don't feature "Arial" as a
+resident font, so you should use BARCODE_OUT_PCL_III instead of
+BARCODE_OUT_PCL., and font the font used will be "Univers" instead of
+"Arial".
+
+   Results on compatible printers, may depend on consistency of PCL5
+compatibility, in doubt, try BARCODE_OUT_PCL_III
+
+   PJL commands are not used here, as it's not very compatible.
+
+   Tested Printers:
+   * Hp LaserJet 4050
+
+   * Hp LaserJet 2100
+
+   * Epson N-1200 emul PCL
+
+   * Toshiba DP2570 (copier) + PCL option
+
+   * Epson EPL-7100 emul. HP LaserJet II: bars print fine but text is
+     bad.
+
+\1f
+File: barcode.info,  Node: Bugs and Pending Issues,  Prev: PCL Output,  Up: Top
+
+Bugs and Pending Issues.
+************************
+
+   The current management of borders/margins is far from optimal. The
+"default" margin applied by the library interferes with the external
+representation, but I feel it is mandatory to avoid creating barcode
+output with no surrounding white space (the problem is especially
+relevant for EPS output).
+
+   EAN-128 is not (yet) supported. I plan to implement it pretty soon
+and then bless the package as version 1.0.
+
+
+\1f
+Tag Table:
+Node: Top\7f154
+Node: Overview\7f526
+Node: The Barcode Object\7f1404
+Node: The Field List\7f2821
+Node: The Intermediate Representation\7f6586
+Node: Supported Flags\7f8359
+Node: The API\7f11343
+Node: The barcode Executable\7f14029
+Node: The Command Line\7f14458
+Node: Supported Encodings\7f19557
+Node: PCL Output\7f28997
+Node: Bugs and Pending Issues\7f31316
+\1f
+End Tag Table
diff --git a/barcode-0.98/doc/barcode.pdf b/barcode-0.98/doc/barcode.pdf
new file mode 100644 (file)
index 0000000..b2268f4
Binary files /dev/null and b/barcode-0.98/doc/barcode.pdf differ
diff --git a/barcode-0.98/doc/barcode.ps b/barcode-0.98/doc/barcode.ps
new file mode 100644 (file)
index 0000000..cc6cc2c
--- /dev/null
@@ -0,0 +1,2378 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
+%%Title: barcode.dvi
+%%Pages: 12
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -f barcode.dvi
+%DVIPSParameters: dpi=600, compressed
+%DVIPSSource:  TeX output 2002.08.21:2135
+%%BeginProcSet: texc.pro
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
+1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
+0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
+sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+TeXDict begin 39158280 55380996 1000 600 600 (barcode.dvi)
+@start
+%DVIPSBitmapFont: Fa cmbxti10 14.4 8
+/Fa 8 115 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C
+5AEA0FE0121271912B>46 D<ED3FF8913801FFFE020F9038FF83F0023FECC7F891B6EAEF
+FC499038F83FFF0107D9E0077F49EB800349496C5B495A49487F495AA248495D5A48495B
+A2485F5C485DA248495DA25E5A91C75CA25EB5FC495EA25EA24993C7FCA24CEB01F81803
+17FE5B167FF007F017FCA2007F03FFEB0FE05D6D5B003F4A9038F81FC0001F021F13FC6C
+6C017FEC3F809027FF81FFDFEB7F006C90B5388FFFFE0001ECFE076CDAF8035B013FD9E0
+0013F0010390C7EA3FC03D3773B547>97 D<EC7FF048B5FC5AA45DEA00035BA25DA25BA2
+5DA25BA292C9FCA25BA25CA2137FA25CA213FFED1FFC4AB57E02FB14E04890B612F88392
+38F83FFE9238C00FFF48DA000713805C02F86D13C05C484915E0A25CA24817F0A25CA248
+5DA291C7FCA2484B13E0A25BA25E007F17C05BA25E18805B00FF17005E5FA26C484A5AA2
+4B5B5F5D5F6C6C495B4B5B001F93C7FC6DEB3FFE6C6C495A3A07FF83FFF06C90B55A6C15
+806C6C49C8FC011F13F801031380345473D240>I<923807FF80037F13F00203B512FC02
+0F80023F8091B500031380499038F8007F010701E0EBFFC049EB800149495A49485B495A
+49485B5A485BA248491580180048496D5A486F5A93C8FC485BA35A91CAFCA3B5FC5BA45B
+A65B17036C6CED0780170FEF3FC0003F167F6DEC01FF001F4B13806C6C021F13006C6DEB
+7FFC6C9039F00FFFF86C90B612E06C5E013F4AC7FC010F14F0010049C8FC323773B540>
+I<F00FFEEF3FFF5FA419FCEF007F18FFA219F8A25FA219F0A25FA219E0A25FA219C0A25F
+A21980A25FED3FF8912601FFFE1400020FEBFF9F023F91B5FC91B8FC49D9F83F5B0107EB
+E00749EB800349497E49485D49487F495AA248495D5A48495BA2485F5C485DA248495DA2
+5E5A91C75CA25EB5FC495EA25EA24993C7FCA24CEB01F8180317FE5B167FF007F017FCA2
+007F03FFEB0FE05D6D5B003F4A9038F81FC0001F021F13FC6C6C017FEC3F809027FF81FF
+DFEB7F006C90B5388FFFFE0001ECFE076CDAF8035B013FD9E00013F0010390C7EA3FC03F
+5473D247>I<923807FF8092B512E0020714F8021F80027F80903A01FFFE03FF49D9F000
+13804901C0EB7FC0495B013F90C7123F495A495A5C5A485B4849147F18804816FF4A4913
+00485DEE0FFE4849EB7FFC923807FFF891B612E0485E94C7FC16F04BC8FCB5CAFC5BA45B
+A7007F1603EF0780170F003FEE3FC0177F6C6CEC01FF4C13806C6C021F13006C01C0EB7F
+FC6C9039F00FFFF86C90B612E06C6C5D6D4AC7FC010714F09026007FFEC8FC323773B540
+>I<923807FFC0037F13FC0203B6FC020F15C0023F8191B5000313F8499039F8007FFC01
+0701E0133F4901806D7E4990C76C7E49481680495A4948804818C0485BA2485BA248494A
+13E05AA2485BA24D13C05A91C8FCA25FB517805BA25F19005B6017FF605E60495E5E6C6C
+4A5B604C5B003F4B90C7FC6D4A5A001F4B5A6C6C4A5A6CD980035B6CD9F01F13C06C90B6
+5A6C4BC8FC013F14F0010F14C0010001F8C9FC3B3773B547>111
+D<D91FE0EB07FED97FFC90383FFFC0496C90B512F048D9FF83804802C780D807F19039CF
+FC07FED80FE09039FFF001FFDCC000138048484A5A4C5A4848495B0181495B4B5BEA7F01
+5D5B00FE18004B5C715A496F5A0000705A4B90C8FCA25BA25DA25BA292CAFCA25BA25CA2
+137FA25CA213FFA25CA25AA25CA25AA25CA25C6C5B6C90CBFC137E393776B53C>114
+D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fb cmsy10 10.95 1
+/Fb 1 16 df<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580A3B712C0
+AA6C1580A36C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227BA72D>15
+D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fc cmb10 10.95 10
+/Fc 10 115 df<EB0FFE90387FFFC048B512F04814FC3907FC0FFE48486C7E6D6C7F486C
+7E82A26E7FA36C5A6C5AEA01E0C8FC5C49B5FC131F90B6FC000313F84813C0481300EA1F
+FC485A127F5B12FF5BA45CA26C6C5A16F83B3FF807BFFF80391FFC1F3F390FFFFE1F6C49
+7E0001EBF80326003FE0C8FC292B7EA92C>97 D<13FFB5FCA512077EAFEC03FE91381FFF
+C0027F13F091B57E9138FE0FFE9138F003FF4A7E02C014804A6C13C017E0A3EE7FF0A317
+F8AC17F0A3EEFFE0A217C05D02C014806E4813006E485A9138FC1FFC01FCB55A496C13E0
+D9F01F1380C7D807FCC7FC2D407EBE33>I<EB03FF011F13E0017F13F890B57E48EB83FE
+3903FE01FF00075B4848481380121F13F8123FA2127F496C13006E5AEC007800FF91C7FC
+AC127FA27F003FEC07C0A26C6C130F16806C6C131F000715006C6C137F6CEBC1FE6CEBFF
+FC6D13F0011F5B010390C7FC222B7DA928>I<ED01FEEC01FFA5EC000F1507AFEB01FF01
+1F13C7017F13F790B6FC4813C148EB007F4848131F485A001F140F5B123FA2485AA312FF
+AC127FA36C7EA3001F141F6C7E00074A7E6D90B512F83803FF83C690B6FC6D13EF011F13
+CF903A03FE0FF8002D407DBE33>I<49B47E010F13F0013F7F90B512FE48EBC3FF480100
+13804848EB7FC04848133F001F15E05B003FEC1FF0A2485A150F16F8A212FFA290B6FCA4
+01F0C8FCA5127FA37F003F15F8A26C6C1301000F15F06D13036C6CEB07E06C9038800FC0
+6C9038F07F806C6CB512006D5B010F13F8010013C0252B7EA92A>I<D907FE13FC90393F
+FFC3FE90B5EAF7FF4891B5128048130F3907FC03FE3A0FF801FF7F001FEDFF00496C13BE
+1680003F81A7001F5DA26D5A000F92C7FC6C6C485A3903FF0FFCECFFF8485CD80F3F13C0
+D907FEC8FC90CAFC5AA27FA213E090B512F015FF6C15C0826C816C8182120F4881393FE0
+003FD87F80EB07FF150148C7FC81A56D5B007F5D6D13036C6C495AD81FF8EB1FF86CB4EB
+FFF06C90B55A000115806C6C49C7FC010713E0293D7EA82D>103
+D<EA01F8487E487E487E481380A66C13006C5A6C5A6C5AC8FCA913FFB5FCA512077EB3AB
+B512F8A515407EBF19>105 D<01FFEB7FE0B53801FFF802077F4A7F91381FC3FFDA3E03
+13800007137C6CEB780102F014C014E0A214C0A31480B3A4B5D8FE1F13FFA530297EA833
+>110 D<49B47E010F13F0013F13FC90B6FC48018113803A03FE007FC04848EB3FE0000F
+15F049131F001F15F8A24848EB0FFCA2007F15FEA400FF15FFAB007F15FEA3003F15FC6D
+131F001F15F8A26C6CEB3FF0000715E06C6CEB7FC03A01FF81FF806C90B51200013F13FC
+010F13F001011380282B7EA92D>I<3901FE07F800FFEB0FFE91383FFF804A13C0EC7C7F
+9138F8FFE03807FFF06C5B5CA2ED7FC09138803F80ED1F0092C7FCA291C8FCB3A3B6FCA5
+23297FA827>114 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fd cmbxti10 17.28 7
+/Fd 7 115 df<EEFFE0030F13FC037F01FF13FC4AB6EA83FE0207EDEFFF4AD9E07FB57E
+023FEB000F4A487F4948487F4913F04981495B49496D91C7FC495B5B92C8FC90B55E485B
+5F485B4860A248495CA248605C5F5A4A5EA2485EA24A5EA2B55DA24A5EA25FA291C85CA2
+4DEC3F801A7F19005B94B513FFA24E1400A24C5C007F614C13FC4C1403003F4B5D6D4A14
+076C4B5D6C6D49140F4BB55C6CD9C007013F495A6C9026F03FFEEBFE3FC690B5D8F81FB5
+5A6DDAF0075C011FDAC00349C7FC010749C75B9026007FF0EC1FF0494271C055>97
+D<EC1FFE90B6FC5A5AA46C5CC7FC5BA25DA25BA25DA25BA25DA25BA25DA25BA25DA25BA2
+5DA25BA2923800FFE0030F13FC90B5003F13FF92B612C084048113F8489139FC007FFC03
+F06D7E4B804B7F484A158092C77E4A16C05C485B19E05CA25AA25C5F5AA25CA2485EA25C
+A2485EA291C814C0A2B592B5FCA2491780A25E19005B5E60A24C5BA2495E4C5BA24C5B60
+5E007F5F6D4A90C7FC4C5A003F5E6D495B001F4A5B6C6C495B6CD9801F13806C01E0B5C8
+FC6C90B512FC6C6C14F06D14C0010F49C9FC010013E03B6570E34C>I<EE1FFE0303B512
+E0031F14F8037F804AB7FC0207D9FC071380021FD9E00013C04A0180137FDAFFFEC7EAFF
+E04949130349495B49494913F049495B495B49495B5B90B5C714E0A2485B4818C05C4870
+13804A91380FFE0048705AEF00E0484992C7FCA25A5CA25AA25CA2B5FCA25CA491CBFCA6
+5BA2F00380007FEF07C0F00FE06DEE1FF06C173F187F6C6DEDFFE0050313C06C6D020F13
+806C043F13006C6DECFFFE6C01F8010713F86C01FE90B55A6DB712C0011F93C7FC010715
+F801001580020F01F0C8FC3C4271C04C>I<963803FFC0061FB512E06060A47214C0F000
+1F61A21B80A261A21B00A296B5FCA262A260A262A260A262A260A262A260A2DCFFE05C03
+0F13FC037FEBFF1F4AB6129F020792B55A4AEBE07F023FEB000F4A487F4948486D5C4913
+F04981495B49496D91C7FC495B5B92C8FC90B55E485B5F485B4860A248495CA248605C5F
+5A4A5EA2485EA24A5EA2B55DA24A5EA25FA291C85CA24DEC3F801A7F19005B94B513FFA2
+4E1400A24C5C007F614C13FC4C1403003F4B5D6D4A14076C4B5D6C6D49140F4BB55C6CD9
+C007013F495A6C9026F03FFEEBFE3FC690B5D8F81FB55A6DDAF0075C011FDAC00349C7FC
+010749C75B9026007FF0EC1FF04B6571E355>I<EE1FFE0303B512C0031F14F092B612FC
+020381020F9038FC07FF4AD9E0011380027F90C713C04A48EC7FE04913F8010749143F49
+5B5B495B495B92C8FC90B5FC485B48177F5C48EFFFC05F48494A13804D130048EE1FFE4A
+EC7FFC933803FFF848033F5B4AB612C091B75A4804FCC7FC17E004FCC8FC03E0C9FC02C0
+CAFCB5FC5CA591CBFCA67EF00380F007C0F00FE06CEF1FF0183F187F6C6DEDFFE06C0403
+13C06E020F13806C6D023F13006C6DECFFFE6C6D010713F86C01FE90B55A013FB712C06D
+93C7FC010715F801001580020F01F0C8FC3C4271C04C>I<93381FFF804BB512F8031F14
+FF037F15C04AB77E0207D9FC0313F8021FD9E0007F4A0180EB3FFEDAFFFEC76C7E494916
+8049496E13C0495B49496E13E0495B494916F05B90B5C87E1AF8485B485F5C5A5C5AA248
+5B605A5CA2485FA24A17F0A2B55EA24A17E0A2601AC091C9FC95B51280A21A005F615F49
+5F4D5B127F6D4B5B616C4C5B4D5B6C6D4A90C7FC4D5A6C6D495B6C4B5B6C6D010F13E06C
+01F8013F5B6CD9FE01B5C8FC013FB612FC6D15F0010715C0010002FCC9FC020F13C04542
+71C055>111 D<D907FCEC0FFE90261FFF8090387FFFE049D9E001B512F890B5D8F00714
+FE48DAFC0F802A03FE3FFE3FFC071380D9FC1F90267FE00013C0D807F890B50080EB7FE0
+000F93380001FF01F04A5B001F4B4913F001E04A5B003F4B5B13C04A495B007F5D018018
+E05E00FF5B1AC0010091C76C13801A0091B5EC07FC48715AC74991C8FCA25BA25DA25BA2
+5DA25BA25DA25BA25DA25BA25DA25BA25DA25BA292CBFCA290B5FCA25CA25AA25CA26C5B
+5C6D5AEB1F80444275C048>114 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fe cmbxti10 13.15 11
+/Fe 11 120 df<EDFFC0020713F0023FEBFC3E91B56CB4FC4901E0B512800107D9003F13
+C049487F49487F495A49486D1380495A485D4A15005A5A4A5B485E91C7FC5A163F5F485A
+A2167F007F5E5BA216FF00FF5E5BA25DEFE01E49163FA24B147FEFC07EA3007F17FC5D4B
+1380003F4AEB81F85D6C6C49EB83F06C6C48B513E02707FE0FFC13CF6CB539F07FFFC06C
+4A6C13806C6CD9800F1300903A0FFC0003FC383375B141>97 D<ED3FF80203B5FC020F14
+80023F14C09139FFF81FE001039038C007F049010013F84948130F4948EB1FFC4948133F
+4948137F495A48EDFFF8485BA2484914F048ED7FE0EE3FC04890C7EA1F8093C7FCA2485A
+A3127F5BA312FF5BA45BA4007F166017F0EE01F8003F15036D1407001FED1FF0EE3FE06C
+6CECFFC06C6C010713803B03FFC07FFE006C90B512F86C6C14E0011F91C7FC010313F02E
+3375B13A>99 D<943801FF800403B512C05E1980A282EE000F1900A25FA260A2173FA260
+A2177FA260A217FFA260A25EEDFFC1020701F15B023F13FD91B7FC4913E00107D9003F5B
+49487F49487F495A49486D5B495A485D5C4894C7FC5A4A5B5A91C75B5A163FA248485DA2
+167F127F495DA216FF12FF495DA25D181E49EDE03FA24B5C187E17C0A2007F5F5D4B1380
+003F4AEB81F85D6C6C49EB83F06C6C48B55B2707FE0FFC13CF6CB539F07FFFC06C4A6C5B
+6C6CD9800F90C7FC903A0FFC0003FC3A4D75CB41>I<ED3FF80203B5FC021F1480027F14
+C0903A01FFF81FE0499038C00FF04990380007F8D91FFE1303495A494814FC494813014A
+13034816F8485B5A4A130748ED0FF091C7EA1FE048153FEEFFC0480207138049017F1300
+90B612FC16F048158003F0C7FC01FCC9FCA3485AA55B127FA2176017F0EE01F86C6C1403
+1607001FED1FF06C6CEC3FE0EEFFC06CB4010713806C9039C07FFE00C690B512F86D14E0
+011F91C7FC010113F02E3375B13A>I<EF1FF0EFFFFE4CEBFF80040714C093390FFC3FE0
+EE1FF893393FF07FF0047F13FF17F1EEFFE1A24B01E313E0A205E113C04B01C1138005C0
+1300187E95C7FCA25D5FA45D94C8FCA349B712FC4982A36D5E90C7D81FFEC8FCA2153F5E
+A4157F5EA515FF5EA45C5EA45C5EA55C5EA45C93C9FCA45C5DA45D143FA25DA2EA07E039
+1FF07FF0EA3FF8127F5D00FF13FF5D5DA201F190CAFCEBE1FE495A6C485A6CB45A6C5B00
+071380D801FECBFC3C6382CC2C>I<EC1FF890383FFFFC5B5DA27F13005DA25BA25DA25B
+A25DA25BA25DA25BA292CAFCA25B923801FFC0DAFE0F13F8033F13FE013F497F91B50003
+7FDBF8017F4B6C7F4913C05D92C77F5C495A5CA25C485D605CA2485D605CA2485D605C5E
+4894C7FCA291C75A5F5A043FEB01E0499238FC03F0A2003F037F130705F813E04914FFEF
+F00F007F18C0181F4903E01380F03F0012FF187E49027F5B93383FE3F8EFFFF049020F5B
+6C486E1380001FC8D801FEC7FC3C4D79CB41>104 D<15F8EC03FC4A7E4A7EA25CA35DA2
+5D6E5AEC03E091C8FCAEEB07F8EB1FFEEB7FFF90B57E3901FC7FC0D803F07FEA07E0D80F
+C07FA2381F80FFA2485A5B007E5CA25B00FE5C485A007C5C12005B92C7FCA25B5C133F5C
+A2137F5CA213FFECF00F48EC1F8014E0153F48150014C05D48147E14805D14816CEB01F8
+4A5A4A5A6CEB1FC06CEBFF806D90C7FC6D5AEB07F0214E78CC27>I<EC7FE090B512F05A
+15E0A27E130315C0A25BA21580A25BA21500A25BA25CA2133FA25CA2137FA25CA213FFA2
+5CA25AA25CA25AA25CA25AA25CA25AA291C7FCA25AA25BA2123FA25BA2127F140F9038F8
+1F80A200FF133F150013F0A25C147E13E05CA2387FE1F8A2383FE3F06CB45A6C5B6C5BC6
+48C7FC1C4D77CB20>108 D<913801FFC0021F13F8027F13FE91B6FC4901001380D903FC
+EB3FC0D907F0130F010FEC3FE04948137F4A13FF133FA2017F4913C0A26F138017006E13
+7E02FC90C7FCECFFC015FE6F7E16E06D80826D807F6D80010180EB003F1403EC003FD803
+C0130FD80FE01303EA3FF0486C7FA200FF5DA34B5A5B49495A495C49130F6CC7485AD83F
+C0EB7FC03A1FF803FF806CB548C7FC6C14F8000114E026001FFEC8FC2B3377B135>115
+D<EC0FC04A7E4A7E147F14FFA35BA25DA25BA25DA25BA25DA25BA2003FB612C04815E0B7
+FCA26C15C026001FFEC7FC133FA25CA2137FA25CA213FFA25CA25AA25CA25AA25CA25AA2
+5CA25AED03C091380007E0A248140F16C049131F1680ED3F005D49137E5D4A5A000F495A
+EC0FE00007EB3FC06CB55A6C91C7FC38007FFCEB1FE0234777C52A>I<D907F8EF1F80D9
+1FFEDA01F0EB3FC090267FFF80D903FCEB7FE090B56C0107ECFFF02701FC7FE0496C5A26
+03F83F021F15F8D807E06D5D000F017F143F01C016FCEA1F8085263F00FF027F7F4E137F
+4848181F007E5C05FF140FD8FE034CEB07F000FC5C127CC6485C03804A14E0A25B4B4815
+0F494C14C05CA24C151F013F4C14805CA2F23F00017F5C4A92C7FC1A7EA21A7C1AFCA24F
+5A62013F4A14034F5A6D6C5B4C6D485A6D6C90B56C485A902707FF83FCD9E07FC7FC6D90
+3AFFF87FFFFE01004A6C5B023FD9C00F13F00207D9000113C04D3378B154>119
+D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Ff cmbx12 13.14 13
+/Ff 13 117 df<923803FFE092B512FC020714FF021F81027F9038007FC0DAFFF0EB0FE0
+010301C0804990C7EA3FF84948147F4A81494814FF495AA2137F5CA2715A715A715AEF07
+8094C8FCA8EF07FCB9FCA526007FF0C7123F171FB3B3003FB5D8E00FB512F8A53D4D7ECC
+44>12 D<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E0101077
+8F22>46 D<B700F8023FB512F8A5D8001F01C0C9380FE000745AB3B3AD6D180F63811A1F
+6D96C7FC626D7F1A7E6D7F6D606E6C4B5A6E6CED07F06E6C4B5A6E01C0EC3FC06E01F049
+B45A020101FF011F90C8FC6E91B55A033F15F8030715E0030092C9FC040713F0554C7CCA
+5E>85 D<ECFFFC010FEBFFC0017F14F090B612FC489038803FFF2703FC00077F486C6D7F
+486C6D7F6E7E83707EA3707E6C90C7FC6C5A6C5AC9FCA4ED1FFF021FB5FC49B6FC130F01
+3FEBC03F9038FFFE00000313F04813C04890C7FC485A485AA2485AA2485AA4167FA26D14
+FF007F15EF6D01017F6C6C903907CFFF806C6CD90F8F13FE6C9038E07F076C9038FFFE03
+00014A7ED8003F9038F0007F0103018090C7FC37337CB13C>97 D<EF1FF0EE3FFFA51600
+177FB3A2EC0FFF91B512E0010314F8010F14FE013FEB01FF903A7FF8003FFFD9FFE0130F
+48497F48497F4890C77E4881485AA2485AA3127F5BA212FFAC127FA37F123FA2121F7F00
+0F5D6C6C5C5E6C6D5B6C01E0497F6C6D017FEBFFE090393FFE03FE6DB512F801075C0101
+14C09027001FFC00EBC0003B4D7CCB44>100 D<EC0FFF91B512F0010314FC010F14FF90
+263FFE077F90267FF0007F4948EB3FE04801806D7E48824890C76C7E4848140783485A00
+3F6F7EA3485A701380A312FFA290B8FCA401F8CAFCA5127FA27FA2123FA26C6CED0F80A2
+000F161F6C6C16006E5C6C6D147E6C6D5C6C6D495AD97FFCEB07F0903A1FFF803FE06D90
+B55A010392C7FCD9007F13FC020713C031337DB138>I<ED7FE0913807FFFC021F7F027F
+7F902601FFE0138049018113C0902607FE0113E049485A14F8131FEB3FF0A26F13C0EB7F
+E06F1380EE3E0093C7FCADB77EA526007FF0C8FCB3B3A2003FB512F8A52B4D7DCC26>I<
+EB7FC0B5FCA512037EB3A2923801FFC0030F13F8033F13FE4B7F9126C1FE077F9126C3F0
+037F9138C7C001DACF8080150002DE7F02FC81A25CA25CA35CB3A9B6D8C07FEBFFE0A53B
+4C7BCB44>104 D<EB7FC0B5FCA512037EB3B3B3AAB61280A5194C7BCB22>108
+D<903A7FC001FFC0B5010F13F8033F13FE4B7F9126C1FE077F9126C3F0037F00039038C7
+C0016CD9CF8080150002DE7F02FC81A25CA25CA35CB3A9B6D8C07FEBFFE0A53B317BB044
+>110 D<913807FF80027F13F80103B6FC010F15C090261FFE017F903A7FF0003FF8D9FF
+C0EB0FFC48496D7E4890C76C7E4817804980000F17C048486E13E0A2003F17F049157FA2
+007F17F8A400FF17FCAB007F17F8A36C6CEDFFF0A3001F17E06D5C000F17C06C6C4A1380
+6C17006C6D495A6C01E0EB1FFC6D6C495A903A3FFE01FFF0010FB612C0010392C7FCD900
+7F13F80207138036337DB13D>I<90390FFF8070017FEBF1F048B6FC1207380FFC01391F
+E0003F4848130F491307127F90C712035A1501A27FA213E06D90C7FC13FE387FFFF0ECFF
+C015F06C14FC6C14FF6C15806C15C06C15E0C615F0013F14F8010714FCEB007F14019138
+003FFE150F0078140700F81403A26C1401A37E16FC6C14036D14F87F6DEB07F001F8EB1F
+E001FFEBFFC091B51280D8FC7F1400D8F81F13FCD8E00313C027337CB130>115
+D<14F8A61301A41303A21307A2130FA2131F133F137F13FF1203000F90B512F0B7FCA426
+007FF8C7FCB3A6167CAA013F14F880A290391FFE01F0010F1303903907FF87E06DEBFFC0
+6D14806D6C1300EC0FFC26467EC430>I E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fg cmti10 10.95 35
+/Fg 35 122 df<933807FF80043F13E09338FE00F8DB01F0133EDB07E0130E4B48131F4C
+137F031F14FF4BC7FCA218FE157E1878180015FE5DA31401A25DA414030103B712F0A218
+E0903A0003F000070207140F4B14C0A3171F020F15805DA2173F1800141F5D5F177EA214
+3F92C712FE5FA34A1301027EECF81CA3160302FEECF03C4A1538A21878187013014A0101
+13F018E0933800F1C0EF7F804948EC1F0094C7FCA35C1307A2001E5B127F130F00FF5BA2
+49CAFC12FEEAF81EEA703CEA7878EA1FF0EA07C0385383BF33>12
+D<EE07FC93393FFF87F09338FC07C7923A03F001E7E0DB07C013F792390F8007FF031F49
+13C016005DA2037E1580EF039FEF001F183F4B1500A3600201157E5DA218FE6014035D01
+03B7FC60A2903A0007F000014B130360A31707020F5D5DA2170F60141F5D171F60A2143F
+92C7123F95C7FCA34A5C027EEC7E07A317FE02FE4A5A4A150EA2181E181C13014AEC7C3C
+1838EF3C70EF1FE04948EC07C094C8FCA3495AA3001E5BEA7F0FA200FF5BA249CBFC12FE
+EAF83EEA703CEA7878EA1FF0EA07C03C5383BF35>I<ED01801507ED0F00151C5D5D5D14
+014A5A4A5A4AC7FC141E143E5C14785C1301495AA2495A5C130F49C8FCA2133EA25BA213
+FC5B12015BA212035B1207A25B120FA25BA2121FA290C9FCA25AA2123EA2127EA2127CA6
+5AAB1278A67EA47EA2120E120F7EA26C7EA26C7E6C7E1360215A73C325>40
+D<14031580A2EC01C0EC00E0A21570A215781538153CA3151EA4151FA2150FA7151FA915
+3FA2153EA3157EA2157CA215FCA215F8A21401A215F0A2140315E0A2140715C0A2EC0F80
+A2141F15005C143EA25CA25CA2495A5C1303495A5C130F49C7FC131E5B137C5B5B485A48
+5A485A48C8FC121E5A12705A5A205A7FC325>I<387FFFFCA3B5FCA21605799521>45
+D<120FEA3FC0127FA212FFA31380EA7F00123C0A0A77891C>I<15031507150F151F151E
+153E157EEC01FEEC03FC1407141FEB01FF90380FFBF8EB1FC3EB0E07130015F0A2140FA2
+15E0A2141FA215C0A2143FA21580A2147FA21500A25CA25CA21301A25CA21303A25CA213
+07A25CA2130FA25CA2131FA25CEB7FE0B612F0A215E0203D77BC2E>49
+D<15FE913803FFC091380F01F091383C00F84A137C4A7F4948133F49487F4A148049C7FC
+5BEB0E0C011E15C0EB1C0EEB3C06133813781370020E133FD9F00C148013E0141C021813
+7F00011600EBC0384A13FEEC600102E05B3A00E3C003F89039FF0007F0013C495A90C748
+5A5E037FC7FC15FC4A5A4A5AEC0FC04AC8FC147E14F8EB03E0495A011FC9FC133E491418
+01F0143C48481438485A1678485A48C85A120E001E4A5AD83FE0130301FF495A397C3FF0
+1FD8780FB55AD8700391C7FCD8F0015B486C6C5A6E5AEC07C02A3F79BC2E>I<157F9138
+01FFE0913807C0F091381F007C023C133C4A133E4A131F1301495A5C1307A2495AA2163F
+011F143EA2167E6E137C16F8ECE00102F013F09138F803E09138FC07C090390FFE0F00EC
+FFBE6D13F86D5B7F6D7F8101037F90380F9FFFD91F0F1380D97C0713C0497E48486C13E0
+3903E0007F4848133F4848131F001F140F90C7FC003E1407A2127E127CA200FC15C05AA2
+ED0F80A2ED1F00153E007C143C157C007E5C6CEB03F0391F8007C0390FE03F802607FFFE
+C7FC000113F838003FC0283F78BC2E>56 D<49B712C018F818FE903B0003FC0001FF9438
+007F804BEC3FC0A2F01FE014074B15F0180FA2140F5D181FA2021F16E05D183F19C0023F
+ED7F804B14FF19004D5A027F4A5A92C7EA07F0EF1FE0EF7F804AD903FEC7FC92B512F017
+FE4AC7EA3F800101ED1FE04A6E7E17078401036F7E5CA30107825CA3010F5E4A1407A260
+011F150F5C4D5A60013F153F4A4A5A4D5A017F4A90C7FC4C5A91C7EA0FF849EC3FF0B812
+C094C8FC16F83C3E7BBD40>66 D<49B77E18F018FC903B0003FE0003FEEF00FF4BEC7F80
+F03FC00207151F19E05DA2020F16F0A25DA2141FF03FE05DA2023F16C0187F4B1580A202
+7FEDFF00604B495A4D5A02FF4A5A4D5A92C7EA3FC04CB4C7FC4990B512FC17E04ACAFCA2
+1303A25CA21307A25CA2130FA25CA2131FA25CA2133FA25CA2137FA25C497EB67EA33C3E
+7BBD3E>80 D<92391FE00380ED7FFC913A01FFFE0700913907F01F8F91390FC007DF4AC6
+6CB4FC023E6D5A4A130014FC495A4948147CA2495AA2010F15785CA3011F1570A46E91C7
+FCA2808014FE90380FFFE015FC6DEBFF8016E06D806D806D6C7F141F02037FEC003FED07
+FF1501A281A282A212075A167E120EA2001E15FE5EA25E003E14015E003F14034B5A486C
+5C150F6D495A6D49C8FCD8F9F0137C39F8FE01F839F03FFFF0D8E00F13C026C001FEC9FC
+314279BF33>83 D<277FFFFE01B500FC90B512E0B5FCA20003902680000790C7380FFC00
+6C90C701FCEC07F049725A04035EA26350C7FCA20407150EA2040F5D1A3C041F15386216
+3B6216734F5A6D14E303014B5A6C15C303034BC8FC1683DB0703140E191E030E151C6103
+1C7F61ED380161157003F04A5A15E002014B5A15C0DA03804AC9FC60DA0700140E60140E
+605C029C5D14B8D97FF85D5C715A5C4A5DA24A92CAFC5F91C7FC705A137E5F137C5F1378
+01705D53406EBD5B>87 D<147E49B47E903907C1C38090391F80EFC090383F00FF017E13
+7F4914804848133F485AA248481400120F5B001F5C157E485AA215FE007F5C90C7FCA214
+01485C5AA21403EDF0385AA21407EDE078020F1370127C021F13F0007E013F13E0003E13
+7FECF3E1261F01E313C03A0F8781E3803A03FF00FF00D800FC133E252977A72E>97
+D<EB1FC0EA0FFF5CA2EA003FA291C7FCA25BA2137EA213FEA25BA21201A25BA21203A25B
+147E3907F1FF809038F783E09038EF01F013FE390FF800F8A24913FC49137C485A157E5B
+15FE123FA290C7FCA248130115FC127EA2140300FE14F85AA2EC07F0A215E048130F15C0
+141F15800078EB3F00127C147E003C5B383E01F8381E03E06C485A6CB4C7FCEA01F81F40
+76BE2A>I<EC1FC0ECFFF0903803F03C903807C01E90381F800E90383F000F017E133F49
+13FF485A485A000714FE5B000F14FC48481300A2485AA3127F90C8FCA35A5AA648140300
+7E1407150F151E003E143C15786C14F0EC03E0390F800F803903E07E003801FFF838003F
+C0202977A72A>I<EE3F80ED1FFF1700A2ED007FA2167EA216FEA25EA21501A25EA21503
+A25EA21507A25E147E903801FF8F903807C1CF90391F80EFC090383F00FF017E137F5B48
+486D5A485AA2485A000F92C7FC5B001F5CA24848137EA215FE127F90C75AA214015A485C
+A2140316384814F0A21407167891380FE070127C021F13F0007E013F5B003E137FECF3E1
+261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E294077BE2E>I<EC3F80903801
+FFE0903807E0F890381F803CEB3E0001FC131E485A485A12074848133E49133C121F4848
+137C15F8EC03F0397F000FE0ECFF809038FFFC00B512C048C8FCA45AA61506150E151E00
+7C143C15786C14F0EC01E06CEB07C0390F801F003807C0FC3801FFF038007F801F2976A7
+2A>I<167C4BB4FC923807C78092380F83C0ED1F87161FED3F3FA2157EA21780EE0E004B
+C7FCA414015DA414035DA30103B512F8A390260007E0C7FCA3140F5DA5141F5DA4143F92
+C8FCA45C147EA414FE5CA413015CA4495AA4495AA4495A121E127F5C12FF49C9FCA2EAFE
+1EEAF83C1270EA7878EA3FE0EA0F802A5383BF1C>I<EC03F0EC0FFC91383E0E1C9138FC
+077E903901F003FE1303903807E001D90FC013FCEB1F80A2EB3F004914F8137E01FE1303
+A2484814F0A2150712034914E0A2150F12074914C0A2151FA216805B153F1203ED7F006D
+5BA200015B0000495A9038F80F7E90387C1EFEEB1FF8903807E0FC90C7FC1401A25DA214
+03A25D001C1307007F5C48130F5D4A5A4AC7FC48137E00F85B387C03F0381FFFC0D803FE
+C8FC273B7CA72A>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2
+133FA291C8FCEC03F890387F0FFE91383E0F80D97E7813C0ECE007D9FFC013E014801400
+A2485A5BA25B0003140F16C05BA20007141F16805BA2000F143F16005B5D001F147EEDFE
+074913FCA2003F0101130FEDF80E1300161E48ECF01CA2007E1538A200FE1570020013E0
+48EC7FC00038EC1F0028407ABE2E>I<1478EB01FCA21303A314F8EB00E01400AD137C48
+B4FC38038F80EA0707000E13C0121E121CEA3C0F1238A2EA781F00701380A2EAF03F1400
+12005B137E13FE5BA212015BA212035B1438120713E0000F1378EBC070A214F0EB80E0A2
+EB81C01383148038078700EA03FEEA00F8163E79BC1C>I<EB07F0EA03FF14E0A2EA000F
+A214C0A2131FA21480A2133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA2
+1207A25BA2120FA25BA2121FA25BA2123FA290C7FCA25A1307127EA2EAFE0F130E12FCA2
+131E131CA2EA7C381378EA3C70EA1FE0EA0780144079BE17>108
+D<D801F0D93F80137F3D07FC01FFE003FFC03D0F3E07C1F80F83F03D0E1F0F00FC1E01F8
+001E011C90387C3800001C49D97E707F003C01F05C0038157F4A5C26783FC05C12704A91
+C7FC91C7127E00F003FE1301494A5CEA007EA20301140301FE5F495CA203031407000160
+495C180F03075D0003051F13E0494A1480A2030FEC3F810007F001C0495CA2031F91383E
+0380120F494AEC0700A2033F150E001FEF1E1C4991C7EA0FF80007C7000EEC03E0432979
+A74A>I<D801F0EB3F803A07FC01FFE03A0F3E07C1F83A0E1F0F00FC001E011C137C001C
+49137E003C13F012385C38783FC012705C91C7FC00F015FE495CEA007EA2150101FE5C5B
+A2150300015D5B15075E0003020F13704914C0A2031F13F00007ED80E05B1681EE01C012
+0F49EC0380A2EE0700001FEC0F0E49EB07FC0007C7EA01F02C2979A733>I<EC1FC0ECFF
+F8903803F07C90380FC01FEB1F8090393F000F80017E14C0491307484814E0485A12075B
+000F15F0485AA2485AA2ED0FE0127F90C7FCA2151F4815C05AA2ED3F80A2ED7F00A24814
+7E007C5C007E13015D4A5A003E495A6C495A4A5A260F803EC7FC3807C0FC3801FFF03800
+3F80242977A72E>I<903903E001F890390FF807FE903A1E7C1E0F80903A1C3E3C07C001
+3C137801389038E003E0EB783F017001C013F0ED80019038F07F0001E015F8147E160300
+0113FEA2C75AA20101140717F05CA20103140F17E05CA20107EC1FC0A24A1480163F010F
+15005E167E5E131F4B5A6E485A4B5A90393FB80F80DA9C1FC7FCEC0FFCEC03E049C9FCA2
+137EA213FEA25BA21201A25BA21203A2387FFFE0B5FCA22D3A80A72E>I<D801F013FC3A
+07FC07FF803A0F3E0F03C0260E1F1C13E0001EEB380F001C1370003CEBE01F123814C0D8
+783F14C00070903880070092C7FC91C8FC12F05BEA007EA313FE5BA312015BA312035BA3
+12075BA3120F5BA3121F5B0007C9FC232979A726>114 D<EC7F80903801FFE0903807C0
+F890381F003C013E131C013C131E017C133E49137E15FEA2000114FCA215706D13007FEB
+FFC014FC6C13FF15806D13C06D13E0010F13F01300140F14071403120C123F387F800114
+03D8FF0013E0A300FCEB07C000F0EB0F8012700078EB1F006C133C381F01F83807FFE0C6
+90C7FC1F297AA725>I<EB01C0EB03F01307A25CA2130FA25CA2131FA25CA2133FA291C7
+FCA2007FB51280B6FC1500D8007EC7FC13FEA25BA21201A25BA21203A25BA21207A25BA2
+120FA25BA2121F141C1380A2003F133C1438EB0078147014F05C495AEA1F03495A6C48C7
+FCEA07FCEA01F0193A78B81E>I<137C48B4141C26038F80137EEA0707000E7F001E15FE
+121CD83C0F5C12381501EA781F007001805BA2D8F03F1303140000005D5B017E1307A201
+FE5C5B150F1201495CA2151F0003EDC1C0491481A2153F1683EE0380A2ED7F07000102FF
+13005C01F8EBDF0F00009038079F0E90397C0F0F1C90391FFC07F8903907F001F02A2979
+A731>I<017CEB01C048B4EB07F038038F80EA0707000E01C013F8121E001C1403EA3C0F
+0038EC01F0A2D8781F130000705BA2EAF03F91C712E012005B017E130116C013FE5B1503
+000115805BA2ED07001203495B150EA25DA25D1578000114706D5B0000495A6D485AD97E
+0FC7FCEB1FFEEB03F0252979A72A>I<017C167048B491387001FC3A038F8001F8EA0707
+000E01C015FE001E1403001CEDF000EA3C0F0038177C1507D8781F4A133C00701380A2D8
+F03F130F020049133812005B017E011F14784C137013FE5B033F14F0000192C712E05BA2
+170100034A14C049137E17031880A2EF070015FE170E00010101141E01F86D131C0000D9
+039F5BD9FC076D5A903A3E0F07C1E0903A1FFC03FFC0902703F0007FC7FC372979A73C>
+I<903903F001F890390FFC07FE90393C1E0E0F9026780F1C138001F0EBB83FD801E013F8
+9039C007F07FEA0380000714E0D9000F140048151C000E4AC7FCA2001E131FA2C75BA214
+3F92C8FCA35C147EA314FE4A131CA30101143C001E1538003F491378D87F811470018314
+F000FF5D9039077801C039FE0F7C033A7C0E3C078027783C1E1EC7FC391FF80FFC3907E0
+03F029297CA72A>I<137C48B4143826038F8013FCEA0707000E7F001E1401001C15F8EA
+3C0F12381503D8781F14F000701380A2D8F03F1307020013E012005B017E130F16C013FE
+5B151F1201491480A2153F000315005BA25D157EA315FE5D00011301EBF8030000130790
+387C1FF8EB3FF9EB07E1EB00035DA21407000E5CEA3F80007F495AA24A5AD8FF0090C7FC
+143E007C137E00705B387801F0383803E0381E0FC06CB4C8FCEA03F8263B79A72C>I
+E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fh cmsl10 10.95 33
+/Fh 33 122 df<007FB5FCA2B512FEA418067C961E>45 D<157015F014011407143F9038
+03FFE0137FEBFFCFEBF80F1300141F15C0A5143F1580A5147F1500A55C5CA513015CA513
+035CA513075CA5130F5CA3131F497EB612F8A31D3D78BC2D>49 D<EC01FE91380FFFE002
+3F13F89138FC07FC903901E001FE903907C000FF49C7EA7F80011E15C0163F4915E05B01
+70141F13FF80A35A163FA26C90C7FC137E0118EC7FC090C8FCEEFF80A24B1300A24B5A5E
+4B5A4B5A4B5A5E4B5A4BC7FC15FEEC01F84A5A4A5A4A5A4AC8FC143E5C5CEB01E0494813
+0E49485B49C7FC131E495C13705B48485C484814F0000FB6FC5A485D5AB7FC5EA22B3D7C
+BC2D>I<EC07FC91383FFF809138F80FE0903903C007F09039078003FC90380F0001011C
+14FE013C14FF137F1480EBFFC0A31480A291380003FE137E90C7FCED07FC16F8150F16F0
+ED1FE016C0ED3F80ED7E005DEC07F0903803FF8015F090380001FC6E7EED7F80ED3FC0A2
+ED1FE016F0A316F8A4120EEA3F80486C133F16F012FFA216E0157F5B48C7EAFFC000F015
+80007049130012786C495A003EEB07F86C495A390FE03FE00003B51280C649C7FCEB1FE0
+283F7ABC2D>I<01061403D90780131F90390FF801FE91B512FC16F816F016E0168049EB
+FE0015F890381C7FC091C8FCA3133C1338A513781370A2EC1FE0ECFFF8903873E03E9038
+FF001F01FCEB0F804914C049EB07E04914F049130390C7FC16F8A61507A21206EA3F8048
+7EA2150F00FF15F0A24914E090C7121F00FC15C000F0143F00701580ED7F0012786C14FE
+4A5A6C495A390F800FE03907E03FC06CB5C7FCC613FCEB1FE0283F7ABC2D>53
+D<EC03FC91381FFF8091387C07E0903901F001F0903903C000F84948137C49C7123E131E
+013E141F133C137C137813F8A3163F486C143E167E6D147C6C6C14FC6E13F89138C001F0
+9138F003E090397FF807C09138FC0F0090383FFF3E6D13F86D13E06D7F01017F8101077F
+90391F1FFF80D93E0F13C0EBF8072601F00113E048486C13F04848137F4848131F001FEC
+0FF890C71207003E1403A2481401A300FC15F05AA3ED03E0A26CEC07C0007C1580007E14
+0F003EEC1F00003F143E6C6C5B6C6C485A3907F00FE00001B512806C6C48C7FCEB0FF028
+3F7ABC2D>56 D<EC07F8EC3FFE9138FC0F80903901F007C0903907E003E0D90FC013F090
+381F8001013F14F8EB7F004914FC48481300A24848EB01FEA21207A3485AA41503121F5B
+A31507A2000F15FC150FA2151F1207153F000315F86C6C137F000014EF90387C01CF9039
+3E078FF090380FFE1FEB03F890C713E0A2ED3FC0A3ED7F8016005D003F5C487E4A5A00FF
+495A5D4A5A49485A48495A007049C7FC0078137E383E03FC381FFFF06C13C0D801FEC8FC
+273F79BC2D>I<17E016011603831607A2160FA2161F83163FA2167F167716F7EEE7FCED
+01E316C3150316831507EE03FEED0F01150E151E151C153C03387FED7800157015F05D4A
+4880177F4A5AA24AC7FCA2020E81173F5C021FB6FC5CA20270C7EA3FE0171F5CA2495AA2
+494881170F49C8FCA2130EA24982013C1507A2137CD801FE4B7E2607FF80EC3FFEB500F0
+0107B512FC19F85E3E417DC044>65 D<013FB7FC18E018FC903B007FE00007FE6E489038
+01FF809438007FC05DF03FE0F01FF0A3027F16F892C8FCA54A16F04A153F19E0187F19C0
+F0FF8001014B13004A4A5A4D5AEF1FF04D5ADC03FFC7FC49B612F8EFFF8002F8C7EA3FE0
+EF0FF0EF07FC717E010715014A81711380A319C0130F5CA5011F4B13805C19005F601707
+013F4B5A4A4A5A4D5A4D5A017F913801FF8001FF020F90C7FCB812FC17F094C8FC3D3E7D
+BD40>I<DCFFC01338030F01F01378037F01FC13F0913A01FF803F01913A07FC000781DA
+1FE0EB03C3DA7FC0EB01E74AC812FF4948ED7FE0D907FC153F495A4948151F495A494815
+0F494816C018074890C9FC485AA2485A000F1880491603121FA248481607A295C7FC485A
+A412FF5BA75BA2181C183C1838A27F007F1778187018F0003F5F6D150160001F16036C6C
+4B5A95C7FC6C6C5D6C6C151E6C6C5D6C6C15F86D6C495A6D6CEB07C0D91FF0EB1F80D907
+FE01FEC8FC0101B512F86D6C13E0DA07FEC9FC3D4276BF42>I<013FB812F8A39026007F
+F0C7127F6E48140F18034B14011800A31978147F4B1570A502FF147092C7FCA3190017F0
+495D4A1301A21607161F91B6FC495DA29138FC003F160F1607160301075D5CA219E01801
+19C0010FEC07004A90C712031980A218071900011F5E5C181EA2183E183C013F167C4A15
+FC4D5A1707017F151F01FF4AB45AB9FCA2603D3E7DBD3E>69 D<011FB512FC5BA2903900
+3FF8006E5AA25DA5143F5DA5147F5DA514FF92C7FCA55B5CA513035CA513075CA5130F5C
+A5131F5CA3133F497E007FB512F0A2B6FC263E7EBD21>73 D<90263FFFF093381FFFF850
+13F0629026007FF8EFF000023F4D5AA2023B933801DFC0A2DA39FCED039FA2F1073F1479
+0271040E5BEC70FE191C19381A7F02F01670DAE07F94C7FC19E0A2F001C06201016D6C49
+5A02C05FF00700A2180E6F6C14010103161C028003385BA218706F7EF0E00313070200DA
+01C05BA2923907F00380A294380700075B010E902603F80E5C5FA25F190F011E6D6C5A01
+1C605FA2EEFDC0DB00FF141F013C5D013860013C92C7FC017C5C01FE027E143F2607FF80
+017C4A7EB500FC037FB512E004785E4A1338553E7CBD53>77 D<90263FFFE0023FB5FC6F
+16FEA29026003FF8020313C0021F030013004A6C157C023B163C6F153814398102381678
+02787FDA707F157082153F82031F15F002F07FDAE00F5D8215078203031401010180DAC0
+015D82811780047F1303010315C04A013F5C17E0161F17F0040F1307010715F891C70007
+91C7FC17FC160317FE04015B4915FF010E6E130E188E177F18CEEF3FDE011E16FE011C6F
+5AA2170FA21707133C01386F5A133C017C150113FE2607FF801400B512FC18705C483E7D
+BD44>I<013FB612FEEFFFE018F8903B007FF0000FFC6E48EB01FF7113804BEC7FC0183F
+19E0F01FF0A2147F5D19F8A402FFED3FF092C8FCA219E0A2F07FC05B4AEDFF8019004D5A
+4D5AEF0FF80103ED3FE04A903801FF8091B648C7FC17F002FCCAFCA213075CA5130F5CA5
+131F5CA5133F5CA3137F497EB612E0A25D3D3E7DBD3E>80 D<9238FF80070207EBE00F02
+1FEBF81E91387F00FE02FCEB1F3ED903F0EB0FFE49481307494813034AEB01FC49C7FC49
+1400133E137E177C491578A57F1770A26D1500808080EB7FFEECFFE06D13FEEDFFC06D14
+F06D14FC010380010080143F02031480DA003F13C015031500EE7FE0163F161FA2160F12
+1CA31607160F003C16C0A31780003E151F1700007E5D007F153E6D5C16FC01E0495AD87D
+F0495AD8FCFCEB0FC03AF87F803F8027F01FFFFEC7FCD8E00713F839C0007FC030427BBF
+33>83 D<B600E090B512FC4B15F8A2000101C0C7000F13006C49EC03FCEF01F091C9FC60
+A317015A495EA417031203495EA4170712074993C7FCA45F120F49150EA4171E121F4915
+1CA4173C123F491538A31778177017F05F001F15015F16036D4A5A000F93C8FC5E6C6C14
+1E6C6C5C000115F86C6C495A017FEB07C090393FC03F8090260FFFFEC9FC010313F89038
+007FC03E4073BD44>85 D<EC7FC0903803FFF890380FC07E90383E003F496D7E01FF6D7E
+82A248140782A26C5A137890C7120FA25EA2EC03FF147F903807FF1FEB1FE0D97F805B38
+01FE00EA03F8485A4848133F485A003F5D49EC81C048C7FCA2157F48ED03804814FFA200
+7F5B913903BF0700903880073F3A3FC00E1F8E260FE03C13FC3A03FFF00FF83A007FC003
+E02A2A7CA82D>97 D<EB3F80EA1FFFA3C6FC137FA291C9FCA55B5BA512015BA4EC07F800
+03EB3FFF9039F8F80FC09039FBE003E09039FF8001F891C77E5B4848147E49147F5B8217
+80A2120F5B17C0A3167F001F16805BA4EEFF00123F5B4B5AA24B5A5E007F4A5AA24B5A6D
+495A4BC7FCD87CE0137E39F87001F839F03C07E039E00FFF80260003FCC8FC2A4077BE33
+>I<EC1FF0ECFFFE903903F01F8090390FC003C0D93F0013E0017E130F49131F000115F0
+4848EB3FE0485AA24848EB1FC0001FEC0F004990C7FC123FA2485AA412FF90C9FCA96CEC
+0380150716006C6C5B151E001F5C6C6C5B6C6C5B6C6C485A3901F80F8026007FFEC7FCEB
+0FF0242A7AA828>I<EE03F8ED01FFA3ED000F1607A217F0A4160FA217E0A4161FA217C0
+A491380FF03FECFFFC902603F81F138090390FC007BF90391F8003FF90387E0001497F00
+01157F48481500485A120F5B001F5D485A5E5B127FA2150112FF90C75BA41503A25EA37E
+1507A26C4A5A7F001F141F6C6C133F6C6CEBFFF83B03F001EFFFC03900F80F8F90383FFE
+0FD90FF0EBE0002D407ABE33>I<EC3FE0903801FFF8903807E07E90380F801F90393F00
+0F80017E14C049EB07E0485A12034848EB03F0485AA2121F5B123FA248481307A290B6FC
+A2D8FF80C8FC90C9FCA87EED01C015036C15806D1307001FEC0F006D131E000F5C6C6C5B
+6C6C485A3900FC07C0D93FFFC7FCEB07F8242A7BA828>I<ED07F0ED3FFCEDFC1E913803
+F03F4A48B4FC4A481380141FEC3F81DA7F0113008102FE137C93C7FCA213015CA513035C
+A50007B512F8A3260007F0C8FCA3130F5CA5131F5CA5133F5CA5137F91C9FCA55B5BA4EA
+03FF007F13FEB5FCA229407DBF1C>I<1478EB01FE130314FFA25B14FE130314FCEB00F0
+1400ACEB03F8EA01FF14F0A2EA001F130FA314E0A5131F14C0A5133F1480A5137F1400A5
+5B5BA4EA03FF007F13F0A2B5FC183E7DBD1A>105 D<143FEB1FFF5BA213017FA214FEA5
+130114FCA5130314F8A5130714F0A5130F14E0A5131F14C0A5133F1480A5137F1400A55B
+5BA4EA03FF007F13F8A2B5FC183F7DBE1A>108 D<903907F007F8D803FFEB1FFF9139E0
+781FC09138E1E00F3B001FE38007E090380FE70002EE14F014FC14D814F85CA24A130F13
+1F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F5B491500A300015D486C4913
+80B5D8F87F13FCA32E287DA733>110 D<EC0FF0ECFFFE903903F01F8090390FC007C049
+C66C7E013E6D7E01FC6D7E48488049147C0003157E485A000F157F5B121FA2485AA2007F
+1680A2170048C85AA54B5AA25E5A6C4A5A7E4B5A5E6C140F6C6C5C4B5A6C6C013EC7FC6C
+6C5B6C6C485A3900FC0FE090383FFF80D90FF8C8FC292A7BA82D>I<903907F01F80D803
+FFEB7FE09138E1E1F09138E387F839001FE707EB0FE614EE02FC13F002D813E09138F801
+804AC7FCA25C131FA25CA4133F5CA5137F91C8FCA55B5BA31201487EB512FEA325287EA7
+24>114 D<9138FF81C0010713E390381F807F90397C003F8049131F4848130F5B000314
+07A248481400A27FA27F6D90C7FCEBFF8014FC6C13FF6C14C015F06C6C7F011F7F130790
+38007FFE1403140100381300157EA2123C153E157E007C147CA2007E147815F8007F495A
+4A5A486C485A26F9E01FC7FC38E0FFFC38C01FE0222A7DA824>I<EB0380A4130791C7FC
+A25BA25BA2133EA2137E13FE12011207001FB512C0B6FCA2D801FCC7FCA312035BA51207
+5BA5120F5BA41407001F130E13C0A4141E141C1380A26D5AA2000F5B14F03807E1E03801
+FF80D8007EC7FC1A3978B723>I<B539E007FFF05D17E02707FE000313006C48EB01FC6F
+5A5E00014A5A5EA24B5A6D1307000092C7FC5D150E6D5B7F5DA25D1480013F5B14815D14
+C3011F5B02C7C8FCA214CE14EEEB0FFCA25CA26D5A5CA25CA26D5A2C2878A630>118
+D<B500C3B53803FFFCA204FE14F8290FFE003FE00013C0D807F86D48EB7F000003173E18
+3C150F18386D5E0001141F705B153F4D5A15776D4B5A0000ECE7F04DC7FCEC01C3170E90
+38FF0383017F5D91380703F85FEC0E01021E5CD93F9C14F002BC6D5A02B813FDDAF8005B
+4A13FF5F6D5A94C8FC5C4A137E167C6DC7FC1678010E14383E2878A642>I<90B539E007
+FFF05E18E0902707FE000313006D48EB01FC705A5F01014A5A5F16036E5C0100140794C7
+FC160E805E805E1678ED8070023F13F05EED81C015C191381FC38015C793C8FC15EF15EE
+EC0FFCA25DA26E5AA25DA26E5A5DA24AC9FC5C140E141E141C5C121C003F5B5A485B495A
+130300FE5B4848CAFCEA701EEA783CEA3FF0EA0FC0343A80A630>121
+D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fi cmbx12 17.28 43
+/Fi 43 122 df<EA01FCEA07FF4813804813C04813E04813F0A2B512F8A76C13F0A26C13
+E06C13C06C13806C1300EA01FC151574942D>46 D<16F04B7E1507151F153FEC01FF1407
+147F010FB5FCB7FCA41487EBF007C7FCB3B3B3B3007FB91280A6395E74DD51>49
+D<913801FFF8021FEBFFC091B612F8010315FF010F16C0013F8290267FFC0114F89027FF
+E0003F7F4890C7000F7F48486E7FD807F86E148048486E14C048486E14E048486F13F001
+FC17F8486C816D17FC6E80B56C16FE8380A219FFA283A36C5BA26C5B6C90C8FCD807FC5D
+EA01F0CA14FEA34D13FCA219F85F19F04D13E0A294B512C019804C14004C5B604C5B4C5B
+604C13804C90C7FC4C5A4C5A4B13F05F4B13804B90C8FC4B5AED1FF84B5A4B5A4B48143F
+4A5B4A48C8FC4A5A4A48157E4A5A4A5AEC7F8092C9FC02FE16FE495A495A4948ED01FCD9
+0FC0150749B8FC5B5B90B9FC5A4818F85A5A5A5A5ABAFCA219F0A4405E78DD51>I<92B5
+FC020F14F8023F14FF49B712C04916F0010FD9C01F13FC90271FFC00077FD93FE001017F
+49486D8049C86C7F484883486C6F7F14C0486D826E806E82487FA4805CA36C5E4A5E6C5B
+6C5B6C495E011FC85A90C95CA294B55A614C91C7FC604C5B4C5B4C5B4C5B047F13809226
+0FFFFEC8FC020FB512F817E094C9FC17F817FF91C7003F13E0040713F8040113FE707F71
+7F7113E085717FA2717F85A285831A80A31AC0EA03FCEA0FFF487F487F487FA2B57EA31A
+80A34D14005C7E4A5E5F6C495E49C8485BD81FF85F000F5ED807FE92B55A6C6C6C491480
+6C01F0010791C7FC6C9026FF803F5B6D90B65A011F16F0010716C001014BC8FCD9001F14
+F0020149C9FC426079DD51>I<F01F804E7E187F18FFA25F5F5F5FA25F5F5FA294B5FC5E
+5E5EA25E5EEE3FBFEE7F3FA216FEED01FCED03F8ED07F0A2ED0FE0ED1FC0ED3F8016005D
+15FE4A5A4A5AA24A5A4A5A4A5A4A5AA24AC7FC14FE495A5C1303495A495A495A5C133F49
+C8FC13FE485AA2485A485A485A5B121F485A48C9FC12FEBCFCA6CA6CEBC000B1037FB8FC
+A6485E7CDD51>I<01C0EE01C0D801F8160F01FF167F02F0EC07FFDAFF8090B5FC92B712
+8019006060606060606095C7FC17FC5F17E0178004FCC8FC16E09026FC3FFCC9FC91CBFC
+ADED3FFE0203B512F0020F14FE023F6E7E91B712E001FDD9E00F7F9027FFFE00037F02F8
+01007F02E06EB4FC02806E138091C8FC496F13C04917E07113F0EA00F090C914F8A219FC
+83A219FEA419FFA3EA03F0EA0FFC487E487E487FA2B57EA319FEA35C4D13FC6C90C8FC5B
+4917F8EA3FF001804B13F06D17E0001F5E6C6C17C06D4B1380D807FC92B512006C6C4A5B
+6C6C6C01075B6C01E0011F5BD97FFE90B55A6DB712C0010F93C7FC6D15FC010115F0D900
+3F1480020301F0C8FC406078DD51>I<EE1FFF0303B512E0031F14F892B612FE0203814A
+D9FC037F021F9039C0007FC04A90C7EA1FE0DAFFFC6E7E494914074949EC7FF8494914FF
+49495B4949497F4990C7FC495D5C13FF485BA25A4A6E5B5A715B48496E5B725A4894C8FC
+A35AA35C48913801FFE0030F13FE033F6D7E4B14E092B612F89126E1FE037FB53AE3F000
+7FFEDAE7E06D7EDAEFC06D7F4B6D7F02FFC76C7F4A82717F4A82A2854A8085A24A1780A5
+4A17C0A37EA77EA47E6E1780A27EA21A007E4D5B7E6E5E7E6E5E6C4C5B6D7E013F4B5B6D
+6C4A5B6D01C0495B6D6D90B5C7FC6DD9FC0713FC6D90B65A6D5E023F15C0020F92C8FC02
+0114F8DA001F1380426079DD51>I<EA07E0120F7F13FCEBFFFC91B912F8A45AA21AF01A
+E01AC01A801A00A248606161616101E0C9123F01804C5A48CA485A4D90C7FC60007E4C5A
+17074D5A4D5A4D5A485F4D5A17FF4C90C8FCC9485A5F4C5A160F4C5A5F163F4C5A16FF5F
+5D94C9FC5D5D5E150FA24B5AA2153FA24B5AA215FFA34A5BA25CA35CA44A5BA45CA65CAD
+6E5BA26E5BDA03FECAFC6E5A456377E051>I<92383FFF800203B512FC021FECFF80027F
+15E049B712F849D9F0077F010F90C76C7ED91FFCEC1FFFD93FF06E7F494802037F494882
+717F484980854890C9127FA24884183FA25A80A380806E157F6E5E14FE6E7E6F4A5A6C14
+F003FC495B03FF495B6C1580DCE0075B6CDBF80F90C7FC9338FE1FFE6C9238FF7FF84D5A
+6D16C06D5E6D4BC8FC6D6F7E6D16E00101826D16FC023F814A8149B87E01078349839026
+3FFE3F8190267FFC0F819026FFF003814849C6FC48496D804849131F4890C70007801601
+48486E1580003F163F49150F007F7014C0491501717E8400FF835B8484A384A21A80A27F
+007F1900607F003F606D160F001F606D4C5A6C6D153F6C6D4B5A6C01F04B5A6C01FC0203
+5B6C01FF021F5B6D9027F001FFFEC7FC6D90B65A010F16F001035E010093C8FC020F14F8
+DA007F90C9FC426079DD51>I<BB12F0F2FF801BF81BFEF3FFC088D800010280C7000114
+F8DF003F7F080F13FF74807480867480757FA2757FA28987A289A965A26365A2515BA298
+B55A505C505C5091C7FC505B505B087F13F00703B512C096B6C8FC93B812F81BC01BF8F3
+FF801CE00480C8001F13F8080713FE08016D7E7480757F757F757F89757F89871E80871E
+C0A41EE087A663A21EC0A3631E80A2511400A2515B515B6398B55A505C08075C081F5C97
+B6C7FCBD5A1CF81CE099C8FC1BF898C9FC63627AE173>66 D<4DB5ED03C0057F02F01407
+0407B600FE140F047FDBFFC0131F4BB800F0133F030F05FC137F033F9127F8007FFE13FF
+92B6C73807FF814A02F0020113C3020702C09138007FE74A91C9001FB5FC023F01FC1607
+4A01F08291B54882490280824991CB7E49498449498449498449865D49498490B5FC484A
+84A2484A84A24891CD127FA25A4A1A3F5AA348491A1FA44899C7FCA25CA3B5FCB07EA380
+A27EA2F50FC0A26C7FA37E6E1A1F6C1D80A26C801D3F6C6E1A00A26C6E616D1BFE6D7F6F
+4E5A7F6D6D4E5A6D6D4E5A6D6D4E5A6D6E171F6D02E04D5A6E6DEFFF806E01FC4C90C7FC
+020F01FFEE07FE6E02C0ED1FF8020102F8ED7FF06E02FF913803FFE0033F02F8013F1380
+030F91B648C8FC030117F86F6C16E004071680DC007F02F8C9FC050191CAFC626677E375
+>I<BB12E0F2FF801BF01BFE757E1CF0D800010280C7000780DF007F13FE080F6D7E0801
+807480093F7F090F13FC757F757F877580767F8A88767F8A888AA2767FA28A881F80A376
+14C0A41FE0A5881FF0B05214E0A51FC0A4521480A31F006466A2525BA2525BA2525B6664
+99B55A515C5191C7FC515B515B515B097F5B50B512C008075C083F91C8FC0707B512FCBD
+12F01CC051C9FC1BF81B8008E0CAFC6C627AE17C>I<BD12FCA488A2D8000102C0C71201
+F1000F1A01F2007F1B3F1B0F1B07757EA28787A288A3F43F80A31C1FA3197EA3F40FC0A4
+99C7FC19FEA31801A218031807181F18FF93B6FCA6EEC000181F180718031801A21800A2
+1D7E197EA21DFCA696C812011DF8A31C03A3F407F0A31C0FA21C1F1C3F1DE01C7F1CFF63
+631B0F093F13C098B5FC1A0797B6FCBEFCA31D80A35F617AE06A>I<BD12E0A41CF0A2D8
+000102C0C71207F1003F1A0F1A031A001B7F1B3FF31FF81B0FA21B07A21B03A21B011CFC
+A31B00A419FCA21C7EA41C00A21801A31803A21807180F183FEF01FF93B6FCA6EEC001EF
+003F180F18071803A21801A31800A896C9FCB3A5B912F8A657617AE065>I<B912E0A6C7
+02E0C7FCB3B3B3B3AEB912E0A633627CE13C>73 D<B912F8A6D8000102C0CBFCB3B3B1F3
+07E0A5F30FC0A61B1FA31B3F1C80A21B7FA21BFFA262A262625013006262624FB5FC1907
+191F4EB6FCBDFC63A553627AE161>76 D<94381FFFE00407B67E043F15F04BB712FE030F
+EEFFC0033FD9FC0014F092B500C0010F13FC020349C7000113FF4A01F86E6C7F021F496F
+13E04A01C0030F7F4A496F7F91B5C96C7F0103497013FF494970804B834949717F498749
+49717F49874B8390B586484A717FA24891CB6C7FA2481D804A84481DC0A348497214E0A3
+481DF0A34A85481DF8A5B51CFCB06C1DF8A36E96B5FCA36C1DF0A46C6D4E14E0A36C1DC0
+6E606C1D80A26C6E4D1400A26C6E4D5BA26C6E4D5BA26D6D4D5B6D636D6D4D5B6F94B5FC
+6D636D6D4C5C6D6D4C91C7FC6D6E4B5B6D02E0031F5B023F6D4B13F06E01FC92B55A6E01
+FF02035C020302C0010F91C8FC020002FC90B512FC033F90B712F0030F17C0030394C9FC
+DB007F15F804071580DC001F01E0CAFC666677E379>79 D<BB7E1AFCF2FFC01BF81BFE75
+7ED800010280C7001F80070114F0736C7F081F7F747F747F7414807414C0A27414E0A21D
+F0A27513F8A41DFCA91DF8A498B512F0A21DE0A25014C01D8062501400505B505B087F5B
+4FB512E0071F5C93B9C7FC1BFC1BF01B8008F0C8FC04C0CCFCB3B3A2B97EA65E627AE16E
+>I<DBFFFCEC01E0020FD9FFE01303027F02FC130749B7130F0107EEC01F011F16F049D9
+C007EBF83F4948C7383FFE7FD9FFF8020FB5FC4801E014014849804849153F91C97E4848
+82001F834982003F83845B007F187FA2193FA200FF181FA27F190FA27FA26D1707808080
+6C01F893C7FC80ECFF8015F86CECFFC016FC6CEDFFE017FE6CEEFFE018F86C17FE6C717E
+6C846C846D17F86D836D836D8313036D18806D6C17C0020F17E01401DA000F16F0150004
+0715F8EE007F1703050014FC183F84060713FE84A2007C8300FC83A2197FA3193F7EA31A
+FC7EA27F1AF86D177F7F1AF06D17FF6D18E06D5E01FF18C06E4B138002E04B130002F84B
+5A02FFED3FFC01CF01E0ECFFF8018301FF010F5B010191B65A6D6C5E48011F93C7FC4801
+0315FC48D9003F14E048020149C8FC476677E35A>83 D<001FBEFCA64849C79126E0000F
+148002E0180091C8171F498601F81A0349864986A2491B7FA2491B3F007F1DC090C9181F
+A4007E1C0FA600FE1DE0481C07A5CA95C7FCB3B3B3A3021FBAFCA663617AE070>I<B96C
+023FB612FEA6D8000102C0CA0007EBF000E2007FC7FCB3B3B3AA656D63A2821C01806570
+170380525A6E7F6E4F5A70171F6E626E6D4D5A6E6D177F525A6E6E030390C8FC033F01E0
+4B5A6F6DED1FFC6F01FCED7FF80303D9FF80903803FFE06F02F8017F5B6F6C90B7C9FC04
+1F5E040716F8040016C0050F4ACAFCDD003F13C06F647AE17C>I<913803FFFE027FEBFF
+F00103B612FE010F6F7E4916E090273FFE001F7FD97FE001077FD9FFF801017F486D6D7F
+717E486D6E7F85717FA2717FA36C496E7FA26C5B6D5AEB1FC090C9FCA74BB6FC157F0207
+B7FC147F49B61207010F14C0013FEBFE004913F048B512C04891C7FC485B4813F85A5C48
+5B5A5CA2B55AA45FA25F806C5E806C047D7F6EEB01F96C6DD903F1EBFF806C01FED90FE1
+14FF6C9027FFC07FC01580000191B5487E6C6C4B7E011F02FC130F010302F001011400D9
+001F90CBFC49437CC14E>97 D<903807FF80B6FCA6C6FC7F7FB3A8EFFFF8040FEBFF8004
+7F14F00381B612FC038715FF038F010014C0DBBFF0011F7FDBFFC001077F93C76C7F4B02
+007F03F8824B6F7E4B6F13804B17C0851BE0A27313F0A21BF8A37313FCA41BFEAE1BFCA4
+4F13F8A31BF0A24F13E0A24F13C06F17804F1300816F4B5A6F4A5B4AB402075B4A6C6C49
+5B9126F83FE0013F13C09127F00FFC03B55A4A6CB648C7FCDAC00115F84A6C15E091C700
+1F91C8FC90C8000313E04F657BE35A>I<92380FFFF04AB67E020F15F0023F15FC91B77E
+01039039FE001FFF4901F8010113804901E0010713C04901804913E0017F90C7FC49484A
+13F0A2485B485B5A5C5A7113E0485B7113C048701380943800FE0095C7FC485BA4B5FCAE
+7EA280A27EA2806C18FCA26C6D150119F87E6C6D15036EED07F06C18E06C6D150F6D6DEC
+1FC06D01E0EC7F806D6DECFF00010701FCEB03FE6D9039FFC03FFC010091B512F0023F5D
+020F1580020102FCC7FCDA000F13C03E437BC148>I<F17FF8050FB5FCA6EF000F8484B3
+A892380FFF804AB512F8020F14FE023FECFF8391B712E301039138807FF3499039F8000F
+FB011F01E00103B5FC494913004990C87E49488148498148834A815A485BA2485BA25AA3
+485BA4B5FCAE7EA46C7FA37EA26C7FA26C5F806C5F6C6D5D6C6D5D017F93B5FC6D6C6C01
+03806D6D49806D01F0D91FF7EBFFFE6D9039FE01FFE7010190B612876D6CECFE07021F14
+F8020314E09127003FFE00ECC0004F657BE35A>I<92380FFFC04AB512FC020FECFF8002
+3F15E091B712F80103D9FE037F499039F0007FFF011F01C0011F7F49496D7F4990C76C7F
+49486E7F48498048844A804884485B727E5A5C48717EA35A5C721380A2B5FCA391B9FCA4
+1A0002C0CBFCA67EA380A27EA27E6E160FF11F806C183F6C7FF17F006C7F6C6D16FE6C17
+016D6C4B5A6D6D4A5A6D01E04A5A6D6DEC3FE0010301FC49B45A6D9026FFC01F90C7FC6D
+6C90B55A021F15F8020715E0020092C8FC030713F041437CC14A>I<EE3FFC0307B51280
+033F14C04AB612F0020715F84A9038F03FFC4AEB807F913A7FFE00FFFE4A5A4B4813FF49
+13F05B4913E0A24913C0A27013FE4949EB7FFCEF3FF8EF1FF0EF07C094C7FCB0B812C0A6
+D8001F01C0C8FCB3B3B0007FB612FCA638657CE431>I<F107F8DB7FFEEC3FFE020FB5D8
+F001B5FC027FDAFE03148049B7128F49DCDFFD13C0010FD9F00FEBFFC149D98001140149
+90C7EBFC0349486E6C7E4948EC3FFF48496E018113800780130048F0C03E97C7FC48496E
+7FA34884A96C60A36C6D4A5BA26C60A26C6D4A90C8FC6D6C4A5A6D6C4A5A6D6D485BDBF0
+0F5B4990B612C060D97C7F4AC9FCD9FC0F14F09126007FFECAFC92CCFC1201A47FA27F80
+14F091B77E18FE6CEFFFC019F06D17FC19FF6D846D846D846D84013F8490BAFC00038548
+01E0C712014890C9000F7F484816014848EE007F4848717E8512FF5B85A56D5F007F616D
+173F003F616D177F6C6C4D5A6C01C003035B6C6D4B5B6C01F8031F5BC601FF92B5C7FC6D
+01F8011F5B011F90B712F8010717E0010094C8FC020F15F0DA003F01FCC9FC4A607CC151
+>I<903807FF80B6FCA6C6FC7F7FB3A8EF1FFF94B512F0040714FC041F14FF4C8193267F
+E07F7F922781FE001F7FDB83F86D7FDB87F07FDB8FC0814C7F039FC78015BE03BC8003FC
+825DA25DA25DA45DB3B2B7D8F007B71280A651647BE35A>I<EB0FE0EB3FF8497E48B5FC
+A24880A24880A76C5CA26C91C7FCA238007FFC6D5AEB0FE090C9FCAF903807FF80007FB5
+FCA6C6FC7F7FB3B3AEB712C0A622657BE42C>I<903807FF80B6FCA6C6FC7F7FB3B3B3B3
+ADB712E0A623647BE32C>108 D<902607FF80D91FFFEEFFF8B691B500F00207EBFF8004
+0702FC023F14E0041F02FF91B612F84C6F488193267FE07F6D4801037F922781FE001F90
+27E00FF0007FC6DA83F86D9026F01FC06D7F6DD987F06D4A487F6DD98FC0DBF87EC7804C
+6D027C80039FC76E488203BEEEFDF003BC6E4A8003FC04FF834B5FA24B5FA24B94C8FCA4
+4B5EB3B2B7D8F007B7D8803FB612FCA67E417BC087>I<902607FF80EB1FFFB691B512F0
+040714FC041F14FF4C8193267FE07F7F922781FE001F7FC6DA83F86D7F6DD987F07F6DD9
+8FC0814C7F039FC78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8F007B71280A65141
+7BC05A>I<923807FFE092B6FC020715E0021F15F8027F15FE494848C66C6C7E010701F0
+010F13E04901C001037F49496D7F4990C87F49486F7E49486F7E48496F13804819C04A81
+4819E048496F13F0A24819F8A348496F13FCA34819FEA4B518FFAD6C19FEA46C6D4B13FC
+A36C19F8A26C6D4B13F0A26C19E06C6D4B13C0A26C6D4B13806C6D4B13006D6C4B5A6D6D
+495B6D6D495B010701F0010F13E06D01FE017F5B010090B7C7FC023F15FC020715E00200
+92C8FC030713E048437CC151>I<902607FF80EBFFF8B6010FEBFF80047F14F00381B612
+FC038715FF038F010114C09227BFF0003F7FC6DAFFC0010F7F6D91C76C7F6D496E7F03F8
+6E7F4B6E7F4B17804B6F13C0A27313E0A27313F0A21BF885A21BFCA3851BFEAE4F13FCA4
+1BF861A21BF0611BE0611BC06F92B512801B006F5C6F4A5B6F4A5B03FF4A5B70495B04E0
+017F13C09226CFFC03B55A03C7B648C7FC03C115F803C015E0041F91C8FC040313E093CB
+FCB3A3B712F0A64F5D7BC05A>I<D90FFFEB0FFCB690383FFF8093B512E04B14F04B14F8
+923907FC7FFC92390FE0FFFEC6EC1F806DD93F0113FF6D133E157E157C15F8A215F07013
+FEA24BEB7FFCEF3FF8EF0FE04B90C7FCA55DB3B0B712F8A638417BC042>114
+D<913A3FFF8007800107B5EAF81F011FECFE7F017F91B5FC48B8FC48EBE0014890C7121F
+D80FFC1407D81FF0801600485A007F167F49153FA212FF171FA27F7F7F6D92C7FC13FF14
+E014FF6C14F8EDFFC06C15FC16FF6C16C06C16F06C826C826C826C82013F1680010F16C0
+1303D9007F15E0020315F0EC001F1500041F13F81607007C150100FC81177F6C163FA217
+1F7EA26D16F0A27F173F6D16E06D157F6D16C001FEEDFF806D0203130002C0EB0FFE02FC
+EB7FFC01DFB65A010F5DD8FE0315C026F8007F49C7FC48010F13E035437BC140>I<EC07
+E0A6140FA5141FA3143FA2147FA214FF5BA25B5B5B5B137F48B5FC000F91B512FEB8FCA5
+D8001F01E0C8FCB3AFEF0FC0AC171F6D6D1480A2173F6D16006F5B6D6D137E6D6D5B6DEB
+FF836EEBFFF86E5C020F14C002035C9126003FFCC7FC325C7DDA3F>I<902607FFC0ED3F
+FEB60207B5FCA6C6EE00076D826D82B3B3A260A360A2607F60183E6D6D147E4E7F6D6D49
+48806D6DD907F0ECFF806D01FFEB3FE06D91B55A6E1500021F5C020314F8DA003F018002
+F0C7FC51427BC05A>I<B700C00103B512FCA6C66C01C0C8381FFE006D6DED07F0A26D6D
+5E190F6D6D5E191F6D606F153F6D95C7FC6F5DA26D6D157E19FE6D6E5C18016E5E701303
+6E5E701307A26E6D5C180F6E6D5C181F6E6D5C183F6E93C8FC705BA26E6D13FEA26E6E5A
+17816FEBC1F817C36F5C17E76F5C17FFA26F5CA26F5CA26F91C9FCA26F5BA36F5BA2705A
+A2705AA2705AA2705A4E417DBF55>I<B70081B600FC0103B512FCA6C66C0180C701FCC8
+381FFE006F6FED03F86D047F5F856F6E16076D646F70140F6D705F866F6E161F6D646F4A
+6D143F6D99C7FC4E7F6F616D1B7E6F4A6D14FE6D6395B57E7001FC15016E62DCC0016E13
+036EDBF87F5D05038004E0496C14076E62DCF007ED800F6E4B6C5D050F15C004F8496C14
+1F6E62DCFC1FEDE03F6E4B6C92C8FC053F15F004FE496C5C6E197E7048EDF8FE6E027E6D
+5C05FE15FC4D6D13FD6F601BFF6F496E5BA24D806F60A26F496E5BA24D806F60A26F496E
+90C9FCA294C87E6F5FA26F486F5A047C6F5A6E417DBF75>I<007FB600C0017FB512F8A6
+D8001F01F8C70007EBF0006D040190C7FC6D6D5D6D6D4A5A6D6D4A5A70495A6D4C5A6E7F
+6E6D495A6E6D495A7049C8FC6E4A5A6E6D485A6E6D485A6E13FFEF8FF06EEC9FE06FEBFF
+C06F5C6F91C9FC5F6F5B816F7F6F7F8481707F8493B57E4B805D4B80DB0FF37FDB1FE17F
+04C080153F4B486C7F4B486C7F4A486D7F4A486D7F4A5A4B6D7F020F6E7F4A486D7F4A48
+6D804A5A4AC86C7F49486F7F4A6F7F0107707FEB3FFFB600F049B7FCA650407EBF55>I<
+B700C00103B512FCA6D8003F01C0C8381FFE006FED07F0A26D6D5E190F6D6D5E191F6D6D
+5E193F6D95C7FC6F5D6D177E6F15FEA26D6E495AA26E6D5C18036E6D5C18076E5E70130F
+6E5E70131FA26E6D495AA26E6D91C8FC606E6D137E18FE6E5D17816F5C17C3A26FEBE7F0
+A26FEBF7E017FF6F5CA26F5CA26F91C9FCA36F5BA26F5BA2705AA2705AA2705AA35FA25F
+163F94CAFC5E167E16FED807E05CD81FF81301487E486C495AA2B5495AA24B5A5E151F4B
+5A6C4849CBFC15FEEBFC01393FF807FC391FF03FF06CB55A6C5C6C91CCFCC613FCEB1FE0
+4E5D7DBF55>I E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fj cmtt10 10.95 76
+/Fj 76 126 df<00101304007C131F00FEEB3F80A26C137FA248133FB2007E1400007C7F
+003C131E00101304191C75B830>34 D<D803C0EB01E0D80FF01303486C497E487E150F48
+7ED87E7E495AEAFE7F5E486C133FA25E157FA24BC7FC6C5A5D387E7E01EA7FFED83FFC5B
+1403EA1FF86C48485AEA03C0C75B140FA25D141FA24A5AA25D147FA292C8FC5CA2495AA2
+5C1303A25C1307A290390FF001E0ED07F84A487E011F497EA24A487E133F163F90267F80
+7F1380ED7E1F14005BA25B1201A24848EB7F3F033F13004914FF12076F5A5B6F5A6C486D
+5A0001EC01E029477DBE30>37 D<141E147F14FF5BEB03FEEB07FCEB0FF0EB1FE0EB3FC0
+EB7F80EBFF00485A5B12035B485A120F5BA2485AA2123F5BA2127F90C7FCA412FEAD127F
+A47F123FA27F121FA26C7EA27F12076C7E7F12017F6C7EEB7F80EB3FC0EB1FE0EB0FF0EB
+07FCEB03FEEB01FF7F147F141E184771BE30>40 D<127812FE7E7F6C7E6C7EEA0FF06C7E
+6C7E6C7E6C7EEB7F80133F14C0131FEB0FE014F01307A2EB03F8A214FC1301A214FE1300
+A4147FAD14FEA4130114FCA2130314F8A2EB07F0A2130F14E0EB1FC0133F1480137FEBFF
+00485A485A485A485AEA3FE0485A485A90C7FC5A1278184778BE30>I<14E0497E497EA6
+0038EC0380007EEC0FC0D8FF83EB3FE001C3137F9038F3F9FF267FFBFB13C06CB6128000
+0FECFE00000314F86C5C6C6C13C0011F90C7FC017F13C048B512F04880000F14FE003FEC
+FF80267FFBFB13C026FFF3F913E09038C3F87F0183133FD87E03EB0FC00038EC03800000
+91C7FCA66D5A6D5A23277AAE30>I<143EA2147FAF007FB7FCA2B81280A36C1600A2C76C
+C8FCAF143EA229297DAF30>I<EA03E0EA0FF0EA1FF813FCEA3FFEA213FFA27EA27E1203
+EA007FA2137E13FEEA01FC1203EA07F8EA3FF0127FEAFFE0EA7F801300123C1019708B30
+>I<007FB612F0A2B712F8A36C15F0A225077B9E30>I<120FEA3FC0EA7FE0A2EAFFF0A4EA
+7FE0A2EA3FC0EA0F000C0C6E8B30>I<16F01501ED03F8A21507A2ED0FF0A2ED1FE0A2ED
+3FC0A2ED7F80A2EDFF00A24A5AA25D1403A24A5AA24A5AA24A5AA24A5AA24A5AA24AC7FC
+A2495AA25C1303A2495AA2495AA2495AA2495AA2495AA249C8FCA2485AA25B1203A2485A
+A2485AA2485AA2485AA2485AA248C9FCA25AA2127CA225477BBE30>I<14FE903807FFC0
+497F013F13F8497F90B57E48EB83FF4848C6138049137F4848EB3FC04848EB1FE049130F
+001F15F0491307A24848EB03F8A290C712014815FCA400FEEC00FEAD6C14016C15FCA36D
+1303003F15F8A26D1307001F15F0A26D130F6C6CEB1FE0A26C6CEB3FC06C6CEB7F806D13
+FF2601FF8313006CEBFFFE6D5B6D5B010F13E06D5BD900FEC7FC273A7CB830>I<EB03C0
+497EA2130FA2131FA2133F137F13FF1203123FB5FCA213EF138FEA7E0F1200B3B0003FB5
+12F84814FCB612FEA26C14FC6C14F81F3977B830>I<EB07FC90383FFFC090B512F00003
+804814FE4880261FF80F1380263FE00113C09038C0007F4848EB3FE090C7121FED0FF048
+14075A6C15F81503A3127E1218C8FCA2150716F0150F16E0151F16C0153FED7F8015FF4A
+13005DEC07FC4A5A4A5A4A5A4A5A4A5A4990C7FC495A495AEB0FF0EB3FE0495A495A4890
+C8FC4848EB01F04848EB03F8485AEA1FE048B6FCB7FCA37E6C15F025397BB830>I<EB03
+FF013F13E090B512F84814FE4880481580260FFE0113C09038F0007F4848EB1FE0150F16
+F01507A26C5A6C5AC8FC150F16E0A2151FED3FC0157FEDFF8002071300903807FFFE495B
+5D8115FF6D1480D9000113C09138003FE0ED1FF0ED07F8150316FC150116FE1500A21218
+127EB4FCA2150116FC4814036C15F86C6C13076DEB1FF0D83FF0133F3A1FFE01FFE06CB6
+12C06C15806CECFE00C65C013F13F001031380273A7CB830>I<EC03FC4A7E140F141FA2
+143F147F157E14FEA2EB01FCEB03F8A2EB07F0A2EB0FE0EB1FC0A2EB3F80A2EB7F0013FE
+A2485A485AA2485AA2485A485AA2485AA248C7FC12FEB8FC1780A46C1600C8007EC7FCAA
+91387FFFFE91B6FCA46E5B29397DB830>I<000FB612804815C05AA316800180C8FCAEEB
+83FF019F13C090B512F015FC8181D9FE0313809039F0007FC049133F0180EB1FE06CC712
+0F000E15F0C81207A216F81503A31218127EA2B4FC150716F048140F6C15E06C141F6DEB
+3FC06D137F3A3FE001FF80261FFC0F13006CB55A6C5C6C5C6C14E06C6C1380D90FFCC7FC
+25397BB730>I<EC0FF8EC7FFF49B51280010714E0131F4914F090387FF80F9039FFC007
+F84813803803FE005B485A4848EB03F0ED01E0484890C7FC5B123F5BA2127FEB000C9038
+03FFE0010F13F8D8FF3F13FE48B6FCB7128016C09039FE007FE001F8EB1FF001E0130F49
+EB07F849EB03FCA290C7120116FE1500A37EA46C7E15016D14FC121F6D1303000FEC07F8
+6D130F6C6CEB1FF06DEB3FE03A03FF81FFC06C90B512806C15006D5B011F13F8010713E0
+01011380273A7CB830>I<127CB712FC16FEA416FC48C7EA0FF816F0ED1FE0007CEC3FC0
+C8EA7F80EDFF00A24A5A4A5A5D14075D140F5D4A5AA24A5AA24AC7FCA25C5C13015CA213
+035CA213075CA4495AA6131F5CA96D5A6DC8FC273A7CB830>I<49B4FC011F13F0017F13
+FC90B57E0003ECFF804815C048010113E03A1FF8003FF049131FD83FC0EB07F8A24848EB
+03FC90C71201A56D1303003F15F86D13076C6CEB0FF06C6CEB1FE0D807FCEB7FC03A03FF
+83FF806C90B512006C6C13FC011F13F0497F90B512FE48802607FE0013C0D80FF8EB3FE0
+D81FE0EB0FF04848EB07F8491303007F15FC90C712014815FE481400A66C14016C15FC6D
+1303003F15F86D1307D81FF0EB1FF06D133F3A0FFF01FFE06C90B512C06C1580C6ECFE00
+6D5B011F13F0010190C7FC273A7CB830>I<49B4FC010F13E0013F13F890B57E48804880
+48010113803A0FFC007FC0D81FF0EB3FE04848131F49EB0FF048481307A290C7EA03F85A
+4815FC1501A416FEA37E7E6D1303A26C6C13076C6C130F6D133FD80FFC13FF6CB6FC7E6C
+14FE6C14F9013FEBE1FC010F138190380060011400ED03F8A2150716F0150F000F15E048
+6C131F486CEB3FC0157FEDFF804A1300EC07FE391FF01FFC90B55A6C5C6C5C6C1480C649
+C7FCEB3FF0273A7CB830>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7
+FCAF120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>I<EA03C0EA
+0FF0EA1FF8A2EA3FFCA4EA1FF8A2EA0FF0EA03C0C7FCAFEA03C0EA0FF0121F13F8123F13
+FCA3121FA2120F12031200120113F8120313F01207EA1FE0123FEA7FC0EAFF80EA7F0012
+7E12380E3470A630>I<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383F
+FE00ECFFF8495B010713C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7F
+FC5BEAFFE05B7FEA7FF87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F01
+0113F06D7FEC3FFE91381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F
+7BB230>I<1278127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1F
+FF6D7F010313E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153F
+EDFFF05C020713C04A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC
+48485A4813E0000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>62
+D<EC1FE0ECFFF8010313FE010F7F4914804914C090397FF03FE09038FF800F4890380007
+F0D803FC13033A07F801FBF89038F007FF380FE01F4A13FCEA1FC0495A003FEBFF0F9038
+00FE07903901FC03FE007FEBF801EA7E03ECF000A2EAFE0700FC49137EAA00FE6D13FED8
+7E0314FCA2ECF801D87F0114F8003FEBFC03903900FE07F0903880FF0F001F90387FFFE0
+6D6C13C0EA0FE06E13803A07F007FE009038F801F86C6CC7127C6CB414FE6CEB80039038
+7FF01F6DB512FC6D14F86D14E0010314C00100EBFE00EC1FF0273A7CB830>64
+D<147F4A7EA2497FA4497F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FE
+A590387F007FA4498049133F90B6FCA34881A39038FC001F00038149130FA40007814913
+07A2D87FFFEB7FFFB56CB51280A46C496C130029397DB830>I<007FB512F0B612FE6F7E
+82826C813A03F8001FF815076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B6
+5A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E
+4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7FC29387EB730>I<91387F803C9039
+03FFF03E49EBFC7E011F13FE49EBFFFE5B9038FFE07F48EB801F3903FE000F484813075B
+48481303A2484813015B123F491300A2127F90C8FC167C16005A5AAC7E7EA2167C6D14FE
+123FA27F121F6D13016C6C14FCA26C6CEB03F86D13076C6CEB0FF03901FF801F6C9038E0
+7FE06DB512C06D14806D1400010713FC6D13F09038007FC0273A7CB830>I<003FB512E0
+4814FCB67E6F7E6C816C813A03F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A216
+3F17C0161FA4EE0FE0AC161F17C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED
+7FF0003FB65A485DB75A93C7FC6C14FC6C14E02B387FB730>I<007FB7FCB81280A47ED8
+03F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE
+0FE0A9007FB7FCB8FCA46C16C02B387EB730>I<003FB712804816C0B8FCA27E7ED801FC
+C7121FA8EE0F8093C7FCA5153E157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8
+487FB5FCA27E6C5B2A387EB730>I<02FF13F00103EBC0F8010F13F1013F13FD4913FF90
+B6FC4813C1EC007F4848133F4848131F49130F485A491307121F5B123F491303A2127F90
+C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C6D1400ED03F8A27F003F1407A27F12
+1F6D130F120F7F6C6C131FA2D803FE133F6C6C137FECC1FF6C90B5FC7F6D13FB010F13F3
+0103EBC1F0010090C8FC293A7DB830>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C
+496C13F06C496C13E0D803F8C7EAFE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D
+4813F0B56C4813F8A26C496C13F06C496C13E02D387FB730>I<007FB6FCB71280A46C15
+00260007F0C7FCB3B3A8007FB6FCB71280A46C1500213879B730>I<D83FFF90380FFF80
+486D4813C0B56C5AA26C497E6C496C1380D803F0903803F8004B5A4B5A151F4B5A5E4BC7
+FC15FE14014A5A5D4A5A4A5A141F5D4A5A4AC8FC5C13F18101F37F13F790B57E14EFECC7
+F01483EC03F8140101FE7F496C7E5B157F497F82151F82150F826F7EA26F7E1501821500
+D83FFF903803FFC0486D4813E0B56C5AA26C497E6C496C13C02B387FB730>75
+D<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA2
+7E6C16802A387EB730>I<D83FF8ECFFE0486C4913F0486C4913F8A2007F16F06C6C4913
+E00007160001EF14BFEC800FA39039E7C01F3FA4ECE03F01E3133EA2ECF07EA201E1137C
+A2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0A3EC1FC0A2EC070091C7FCADD83FFC
+903801FFE0486C4913F0B54913F8A26C486D13F06C486D13E02D387FB730>I<D83FFC90
+381FFF80486C4913C0B54913E0A26C6D6C13C06C6E13800003913801F800EBF7C0A3EBF3
+E0A314F013F1A214F8A213F014FCA2147C147EA2143E143FA2141FA21581A2140F15C1A2
+140715E1A2140315F1A21401A215F91400A3157DA3153FEA3FFF481380B5EAC01FA26CEB
+800F6C496C5A2B387EB730>I<90383FFFE048B512FC000714FF4815804815C04815E0EB
+F80001E0133FD87F80EB0FF0A290C71207A44815F8481403B3A96C1407A26C15F0A36D13
+0FA26D131F6C6CEB3FE001F813FF90B6FC6C15C06C15806C1500000114FCD8003F13E025
+3A7BB830>I<007FB512F0B612FE6F7E16E0826C813903F8003FED0FFCED03FE15016F7E
+A2821780163FA6167F17005EA24B5A1503ED0FFCED3FF890B6FC5E5E16804BC7FC15F001
+F8C9FCB0387FFFC0B57EA46C5B29387EB730>I<003FB57E4814F0B612FC15FF6C816C81
+2603F8017F9138003FF0151F6F7E15071503821501A515035E1507150F4B5A153F4AB45A
+90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FCA53A3FFF8003
+FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB730>82
+D<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383FE001497E484813
+7F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C
+14E0000114F86C80011F13FF01031480D9003F13C014019138007FE0151FED0FF0A2ED07
+F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B5128016
+0000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712C04816E0B8FCA4
+3AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730>I<
+3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F00011600A36C
+6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC9038
+007FFCEC1FF02F3980B730>I<D87FFE90380FFFC0B54913E06E5AA24A7E6C486D13C0D8
+07F0903801FC00A26D130300035DA46C6C495AA46C6C495AA46D131F6D5CA3EC803F013F
+5CA46D6C48C7FCA490380FE0FEA401075B14F1A301035BA314FB01015BA314FFA26D5BA4
+6E5A6E5A2B397EB730>I<D83FFC903801FFE0486C4913F000FF16F8A2007F16F06C486D
+13E0D81FC09038001FC0000F1680A76D143F00071600A7000390380F803E9039F01FC07E
+EC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FCA314F8A300005D01F913FCA2ECF07C
+A201FD137DA2017D5CECE03DA3017F133FA2ECC01FA2013F5CA2EC800F6D486C5A2D397F
+B730>I<3A3FFF01FFF84801837F02C77FA202835B6C01015B3A01FC007F806D91C7FC00
+005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA26D90
+C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181EB7F0081497F49800001143F
+49800003141F49800007140FD87FFEEB7FFFB590B5128080A25C6C486D130029387DB730
+>I<D87FFF90381FFFC0B56C4813E0A46C496C13C0D803F8903803F8006D1307A26C6C49
+5AA26C6C5C151F6D5CEC803F013F5CECC07F011F91C7FCA290380FE0FEA214F101075BA2
+903803FBF8A201015B14FF6D5BA26E5AA36E5AB1903803FFF8497F497FA26D5B6D5B2B38
+7EB730>I<007FB612F0A2B712F8A36C15F0A225077B7D30>95 D<EB7FF80003B5FC4814
+C04880488048809038E01FFC9038C003FE14016E7E6C487F6CC77FC8123FA491B5FC130F
+137F48B6FC12075A48EB803F383FF800EA7FE0138048C7FC5AA4157F7E6C6C13FFEBC003
+263FF01FEBFF8090B712C07E6C14EF000314876CD9FE01138026003FE0C8FC2A2A7BA830
+>97 D<EA3FFC487E12FFA2127F123F1200AAEC03FE91381FFF80027F13E091B57E90B612
+FC82ECFE079138F001FF4A6C13804A137F4AEB3FC091C7121F17E049140FA217F01607A8
+160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495C
+D97E7F13C0D93C1F90C7FC90380003FC2C3980B730>I<ECFFE0010713FC011F7F017F7F
+90B612804815C048EB807F3907FC003F485A485A49EB1F804848EB0F004990C7FC127F90
+C9FCA25A5AA87E7EA27F003FEC07C06DEB0FE06C7E6D131F6C6C14C0D807FE133F9039FF
+C0FF806C90B5FCC615006D5B011F13F801075B01011380232A7AA830>I<913801FFE04A
+7F5CA28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A481303380FFC00D81FF013
+3F49131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F003F141F6D133F6C7E6D
+137F390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01C713E0011F010313C0D9
+07FCC8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90B57E488048018113803A
+07FC007FC04848133FD81FE0EB1FE0150F484814F0491307127F90C7FCED03F85A5AB7FC
+A516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC0
+7FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013C0252A7CA830>I<EDFF8002
+0713E0021F13F05C4A13F891B5FC491387903803FE079138FC03F0903907F800C04A1300
+A8003FB612C04815E0B7FCA36C15C0260007F0C7FCB3A9003FB512FE4880B71280A26C15
+006C5C25397DB830>I<D903FC13FF90261FFF8713C04913DF90B712E05A5A2607FE0713
+8F903AF801FE07C048486C6CC7FCA2497F001F8149133FA56D137F000F92C7FC6D5BA26C
+6C485AEBFE0790B55A5D485C15C001DF5BD9C3FCC8FC01C0C9FCA37F7F6CB512F015FF6C
+15C04815F0488148813A3FE0001FFE0180130148C8127F007E8100FE168048151FA56C15
+3F007FED7F006D5C6C6C495A01F013076CB4EB7FFC6C90B55A6C5D000115C06C6C91C7FC
+011F13FC010113C02B3E7DA730>I<EA3FFC487E12FFA2127F123F1200AAEC01FE91380F
+FF80023F13E091B57E90B67EA29138FE07FCECF8039138E001FE14C0EC8000A291C7FCA2
+5BB3A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F3880B730
+>I<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9
+003FB612C04815E0B7FCA27E6C15C023397AB830>I<EA7FF8487EA4127F1200AB0203B5
+12804A14C017E0A217C06E14809139001FE0004B5A4B5A4BC7FC4A5A4A5AEC0FF84A5A4A
+5A4A5A4A5A01FD7F90B57E8114F7ECE3F8ECC1FCEC81FEEC00FF497F496D7E6F7E826F7E
+15076F7E6F7E3B7FFFF81FFFE0B56C4813F017F8A217F06C496C13E02D387FB730>107
+D<387FFFF8B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>I<02FC
+137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE07EB03
+F801FC13FE9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80B548018F13
+C0A46C486C01071380322881A730>I<EC01FE3A3FFC0FFF80267FFE3F13E000FF90B57E
+90B67E7E6C9038FE07FCC6EBF8039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF8
+1FFFF8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F2880A730>I<49B4FC010F
+13E0013F13F8497F90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0FF0A2
+4848EB07F8491303007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D1303003F15
+F86D13076D130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B512806C15006C6C
+13FC6D5B010F13E0010190C7FC272A7CA830>I<EC03FE3A3FFC1FFF80267FFE7F13E000
+FF90B57E90B612FC6C816CEBFE07C69038F001FF4A6C13804A137F4AEB3FC091C7121F17
+E049140FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDAF003130091
+38FC0FFE91B55A5E495C6E13C0021F90C7FCEC03FC91C9FCAD383FFFF8487FB57EA26C5B
+6C5B2C3C80A730>I<49B413F8010FEBC1FC013F13F14913FD48B6FC5A481381390FFC00
+7F49131F4848130F491307485A491303127F90C7FC15015A5AA77E7E15037FA26C6C1307
+150F6C6C131F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13
+C1903803FE0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>I<ED07F83A3FFF803F
+FF486DB51280B512C302CF14C06C13DF6C9038FFFC3FD8001F13E09238801F809238000F
+004A90C7FC5C5C5CA25CA45CAF003FB512FC4880B7FCA26C5C6C5C2A287EA730>I<9038
+1FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F91C7FC
+13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02001380007C
+147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14
+F0D8F83F13C026780FFEC7FC222A79A830>I<EB0780497E131FA9003FB612E04815F0B7
+FCA36C15E026001FC0C7FCB216F8ED01FCA5ECE003010FEB07F814F09138FC1FF06DB512
+E06D14C016806D14009038007FFCEC1FF026337EB130>I<D83FFCEB3FFC486C497E00FF
+14FFA2007F147F003F143F00001400B3A41501A2150315076D130F903A7FC07FFFF891B6
+12FC6D15FE7F6D4913FC6D9038F87FF8010001C0C7FC2F2880A630>I<3B3FFFC07FFF80
+486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005DA26D130F01
+7E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE01075BA214F101
+035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFFE0486D4813
+F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F
+80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF0
+7FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801C37FB580A2
+6C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06DB45A
+6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F890381F81
+FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C1148014E3
+A214C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C49
+6C13803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD91F805BA214C0010F
+49C7FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D147FA26E5A
+A36E5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387EB8FF0EBFF
+E06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316FC90C7EA0F
+F8ED1FF0ED3FE0ED7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A4990C7
+FC495A495A495A495A495A495A4948133E4890C7127F485A485A485A485A485A48B7FCB8
+FCA46C15FE28277DA630>I<ED3FF0913803FFF8140F5C147F16F09138FFF00092C7FC49
+5A5CB3A21303495A133F383FFFF0B55A5C91C8FC14C080003F7F38003FF813076D7E1301
+B3A2806D7E15F091387FFFF016F8141F8014039138003FF025477BBE30>I<EA7FE0EAFF
+FE6D7E8014F07EC66C7E13076D7E1301B3A2806D7E15E091387FFFE06E13F8801407141F
+5C4A13E09138FFE00092C7FC495A5CB3A21303495A137F387FFFF0B5FC14C05C49C8FCEA
+7FE025477BBE30>125 D E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fk cmbx12 14.4 49
+/Fk 49 122 df<151E153E157E15FCEC01F8EC07F0EC0FE0EC1FC01580143FEC7F0014FE
+1301495A5C1307495AA2495A133F5C137FA2495AA24890C7FCA25A5BA21207A2485AA312
+1F5BA3123FA25BA3127FA55B12FFB3A3127F7FA5123FA37FA2121FA37F120FA36C7EA212
+03A27F7EA26C7FA26D7EA2133F80131F6D7EA26D7E1303806D7E1300147FEC3F80141F15
+C0EC0FE0EC07F0EC01F8EC00FC157E153E151E1F7973D934>40 D<127012F8127C127E7E
+EA1FC06C7E6C7E12037F6C7E6C7E7F6D7E133F806D7EA26D7E80130780A26D7EA26D7EA2
+15807FA215C0A2EC7FE0A315F0143FA315F8A2141FA315FCA5140F15FEB3A315FC141FA5
+15F8A3143FA215F0A3147F15E0A3ECFFC0A21580A25B1500A2495AA2495AA25C130F5C49
+5AA2495A5C137F49C7FC5B485A485A5B1207485A485A48C8FC127E127C5A12701F7979D9
+34>I<EA07F0487E487E487E487EB51280A76C13006C5A6C5A6C5A6C5A1111769025>46
+D<913803FFC0023F13FC91B6FC010315C0010F018113F0903A1FFC003FF849486D7E4948
+6D7E49486D7E48496D138048496D13C0A24817E04890C813F0A34817F8A24817FC49157F
+A3007F17FEA600FF17FFB3A5007F17FEA6003F17FCA26D15FFA26C17F8A36C17F0A26C6D
+4913E0A26C6D4913C06C17806E5B6C6D4913006D6C495AD91FFCEB3FF8903A0FFF81FFF0
+6D90B55A01011580D9003F01FCC7FC020313C0384F7BCD43>48 D<157815FC1403140714
+1F14FF130F0007B5FCB6FCA2147F13F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43
+>I<EC3FFE0103B512E0010F14FC013F14FF90B712C048D9C07F7F2703FE000F13F8D807
+F801037FD80FE06D7F48486D7F48488001F01680486C6E13C07F486C6E13E07FA27013F0
+A56C5AA26C5AEA0FF0EA03C0C914E05EA218C05E1880A24C13005F4C5A4B5B5F4B5B5F4B
+5B4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7
+FC02FEEC03E0495A495A495A495AD91F80140749C8FC013E150F017FB7FC90B812C05A5A
+5A5A5A5A5AB9FC1880A4344E79CD43>I<91380FFFC091B512FC0107ECFF80011F15E090
+263FF8077F9026FF800113FC4848C76C7ED803F86E7E491680D807FC8048B416C080486D
+15E0A4805CA36C17C06C5B6C90C75AD801FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C0
+4B5BDBFFFEC7FC91B512F816E016FCEEFF80DA000713E0030113F89238007FFE707E7013
+807013C018E07013F0A218F8A27013FCA218FEA2EA03E0EA0FF8487E487E487EB57EA318
+FCA25E18F891C7FC6C17F0495C6C4816E001F04A13C06C484A1380D80FF84A13006CB44A
+5A6CD9F0075BC690B612F06D5D011F1580010302FCC7FCD9001F1380374F7ACD43>I<17
+7C17FEA2160116031607160FA2161F163F167FA216FF5D5DA25D5DED1FBFED3F3F153E15
+7C15FCEC01F815F0EC03E01407EC0FC01580EC1F005C147E147C5C1301495A495A5C495A
+131F49C7FC133E5B13FC485A5B485A1207485A485A90C8FC123E127E5ABA12C0A5C96C48
+C7FCAF020FB712C0A53A4F7CCE43>I<D80380150ED807E0157E01FEEC03FED9FFF0137F
+91B65A5F5F5F5F5F94C7FC5E5E16F016C093C8FC15F801E190C9FC01E0CAFCABEC0FFF02
+7F13F001E3B512FE01E76E7E9026FFF8077FDAC0017F49C713F8496E7E49143F4981496E
+7E6C481680C9FC18C08218E0A418F0A3EA0FE0487E487E487E487EA418E0A35B6C484A13
+C05B491680003EC85A003F17006C6C4A5A6D5D6C6C4A5AD807F8495BD803FE01075B2701
+FFC03F5B6C90B65A013F4AC7FC6D14F8010314C09026007FF8C8FC344F79CD43>I<ED0F
+FF92B512E0020780021F14FC91397FFE03FE903A01FFF0007F4901C0EB3F804990C7121F
+4948EC7FC0494814FF49484913E049485B01FF5C485BA2485B5AA2486F13C04A6D138048
+6F1300177E94C7FC5AA291CAFC5AA21508913801FFF8020713FFB54814C04A14F04AC66C
+7E023C6D7E4A6D7E4A6D7E7013804A15C0A24A15E07013F05C18F8A491C714FCA37EA67E
+A46C17F880A27E18F06C5D18E06C6D15C07E6E4913806C6D15006D6C495A6D6CEB7FFC6D
+B448485A6D90B55A010315C0010092C7FC023F13FC020713C0364F7ACD43>I<121F7F7F
+EBFF8091B81280A45A1900606060A2606060485F0180C86CC7FC007EC95A4C5A007C4B5A
+5F4C5A160F4C5A484B5A4C5A94C8FC16FEC812014B5A5E4B5A150F4B5AA24B5AA24B5A15
+FFA24A90C9FCA25C5D1407A2140FA25D141FA2143FA4147F5DA314FFA55BAC6D5BA2EC3F
+C06E5A395279D043>I<913807FFC0027F13FC0103B67E010F15E090261FFC0113F8903A
+3FE0003FFCD97F80EB0FFE49C76C7E48488048486E1380000717C04980120F18E0177FA2
+121F7FA27F7F6E14FF02E015C014F802FE4913806C7FDBC00313009238F007FE6C02F85B
+9238FE1FF86C9138FFBFF06CEDFFE017806C4BC7FC6D806D81010F15E06D81010115FC01
+0781011F81491680EBFFE748018115C048D9007F14E04848011F14F048487F4848130303
+0014F8484880161F4848020713FC1601824848157F173FA2171FA2170FA218F8A27F007F
+17F06D151FA26C6CED3FE0001F17C06D157F6C6CEDFF806C6C6C010313006C01E0EB0FFE
+6C01FCEBFFFC6C6CB612F06D5D010F1580010102FCC7FCD9000F13C0364F7ACD43>I<91
+380FFF8091B512F8010314FE010F6E7E4901037F90267FF8007F4948EB3FF048496D7E48
+4980486F7E484980824817805A91C714C05A7013E0A218F0B5FCA318F8A618FCA46C5DA3
+7EA25E6C7F6C5DA26C5D6C7F6C6D137B6C6D13F390387FF803011FB512E36D14C3010302
+8313F89039007FFE03EC00401500A218F05EA3D801F816E0487E486C16C0487E486D4913
+80A218005E5F4C5A91C7FC6C484A5A494A5A49495B6C48495BD803FC010F5B9027FF807F
+FEC7FC6C90B55A6C6C14F06D14C0010F49C8FC010013F0364F7ACD43>I<171F4D7E4D7E
+A24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA34C8083047F80167E8304FE804C7E030181
+16F8830303814C7E03078116E083030F814C7E031F81168083033F8293C77E4B82157E84
+03FE824B800201835D840203834B800207835D844AB87EA24A83A3DA3F80C88092C97E4A
+84A2027E8202FE844A82010185A24A820103854A82010785A24A82010F855C011F717FEB
+FFFCB600F8020FB712E0A55B547BD366>65 D<BA12C019FEF1FFC01AF01AFCD8000701F0
+C7000313FFDE007F7F737F070F7F737F878587858785A287A84F5BA263616361634F5B4F
+5B077F90C7FC4E485A060713F892B812E097C8FC861AF003F0C7000313FE9539003FFF80
+070F13E0737F07017F87737F747E1C807413C0A27413E0A31CF0A386A362A31CE0A2621C
+C0A250138097B5FC1C004F5B19074F5B073F13F04EB55ABC128098C7FC1AF81AC007F8C8
+FC54527CD160>I<932601FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F
+92B8EA803F0203DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC
+494848C9FC4901F8824949824949824949824949824990CA7E494883A2484983485B1B7F
+485B481A3FA24849181FA3485B1B0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C
+7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D
+6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1F
+F80203903AFFE001FFF0020091B612C0033F93C8FC030715FCDB007F14E0040101FCC9FC
+525479D261>I<BA7E19FCF1FF801AF01AFCD8000701F0C7000F13FF060014C0071F7F07
+0713F807017F737F747E747F747F86747F747F8886888688A2757EA31D8087A21DC0A51D
+E0A387A963A31DC0A51D80A2631D00A3515AA2646264505B6264505B505B5090C7FCF2FF
+FE4F5B07075B071F5B96B512C0060F91C8FCBB5A1AF01AC007FCC9FC19805B527CD167>
+I<BC1280A5D8000701F8C7000114C0F0001F19071901851A7F1A3F1A1FA2F20FE0A21A07
+A31A03A318F81BF01A01A497C7FC1701A317031707170F177F92B6FCA59238F8007F170F
+170717031701A317001B3EA31B7CA395C8FCA21BFCA21BF8A21A01A31A031BF01A071A0F
+A21A1F1A3FF27FE0F101FF1907191F0603B5FCBCFCA21BC0A34F517CD058>I<BB12FEA5
+D8000701F8C700077FF0007F191F190785858586861B80A21A1FA31A0FA41BC006F81307
+A497C7FCA31701A317031707170F177F92B6FCA59238F8007F170F170717031701A31700
+A795C9FCB3B812F8A54A517CD055>I<B812C0A5D8000701F8C7FCB3B3B3B2B812C0A52A
+527CD132>73 D<B812F8A5D8000701F8CAFCB3B3A91A7CA41AFC1AF8A51901A31903A219
+071AF0190FA2191F193F197F19FF180360183F4DB5FCBB12E0A546527CD151>76
+D<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90
+C7000313F0DA7FFC02007F494848ED7FFE4901E0ED1FFF49496F7F49496F7F4990C96C7F
+49854948707F4948707FA24849717E48864A83481B804A83481BC0A2481BE04A83A2481B
+F0A348497113F8A5B51AFCAF6C1BF86E5FA46C1BF0A26E5F6C1BE0A36C6D4D13C0A26C6D
+4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D
+6D4B90C7FC6D6D4B5A6D01FF02035B023F01E0011F13F0020F01FC90B512C0020390B7C8
+FC020016FC031F15E0030392C9FCDB001F13E0565479D265>79 D<BAFC19F819FF1AE086
+D8000701F0C7001F13FC060113FF726C13807313C0070F13E01BF0857313F81BFCA27313
+FEA41BFFA81BFEA31BFC61A21BF84F13F04F13E0614F13C04F13004E485A061F5B92B812
+F01AC04FC7FC19E003F8CBFCB3AEB812C0A550527CD15C>I<B912F0F0FF8019F819FF1A
+C0D8000701F0C714F0060F7F060113FE727F737F737F85737F87A2737FA387A863A26163
+63A24F5B4F5B4F90C8FC4F5A06035B060F13F095B512C092B8C9FC19F819E019F89226F0
+000313FE9439007FFF80727F727F727F727F727F8684A28684A787A71D1C75133EA38575
+137E73157C7513FC731401B86C6D9038F803F807039038FE07F07390B512E0736C14C008
+0F1400CEEA7FFC5F537CD164>82 D<91260FFF80130791B500F85B010702FF5B011FEDC0
+3F49EDF07F9026FFFC006D5A4801E0EB0FFD4801800101B5FC4848C87E48488149150F00
+1F824981123F4981007F82A28412FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15
+F86CECFF8016FC6CEDFFC017F06C16FC6C16FF6C17C06C836C836D826D82010F82130301
+0082021F16801400030F15C0ED007F040714E01600173F050F13F08383A200788200F882
+A3187FA27EA219E07EA26CEFFFC0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A
+5A02F8EC7FF0903B1FFFC003FFE0486C90B65AD8FC0393C7FC48C66C14FC48010F14F048
+D9007F90C8FC3C5479D24B>I<003FBC1280A59126C0003F9038C0007F49C71607D87FF8
+060113C001E08449197F49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6
+C994C7FCB3B3AC91B912F0A553517BD05E>I<B800C00103B612FCA5D8000701F8CAEBF0
+00F31F80B3B3B11B3FA26D97C7FC81637F1B7E6D6D17FE505A6E7E505A6E6D15076E4D5A
+6E6D4B5A6E6D4B5A6E01F84B5A6E6DDA03FFC8FC6E6CB46CEB0FFE6F9039F001FFF8030F
+90B65A030316C0DB007F92C9FC040F14F8DC007F13805E537CD167>I<EC7FFF0107B512
+F0013F14FE90B77E48D9E00F7F2703FE000113F0486C6D7F6EEB3FFC48826E131F83707F
+A36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020FB6FC91B7FC01071487013FEBF00749
+13803901FFFC004813F0485B485B485B4890C7FC5A5BA2485AA45EA26D5C007F151D163D
+6C6C02797F6C6D01F113F86C9026C003E1EBFFE06C9026F81FC014F06C90B5487EC6ED00
+1F011F01FC010713E0010101E090C8FC3C387CB641>97 D<EB3FF0B5FCA51203C6FCB3A4
+923801FFE0030F13FE033FEBFFC092B612F002F301017F913AF7F8003FFEDAFFE0EB0FFF
+03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285A28584A31A80AC1A00A44E5AA36118
+FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7FCDA87F0EB7FFC913A03FE03FFF849
+C6B612E0496D148049011F01FCC8FC90C7000313C041547BD24B>I<913801FFF8021FEB
+FF8091B612F0010315FC010F9038C00FFE903A1FFE0001FFD97FFC491380D9FFF05B4817
+C048495B5C5A485BA2486F138091C7FC486F1300705A4892C8FC5BA312FFAD127F7FA27E
+A2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC3F006C6D147ED97FFE5C6D6CEB
+03F8010F9038E01FF0010390B55A01001580023F49C7FC020113E033387CB63C>I<4DB4
+7E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91B6FC010315C7010F9038E03FE7
+4990380007F7D97FFC0101B5FC49487F4849143F484980485B83485B5A91C8FC5AA3485A
+A412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C6D49B5FC6D6C4914E0D93FFED9
+0FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9003F13F8020301C049C7FC4154
+7CD24B>I<913803FFC0023F13FC49B6FC010715C04901817F903A3FFC007FF849486D7E
+49486D7E4849130F48496D7E48178048497F18C0488191C7FC4817E0A248815B18F0A212
+FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01F06E14037E6C6DEC07E0A26C6D
+EC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE903A0FFFC03FF8010390B55A01
+0015C0021F49C7FC020113F034387CB63D>I<ED3FFC0203B5FC020F14C0023F14E09139
+FFF81FF0499038C03FF849EB807F49903800FFFC495A495AA2495AA2EE7FF8495AEE3FF0
+EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A7007FB512FEA52E547CD329>I<DA3FFF
+14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF7F90267FFC0F9038FF9FF09026FFE0
+01EBF83F48496C13E0484990387FF01F4890C7D83FF813E0489338FC0FC0F0078048486E
+6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D495A6C6D495A6C6D485BDAFC0F5B48
+90B6C8FCD803EF14FC01C314F02607C03F90C9FC91CBFCA2120FA37FA213F813FE90B7FC
+6C16F817FF18C06C836C836C836D828448B9FC12074848C700031480D81FF8EC003F4848
+150748486F13C083485A83A56D5D007F18806D5D003F18006C6C4B5AD80FFEED1FFC6C6C
+6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280010F03FCC7FC010115E0D9000F01FC
+C8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3A4EE1FFC93B512C0030314F0030F8092
+391FE07FFC92393F001FFE037C8003F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25C
+A45CB3ACB6D8F807B612C0A542537BD24B>I<137F497E000313E0487FA2487FA76C5BA2
+6C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3A6B612E0A51B547BD325>I<EB
+3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>108 D<D93FF0D91FFCEDFFE0B591
+B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A3F001F
+FE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3C0159E
+DAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03FB512FE
+A567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC92393F00
+1FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8
+F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F9038807F
+FC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C86C7E
+A24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA26C5F
+6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF807FFC
+6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F13FE
+033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F92C7
+6C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F616E4A
+5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F148003
+1F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380FFF80
+033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF1500
+14EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114
+D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980
+127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C
+816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00
+F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF
+C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414
+FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE
+07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203
+13802A4D7ECB34>I<D93FF8913801FFC0B50207B5FCA50003ED001FC61607B3AE5FA35F
+A2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3EBFFC0903A0FFFC03F836D90B512
+03010114FE6D6C13F8020701E091C7FC42377BB54B>I<B600F00107B5FCA5000101F8C8
+EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15FC6D5E6F13016D5E8117036D5E6F
+13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E177E023F147C6F13FC6E5C16816E
+5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA26F5A
+6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A5000101F0C701F0C7381FF8006E027F
+ED07E06C715DA26E023F150F017F705DA26E181F013F4B6C92C7FC6E606D70143E94B5FC
+6F177E6D4A6E137C03C001F315FC6D715B160303E001E114016D020702E05B03F013C06D
+71485A160F03F8D9807F13076D05F85B93381F003F03FC160F027F4902FC5BDBFE3E011F
+131F023F04FE90C8FC167EDBFF7C010F5B6E01FCECFF3E4C6D137E6E5FA24C7F6E5F4C7F
+6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA2033E6FC9FC5A367DB461>I<007FB500
+F090387FFFFEA5C66C48C7000F90C7FC6D6CEC07F86D6D5C6D6D495A6D4B5A6F495A6D6D
+91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6EEB8FE06EEBCFC06EEBFF806E91C9
+FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA01FD7F03F87F4A486C7E4A486C7E
+020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F495A49486D7F01076F7E49486E7E
+49486E7FEBFFF0B500FE49B612C0A542357EB447>I<B600F00107B5FCA5C601F8C8EA7F
+E06EED3F00A26D6C153E187E013F167C6E15FC6D5E6F13016D5E6F13036D5E8117076D6D
+5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E023F147C6F13FCA26E6D5A16816EEB
+C1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5AA35E
+150F5E151F93C9FC5DD81FC0133E486C137E486C137C486C13FC5D14015D14034A5A6C48
+485A49485A263FC07FCAFCEB81FE6CB45A6C13F000035BC690CBFC404D7DB447>I
+E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fl cmr10 10.95 83
+/Fl 83 124 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
+F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7
+FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11
+D<EC03FE91383FFF809138FE03E0903903F800F0D90FE013384948137C90393F8001FE90
+387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC000315011500B3AC486C
+497EB5D8F87F13FCA32E407EBF33>I<EC03FF023F13EE9138FE01FEEB03F090380FE003
+EB1FC0EB3F80EB7F005B5B150148481300AEB7FCA3D801FCC7FCB3AE486C497EB5D8F87F
+13FCA32E407EBF33>I<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F13
+3F391E600F3000001300A401E01370491360A3000114E04913C000031301010013804813
+03000EEB070048130E0018130C0038131C003013181C1C7DBE2D>34
+D<14E0A4EB07FC90383FFF8090B512E03901F8E3F03903E0E0FCD807C0133CD80F807FD8
+1F007F003E80003C1580007C140316C00078141F00F8143F157FA47EED3F806CEC0E0092
+C7FC127F138013C0EA3FF013FEEA1FFF6C13FC6C13FF6C14C06C806C6C13F8011F7F1303
+01007FECE7FF14E102E01380157F153FED1FC0A2003E140F127FD8FF801307A5130000FC
+158000F0140F1270007815005D6C141E153E6C5C6C5C3907C0E1F03903F8EFE0C6B51280
+D93FFEC7FCEB0FF8EB00E0A422497BC32D>36 D<013F1603D9FFC04B7E2601E0E0150F26
+07C070151F48486C4BC7FC023E157E48486C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA
+0F3F13FD007E903A070FFFF1F0007C0200EB03E0160000FC6D6C495A170F604DC8FC5F17
+3E5F17FC5F4C5A1603007CD907005B4C5A007E150F003E495C020E49C9FC003F5D6C4913
+3E260F803C5B023813FC6C6C485B3A01E0E001F03800FFC090273F0003E0133F90C70007
+ECFFC09339C001E0E0923A0F8007C070031F49487E0400143C033E90381F001C037E497F
+037C133E4B150F0201027E7F4B137C4A5A020702FCEB03805D4A5A141F92C7FC143E147E
+147C5CA2495A0103037CEB07005C4948147E010F033E5B4A160E49C8123F496F5B013E92
+380F803C49173801FC6F6C5A49923801E0E0496FB45A0160043FC7FC41497BC34C>I<EC
+0F80EC7FE0ECF870903803E0380107133CECC01CEB0F80011F131E150EA2EB3F00A55D14
+80A25D157815705D6D6C5A14C1ECC38002C7CAFC02EE91387FFFFCEB0FEC14FC4A020713
+C06D48913801FE006E5DEF00F06D7E01074B5A496C5D011D1503D939FF4A5A017093C7FC
+496D5B0001017F140E496C6C131E00036E131C2607801F143C000F6E5B001F6D6C137026
+3F000714F0486E485ADA03FE5B913801FF03486D495A0487C8FCED7FCFED3FFE6F481438
+6D5C150F007F6E6C14786D6D6C1470003F4A6C14F06D496C6C13E0001F91393E3FC0016C
+6C903AFC1FF003C03D07FC07F007FC1F800001B5D8C001B512006C6C90C7EA7FFCD90FF8
+EC0FF03E437CC047>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3
+12011380120313005A120E5A1218123812300B1C79BE19>I<1430147014E0EB01C0EB03
+801307EB0F00131E133E133C5B13F85B12015B1203A2485AA2120F5BA2121F90C7FCA25A
+A3123E127EA6127C12FCB2127C127EA6123E123FA37EA27F120FA27F1207A26C7EA21201
+7F12007F13787F133E131E7FEB07801303EB01C0EB00E014701430145A77C323>I<12C0
+7E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA27FA2133F7FA21480130FA214
+C0A3130714E0A6130314F0B214E01307A614C0130FA31480A2131F1400A25B133EA25BA2
+137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A145A7BC323>I<EB03C0A280
+5CA600F0140F00FC143F00FE147F00FF14FF393FC3C3FC390FE187F03903F18FC03900FD
+BF00EB3FFCEB0FF0EB03C0EB0FF0EB3FFCEBFDBF3903F18FC0390FE187F0393FC3C3FC39
+FF03C0FF00FE147F00FC143F00F0140F00001400A6805CA220277AC32D>I<121EEA7F80
+12FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A120E5A121812
+3812300B1C798919>44 D<B512FEA617067F961E>I<121EEA7F80A2EAFFC0A4EA7F80A2
+EA1E000A0A798919>I<ED0180ED03C01507A21680150FA216005DA2151E153EA2153C15
+7CA2157815F8A25D1401A25D1403A25D1407A25D140FA24AC7FCA2141E143EA2143C147C
+A2147814F8A25C1301A25C1303A25C1307A25C130FA291C8FC5BA2131E133EA25BA21378
+13F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2121E123EA2123C127CA21278
+12F8A25A1260225B7BC32D>I<EB01FE90380FFFC090383F03F090387C00F849137C4848
+7F48487F4848EB0F80A2000F15C04848EB07E0A3003F15F0A290C712034815F8A64815FC
+B3A26C15F8A56C6CEB07F0A3001F15E0A36C6CEB0FC0A26C6CEB1F80000315006C6C133E
+6C6C5B017C5B90383F03F090380FFFC0D901FEC7FC263F7DBC2D>I<EB01C01303130713
+1F137FEA07FFB5FC139FEAF81F1200B3B3ACEB7FF0B612F8A31D3D78BC2D>I<EB07FC90
+383FFF8090B512E03903F01FF83907C007FC390F0001FE001E6D7E001C1580003CEC7FC0
+5AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0153FA216C0157F168015FF16
+004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A495A495A495A49C71270133E13
+3C5B4914E0485A485A485A48C7120148B6FCA25A4815C0B7FCA3243D7CBC2D>I<EB07FC
+90383FFF809038F80FE03901E003F839078001FCD80F007F000E6D7E001E1580D81F8013
+7F486C14C07FA27F5BA2121F6C5AC8138015FF1600A24A5AA24A5A5DEC07E04A5A023FC7
+FCEB1FFCECFF809038000FE0EC07F86E7E6E7E6E7E1680ED7FC0A216E0153FA216F0A212
+0C123F487E487EA316E0A249137F6CC713C01278EDFF807E6C4913006C495A3907C007FC
+3903F80FF0C6B55A013F1380D907F8C7FC243F7CBC2D>I<150E151E153EA2157EA215FE
+1401A21403EC077E1406140E141CA214381470A214E0EB01C0A2EB0380EB0700A2130E5B
+A25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6
+FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB
+3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8496C7E49137E497F90C71380
+0006141FC813C0A216E0150FA316F0A3120C127F7F12FFA416E090C7121F12FC007015C0
+12780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90
+C7FCEB07F8243F7CBC2D>I<EC1FE0ECFFF8903803F03E90380FC00F90391F000780133E
+017EEB1FC049133F4848137F12035B12074848EB3F80ED1F00001F91C7FC5BA2123FA348
+5AA214FE903887FF8039FF8F07E090389C01F09038B800FC01B0137E13F0497F16804914
+C0A2ED1FE0A34914F0A5127FA6123F6D14E0A2121FED3FC0A26C6C1480A20007EC7F006C
+6C137E6C6C5B6C6C485A90387E07F06DB45A010F1380D903FCC7FC243F7CBC2D>I<1238
+123C123F90B612FCA316F85A16F016E00078C712010070EC03C0ED078016005D48141E15
+1C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25CA2147C147814F8A213015C13
+03A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D>I<EB03FC90381FFF80
+90387C07E09038F001F83901E0007C48487F48487F48C7FCED0F80121E16C0003E1407A4
+123FA26DEB0F807F6C6C131F6D140001FC133E6C6C5B9038FF80786C6D5A6CEBF3E06CEB
+FF806C91C7FC133F6D13C06D7F013F13F801787F48486C7E3903E01FFF48486C1380260F
+800313C048487E489038007FE0003E143F007E141F007CEC0FF01507481403A31501A46C
+15E0007C1403A2007E15C06C14076CEC0F806DEB1F006C6C133ED807F05B3901FC03F86C
+B512E0011F1380D903FCC7FC243F7CBC2D>I<EB03FCEB1FFF90387E07C09038FC03F048
+486C7E48486C7E4848137C000F147E4848137F81003F15805B007F15C0A2151F12FF16E0
+A516F0A5127F153FA36C7EA2001F147F120F6C6C13FF6D13DF000313013900F8039F9038
+7E0F1FD91FFE13E0EB07F090C7FCA2ED3FC0A41680157FD80F801400487E486C13FEA24A
+5A5D49485AEB8007391E000FE0001F495A260FC07FC7FC3803FFFE6C13F838003FC0243F
+7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121EEA7F80A2EAFFC0A4EA
+7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E12
+7FEAFF80A213C0A4127F121E1200A412011380A3120313005A1206120E120C121C5A1230
+A20A3979A619>I<EB1FF890B5FC3903E01FC0390F0007F0001EEB03F848EB01FC4814FE
+140000FE14FF7E7FA46CC7FC123EC7EA01FEA2EC03FCEC07F815F0EC0FC0EC1F80EC3F00
+143E5C147814F85C13015CA2495AA25CAB91C7FC90C8FCA8EB0780EB1FE0A2497EA46D5A
+A2EB078020407BBF2B>63 D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC
+15C3A291380381FEA34AC67EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA34948
+6D7E91B6FCA249819138800001A249C87EA24982010E157FA2011E82011C153FA2013C82
+0138151FA2017882170F13FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>
+65 D<B712FCEEFF8017F00001903980000FF86C6CC7EA03FE707E701380EF7FC0EF3FE0
+A2EF1FF0A218F8A3170F171FA318F0A2EF3FE0177F18C0EFFF804C1300EE03FCEE0FF8EE
+7FE091B6C7FC17E091C7EA07FCEE01FE933800FF80EF7FC0EF3FE0EF1FF018F8170F18FC
+1707A218FEA718FC170FA2EF1FF818F0173FEF7FE0EFFFC00403138048486C90380FFE00
+B85A17E094C7FC373E7DBD40>I<DB3FF01306912603FFFE130E020F9038FF801E913A3F
+F007E03E9139FF8000F8D903FEC7EA7C7ED907F8EC1EFE4948140FD93FE0140749481403
+495A91C812014848150012034848167E5B000F173EA24848161EA2123F5B180E127FA349
+160012FFAC127F7F180EA2123FA27F001F171E181C6C7EA20007173C6D16386C6C167800
+0117706C6C16F06EEC01E06D6C15C06D6C1403D90FF0EC07806D6CEC1F00D903FE143E90
+2600FF8013F891393FF007F0020FB512C0020391C7FC9138003FF037427BBF42>I<B712
+FCEEFF8017E000019039C0001FF86C6C48EB03FEEE00FF717E717EEF0FE084717E717E17
+0184717EA21980187F19C0A3F03FE0A519F0AB19E0A5F07FC0A21980A218FF19004D5AA2
+4D5A6017074D5A4D5AEF7FC04DC7FCEE03FE48486CEB1FF8B85A178004FCC8FC3C3E7DBD
+45>I<B912E0A300019038C000016C6C48EB001FEF0FF01703A217011700A31870A41838
+1638A41800A21678A216F81501150791B5FCA3EC8007150115001678A21638A2180EA318
+1C93C7FCA4183C1838A21878A318F8EF01F0A21707170F173F48486CEB03FFB912E0A337
+3E7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0170F1707A21703A31701
+A4EF00E0A21638A31800A31678A216F81501150791B5FCA3EC8007150115001678A21638
+A693C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C912603FFFE131C021F9038
+FF803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948143DD91FE0141F494814
+0F4948140701FF15034890C8FC491501485A000716005B000F177C5B001F173CA2485AA2
+181C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE00EF03FC123FA27F121F
+A26C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907F8141ED903FEEC3C7C90
+2600FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC9138003FF03C427BBF47>
+I<B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3A691B7FCA30280C7120F
+B3A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612F0A3C6EBF000EB3FC0B3
+B3B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713006E5A1401B3B3A6123F
+EA7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C495A6C495A2603E07E
+C7FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA3000101E0C7000F13802600
+7F80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C5A4C5A4CC8FC163E5E5E
+4B5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7FCEC878791388F03FE91
+389E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2707E707EA2707F717E84
+173F717E717EA2717E848419802601FFE04A13C0B600C090B6FCA3403E7DBD47>I<B612
+F8A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35FA25F5F5F4C5A16074848
+6C133FB8FCA3313E7DBD39>I<B500C093B512C0A300016D4BEBE000D8007F1880D977F0
+ED03BFA3D973F8ED073FA3D971FC150EA2D970FE151CA3027F1538A36E6C1470A36E6C14
+E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A26E6C130EA36E6C5BA3037F5BA26F6C5A
+A36F6C5AA392380FE1C0A3923807F380A26FB4C7FCA36F5AA213F8486C6D5AD807FFEFFF
+E0B500F80178017FEBFFC0A34A3E7CBD53>I<B56C91B512F88080D8007F030713006EEC
+01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA26E7E6E7EA26E7E6E7EA2
+6E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2EE7FC0EE3FE0A2EE1FF0
+EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F170FA2170701F81503487E
+D807FF1501B500F81400A218703D3E7DBD44>I<ED7FE0913807FFFE91391FC03F809139
+7E0007E04948EB03F8D907F0EB00FE4948147F49486E7E49486E7E49C86C7E01FE6F7E00
+018349150300038348486F7EA248486F7EA2001F188049167F003F18C0A3007F18E04916
+3FA300FF18F0AC007F18E06D167FA4003F18C0A26C6CEEFF80A36C6C4B1300A26C6C4B5A
+00035F6D150700015F6C6C4B5A6D5E6D6C4A5A6D6C4A5A6D6C4AC7FC6D6C14FED901FCEB
+03F8D9007FEB0FE091391FC03F80912607FFFEC8FC9138007FE03C427BBF47>I<B712F8
+EEFF8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F80EF3FC018E0A2EF1FF0
+A218F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3FF091B612C04CC7FC0280
+C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<B712C016FCEEFF800001D9C00013E06C6C
+48EB1FF0EE07FCEE01FE707E84717EA2717EA284A760177F606017FF95C7FCEE01FCEE07
+F8EE1FE0EEFF8091B500FCC8FC16F091388001FCED003FEE1FC0707E707E831603831601
+83A383A484A4F0C004190EA28218E0057F131E2601FFE0161CB600C0EB3FF094381FF838
+05071370CA3801FFE09438003F803F407DBD43>82 D<D907FC131890391FFF8038017FEB
+E0783901FC03F83A03F0007CF8D807C0133F4848130F001F140748C7FC003E1403007E14
+01A2007C140012FC1678A46C1538A27EA26C6C14007F7FEA3FF8EBFF806C13F86CEBFF80
+6C14F06C14FC6C14FF6C15C0013F14E0010714F0EB007F020713F89138007FFC150FED07
+FE15031501ED00FFA200E0157FA3163FA27EA3163E7E167E6C157C6C15FC6C15F86D1301
+6DEB03F06DEB07E0D8F9FCEB0FC03AF07F803F8090391FFFFE00D8E00713F839C0007FC0
+28427BBF33>I<003FB91280A3903AF0007FE001018090393FC0003F48C7ED1FC0007E17
+07127C00781703A300701701A548EF00E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7D
+BC42>I<B600C090B512F8A3000101E0C70007130026007F80EC01FC715A1870B3B3A401
+3F16F06E5DA21701011F5E80010F15036E4A5A010793C7FC6D6C5C6D6C141E6D6C5C027F
+14F86E6C485A91390FF00FE00203B51280020049C8FCED1FF03D407DBD44>I<B691380F
+FFFEA3000301E0020113E06C01809138007F806CEF3F00017F163E181C6E153C013F1638
+A26E1578011F1670A26D6C5DA26E140101075EA26E140301035EA26D6C4AC7FCA2806D15
+0EA26F131E027F141CA26F133C023F1438A26E6C5BA26F13F0020F5CA2EDF80102075CA2
+6E6C485AA2EDFE07020191C8FCA26F5A6E130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA2
+6F5AA36F5A3F407EBD44>I<B500FE017FB5D88007B5FCA3000301C0010101E0C713F86C
+90C849EC3FE07148EC0F807E7215006E143F017F190E84A26D6C60A24D7E6D6C60A2EFE7
+F86D6C60A2933801C3FC6E18F001076104037F6E0281140101036104077F17006D6C4D5A
+A2040EEB7F806D6C4DC7FCA24CEB3FC0DA7F80160EA24CEB1FE003C0161E023F171C0478
+14F0DBE070010F133C021F173804F014F84C1307DA0FF05EA2DBF1C0EB03FCDA07F95EA2
+DBFB80EB01FEDA03FF6F5AA293C8FCA26E5FA24B157F020094C8FCA24B81037C153EA203
+78151E0338151C58407EBD5D>I<B66C0103B51280A3000101F0C8EBF8006C6C48ED3FC0
+725A013F041EC7FC6D7E606D6C15386D6C1578606D6C5D6E14016D5E6D6D1303606E6C49
+C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C137817706E6C13F06F5B6E13016EEB83C05F
+ED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4ED1FFC020FB512FCA3413E7FBD44>89
+D<003FB712F8A391C7EA1FF013F801E0EC3FE00180EC7FC090C8FC003EEDFF80A2003C4A
+1300007C4A5A12784B5A4B5AA200704A5AA24B5A4B5AA2C8485A4A90C7FCA24A5A4A5AA2
+4A5AA24A5A4A5AA24A5A4A5AA24990C8FCA2495A4948141CA2495A495AA2495A495A173C
+495AA24890C8FC485A1778485A484815F8A24848140116034848140F4848143FED01FFB8
+FCA32E3E7BBD38>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C319>I<486C13C000
+03130101001380481303000EEB070048130E0018130C0038131C00301318007013380060
+1330A300E01370481360A400CFEB678039FFC07FE001E013F0A3007F133FA2003F131F01
+C013E0390F0007801C1C73BE2D>I<EAFFFCA4EA003CB3B3B3B3ABEAFFFCA40E5B7FC319>
+I<EA0180120313005A120E5A12181238123012701260A312E05AA412CFEAFFC013E0A312
+7FA2123F13C0EA0F000B1C7ABE19>96 D<EB0FF8EBFFFE3903F01F8039078007E0000F6D
+7E9038E001F8D81FF07F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5FC90381FF87FEB
+7F803801FC00EA07F8EA0FE0485A485AA248C7FCEE038012FEA315FFA3007F5BEC03BF3B
+3F80071F8700261FC00E13CF3A07F03C0FFE3A01FFF807FC3A003FC001F0292A7DA82D>
+I<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E09039FDE001F09039FF
+C000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA17F0A2160FA217
+E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F09039E0780FC09026
+C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F8017C131E4848131F
+4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3
+003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C6C137890383F01
+F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA3150715031501B114FF010713
+E190381F80F990387E003D49131FD803F81307485A49130348481301121F123F5B127FA2
+90C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C497ED8007C0179
+13F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01FE90380FFFC09038
+3F03F09038FC01F848486C7E4848137E48487F000F158049131F001F15C04848130FA212
+7F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E1501000F15C06C6C1303
+6DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7FC232A7EA828>
+I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F811401137FEC00FE01
+FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>I<167C903903F801
+FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC0600000F6EC7FC
+49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E03903FE0FC026071F
+FFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A
+0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E157E6C5D6C6C49
+5A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D7EA82D>I<EA01
+FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803F09138E001F8D9FD
+C07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E3F7DBE33>I<EA
+01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA3120712031201B3AC487EB512
+F0A3143E7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC147FEB7FFFA313
+017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03F0381E07C0380F
+FF803801FC00185185BD1C>I<EA01FC12FFA3120712031201B292B51280A392383FFC00
+16E0168093C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A7E13FD9038FFDFC0EC9F
+E0140F496C7E01FC7F496C7E1401816E7E81826F7E151F826F7EA282486C14FEB539F07F
+FFE0A32B3F7EBE30>I<EA01FC12FFA3120712031201B3B3B1487EB512F8A3153F7DBE1A>
+I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B7803F03C01F80007
+903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91C75B13FF4992C7FC
+A2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF
+903807FFC091381E07E091387803F000079038E001F82603F9C07F0001138001FB6D7E91
+C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14FF010713E090381F
+81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F15F04848EB01F8A2
+003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6C
+EB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFFF0010090C7FC282A
+7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F03A07FFC001FC6C49
+6C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3F
+C06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F8
+91C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C90381F80F090397F0038
+7C01FC131CD803F8130E4848EB0FFC150748481303121F485A1501485AA448C7FCAA6C7E
+A36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990383F81F190380FFF
+C1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807E000FFEB1FF8EC78
+7CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A35BB3A5487EB512FE
+A31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E1307003C1303127C
+0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0
+D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F07E14016C14E06C
+EB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA6133CA4137C
+A213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2
+EB7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D801FC14FE00FF147FA300
+0714030003140100011400B3A51501A31503120015076DEB06FF017E010E13806D4913FC
+90381FC078903807FFE00100903880FE002E297DA733>I<B539E00FFFE0A32707FE0003
+13006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2ECC007011F91C7FCA2
+90380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFEF001005BA2EC7FC0
+A36E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290FFE003FE00013C06C
+486D48EB3F806C4817006D010F141E00016F131C15076D163C00004A6C1338A2017F5E4B
+7E151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE0017F5BEDE03F02F0
+140701070387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF14DE6D15FCED0007
+6D5DA24A1303027E5CA2027C1301023C5C023813003D287EA642>I<B539F01FFFE0A300
+03D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7FC90380FE00EECF0
+1E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147BECF1FC903801E1FE
+ECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80486C80000F4A7EB5
+39803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313006C48EB01FC6F5A0001
+5D7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F130EA26D6C5AA2EC
+F83C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FCA2140EA2141E141C
+143C1438A2147800181370127EB45BA2495AA248485AD87E07C9FCEA780EEA3C3CEA1FF8
+EA07E02B3A7EA630>I<001FB61280A2EBE0000180140049485A001E495A121C4A5A003C
+495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A90393FC00380A2EB
+7F80EBFF005A5B484813071207491400485A48485BA248485B4848137F00FF495A90B6FC
+A221277EA628>I<B812F0A22C0280982D>I E
+%EndDVIPSBitmapFont
+%DVIPSBitmapFont: Fm cmbx12 20.736 11
+/Fm 11 115 df<137F3801FFC0000713F0487F487F487F487FA2B61280A96C1400A26C5B
+6C5B6C5B6C5B000113C06C6CC7FC1919729836>46 D<EE3FFF0307B512F8033F14FF4AB7
+12E0020716F8021F16FE4AD9F8077F91B5D8C00014C04991C7003F7F4901FC020F7F4949
+6E7F49496E7F49496E7F49496E7F4B81498590B5C96C7FA24849707FA24886A248864A82
+4886A34886A448864A82A4481B80A8B51AC0B3AA6C1B80A86C1B006E5EA46C62A36C62A3
+6C6D4C5BA36C62A26C6D4C5BA26C6E4B5B6D616F92B5FC6D96C7FC6D6D4A5B6D6D4A5B6D
+6D4A5B6D6D4A5B6D01FF023F5B6D02C090B55A6ED9F8075C021F90B648C8FC020716F802
+0116E06E6C1580030702F8C9FCDB003F90CAFC527379F061>48 D<93B57E031F14FC92B7
+7E020316F0020F16FC023F16FF4A8349B5D8800314E04901F8C7003F7F4901C0020F7F49
+90C800037FD91FFC6F7F49486F6C7E137F4A7013804948827313C05A4A821BE05AA28548
+7FA38080806E5E8003C017C08103F85D03FE17806F6C5C6C6F160004F05C04FC4A5A6C6F
+5D706C13FFDDE0015B6CDCF8035BDDFC0F13C06DDBFF1F5B6D93B5C7FC19FC6D17F06D5F
+6D17806D17E06D836D6C16FC6E16FF020F836E17E06E83020F83023F8391B97E49840107
+01F0178049D9C07F16C0013FD9801F16E049EB00074948010116F048497F4849023F15F8
+4849140F4A6E15FC48160148496E6C14FE4A151F488391C9120348050014FF193F498385
+00FF84854983A28586A3861BFEA27FA2007F1AFC7F1A7F1BF86C7FF2FFF06C7F6E4C13E0
+6C6D4C13C06C6D5E6E4C13806C6D4C13006C6D6CED7FFE6C02E04A485A013F01FC020F13
+F06D9026FFC001B55A010791B712806D95C7FC010017FC021F16F002071680DA007F02FC
+C8FC030191C9FC507378F061>56 D<93B5FC031F14F092B612FE02076F7E021F16E04A16
+F891B87E49DAF00713FF0107DA0001804901FC6D6C7F49496E7F49496E7F49496E7F90B5
+486E7F484A8048854891C86C7FA2487114805C481AC0A2487213E0A2484918F0A31BF8A2
+B5FCA27313FCA51BFEA71BFF61A27EA396B6FC7EA2806C5FA27E606C7F607E6C6E5C6CEF
+1FBF6D6DEC3F3F6D6D147F6D6D14FE6D6DEB01FC6D01FE130701019039FFC01FF86D91B5
+00F014FE023F15C06E15800203ECFE00DA007F13F8030713C092C9FC4F13FCA41BF8A31B
+F0D91FF093B5FCEB7FFC496C18E0487F486E17C06048801B804E1400A26260624E5B4B5C
+626C91C8485B4A4B5B4A92B55A6C01F04A91C7FC02804A5B6C01E0020F5B6D6C023F13F0
+02FE91B55A90273FFFE00F5C6D90B7C8FC010716FC6D16F0010016C0023F92C9FC020714
+F09126007FFECAFC507378F061>I<92383FFFF80207B612E0027F15FC49B87E010717E0
+011F83499026F0007F13FC4948C7000F7F90B502036D7E486E6D806F6D80727F486E6E7F
+8486727FA28684A26C5C72806C5C6D90C8FC6D5AEB0FF8EB03E090CAFCA70507B6FC041F
+B7FC0303B8FC157F0203B9FC021FECFE0391B612800103ECF800010F14C04991C7FC017F
+13FC90B512F04814C0485C4891C8FC485B5A485B5C5A5CA2B5FC5CA360A36E5DA26C5F6E
+5D187E6C6D846E4A48806C6D4A4814FC6C6ED90FF0ECFFFC6C02E090263FE07F14FE0001
+9139FC03FFC06C91B6487E013F4B487E010F4B1307010303F01301D9003F0280D9003F13
+FC020101F8CBFC57507ACE5E>97 D<903801FFFCB6FCA8C67E131F7FB3ADF0FFFC050FEB
+FFE0057F14FE0403B77E040F16E0043F16F84CD9007F13FE9226FDFFF001077F92B500C0
+01018094C86C13E004FC6F7F4C6F7F04E06F7F4C6F7F5E747F93C915804B7014C0A27414
+E0A21DF087A21DF8A31DFC87A41DFEAF1DFCA4631DF8A31DF098B5FC1DE0A25014C0A26F
+1980501400705D705F704B5B505B704B5B04FC4B5BDBE7FE92B55A9226C3FF8001035C03
+8101E0011F49C7FC9226807FFC90B55A4B6CB712F04A010F16C04A010393C8FC4A010015
+F84A023F14C090C9000301F0C9FC5F797AF76C>I<93383FFFF00307B612C0033F15F84A
+B712FE0207707E021F17E0027F8391B526FC001F7F010302C001037F4991C7487F49495C
+495B4901F04A7F5B90B55A485CA2485C4891C8FCA248715B5C48715B725B4A6F5B489438
+007FC0071FC7FC96C8FC5AA25CA3B5FCAF7E80A47E80A27E806CF11F80F23FC06C6E167F
+A26C6EEEFF80816C606C6E17006D6D4B5A6D6D15076D6D4B5A6D6D6C4A5A6D02E0EC7FF0
+6D02F849485A01009126FF801F5B6E91B6C7FC021F5E020716F8020116E06E6C15800307
+02FCC8FCDB003F13804A507ACE56>I<97380FFFE00607B6FCA8F00003190086B3AD9338
+3FFF800307B512F8033F14FF4AB712C0020716F0021F16FC027F9039FE007FFE91B500F0
+EB0FFF01030280010190B5FC4949C87E49498149498149498149498190B548814884484A
+8192CAFC5AA2485BA25A5C5AA35A5CA4B5FCAF7EA4807EA37EA2807EA26C7F616C6E5D6C
+606C80616D6D5D6D6D5D6D6D92B67E6D6D4A15FC010301FF0207EDFFFE6D02C0EB3FFE6D
+6C9039FC01FFF86E90B65A020F16C002031600DA007F14FC030F14E09226007FFEC749C7
+FC5F797AF76C>I<93387FFF80030FB512FC037FECFF804AB712E0020716F8021F16FE02
+7FD9F8077F49B5D8C000804991C7003F13E04901FC020F7F49496E7F49498049496E7F49
+496E7F90B55A48727E92C914804884485B1BC048841BE0485BA27313F05AA25C5AA21BF8
+85A2B5FCA391BAFCA41BF002F8CCFCA67EA3807EA47E806CF103F0F207F86C7F1A0F6C6E
+17F06C191F6F17E06C6E163F6D6DEE7FC06D6D16FF6D6D4B13806D6D4B13006D6D6CEC0F
+FE6D02E0EC3FFC6D02F8ECFFF86D9126FFC00F5B023F91B65A020F178002034CC7FC0200
+16F8031F15E0030392C8FCDB000F13E04D507BCE58>I<93381FFFE00303B6FC031F15E0
+92B712FC020316FF020F17C0023FD9FC0014F091B500C0010F13FC4991C700037F4901FC
+02007F010F496F13C049496F7F49496F7F4B8149496F7F90B5C96C7F4886A24849707F48
+1B80A248497014C0A2481BE0A348497113F0A3481BF8A5B51AFCAE6C1BF8A46C1BF06E94
+B5FCA36C1BE0A26C6D4C14C0A26C1B806E5E6C1B006C6E4B5BA26C6E4B5B6D6D4B5B6D6D
+4B5B6D6D4B5B6D6D92B55A6D01FF02035C6D02C0010F91C7FC010002FC90B512FC6E90B7
+5A021F17E00207178002014CC8FCDA003F15F0030392C9FCDB001F13E056507BCE61>
+111 D<902601FFF8EB07FEB691383FFFC094B512F00403804C14FE4C8093261FFC3F1380
+93263FE07F13C0DC7F80B5FCC66C5D011FDAFE0114E06DEBF9FC16F815FB16F016E015FF
+16C07114C05E72138095381FFE0093C76C5AF001E095C8FCA25DA65DB3B3A2B812F8A843
+4E7ACD4F>114 D E
+%EndDVIPSBitmapFont
+end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%PaperSize: A4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 94 1385 a Fm(barco)5 b(de)65 b(0.98)p 94 1451
+3780 34 v 2617 1548 a Fl(A)31 b(library)d(for)i(dra)m(wing)f(bar)h(co)s
+(des)3409 1656 y(Marc)m(h)h(2002)94 5367 y Fk(b)l(y)45
+b(Alessandro)h(Rubini)f(\()p Fj(rubini@gnu.org)p Fk(\))p
+94 5446 3780 17 v eop
+%%Page: 1 2
+1 1 bop 94 -116 a Fl(Chapter)30 b(2:)41 b(The)30 b(Underlying)e(Data)k
+(Structure)2012 b(1)94 365 y Fi(Barco)t(de)54 b(to)t(ols)219
+549 y Fl(This)29 b(\014le)g(do)s(cumen)m(ts)h(v)m(ersion)g(0.98)i(of)e
+(the)h(barco)s(de)f(library)e(and)i(sample)f(programs)h(\(Marc)m(h)i
+(2002\).)94 815 y Fi(1)81 b(Ov)l(erview)219 999 y Fl(The)26
+b Fh(barco)s(de)32 b Fl(pac)m(k)-5 b(age)29 b(is)d(mainly)f(a)i(C)f
+(library)f(for)h(creating)i(bar-co)s(de)f(output)f(\014les.)39
+b(It)27 b(also)f(includes)94 1099 y(a)31 b(command)f(line)f(fron)m
+(t-end)h(and)g(\(in)f(a)i(foreseeable)g(future\))f(a)h(graphic)e(fron)m
+(tend.)219 1215 y(The)k(pac)m(k)-5 b(age)35 b(is)d(designed)g(as)i(a)f
+(library)e(b)s(ecause)i(w)m(e)h(think)e(the)h(main)g(use)f(for)h(barco)
+s(de-generation)94 1315 y(to)s(ols)23 b(is)f(inside)f(more)i(featured)g
+(applications.)37 b(The)22 b(library)f(addresses)h(bar)h(co)s(de)g
+(prin)m(ting)e(as)i(t)m(w)m(o)i(distinct)94 1415 y(problems:)43
+b(creation)33 b(of)f(bar)g(information)e(and)i(actual)h(con)m(v)m
+(ersion)f(to)h(an)f(output)g(format.)47 b(T)-8 b(o)32
+b(this)g(aim)94 1514 y(w)m(e)25 b(use)f(an)g(in)m(termediate)g
+(represen)m(tation)g(for)g(bar)f(co)s(des,)j(whic)m(h)d(is)g(curren)m
+(tly)g(do)s(cumen)m(ted)h(in)e(the)j(`)p Fj(ps.c)p Fl(')94
+1614 y(source)31 b(\014le)e(\(not)i(in)f(this)f(do)s(cumen)m(t\).)219
+1730 y(Note)24 b(that)e(the)h(library)d(and)h(the)i(accompan)m(ying)g
+(material)e(is)h(released)g(according)g(to)h(the)f(GPL)h(license,)94
+1830 y(not)31 b(the)g(LGPL)f(one.)41 b(A)30 b(cop)m(y)h(of)g(the)g(GPL)
+f(is)f(included)f(in)h(the)i(distribution)26 b(tarball.)94
+2096 y Fi(2)81 b(The)53 b(Underlying)h(Data)g(Structure)219
+2280 y Fl(Ev)m(ery)33 b(barco)s(de-related)g(function)f(acts)i(on)f(a)h
+(data)f(structure)g(de\014ned)f(in)g(the)h(`)p Fj(barcode.h)p
+Fl(')e(header,)94 2380 y(whic)m(h)j(m)m(ust)h(b)s(e)f(included)e(b)m(y)
+j(an)m(y)g(C)g(source)g(\014le)f(that)h(uses)g(the)g(library)-8
+b(.)52 b(The)35 b(header)f(is)g(installed)f(b)m(y)94
+2480 y Fj(make)47 b(install)p Fl(.)219 2596 y(The)30
+b(de\014nition)e(of)i(the)h(data)g(structure)f(is)f(included)f(here)i
+(for)g(reference:)334 2717 y Fj(struct)47 b(Barcode_Item)d({)525
+2820 y(int)j(flags;)428 b(/*)47 b(type)g(of)g(encoding)f(and)h(other)f
+(flags)g(*/)525 2924 y(char)h(*ascii;)332 b(/*)47 b(malloced)f(*/)525
+3028 y(char)h(*partial;)236 b(/*)47 b(malloced)f(too)h(*/)525
+3132 y(char)g(*textinfo;)188 b(/*)47 b(information)e(about)h(text)h
+(placement)e(*/)525 3236 y(char)i(*encoding;)188 b(/*)47
+b(code)g(name,)f(filled)g(by)i(encoding)d(engine)h(*/)525
+3339 y(int)h(width,)f(height;)g(/*)h(output)f(units)h(*/)525
+3443 y(int)g(xoff,)g(yoff;)189 b(/*)47 b(output)f(units)h(*/)525
+3547 y(int)g(margin;)380 b(/*)47 b(output)f(units)h(*/)525
+3651 y(double)f(scalef;)237 b(/*)47 b(requested)f(scaling)f(for)i
+(barcode)f(*/)525 3754 y(int)h(error;)428 b(/*)47 b(an)h(errno-like)d
+(value,)h(in)h(case)f(of)i(failure)d(*/)334 3858 y(};)219
+3975 y Fl(The)e(exact)i(meaning)e(of)g(eac)m(h)i(\014eld)d(and)h(the)g
+(v)-5 b(arious)43 b(\015ags)g(implemen)m(ted)f(are)i(describ)s(ed)e(in)
+g(the)94 4074 y(follo)m(wing)29 b(sections.)219 4191
+y(Ev)m(en)38 b(though)f(y)m(ou)h(w)m(on't)g(usually)d(need)i(to)h(act)h
+(on)e(the)h(con)m(ten)m(ts)h(of)f(this)e(structure,)j(some)f(of)g(the)
+94 4290 y(functions)25 b(in)f(the)i(library)d(receiv)m(e)k(argumen)m
+(ts)e(that)i(are)f(directly)e(related)i(to)g(one)g(or)g(more)f(of)h
+(these)g(\014elds.)94 4524 y Fk(2.1)69 b(The)44 b(Fields)94
+4715 y Fj(int)30 b(flags;)574 4815 y Fl(The)42 b(\015ags)g(are,)j(as)d
+(y)m(ou)g(ma)m(y)g(susp)s(ect,)j(mean)m(t)d(to)h(sp)s(ecify)d(the)i
+(exact)h(b)s(eha)m(viour)e(of)h(the)574 4914 y(library)-8
+b(.)37 b(They)22 b(are)h(often)h(passed)e(as)h(an)g(argumen)m(t)g(to)h
+Fg(b)-5 b(ar)g(c)g(o)g(de)32 b Fl(functions)21 b(and)i(are)g(discussed)
+574 5014 y(in)30 b(the)g(next)h(section.)94 5147 y Fj(char)f(*ascii;)94
+5247 y(char)g(*partial;)94 5347 y(char)g(*textinfo;)94
+5446 y(char)g(*encoding;)574 5546 y Fl(These)41 b(\014elds)f(are)h(in)m
+(ternally)e(managed)i(b)m(y)g(the)h(library)-8 b(,)41
+b(and)g(y)m(ou)g(are)h(not)f(exp)s(ected)g(to)574 5645
+y(touc)m(h)31 b(them)g(if)e(y)m(ou)i(use)f(the)h(pro)m(vided)d(API.)j
+(All)e(of)h(them)h(are)g(allo)s(cated)f(with)f Fg(mal)5
+b(lo)-5 b(c)p Fl(.)p eop
+%%Page: 2 3
+2 2 bop 94 -116 a Fl(Chapter)30 b(2:)41 b(The)30 b(Underlying)e(Data)k
+(Structure)2012 b(2)94 365 y Fj(int)30 b(width;)94 465
+y(int)g(height;)574 565 y Fl(They)i(sp)s(ecify)e(the)i(width)d(and)i
+(heigh)m(t)h(of)g(the)f Fg(active)39 b Fl(barco)s(de)31
+b(region)g(\(i.e.,)i(excluding)d(the)574 664 y(white)21
+b(margin\),)i(in)d(the)i(units)e(used)h(to)h(create)i(output)d(data)h
+(\(for)g(p)s(ostscript)e(they)i(are)g(p)s(oin)m(ts,)574
+764 y(1/72th)33 b(of)d(an)g(inc)m(h,)g(0.352)j(mm\).)40
+b(The)30 b(\014elds)f(can)i(b)s(e)f(either)g(assigned)f(to)j(in)d(the)h
+(structure)574 863 y(or)37 b(via)e Fg(Bar)-5 b(c)g(o)g(de)p
+1161 863 28 4 v 36 w(Position\(\))p Fl(,)39 b(at)e(y)m(our)f(c)m
+(hoice.)59 b(If)35 b(either)h(v)-5 b(alue)35 b(or)h(b)s(oth)g(are)g
+(left)g(to)h(their)574 963 y(default)c(v)-5 b(alue)33
+b(of)g(zero,)i(the)e(output)g(engine)g(will)d(assign)j(default)f(v)-5
+b(alues)33 b(according)g(to)h(the)574 1063 y(sp)s(eci\014ed)g(scaling)f
+(factor.)55 b(If)35 b(the)g(sp)s(eci\014ed)e(width)g(is)h(bigger)g
+(than)h(needed)f(\(according)h(to)574 1162 y(the)g(scaling)f(factor\),)
+j(the)d(output)g(barco)s(de)h(will)c(b)s(e)j(cen)m(tered)i(in)d(its)h
+(requested)g(region.)52 b(If)574 1262 y(either)27 b(the)h(width)d(of)i
+(the)h(heigh)m(t)f(are)h(to)s(o)g(small)d(for)i(the)h(sp)s(eci\014ed)d
+(scale)j(factor,)h(the)e(output)574 1362 y(bar)j(co)s(de)h(will)d
+(expand)h(symmetrically)g(around)g(the)i(requested)f(region.)94
+1513 y Fj(int)g(xoff;)94 1612 y(int)g(yoff;)574 1738
+y Fl(The)53 b(\014elds)f(sp)s(ecify)g(o\013set)j(from)e(the)g(co)s
+(ordinate)h(origin)e(of)h(the)h(output)f(engine)g(\(for)574
+1838 y(p)s(ostscript,)46 b(p)s(osition)c(0,0)i(is)f(the)g(lo)m(w)m(er)h
+(left)f(corner)h(of)f(the)h(page\).)81 b(The)43 b(\014elds)f(can)i(b)s
+(e)574 1937 y(either)36 b(assigned)e(to)j(in)d(the)i(structure)f(or)g
+(via)g Fg(Bar)-5 b(c)g(o)g(de)p 2572 1937 V 36 w(Position\(\))p
+Fl(,)39 b(at)d(y)m(our)f(c)m(hoice.)57 b(The)574 2037
+y(o\013set)24 b(sp)s(eci\014es)d(where)h(the)g(white)g(margin)f(b)s
+(egins,)h(not)h(where)f(the)g(\014rst)g(bar)g(will)d(b)s(e)j(prin)m
+(ted.)574 2136 y(T)-8 b(o)31 b(prin)m(t)e(real)h(ink)f(to)j(the)e(sp)s
+(eci\014ed)f(p)s(osition)f(y)m(ou)j(should)d(set)j Fg(mar)-5
+b(gin)39 b Fl(to)31 b(0.)94 2288 y Fj(int)f(margin;)574
+2387 y Fl(The)36 b(white)g(margin)f(that)j(will)33 b(b)s(e)j(left)g
+(around)g(the)h(prin)m(ted)e(area)i(of)g(the)f(bar)g(co)s(de.)59
+b(The)574 2487 y(same)37 b(margin)e(is)g(applied)f(to)j(all)e(sides)g
+(of)h(the)g(prin)m(ted)f(area.)59 b(The)35 b(default)g(v)-5
+b(alue)36 b(for)g(the)574 2587 y(margin)30 b(is)f(de\014ned)g(in)g(`)p
+Fj(barcode.h)p Fl(')g(as)h Fj(BARCODE_DEFAULT_MARGIN)25
+b Fl(\(10\).)94 2738 y Fj(double)k(scalef;)574 2837 y
+Fl(The)j(enlarge)f(or)h(shrink)d(v)-5 b(alue)31 b(for)g(the)h(bar)f(co)
+s(de)h(o)m(v)m(er)h(its)e(default)g(dimension.)42 b(The)31
+b Fg(width)574 2937 y Fl(and)j Fg(sc)-5 b(alef)54 b Fl(\014elds)33
+b(in)m(teract)h(deeply)f(in)g(the)h(creation)h(of)f(the)g(output,)h
+(and)f(a)g(complete)h(de-)574 3037 y(scription)29 b(of)i(the)f(issues)f
+(app)s(ears)h(later)g(in)f(this)g(section.)94 3188 y
+Fj(int)h(error;)574 3288 y Fl(The)g(\014eld)f(is)h(used)f(when)h(a)g
+Fg(b)-5 b(ar)g(c)g(o)g(de)40 b Fl(function)29 b(fails)g(to)i(host)g(an)
+f Fj(errno)p Fl(-lik)m(e)f(in)m(teger)h(v)-5 b(alue.)94
+3515 y Ff(Use)42 b(of)f(the)g Fe(width)50 b Ff(and)41
+b Fe(sc)-6 b(alef)64 b Ff(\014elds.)219 3700 y Fl(A)29
+b(width)f(unit)f(is)h(the)i(width)d(of)i(the)h(thinnest)d(bar)i(and/or)
+g(space)h(in)d(the)j(c)m(hosen)f(co)s(de;)h(it)f(defaults)f(to)94
+3800 y(1)j(p)s(oin)m(t)f(if)f(the)i(output)e(is)h(p)s(ostscript)f(or)h
+(encapsulated)g(p)s(ostscript.)219 3926 y(Either)j(or)h(b)s(oth)g(the)g
+(co)s(de)h(width)d(and)i(the)g(scale)h(factor)g(can)g(b)s(e)e(left)h
+(unsp)s(eci\014ed)e(\(i.e.,)k(zero\).)53 b(The)94 4026
+y(library)28 b(deals)i(with)f(defaults)h(in)f(the)h(follo)m(wing)f(w)m
+(a)m(y:)94 4178 y Fg(Both)34 b(unsp)-5 b(e)g(ci\014e)g(d)574
+4277 y Fl(If)26 b(b)s(oth)f(the)h(width)e(and)h(the)h(scale)g(factor)g
+(are)g(unsp)s(eci\014ed,)f(the)h(scale)g(factor)g(will)d(default)i(to)
+574 4377 y(1.0)31 b(and)e(the)h(width)e(is)g(calculated)i(according)f
+(to)i(the)e(actual)h(width)e(of)i(the)g(bar)f(co)s(de)g(b)s(eing)574
+4477 y(prin)m(ted.)94 4628 y Fg(Width)34 b(unsp)-5 b(e)g(ci\014e)g(d)
+574 4728 y Fl(If)30 b(the)h(width)e(is)g(not)i(sp)s(eci\014ed,)d(it)i
+(is)g(calculated)g(according)g(to)i(the)e(v)-5 b(alues)30
+b(of)g Fg(sc)-5 b(alef)p Fl(.)94 4879 y Fg(Sc)g(ale)34
+b(factor)f(unsp)-5 b(e)g(ci\014e)g(d)574 4978 y Fl(If)32
+b(the)h(scale)f(factor)i(is)d(not)i(sp)s(eci\014ed,)e(it)h(will)d(b)s
+(e)j(c)m(hosen)h(so)f(that)h(the)g(generated)g(bar)f(co)s(de)574
+5078 y(exactly)g(\014ts)e(the)g(sp)s(eci\014ed)f(width.)94
+5229 y Fg(Both)34 b(sp)-5 b(e)g(ci\014e)g(d)574 5329
+y Fl(The)31 b(co)s(de)g(will)d(b)s(e)i(prin)m(ted)g(inside)e(the)j(sp)s
+(eci\014ed)f(region)g(according)h(to)g(the)g(sp)s(eci\014ed)f(scale)574
+5429 y(factor.)48 b(It)33 b(will)d(b)s(e)h(aligned)h(to)h(the)f(left.)
+47 b(If,)33 b(ho)m(w)m(ev)m(er,)h(the)f(c)m(hosen)g(width)e(is)g(to)s
+(o)i(small)e(for)574 5528 y(the)f(sp)s(eci\014c)e(bar)h(co)s(de)h(and)e
+(scaling)h(factor,)h(then)f(the)h(co)s(de)g(will)c(extend)k
+(symmetrically)d(to)574 5628 y(the)k(left)f(and)g(to)h(the)g(righ)m(t)f
+(of)g(the)h(c)m(hosen)g(region.)p eop
+%%Page: 3 4
+3 3 bop 94 -116 a Fl(Chapter)30 b(3:)41 b(The)30 b(Flags)2872
+b(3)94 365 y Fk(2.2)69 b(The)44 b(In)l(termediate)j(Represen)l(tation)
+219 565 y Fl(The)23 b(enco)s(ding)g(functions)f(prin)m(t)g(their)g
+(output)h(in)m(to)h(the)g Fj(partial)d Fl(and)i Fj(texinfo)f
+Fl(\014elds)g(of)h(the)h(barco)s(de)94 664 y(data)g(structure.)37
+b(Those)23 b(\014elds,)g(together)h(with)d(p)s(osition)g(information,)h
+(are)h(then)f(used)g(to)i(generate)g(actual)94 764 y(output.)41
+b(This)28 b(is)i(an)g(informal)e(description)h(of)h(the)h(in)m
+(termediate)f(format.)219 905 y(The)38 b(\014rst)g(c)m(har)h(in)f
+Fj(partial)f Fl(tells)g(ho)m(w)i(m)m(uc)m(h)g(extra)g(space)h(to)f(add)
+f(to)i(the)f(left)f(of)h(the)g(bars.)65 b(F)-8 b(or)94
+1005 y(EAN-13,)33 b(it)d(is)f(used)h(to)h(lea)m(v)m(e)h(space)f(to)g
+(prin)m(t)e(the)i(\014rst)f(digit,)f(other)i(co)s(des)f(ma)m(y)h(ha)m
+(v)m(e)h('0')f(for)g(no-extra-)94 1104 y(space-needed.)219
+1245 y(The)23 b(next)h(c)m(haracters)i(are)e(alternating)f(bars)g(and)h
+(spaces,)h(as)g(m)m(ultiples)c(of)j(the)g(base)g(dimension)d(whic)m(h)
+94 1345 y(is)35 b(1)g(unless)f(the)i(co)s(de)f(is)f(rescaled.)56
+b(Rescaling)34 b(is)h(calculated)g(as)g(the)h(ratio)f(from)g(the)h
+(requested)f(width)94 1445 y(and)e(the)h(calculated)f(width.)48
+b(Digits)33 b(represen)m(t)g(bar/space)h(dimensions.)47
+b(Lo)m(w)m(er-case)35 b(letters)f(represen)m(t)94 1544
+y(those)d(bars)f(that)h(should)e(extend)i(lo)m(w)m(er)f(than)h(the)f
+(others:)41 b('a')32 b(is)d(equiv)-5 b(alen)m(t)30 b(to)h('1',)h('b')f
+(is)e('2')i(and)f(so)h(on)94 1644 y(up)e(to)h('i')g(whic)m(h)e(is)g
+(equiv)-5 b(alen)m(t)29 b(to)i('9'.)41 b(Other)29 b(letters)h(will)d(b)
+s(e)i(used)g(for)g(enco)s(ding-sp)s(eci\014c)f(meanings,)h(as)94
+1743 y(so)s(on)i(as)f(I)g(implemen)m(t)f(them.)219 1885
+y(The)35 b Fj(textinfo)e Fl(string)h(is)h(made)g(up)f(of)i(\014elds)e
+Fj(\045lf:\045lf:\045c)e Fl(separated)k(b)m(y)g(blank)e(space.)56
+b(The)35 b(\014rst)94 1984 y(in)m(teger)f(is)e(the)h(x)g(p)s(osition)e
+(of)i(the)h(c)m(haracter,)h(the)e(second)g(is)f(the)i(fon)m(t)f(size)g
+(\(b)s(efore)g(rescaling\))f(and)h(the)94 2084 y(c)m(har)e(item)f(is)g
+(the)g(c)m(haracter)i(to)f(b)s(e)f(prin)m(ted.)219 2225
+y(Both)39 b(the)g Fj(partial)d Fl(and)i Fj(textinfo)f
+Fl(strings)g(ma)m(y)i(include)d(\\)p Fj(-)p Fl(")j(or)g(\\)p
+Fj(+)p Fl(")g(as)g(sp)s(ecial)e(c)m(haracters)j(\(in)94
+2325 y Fj(textinfo)25 b Fl(the)j(c)m(har)f(should)e(b)s(e)i(a)g
+(stand-alone)g(w)m(ord\).)40 b(They)26 b(state)j(where)d(the)i(text)g
+(should)d(b)s(e)h(prin)m(ted:)94 2424 y(b)s(elo)m(w)34
+b(the)g(bars)f(\(\\)p Fj(-)p Fl(",)j(default\))e(or)g(ab)s(o)m(v)m(e)h
+(the)f(bars.)51 b(This)32 b(is)h(used,)i(for)e(example,)i(to)g(prin)m
+(t)e(the)h(add-5)94 2524 y(and)27 b(add-2)g(co)s(des)g(to)h(the)f(righ)
+m(t)f(of)i(UPC)e(or)h(EAN)g(co)s(des)g(\(the)h(add-5)f(extension)g(is)f
+(mostly)g(used)g(in)g(ISBN)94 2623 y(co)s(des\).)94 2939
+y Fi(3)81 b(The)53 b(Flags)219 3213 y Fl(The)30 b(follo)m(wing)f
+(\015ags)h(are)h(supp)s(orted)e(b)m(y)h(v)m(ersion)g(0.98)i(of)e(the)h
+(library:)94 3387 y Fj(BARCODE_ENCODING_MASK)574 3487
+y Fl(The)f(mask)h(is)e(used)h(to)h(extract)h(the)e(enco)s(ding-t)m(yp)s
+(e)g(iden)m(ti\014er)f(from)h(the)g Fg(\015ags)39 b Fl(\014eld.)94
+3653 y Fj(BARCODE_EAN)94 3753 y(BARCODE_UPC)94 3852 y(BARCODE_ISBN)94
+3952 y(BARCODE_128B)94 4051 y(BARCODE_128C)94 4151 y(BARCODE_128)94
+4251 y(BARCODE_128RAW)94 4350 y(BARCODE_39)94 4450 y(BARCODE_I25)94
+4550 y(BARCODE_CBR)94 4649 y(BARCODE_MSI)94 4749 y(BARCODE_PLS)94
+4848 y(BARCODE_93)574 4948 y Fl(The)d(curren)m(tly)f(supp)s(orted)g
+(enco)s(ding)g(t)m(yp)s(es:)52 b(EAN)36 b(\(13)i(digits,)e(8)h(digits,)
+f(13)h Fj(+)f Fl(2)g(add-on)574 5048 y(and)26 b(13)i
+Fj(+)e Fl(5)h(add-on\),)g(UPC)f(\(UPC-A,)i(UPC-E,)e(UPC-A)h(with)e(2)i
+(or)f(5)h(digit)f(add-on\),)h(ISBN)574 5147 y(\(with)e(or)f(without)g
+(the)i(5-digit)e(add-on\),)i(CODE128-B)h(\(the)e(whole)g(set)g(of)g
+(prin)m(table)e(ASCI)s(I)574 5247 y(c)m(haracters\),)36
+b(CODE128-C)d(\(t)m(w)m(o)i(digits)c(enco)s(ded)h(b)m(y)h(eac)m(h)h
+(barco)s(de)e(sym)m(b)s(ol\),)h(CODE128)574 5347 y(\(all)41
+b(ASCI)s(I)f(v)-5 b(alues\),)44 b(a)e(\\ra)m(w-input")f(pseudo-co)s(de)
+h(that)g(generates)h(CODE128)f(output,)574 5446 y(CODE39)32
+b(\(alphan)m(umeric\),)e Fj(")p Fl(in)m(terlea)m(v)m(ed)i(2)f(of)h(5)p
+Fj(")f Fl(\(n)m(umeric\),)g(Co)s(dabar)f(\(n)m(umeric)g(plus)g(a)574
+5546 y(few)36 b(sym)m(b)s(ols\),)g(MSI)f(\(n)m(umeric\))g(and)g
+(Plessey)g(\(hex)g(digits\).)55 b(See)36 b(Chapter)f(6)h([Supp)s(orted)
+574 5645 y(Enco)s(dings],)30 b(page)h(7.)p eop
+%%Page: 4 5
+4 4 bop 94 -116 a Fl(Chapter)30 b(4:)41 b(F)-8 b(unctions)30
+b(Exp)s(orted)g(b)m(y)g(the)h(Library)1871 b(4)94 365
+y Fj(BARCODE_ANY)574 465 y Fl(This)27 b(sp)s(ecial)g(enco)s(ding)g(t)m
+(yp)s(e)h(\(represen)m(ted)h(b)m(y)f(a)h(v)-5 b(alue)27
+b(of)i(zero,)h(so)e(it)g(will)d(b)s(e)j(the)g(default\))574
+565 y(tells)33 b(the)g(enco)s(ding)f(pro)s(cedure)g(to)h(lo)s(ok)g(for)
+g(the)g(\014rst)f(enco)s(ding)g(t)m(yp)s(e)i(that)f(can)h(deal)e(with)
+574 664 y(a)44 b(textual)f(string.)77 b(Therefore,)46
+b(a)d(11-digit)f(co)s(de)h(will)e(b)s(e)h(prin)m(ted)f(as)i(UPC)g(\(as)
+g(w)m(ell)f(as)574 764 y(6-digit,)48 b(11)p Fj(+)p Fl(2)e(and)e(11)p
+Fj(+)p Fl(5\),)49 b(a)c(12-digit)g(\(or)g(7-digit,)i(or)e(12)p
+Fj(+)p Fl(2)h(or)e(12)p Fj(+)p Fl(5\))i(as)f(EAN13,)k(an)574
+863 y(ISBN)39 b(co)s(de)f(\(with)g(or)g(without)f(h)m(yphens,)i(with)e
+(or)i(without)e(add-5\))i(will)d(b)s(e)h(enco)s(ded)h(in)574
+963 y(its)e(EAN13)i(represen)m(tation,)g(an)e(ev)m(en)h(n)m(um)m(b)s
+(er)e(of)i(digits)e(is)g(enco)s(ded)h(using)f(CODE128C)574
+1063 y(and)45 b(a)h(generic)f(string)f(is)h(enco)s(ded)g(using)f
+(CODE128B.)j(Since)d(co)s(de-39)j(o\013ers)e(a)h(m)m(uc)m(h)574
+1162 y(larger)38 b(represen)m(tation)f(for)h(the)f(same)h(text)h
+(string,)f(co)s(de128-b)h(is)e(preferred)f(o)m(v)m(er)j(co)s(de39)574
+1262 y(for)31 b(alphan)m(umeric)d(strings.)94 1411 y
+Fj(BARCODE_NO_ASCII)574 1510 y Fl(Instructs)f(the)h(engine)e(not)i(to)g
+(prin)m(t)e(the)i(ascii)e(string)h(on)g(output.)39 b(By)28
+b(default)e(the)i(bar)f(co)s(de)574 1610 y(is)j(accompanied)g(with)f
+(an)i(ascii)e(v)m(ersion)h(of)h(the)f(text)i(it)d(enco)s(des.)94
+1759 y Fj(BARCODE_NO_CHECKSUM)574 1858 y Fl(Instructs)j(the)h(engine)f
+(not)h(to)g(add)f(the)h(c)m(hec)m(ksum)g(c)m(haracter)h(to)f(the)g
+(output.)47 b(Not)33 b(all)f(the)574 1958 y(enco)s(ding)23
+b(t)m(yp)s(es)g(can)h(drop)f(the)h(c)m(hec)m(ksum;)i(those)e(where)f
+(the)h(c)m(hec)m(ksum)g(is)f(mandatory)g(\(lik)m(e)574
+2058 y(EAN)31 b(and)f(UPC\))g(just)g(ignore)g(the)h(\015ag.)94
+2206 y Fj(BARCODE_OUTPUT_MASK)574 2306 y Fl(The)f(mask)h(is)e(used)h
+(to)h(extract)h(the)e(output-t)m(yp)s(e)h(iden)m(ti\014er)d(from)i(the)
+h Fg(\015ags)38 b Fl(\014eld.)94 2455 y Fj(BARCODE_OUT_PS)94
+2554 y(BARCODE_OUT_EPS)94 2654 y(BARCODE_OUT_PCL)94 2753
+y(BARCODE_OUT_PCL_III)574 2853 y Fl(The)48 b(curren)m(tly)f(supp)s
+(orted)f(enco)s(ding)g(t)m(yp)s(es:)76 b(full-page)47
+b(p)s(ostscript)f(and)h(encapsulated)574 2953 y(p)s(ostscript;)h(PCL)41
+b(\(prin)m(t)g(command)i(language,)j(for)c(HP)g(prin)m(ters\))f(and)h
+(PCL-I)s(I)s(I)e(\(same)574 3052 y(as)31 b(PCL,)f(but)g(uses)g(a)g(fon)
+m(t)h(not)g(a)m(v)-5 b(ailable)30 b(on)g(older)f(prin)m(ters\).)94
+3201 y Fj(BARCODE_OUT_NOHEADERS)574 3301 y Fl(The)f(\015ag)h(instructs)
+d(the)j(prin)m(ting)d(engine)h(not)i(to)f(prin)m(t)f(the)h(header)g
+(and)g(fo)s(oter)h(part)e(of)i(the)574 3400 y(\014le.)40
+b(This)29 b(mak)m(es)i(sense)f(for)f(the)i(p)s(ostscript)d(engine)i
+(but)f(migh)m(t)h(not)h(mak)m(e)g(sense)f(for)g(other)574
+3500 y(engines;)k(suc)m(h)f(other)h(engines)e(will)e(silen)m(tly)i
+(ignore)g(the)i(\015ag)f(just)g(lik)m(e)f(the)h(PCL)f(bac)m(k-end)574
+3600 y(do)s(es.)94 3881 y Fi(4)81 b(F)-13 b(unctions)52
+b(Exp)t(orted)h(b)l(y)g(the)g(Library)219 4103 y Fl(The)41
+b(functions)f(included)f(in)h(the)i(barco)s(de)f(library)e(are)j
+(declared)f(in)g(the)g(header)h(\014le)e Fj(barcode.h)p
+Fl(.)94 4203 y(They)30 b(p)s(erform)f(the)i(follo)m(wing)e(tasks:)94
+4352 y Fj(struct)g(Barcode_Item)e(*Barcode_Create\(char)e(*text\);)574
+4451 y Fl(The)35 b(function)e(creates)j(a)f(new)g(barco)s(de)f(ob)5
+b(ject)36 b(to)f(deal)g(with)e(a)i(sp)s(eci\014ed)e(text)j(string.)53
+b(It)574 4551 y(returns)27 b(NULL)h(in)e(case)j(of)f(failure)e(and)i(a)
+g(p)s(oin)m(ter)f(to)h(a)h(barco)s(de)e(data)i(structure)e(in)g(case)i
+(of)574 4651 y(success.)94 4799 y Fj(int)h(Barcode_Delete\(struct)25
+b(Barcode_Item)i(*bc\);)574 4899 y Fl(Destro)m(y)32 b(a)f(barco)s(de)f
+(ob)5 b(ject.)42 b(Alw)m(a)m(ys)31 b(returns)e(0)h(\(success\))94
+5048 y Fj(int)g(Barcode_Encode\(struct)25 b(Barcode_Item)i(*bc,)i(int)g
+(flags\);)574 5147 y Fl(Enco)s(de)h(the)h(text)g(included)d(in)h(the)h
+Fg(b)-5 b(c)35 b Fl(ob)5 b(ject.)42 b(V)-8 b(alid)29
+b(\015ags)i(are)f(the)h(enco)s(ding)e(t)m(yp)s(e)h(\(other)574
+5247 y(\015ags)45 b(are)f(ignored\))g(and)g(BAR)m(CODE)p
+1994 5247 28 4 v 33 w(NO)p 2166 5247 V 33 w(CHECKSUM)f(\(other)i
+(\015ags)f(are)h(silen)m(tly)d(ig-)574 5347 y(nored\);)35
+b(if)e(the)g(\015ag)h(argumen)m(t)g(is)e(zero,)j Fj(bc->flags)c
+Fl(will)g(apply)-8 b(.)49 b(The)32 b(function)g(returns)h(0)574
+5446 y(on)h(success)g(and)f(-1)i(in)d(case)j(of)f(error.)51
+b(After)34 b(successful)e(termination)h(the)h(data)g(structure)574
+5546 y(will)21 b(host)i(the)h(description)d(of)j(the)f(bar)g(co)s(de)g
+(and)g(its)g(textual)g(represen)m(tation,)i(after)f(a)g(failure)574
+5645 y(the)31 b Fj(error)e Fl(\014eld)g(will)f(include)g(the)i(reason)h
+(of)f(the)h(failure.)p eop
+%%Page: 5 6
+5 5 bop 94 -116 a Fl(Chapter)30 b(5:)41 b(The)30 b Fg(b)-5
+b(ar)g(c)g(o)g(de)40 b Fl(fron)m(tend)30 b(program)2063
+b(5)94 365 y Fj(int)30 b(Barcode_Print\(struct)25 b(Barcode_Item)i
+(*bc,)i(FILE)g(*f,)h(int)f(flags\);)574 465 y Fl(Prin)m(t)39
+b(the)g(bar)g(co)s(de)g(describ)s(ed)e(b)m(y)i Fj(bc)g
+Fl(to)h(the)f(sp)s(eci\014ed)f(\014le.)66 b(V)-8 b(alid)38
+b(\015ags)h(are)h(the)f(out-)574 565 y(put)25 b(t)m(yp)s(e,)h
+Fj(BARCODE_NO_ASCII)21 b Fl(and)j Fj(BARCODE_OUT_NOHEADERS)p
+Fl(,)d(other)k(\015ags)g(are)h(ignored.)574 664 y(If)39
+b(an)m(y)h(of)f(these)h(\015ags)g(is)e(zero,)43 b(it)c(will)d(b)s(e)j
+(inherited)e(from)i Fj(bc->flags)d Fl(whic)m(h)i(therefore)574
+764 y(tak)m(es)f(precedence.)57 b(The)35 b(function)g(returns)f(0)i(on)
+f(success)h(and)f(-1)h(in)e(case)j(of)f(error)f(\(with)574
+863 y Fj(bc->error)28 b Fl(set)j(accordingly\).)40 b(In)29
+b(case)j(of)e(success,)h(the)f(bar)g(co)s(de)g(is)f(prin)m(ted)g(to)i
+(the)f(sp)s(ec-)574 963 y(i\014ed)f(\014le,)h(whic)m(h)f(w)m(on't)i(b)s
+(e)f(closed)g(after)h(use.)94 1115 y Fj(int)f(Barcode_Position\(struct)
+24 b(Barcode_Item)j(*bc,)i(int)h(wid,)f(int)g(hei,)h(int)f(xoff,)g(int)
+h(yoff,)94 1215 y(double)f(scalef\);)574 1315 y Fl(The)h(function)f(is)
+h(a)h(shortcut)f(to)h(assign)f(v)-5 b(alues)29 b(to)j(the)e(data)h
+(structure.)94 1467 y Fj(int)f(Barcode_Encode_and_Print)o(\(cha)o(r)24
+b(*text,)29 b(FILE)g(*f,)h(int)f(wid,)g(int)h(hei,)f(int)h(xoff,)f(int)
+94 1567 y(yoff,)g(int)h(flags\);)574 1666 y Fl(The)38
+b(function)e(deals)h(with)g(the)h(whole)f(life)f(of)i(the)g(barco)s(de)
+g(ob)5 b(ject)39 b(b)m(y)e(calling)g(the)h(other)574
+1766 y(functions;)30 b(it)g(uses)g(all)f(the)h(sp)s(eci\014ed)f
+(\015ags.)94 1918 y Fj(int)h(Barcode_Version\(char)25
+b(*versionname\);)574 2018 y Fl(Returns)g(the)g(curren)m(t)f(v)m
+(ersion)h(as)g(an)g(in)m(teger)g(n)m(um)m(b)s(er)f(of)h(the)g(form)f
+(ma)5 b(jor)25 b(*)h(10000)h Fj(+)d Fl(minor)574 2118
+y(*)k(100)h Fj(+)e Fl(release.)40 b(Therefore,)28 b(v)m(ersion)f
+(1.03.5)i(will)c(b)s(e)i(returned)f(as)h(10305)j(and)d(v)m(ersion)f
+(0.53)574 2217 y(as)i(5300.)41 b(If)27 b(the)h(argumen)m(t)f(is)f
+(non-n)m(ull,)g(it)h(will)e(b)s(e)h(used)h(to)h(return)e(the)h(v)m
+(ersion)g(n)m(um)m(b)s(er)f(as)574 2317 y(a)h(string.)39
+b(Note)28 b(that)f(the)f(same)h(information)e(is)h(a)m(v)-5
+b(ailable)26 b(from)g(t)m(w)m(o)i(prepro)s(cessor)d(macros:)574
+2416 y Fj(BARCODE_VERSION)i Fl(\(the)k(string\))e(and)h
+Fj(BARCODE_VERSION_INT)25 b Fl(\(the)31 b(in)m(teger)g(n)m(um)m(b)s
+(er\).)94 2705 y Fi(5)81 b(The)53 b Fd(b)-8 b(ar)g(c)g(o)g(de)65
+b Fi(fron)l(tend)51 b(program)219 2938 y Fl(The)26 b
+Fc(barco)s(de)g Fl(program)g(is)f(a)h(fron)m(t-end)g(to)h(access)h
+(some)e(features)h(of)f(the)g(library)e(from)i(the)g(command)94
+3037 y(line.)63 b(It)38 b(is)g(able)f(to)i(read)f(user)g(supplied)d
+(strings)i(from)h(the)g(command)g(line)e(or)j(a)f(data)h(\014le)e
+(\(standard)94 3137 y(input)29 b(b)m(y)h(default\))g(and)g(enco)s(de)g
+(all)g(of)g(them.)94 3401 y Fk(5.1)69 b(The)44 b(Command)h(Line)219
+3587 y Fc(barco)s(de)30 b Fl(accepts)i(the)e(follo)m(wing)f(options:)94
+3741 y Fj(--help)g(or)h(-h)574 3840 y Fl(Prin)m(t)g(a)h(usage)g
+(summary)e(and)h(exit.)94 3993 y Fj(-i)g(filename)574
+4092 y Fl(Iden)m(tify)35 b(a)h(\014le)f(where)g(strings)f(to)j(b)s(e)e
+(enco)s(ded)g(are)h(read)f(from.)56 b(If)36 b(missing)d(\(and)i(if)g
+Fj(-b)g Fl(is)574 4192 y(not)29 b(used\))f(it)g(defaults)f(to)i
+(standard)e(input.)38 b(Eac)m(h)29 b(data)g(line)e(of)h(the)h(input)d
+(\014le)i(will)d(b)s(e)j(used)574 4292 y(to)k(create)g(one)e(barco)s
+(de)g(output.)94 4444 y Fj(-o)g(filename)574 4544 y Fl(Output)g
+(\014le.)40 b(It)30 b(defaults)f(to)j(standard)d(output.)94
+4696 y Fj(-b)h(string)66 b Fl(Sp)s(ecify)32 b(a)j(single)d(\\barco)s
+(de")i(string)f(to)h(b)s(e)g(enco)s(ded.)50 b(The)33
+b(option)g(can)h(b)s(e)f(used)g(m)m(ultiple)574 4796
+y(times)j(in)e(order)h(to)h(enco)s(de)g(m)m(ultiple)d(strings)i(\(this)
+f(will)f(result)i(in)f(m)m(ulti-page)h(p)s(ostscript)574
+4895 y(output)22 b(or)g(a)g(table)g(of)g(barco)s(des)g(if)f
+Fj(-t)g Fl(is)g(sp)s(eci\014ed\).)37 b(The)21 b(strings)g(m)m(ust)h
+(matc)m(h)h(the)f(enco)s(ding)574 4995 y(c)m(hosen;)29
+b(if)c(it)g(do)s(esn't)h(matc)m(h)h(the)f(program)g(will)d(prin)m(t)i
+(a)h(w)m(arning)f(to)i Fj(stderr)d Fl(and)h(generate)574
+5095 y(\\blank")44 b(output)g(\(although)h(not)f(zero-length\).)84
+b(Please)44 b(note)h(that)g(a)g(string)e(including)574
+5194 y(spaces)31 b(or)g(other)f(sp)s(ecial)f(c)m(haracters)j(m)m(ust)e
+(b)s(e)g(prop)s(erly)e(quoted.)94 5347 y Fj(-e)i(encoding)574
+5446 y Fc(enco)s(ding)j Fl(is)e(the)i(name)f(of)h(the)g(c)m(hosen)g
+(enco)s(ding)e(format)i(b)s(eing)e(used.)46 b(It)32 b(defaults)g(to)h
+(the)574 5546 y(v)-5 b(alue)41 b(of)f(the)h(en)m(vironmen)m(t)g(v)-5
+b(ariable)39 b Fj(BARCODE_ENCODING)d Fl(or)41 b(to)g(auto)h(detection)f
+(if)f(the)574 5645 y(en)m(vironmen)m(t)30 b(is)g(also)g(unset.)p
+eop
+%%Page: 6 7
+6 6 bop 94 -116 a Fl(Chapter)30 b(6:)41 b(Supp)s(orted)29
+b(Enco)s(dings)2417 b(6)94 365 y Fj(-g)30 b(geometry)574
+465 y Fl(The)e(geometry)g(argumen)m(t)g(is)f(of)h(the)f(form)g(\\[)p
+Fj(<)p Fg(width)p Fj(>)i(x)f(<)p Fg(height)p Fj(>)p Fl(])f([)p
+Fj(+)h(<)p Fg(xmar)-5 b(gin)p Fj(>)28 b(+)f(<)p Fg(ymar-)574
+565 y(gin)p Fj(>)p Fl(]")42 b(\(with)f(no)h(in)m(terv)m(ening)f
+(spaces\).)75 b(Unsp)s(eci\014ed)40 b(margin)h(v)-5 b(alues)41
+b(will)e(result)i(in)f(no)574 664 y(margin;)31 b(unsp)s(eci\014ed)d
+(size)j(results)e(in)h(default)g(size.)42 b(The)30 b(sp)s(eci\014ed)f
+(v)-5 b(alues)30 b(represen)m(t)h(prin)m(t)574 764 y(p)s(oin)m(ts)e(b)m
+(y)g(default,)g(and)g(can)g(b)s(e)g(inc)m(hes,)g(millimeters)e(or)i
+(other)h(units)e(according)h(to)h(the)g Fj(-u)574 863
+y Fl(option)j(or)h(the)g Fj(BARCODE_UNIT)c Fl(en)m(vironmen)m(t)j(v)-5
+b(ariable.)49 b(The)33 b(argumen)m(t)h(is)e(used)h(to)h(place)574
+963 y(the)g(prin)m(tout)f(co)s(de)h(on)f(the)h(page.)51
+b(Note)35 b(that)f(an)f(additional)f(white)g(margin)h(of)h(10)g(p)s
+(oin)m(ts)574 1063 y(is)e(added)f(to)i(the)g(prin)m(tout.)45
+b(If)31 b(the)i(option)f(is)f(unsp)s(eci\014ed,)f Fj(BARCODE_GEOMETRY)e
+Fl(is)j(lo)s(ok)m(ed)574 1162 y(up)h(in)f(the)h(en)m(vironmen)m(t,)h
+(if)e(missing)f(a)j(default)f(size)g(and)g(no)g(margin)f(\(but)h(the)h
+(default)e(10)574 1262 y(p)s(oin)m(ts\))f(are)h(used.)94
+1409 y Fj(-t)f(table-geometry)574 1508 y Fl(Used)j(to)g(prin)m(t)e(sev)
+m(eral)i(barco)s(des)f(to)i(a)f(single)e(page,)j(this)d(option)h(is)g
+(mean)m(t)h(to)h(b)s(e)d(used)h(to)574 1608 y(prin)m(t)e(stic)m(k)m
+(ers.)43 b(The)30 b(argumen)m(t)h(is)f(of)h(the)g(form)g(\\)p
+Fj(<)p Fg(c)-5 b(olumns)p Fj(>)32 b(x)e(<)p Fg(lines)p
+Fj(>)h Fl([)p Fj(+)g(<)p Fg(leftmar)-5 b(gin)p Fj(>)31
+b(+)574 1707 y(<)p Fg(b)-5 b(ottommar)g(gin)p Fj(>)39
+b Fl([)p Fj(-)d(<)p Fg(rightmar)-5 b(gin)p Fj(>)38 b
+Fl([)p Fj(-)e(<)p Fg(topmar)-5 b(gin)p Fj(>)p Fl(]]]")39
+b(\(with)c(no)h(in)m(terv)m(ening)f(spaces\);)574 1807
+y(if)42 b(missing,)i(the)f(top)g(and)f(righ)m(t)g(margin)g(will)e
+(default)i(to)i(b)s(e)e(the)h(same)g(as)g(the)g(b)s(ottom)574
+1907 y(and)c(left)g(margin.)66 b(The)38 b(margins)g(are)i(sp)s
+(eci\014ed)d(in)h(prin)m(t)g(p)s(oin)m(ts)g(or)h(in)e(the)j(c)m(hosen)f
+(unit)574 2006 y(\(see)f Fj(-u)d Fl(b)s(elo)m(w\).)59
+b(If)35 b(the)i(option)f(is)f(not)i(sp)s(eci\014ed,)f
+Fj(BARCODE_TABLE)d Fl(is)i(lo)s(ok)m(ed)h(up)g(in)f(the)574
+2106 y(en)m(vironmen)m(t,)d(otherwise)f(no)h(table)f(is)g(prin)m(ted)f
+(and)h(eac)m(h)i(barco)s(de)f(will)c(get)33 b(its)e(o)m(wn)h(page.)574
+2206 y(The)27 b(size)g(\(but)f(not)h(the)g(p)s(osition\))e(of)j(a)f
+(barco)s(de)f(item)h(within)d(a)k(table)e(can)h(also)g(b)s(e)f
+(selected)574 2305 y(using)43 b Fj(-g)g Fl(\(see)i Fj(")p
+Fl(geometry)p Fj(")g Fl(ab)s(o)m(v)m(e\),)k(without)43
+b(struggling)f(with)h(external)h(and)f(in)m(ternal)574
+2405 y(margins.)71 b(I)40 b(still)e(think)h(managemen)m(t)j(of)f
+(geometries)g(in)f(a)h(table)f(is)g(sub)s(optimal,)g(but)g(I)574
+2504 y(can't)32 b(mak)m(e)f(it)f(b)s(etter)h(without)e(in)m(tro)s
+(ducing)f(incompatibilities.)94 2651 y Fj(-m)i(margin\(s\))574
+2751 y Fl(Sp)s(eci\014es)21 b(an)g(in)m(ternal)g(margin)g(for)g(eac)m
+(h)i(stic)m(k)m(er)g(in)d(the)i(table.)38 b(The)21 b(argumen)m(t)i(is)d
+(of)i(the)g(form)574 2850 y(\\)p Fj(<)p Fg(xmar)-5 b(gin)p
+Fj(>,<)p Fg(ymar)g(gin)p Fj(>)p Fl(")35 b(and)c(the)g(margin)g(is)g
+(applied)e(symmetrically)h(to)i(the)g(stic)m(k)m(er.)45
+b(If)574 2950 y(unsp)s(eci\014ed,)28 b(the)h(en)m(vironmen)m(t)g(v)-5
+b(ariable)28 b Fj(BARCODE_MARGIN)e Fl(is)i(used)h(or)g(a)h(default)e
+(in)m(ternal)574 3050 y(margin)i(of)g(10)i(p)s(oin)m(ts)d(is)g(used.)94
+3196 y Fj(-n)384 b Fl(\\Numeric")31 b(output:)40 b(don't)31
+b(prin)m(t)e(the)h(ASCI)s(I)f(form)h(of)g(the)h(co)s(de,)g(only)e(the)i
+(bars.)94 3343 y Fj(-c)384 b Fl(No)35 b(c)m(hec)m(ksum)f(c)m(haracter)h
+(\(for)f(enco)s(dings)e(that)j(allo)m(w)e(it,)h(lik)m(e)f(co)s(de)h
+(39,)h(other)f(co)s(des,)h(lik)m(e)574 3442 y(UPC)c(or)f(EAN,)h(ignore)
+f(this)f(option\).)94 3589 y Fj(-E)384 b Fl(Encapsulated)32
+b(p)s(ostscript)f(\(default)h(is)g(normal)f(p)s(ostscript\).)47
+b(When)32 b(the)h(output)f(is)f(gener-)574 3689 y(ated)h(as)e(EPS)g
+(only)f(one)i(barco)s(de)f(is)f(enco)s(ded.)94 3835 y
+Fj(-P)384 b Fl(PCL)35 b(output.)56 b(Please)36 b(note)g(that)g(the)f(Y)
+h(direction)e(go)s(es)i(from)f(top)h(to)g(b)s(ottom)g(for)f(PCL,)574
+3935 y(and)30 b(the)h(origin)e(for)h(an)g(image)h(is)e(the)i(top-left)f
+(corner)h(instead)e(of)i(the)f(b)s(ottom-left)94 4081
+y Fj(-p)g(pagesize)574 4181 y Fl(Sp)s(ecify)44 b(a)h(non-default)f
+(page)i(size.)85 b(The)45 b(page)h(size)f(can)g(b)s(e)f(sp)s(eci\014ed)
+g(in)g(millimeters,)574 4281 y(inc)m(hes)34 b(or)g(plain)e(n)m(um)m(b)s
+(ers)g(\(for)i(example:)48 b Fj("210x297mm")p Fl(,)32
+b Fj("8.5x11in")p Fl(,)g Fj("595x842")p Fl(\).)50 b(A)574
+4380 y(page)27 b(sp)s(eci\014cation)d(as)i(n)m(um)m(b)s(ers)e(will)f(b)
+s(e)i(in)m(terpreted)g(according)g(to)i(the)f(curren)m(t)f(unit)f(sp)s
+(ec-)574 4480 y(i\014cation)33 b(\(see)h Fj(-u)e Fl(b)s(elo)m(w\).)49
+b(If)33 b(libpap)s(er)d(is)i(a)m(v)-5 b(ailable,)33 b(y)m(ou)h(can)f
+(also)g(sp)s(ecify)f(the)h(page)h(size)574 4580 y(with)40
+b(its)g(name,)k(lik)m(e)d Fj("A3")e Fl(or)i Fj("letter")e
+Fl(\(libpap)s(er)f(is)i(a)h(standard)g(comp)s(onen)m(t)g(of)g(De-)574
+4679 y(bian)d(GNU/Lin)m(ux,)k(but)d(ma)m(y)h(b)s(e)e(missing)f
+(elsewhere\).)68 b(The)39 b(default)f(page)i(size)g(is)e(y)m(our)574
+4779 y(system-wide)30 b(default)g(if)f(libpap)s(er)e(is)j(there,)h(A4)g
+(otherwise.)94 4925 y Fj(-u)f(unit)162 b Fl(Cho)s(ose)32
+b(the)f(unit)f(used)g(in)g(size)i(sp)s(eci\014cations.)42
+b(Accepted)32 b(v)-5 b(alues)31 b(are)g(\\mm",)i(\\cm",)f(\\in")574
+5025 y(and)37 b(\\pt".)61 b(By)37 b(default,)h(the)f(program)f(will)f
+(c)m(hec)m(k)j Fj(BARCODE_UNIT)33 b Fl(in)j(the)h(en)m(vironmen)m(t,)
+574 5125 y(and)c(assume)g(p)s(oin)m(ts)g(otherwise)f(\(this)h(b)s(eha)m
+(viour)f(is)g(compatible)h(with)f(0.92)j(and)d(previous)574
+5224 y(v)m(ersions.)50 b(If)33 b Fj(-u)g Fl(app)s(ears)g(more)g(than)g
+(once,)j(eac)m(h)e(instance)f(will)e(mo)s(di\014ed)h(the)h(b)s(eha)m
+(viour)574 5324 y(for)h(the)g(argumen)m(ts)g(at)g(its)f(righ)m(t,)i(as)
+f(the)g(command)f(line)f(is)h(pro)s(cesses)g(left)h(to)g(righ)m(t.)50
+b(The)574 5424 y(program)32 b(in)m(ternally)f(w)m(orks)h(with)f(p)s
+(oin)m(ts,)h(and)f(an)m(y)i(size)f(is)f(appro)m(ximated)h(to)h(the)f
+(nearest)574 5523 y(m)m(ultiple)c(of)j(one)f(p)s(oin)m(t.)40
+b(The)30 b Fj(-u)f Fl(option)h(a\013ect)i Fj(-g)e Fl(\(geometry\),)i
+Fj(-t)e Fl(\(table\))h(and)e Fj(-p)h Fl(\(page)574 5623
+y(size\).)p eop
+%%Page: 7 8
+7 7 bop 94 -116 a Fl(Chapter)30 b(6:)41 b(Supp)s(orted)29
+b(Enco)s(dings)2417 b(7)94 365 y Fi(6)81 b(Supp)t(orted)51
+b(Enco)t(dings)219 558 y Fl(The)31 b(program)h(enco)s(des)g(text)g
+(strings)f(passed)g(either)g(on)h(the)g(command)g(line)e(\(with)g(-b\))
+i(or)g(retriev)m(ed)94 658 y(from)38 b(standard)f(input.)61
+b(The)37 b(text)i(represen)m(tation)f(is)f(in)m(terpreted)g(according)g
+(to)i(the)f(follo)m(wing)e(rules.)94 758 y(When)42 b(auto-detection)g
+(of)g(the)f(enco)s(ding)f(is)h(enabled)f(\(i.e,)k(no)e(explicit)d(enco)
+s(ding)h(t)m(yp)s(e)i(is)e(sp)s(eci\014ed\),)94 857 y(the)c(enco)s
+(ding)e(t)m(yp)s(es)h(are)h(scanned)f(to)h(\014nd)d(one)j(that)g(can)f
+(digest)g(the)g(text)i(string.)54 b(The)35 b(follo)m(wing)e(list)94
+957 y(of)h(supp)s(orted)e(t)m(yp)s(es)h(is)g(sorted)g(in)g(the)g(same)h
+(order)f(the)h(library)d(uses)i(when)f(auto-detecting)k(a)d(suitable)94
+1056 y(enco)s(ding)d(for)g(a)h(string.)94 1193 y Fh(EAN)282
+b Fl(The)36 b(EAN)h(fron)m(tend)f(is)g(similar)d(to)38
+b(UPC;)e(it)g(accepts)i(strings)d(of)i(digits,)g(12)g(or)g(7)f(c)m
+(harac-)574 1293 y(ters)c(long.)41 b(Strings)30 b(of)h(13)g(or)g(8)g(c)
+m(haracters)i(are)e(accepted)h(if)e(the)h(pro)m(vided)f(c)m(hec)m(ksum)
+h(digit)574 1393 y(is)40 b(correct.)73 b(I)40 b(exp)s(ect)i(most)f
+(users)e(to)j(feed)e(input)f(without)h(a)h(c)m(hec)m(ksum,)j(though.)71
+b(The)574 1492 y(add-2)36 b(and)g(add-5)g(extension)f(are)h(accepted)i
+(for)d(b)s(oth)g(the)i(EAN-13)g(and)e(the)h(EAN-8)h(en-)574
+1592 y(co)s(dings.)42 b(The)30 b(follo)m(wing)f(are)j(example)e(of)h(v)
+-5 b(alid)29 b(input)g(strings:)41 b(\\)p Fj(123456789012)p
+Fl(")28 b(\(EAN-)574 1692 y(13\),)43 b(\\)p Fj(1234567890128)p
+Fl(")37 b(\(EAN-13)k(wih)c(c)m(hec)m(ksum\),)43 b(\\)p
+Fj(1234567)p Fl(")38 b(\(EAN-8\),)44 b(\\)p Fj(12345670)574
+1791 y(12345)p Fl(")23 b(\(EAN-8)h(with)e(c)m(hec)m(ksum)h(and)g
+(add-5\),)i(\\)p Fj(123456789012)45 b(12)p Fl(")23 b(\(EAN-13)i(with)c
+(add-)574 1891 y(2\),)32 b(\\)p Fj(123456789012)45 b(12345)p
+Fl(")29 b(\(EAN-13)j(with)d(add-5\).)94 2028 y Fh(UPC)284
+b Fl(The)35 b(UPC)g(fron)m(tend)g(accepts)i(only)d(strings)g(made)i(up)
+e(of)h(digits)f(\(and,)j(if)d(a)i(supplemen)m(tal)574
+2127 y(enco)s(ding)27 b(is)g(used,)g(a)h(blank)f(to)h(separate)g(it\).)
+40 b(It)28 b(accepts)h(strings)d(of)i(11)g(or)g(12)g(digits)f(\(UPC-)
+574 2227 y(A\))k(and)f(6)h(or)f(7)h(or)f(8)h(digits)e(\(UPC-E\).)574
+2345 y(The)c(12th)h(digit)e(of)h(UPC-A)g(is)f(the)h(c)m(hec)m(ksum)h
+(and)e(is)g(added)h(b)m(y)g(the)g(library)d(if)i(not)i(sp)s(eci\014ed)
+574 2445 y(in)k(the)h(input;)e(if)h(it)h(is)f(sp)s(eci\014ed,)f(it)h(m)
+m(ust)h(b)s(e)f(the)h(righ)m(t)g(c)m(hec)m(ksum)g(or)g(the)g(co)s(de)g
+(is)f(rejected)574 2545 y(as)38 b(in)m(v)-5 b(alid.)59
+b(F)-8 b(or)38 b(UPC-E,)f(6)h(digit)e(are)i(considered)e(to)i(b)s(e)e
+(the)i(middle)d(part)i(of)g(the)g(co)s(de,)574 2644 y(a)i(leading)d(0)i
+(is)f(assumed)g(and)g(the)h(c)m(hec)m(ksum)g(is)f(added;)k(7)d(digits)e
+(are)i(either)f(considered)574 2744 y(the)30 b(initial)d(part)i
+(\(leading)g(digit)f(0)i(or)g(1,)g(c)m(hec)m(ksum)g(missing\))e(or)i
+(the)f(\014nal)g(part)g(\(c)m(hec)m(ksum)574 2844 y(sp)s(eci\014ed,)f
+(leading)g(0)i(assumed\);)g(8)f(digits)f(are)i(considered)e(to)i(b)s(e)
+e(the)i(complete)f(co)s(de,)h(with)574 2943 y(leading)k(0)i(or)f(1)g
+(and)g(c)m(hec)m(ksum.)55 b(F)-8 b(or)36 b(b)s(oth)f(UPC-A)g(and)f
+(UPC-E,)i(a)f(trailing)e(string)h(of)i(2)574 3043 y(digits)30
+b(or)h(5)g(digits)e(is)h(accepted)i(as)f(w)m(ell.)40
+b(Therefore,)31 b(the)g(follo)m(wing)e(are)i(examples)g(of)g(v)-5
+b(alid)574 3142 y(strings)41 b(that)h(can)f(b)s(e)g(enco)s(ded)g(as)h
+(UPC:)f(\\)p Fj(01234567890)p Fl(")e(\(UPC-A\))j(\\)p
+Fj(012345678905)p Fl(")574 3242 y(\(UPC-A)33 b(with)d(c)m(hec)m
+(ksum\),)k(\\)p Fj(012345)p Fl(")d(\(UPC-E\),)i(\\)p
+Fj(01234567890)45 b(12)p Fl(")32 b(\(UPC-A,)g(add-2\))574
+3342 y(and)21 b(\\)p Fj(01234567890)45 b(12345)p Fl(")20
+b(\(UPC-A,)i(add-5\),)h(\\)p Fj(0123456)47 b(12)p Fl(")20
+b(\(UPC-E,)i(add-2\).)38 b(Please)574 3441 y(note)24
+b(that)f(when)f(setting)h Fj(BARCODE_ANY)c Fl(to)24 b(auto-detect)h
+(the)e(enco)s(ding)f(to)h(b)s(e)f(used,)i(12-digit)574
+3541 y(strings)32 b(and)h(7-digit)f(strings)g(will)e(alw)m(a)m(ys)k(b)s
+(e)e(iden)m(ti\014ed)f(as)i(EAN.)h(This)d(b)s(ecause)i(I)f(exp)s(ect)
+574 3641 y(most)h(user)f(to)h(pro)m(vide)f(input)e(without)i(a)g(c)m
+(hec)m(ksum.)48 b(If)32 b(y)m(ou)h(need)f(to)h(sp)s(ecify)e(UPC-with-)
+574 3740 y(c)m(hec)m(ksum)h(as)g(input)d(y)m(ou)i(m)m(ust)g(explicitly)
+e(set)j Fj(BARCODE_UPC)c Fl(as)j(a)g(\015ag)h(or)f(use)g
+Fj(-e)47 b(upc)30 b Fl(on)574 3840 y(the)h(command)f(line.)94
+3977 y Fh(ISBN)264 b Fl(ISBN)26 b(n)m(um)m(b)s(ers)e(are)i(enco)s(ded)f
+(as)h(EAN-13)g(sym)m(b)s(ols,)g(with)e(an)h(optional)g(add-5)g
+(trailer.)38 b(The)574 4076 y(ISBN)27 b(fron)m(tend)f(of)h(the)g
+(library)e(accepts)j(real)e(ISBN)h(n)m(um)m(b)s(ers)e(and)h(deals)h
+(with)e(an)m(y)i(h)m(yphen)574 4176 y(and,)h(if)f(presen)m(t,)h(the)g
+(ISBN)f(c)m(hec)m(ksum)i(c)m(haracter)g(b)s(efore)e(enco)s(ding)f
+(data.)41 b(V)-8 b(alid)26 b(represen-)574 4276 y(tations)j(for)e(ISBN)
+h(strings)e(are)j(for)e(example:)40 b(\\)p Fj(1-56592-292-1)p
+Fl(",)25 b(\\)p Fj(3-89721-122-X)p Fl(")h(and)574 4375
+y(\\)p Fj(3-89721-122-X)45 b(06900)p Fl(".)94 4512 y
+Fh(co)s(de)31 b(128-B)574 4612 y Fl(This)37 b(enco)s(ding)g(can)h
+(represen)m(t)g(all)f(of)h(the)h(prin)m(ting)c(ASCI)s(I)i(c)m
+(haracters,)42 b(from)37 b(the)h(space)574 4711 y(\(32\))32
+b(to)g(DEL)e(\(127\).)43 b(The)30 b(c)m(hec)m(ksum)h(digit)e(is)g
+(mandatory)i(in)e(this)g(enco)s(ding.)94 4848 y Fh(co)s(de)i(128-C)574
+4948 y Fl(The)h(\\C")g(v)-5 b(ariation)31 b(of)h(Co)s(de-128)h(uses)e
+(Co)s(de-128)i(sym)m(b)s(ols)d(to)j(represen)m(t)f(t)m(w)m(o)h(digits)d
+(at)j(a)574 5048 y(time)28 b(\(Co)s(de-128)g(is)f(made)g(up)f(of)i(104)
+g(sym)m(b)s(ols)e(whose)i(in)m(terpretation)e(is)h(con)m(trolled)g(b)m
+(y)g(the)574 5147 y(start)35 b(sym)m(b)s(ol)e(b)s(eing)g(used\).)52
+b(Co)s(de)34 b(128-C)h(is)e(th)m(us)h(the)h(most)f(compact)i(w)m(a)m(y)
+f(to)g(represen)m(t)574 5247 y(an)m(y)41 b(ev)m(en)h(n)m(um)m(b)s(er)d
+(of)i(digits.)70 b(The)40 b(enco)s(der)g(refuses)g(to)h(deal)f(with)g
+(an)g(o)s(dd)g(n)m(um)m(b)s(er)f(of)574 5347 y(digits)24
+b(b)s(ecause)h(the)g(caller)f(is)g(exp)s(ected)h(to)h(pro)m(vide)e
+(prop)s(er)f(padding)g(to)j(an)f(ev)m(en)g(n)m(um)m(b)s(er)f(of)574
+5446 y(digits.)38 b(\(Since)23 b(Co)s(de-128)i(includes)d(con)m(trol)j
+(sym)m(b)s(ols)d(to)j(switc)m(h)f(c)m(harset,)j(it)c(is)g
+(theoretically)574 5546 y(p)s(ossible)29 b(to)j(represen)m(t)f(the)h(o)
+s(dd)e(digit)g(as)h(a)g(Co)s(de)g(128-A)i(or)e(128-B)i(sym)m(b)s(ol,)e
+(but)f(this)g(to)s(ol)574 5645 y(do)s(esn't)h(curren)m(tly)e(implemen)m
+(t)g(this)g(option\).)p eop
+%%Page: 8 9
+8 8 bop 94 -116 a Fl(Chapter)30 b(6:)41 b(Supp)s(orted)29
+b(Enco)s(dings)2417 b(8)94 365 y Fh(co)s(de)31 b(128)h(ra)m(w)574
+465 y Fl(Co)s(de-128)24 b(output)d(represen)m(ted)h(sym)m(b)s(ol-b)m
+(y-sym)m(b)s(ol)e(in)h(the)h(input)f(string.)36 b(T)-8
+b(o)23 b(o)m(v)m(erride)f(part)574 565 y(of)27 b(the)g(problems)d
+(outlined)h(b)s(elo)m(w)g(in)g(sp)s(ecifying)f(co)s(de128)k(sym)m(b)s
+(ols,)e(this)f(pseudo-enco)s(ding)574 664 y(allo)m(ws)42
+b(the)h(used)f(to)h(sp)s(ecify)e(a)i(list)e(of)i(co)s(de128)h(sym)m(b)s
+(ols)d(separated)i(b)m(y)g(spaces.)77 b(Eac)m(h)574 764
+y(sym)m(b)s(ol)31 b(is)g(represen)m(ted)h(b)m(y)g(a)g(n)m(um)m(b)s(er)f
+(in)g(the)h(range)g(0-105.)48 b(The)31 b(list)g(should)f(include)g(the)
+574 863 y(leading)e(c)m(haracter.The)i(c)m(hec)m(ksum)g(and)e(the)h
+(stop)g(c)m(haracter)h(are)f(automatically)g(added)f(b)m(y)574
+963 y(the)k(library)-8 b(.)42 b(Most)33 b(lik)m(ely)d(this)g
+(pseudo-enco)s(ding)g(will)f(b)s(e)i(used)f(with)g Fj(BARCODE_NO_ASCII)
+574 1063 y Fl(and)g(some)h(external)f(program)g(to)i(supply)27
+b(the)k(prin)m(ted)e(text.)94 1245 y Fh(co)s(de)37 b(39)180
+b Fl(The)36 b(co)s(de-39)h(standard)f(can)g(enco)s(de)g(upp)s(ercase)g
+(letters,)i(digits,)e(the)g(blank)f(space,)k(plus,)574
+1345 y(min)m(us,)d(dot,)i(star,)f(dollar,)f(slash,)g(p)s(ercen)m(t.)57
+b(An)m(y)36 b(string)f(that)h(is)f(only)g(comp)s(osed)g(of)h(suc)m(h)
+574 1445 y(c)m(haracters)j(is)e(accepted)h(b)m(y)g(the)f(co)s(de-39)i
+(enco)s(der.)61 b(T)-8 b(o)38 b(a)m(v)m(oid)g(lo)s(osing)e
+(information,)i(the)574 1544 y(enco)s(der)c(refuses)g(to)h(enco)s(de)f
+(mixed-case)g(strings)f(\(a)i(lo)m(w)m(ercase)g(string)e(is)g
+(nonetheless)h(ac-)574 1644 y(cepted)d(as)g(a)g(shortcut,)f(but)g(is)f
+(enco)s(ded)h(as)h(upp)s(ercase\).)94 1826 y Fh(in)m(terlea)m(v)m(ed)g
+(2)g(of)g(5)574 1926 y Fl(This)36 b(enco)s(ding)g(can)i(only)e
+(represen)m(t)h(an)g(ev)m(en)h(n)m(um)m(b)s(er)e(of)h(digits)f(\(o)s
+(dd)h(digits)f(are)h(repre-)574 2026 y(sen)m(ted)c(b)m(y)g(bars,)f(and)
+g(ev)m(en)h(digits)e(b)m(y)i(the)f(in)m(terlea)m(ving)g(spaces\).)48
+b(The)32 b(name)g(stresses)h(the)574 2125 y(fact)i(that)g(t)m(w)m(o)g
+(of)f(the)g(\014v)m(e)g(items)f(\(bars)h(or)f(spaces\))i(allo)s(cated)f
+(to)g(eac)m(h)h(sym)m(b)s(ol)e(are)h(wide,)574 2225 y(while)41
+b(the)i(rest)g(are)g(narro)m(w.)78 b(The)42 b(c)m(hec)m(ksum)h(digit)f
+(is)g(optional)f(\(can)j(b)s(e)e(disabled)e(via)574 2325
+y Fj(BARCODE_NO_CHECKSUM)p Fl(\).)f(Since)31 b(the)h(n)m(um)m(b)s(er)e
+(of)h(digits,)g(including)d(the)j(c)m(hec)m(ksum,)i(m)m(ust)574
+2424 y(b)s(e)40 b(ev)m(en,)k(a)c(leading)f(zero)i(is)e(inserted)g(in)g
+(the)i(string)e(b)s(eing)g(enco)s(ded)g(if)h(needed)f(\(this)h(is)574
+2524 y(sp)s(eci\014cally)29 b(stated)i(in)e(the)h(sp)s(ecs)g(I)g(ha)m
+(v)m(e)i(access)g(to\).)94 2707 y Fh(co)s(de)f(128)136
+b Fl(Automatic)31 b(selection)g(b)s(et)m(w)m(een)g(alphab)s(et)f(A,)h
+(B)g(and)f(C)h(of)g(the)g(Co)s(de-128)h(standard.)41
+b(This)574 2806 y(enco)s(ding)31 b(can)i(represen)m(t)f(all)f(ASCI)s(I)
+f(sym)m(b)s(ols,)i(from)f(0)h(\(NUL\))h(to)g(127)g(\(DEL\),)g(as)g(w)m
+(ell)e(as)574 2906 y(four)36 b(sp)s(ecial)e(sym)m(b)s(ols,)i(named)f
+(F1,)j(F2,)g(F3,)g(F4.)58 b(The)35 b(set)h(of)g(sym)m(b)s(ols)f(a)m(v)
+-5 b(ailable)35 b(in)f(this)574 3005 y(enco)s(ding)g(is)f(not)i(easily)
+e(represen)m(ted)i(as)f(input)e(to)k(the)e Fg(b)-5 b(ar)g(c)g(o)g(de)44
+b Fl(library)-8 b(,)33 b(so)i(the)f(follo)m(wing)574
+3105 y(con)m(v)m(en)m(tion)24 b(is)e(used.)38 b(In)22
+b(the)g(input)f(string,)j(whic)m(h)d(is)h(a)h(C-language)g(n)m
+(ull-terminated)e(string,)574 3205 y(the)26 b(NUL)g(c)m(har)f(is)g
+(represen)m(ted)g(b)m(y)h(the)f(v)-5 b(alue)25 b(128)i(\(0x80,)h
+(0200\))g(and)d(the)g(F1-F4)i(c)m(haracters)574 3304
+y(are)f(represen)m(ted)g(b)m(y)f(the)h(v)-5 b(alues)25
+b(193-196)k(\(0xc1-0xc4,)h(0301-0304\).)43 b(The)25 b(v)-5
+b(alues)25 b(ha)m(v)m(e)i(b)s(een)574 3404 y(c)m(hosen)k(to)h(ease)f
+(their)e(represen)m(tation)i(as)f(escap)s(e)h(sequences.)574
+3545 y(Since)39 b(the)h(shell)d(do)s(esn't)j(seem)f(to)i(in)m(terpret)d
+(escap)s(e)i(sequences)g(on)f(the)h(command)f(line,)574
+3645 y(the)e Fj(")p Fl(-b)p Fj(")e Fl(option)g(cannot)h(b)s(e)f(easily)
+g(used)g(to)i(designate)f(the)g(strings)f(to)h(b)s(e)f(enco)s(ded.)57
+b(As)574 3744 y(a)44 b(w)m(ork)-5 b(around)42 b(y)m(ou)i(can)f(resort)h
+(to)f(the)h(command)f Fj(echo)p Fl(,)i(either)e(within)d(bac)m(k-tic)m
+(ks)45 b(or)574 3844 y(used)34 b(separately)g(to)g(create)i(a)e(\014le)
+f(that)i(is)e(then)g(fed)h(to)h(the)f(standard-input)d(of)j
+Fg(b)-5 b(ar)g(c)g(o)g(de)44 b Fl({)574 3944 y(assuming)34
+b(y)m(our)h Fj(echo)f Fl(command)h(pro)s(cesses)g(escap)s(e)h
+(sequences.)56 b(The)34 b(newline)f(c)m(haracter)574
+4043 y(is)d(esp)s(ecially)f(though)h(to)h(enco)s(de)f(\(but)g(not)h
+(imp)s(ossible)c(unless)h(y)m(ou)j(use)f(a)h Fj(csh)e
+Fl(v)-5 b(arian)m(t.)574 4184 y(These)35 b(problems)f(only)g(apply)g
+(to)i(the)f(command-line)f(to)s(ol;)j(the)f(use)e(of)i(library)c
+(functions)574 4284 y(do)s(esn't)44 b(giv)m(e)f(an)m(y)h(problem.)78
+b(In)42 b(needed,)47 b(y)m(ou)c(can)h(use)f(the)h(\\)p
+Fg(c)-5 b(o)g(de)46 b(128)f(r)-5 b(aw)10 b Fl(")45 b(pseudo-)574
+4384 y(enco)s(ding)33 b(to)h(represen)m(t)g(co)s(de128)h(sym)m(b)s(ols)
+d(b)m(y)h(their)g(n)m(umerical)f(v)-5 b(alue.)50 b(This)31
+b(enco)s(ding)i(is)574 4483 y(used)28 b(late)h(in)e(the)h
+(auto-selection)i(mec)m(hanism)d(b)s(ecause)h(\(almost\))i(an)m(y)e
+(input)f(string)g(can)i(b)s(e)574 4583 y(represen)m(ted)i(using)e(co)s
+(de128.)94 4765 y Fh(Co)s(dabar)138 b Fl(Co)s(dabar)33
+b(can)h(enco)s(de)g(the)g(ten)f(digits)g(and)g(a)h(few)f(sp)s(ecial)f
+(sym)m(b)s(ols)g(\(min)m(us,)i(plus,)e(dollar,)574 4865
+y(colon,)k(bar,)g(dot\).)54 b(The)34 b(c)m(haracters)i(\\)p
+Fj(A)p Fl(",)h(\\)p Fj(B)p Fl(",)f(\\)p Fj(C)p Fl(")f(and)g(\\)p
+Fj(D)p Fl(")g(are)g(used)f(to)h(represen)m(t)g(four)574
+4965 y(di\013eren)m(t)30 b(start/stop)i(c)m(haracters.)42
+b(The)30 b(input)e(string)i(to)h(the)f(barco)s(de)h(library)d(can)i
+(include)574 5064 y(the)d(start)g(and)f(stop)h(c)m(haracters)h(or)e
+(not)h(include)d(them)j(\(in)e(whic)m(h)h(case)h(\\)p
+Fj(A)p Fl(")g(is)f(used)g(as)g(start)574 5164 y(and)38
+b(\\)p Fj(B)p Fl(")g(as)g(stop\).)64 b(Start)38 b(and)f(stop)h(c)m
+(haracters)h(in)e(the)h(input)e(string)g(can)j(b)s(e)e(either)g(all)574
+5264 y(lo)m(w)m(ercase)32 b(or)f(all)e(upp)s(ercase)g(and)h(are)h(alw)m
+(a)m(ys)g(prin)m(ted)e(as)h(upp)s(ercase.)94 5446 y Fh(Plessey)192
+b Fl(Plessey)39 b(barco)s(des)f(can)h(enco)s(de)g(all)f(the)h
+(hexadecimal)f(digits.)64 b(Alphab)s(etic)37 b(digits)g(in)h(the)574
+5546 y(input)25 b(string)g(m)m(ust)h(either)g(b)s(e)f(all)g(lo)m(w)m
+(ercase)j(or)e(all)f(upp)s(ercase.)38 b(The)26 b(output)g(text)h(is)e
+(alw)m(a)m(ys)574 5645 y(upp)s(ercase.)p eop
+%%Page: 9 10
+9 9 bop 94 -116 a Fl(Chapter)30 b(7:)41 b(PCL)30 b(Output)2761
+b(9)94 365 y Fh(MSI)313 b Fl(MSI)39 b(can)g(only)e(enco)s(de)i(the)g
+(decimal)e(digits.)64 b(While)38 b(the)h(standard)e(sp)s(eci\014es)h
+(either)g(one)574 465 y(or)e(t)m(w)m(o)h(c)m(hec)m(k)g(digits,)e(the)h
+(curren)m(t)f(implemen)m(tation)f(in)g(this)g(library)f(only)i
+(generates)i(one)574 565 y(c)m(hec)m(k)32 b(digit.)94
+701 y Fh(co)s(de)f(93)180 b Fl(The)30 b(co)s(de-93)h(standard)f(can)g
+(nativ)m(ely)g(enco)s(de)g(48)h(di\013eren)m(t)e(c)m(haracters,)j
+(including)27 b(upp)s(er-)574 801 y(case)39 b(letters,)h(digits,)e(the)
+g(blank)e(space,)k(plus,)e(min)m(us,)g(dot,)h(star,)h(dollar,)e(slash,)
+h(p)s(ercen)m(t,)574 901 y(as)31 b(w)m(ell)f(as)g(\014v)m(e)h(sp)s
+(ecial)e(c)m(haracters:)43 b(a)30 b(start/stop)i(delimiter)c(and)i
+(four)g Fj(")p Fl(shift)f(c)m(haracters)p Fj(")574 1000
+y Fl(used)f(for)f(extended)h(enco)s(ding.)39 b(Using)27
+b(this)g Fj(")p Fl(extended)g(enco)s(ding)p Fj(")g Fl(metho)s(d,)h(an)m
+(y)g(standard)574 1100 y(7-bit)34 b(ASCI)s(I)e(c)m(haracter)k(can)e(b)s
+(e)f(enco)s(ded,)i(but)e(it)h(tak)m(es)h(up)e(t)m(w)m(o)i(sym)m(b)s(ol)
+d(lengths)i(in)e(bar-)574 1200 y(co)s(de)k(if)f(the)g(c)m(haracter)j
+(is)c(not)i(nativ)m(ely)f(supp)s(orted)f(\(one)i(of)g(the)f(48\).)58
+b(The)35 b(enco)s(der)g(here)574 1299 y(fully)24 b(implemen)m(ts)g(the)
+i(co)s(de)g(93)g(enco)s(ding)f(standard.)38 b(An)m(y)26
+b(c)m(haracters)h(nativ)m(ely)e(supp)s(orted)574 1399
+y(\(A-Z,)35 b(0-9,)h Fj(")p Fl(.)p Fj(+)p Fl(-/$&\045)p
+Fj(")p Fl(\))e(will)d(b)s(e)j(enco)s(ded)f(as)h(suc)m(h)g(-)g(for)f(an)
+m(y)h(other)h(c)m(haracters)g(\(suc)m(h)f(as)574 1498
+y(lo)m(w)m(er)h(case)g(letters,)g(brac)m(k)m(ets,)h(paren)m(theses,)g
+(etc.\),)h(the)d(enco)s(der)f(will)f(rev)m(ert)i(to)h(extended)574
+1598 y(enco)s(ding.)68 b(As)40 b(a)g(note,)j(the)d(option)f(to)h
+(exclude)f(the)h(c)m(hec)m(ksum)g(will)d(eliminate)i(the)h(t)m(w)m(o)
+574 1698 y(mo)s(dulo-47)f(c)m(hec)m(ksums)g(\(called)g(C)f(and)g(K\))h
+(from)f(the)h(barco)s(de,)i(but)d(this)g(probably)f(will)574
+1797 y(mak)m(e)c(it)e(unreadable)e(b)m(y)i(99\045)h(of)g(all)e
+(scanning)g(systems.)43 b(These)31 b(c)m(hec)m(ksums)h(are)g(sp)s
+(eci\014ed)574 1897 y(to)f(b)s(e)e(used)g(at)i(the)f(\014rm)m(w)m(are)f
+(lev)m(el,)h(and)f(their)g(absence)h(will)d(b)s(e)j(in)m(terpreted)f
+(as)h(an)f(in)m(v)-5 b(alid)574 1997 y(barco)s(de.)94
+2266 y Fi(7)81 b(PCL)53 b(Output)219 2459 y Fl(While)28
+b(the)h(default)g(output)f(is)g(P)m(ostscript)i(\(p)s(ossibly)c(EPS\),)
+j(and)g(P)m(ostscript)g(can)g(b)s(e)f(p)s(ost-pro)s(cessed)94
+2558 y(to)40 b(almost)e(an)m(ything,)i(it)e(is)f(sometimes)i(desirable)
+d(to)j(create)h(output)e(directly)f(usable)g(b)m(y)i(the)f(sp)s
+(eci\014c)94 2658 y(prin)m(ter)33 b(at)h(hand.)50 b(PCL)33
+b(is)g(curren)m(tly)f(supp)s(orted)g(as)i(an)g(output)f(format)h(for)g
+(this)e(reason.)51 b(Please)34 b(note)94 2758 y(that)25
+b(the)f(Y)g(co)s(ordinate)g(for)f(PCL)h(go)s(es)g(from)f(top)i(to)f(b)s
+(ottom,)i(while)c(for)h(P)m(ostscript)h(it)g(go)s(es)g(from)g(b)s
+(ottom)94 2857 y(to)35 b(top.)51 b(Consisten)m(tly)-8
+b(,)34 b(while)d(in)i(P)m(ostscript)g(y)m(ou)h(sp)s(ecify)f(the)g(b)s
+(ottom-left)i(corner)e(as)h(origin,)f(for)h(PCL)94 2957
+y(y)m(ou)d(sp)s(ecify)e(the)i(top-left)f(corner.)219
+3075 y(Barco)s(de)c(output)e(for)h(PCL)f(Prin)m(ters)g(\(HP)h(LaserJet)
+g(and)g(compatibles\),)g(w)m(as)h(dev)m(elop)s(ed)e(using)f(PCL5)94
+3175 y(Reference)32 b(man)m(uals)d(from)h(HP)-8 b(.)31
+b(that)g(really)e(refers)h(to)h(these)g(prin)m(ters:)169
+3293 y Fb(\017)60 b Fl(LaserJet)31 b(I)s(I)s(I,)f(I)s(I)s(I)e(P)-8
+b(,)31 b(I)s(I)s(I)e(D,)i(I)s(I)s(I)e(Si,)169 3411 y
+Fb(\017)60 b Fl(LaserJet)31 b(4)g(family)169 3529 y Fb(\017)60
+b Fl(LaserJet)31 b(5)g(family)169 3648 y Fb(\017)60 b
+Fl(LaserJet)31 b(6)g(family)169 3766 y Fb(\017)60 b Fl(Color)30
+b(LaserJet)169 3884 y Fb(\017)60 b Fl(DeskJet)32 b(1200)g(and)e(1600.)
+219 4021 y(Ho)m(w)m(ev)m(er,)g(barco)s(de)e(prin)m(ting)d(uses)i(a)h(v)
+m(ery)g(small)e(subset)h(of)g(PCL,)g(probably)f(also)h(LaserJet)h(I)s
+(I)f(should)94 4121 y(prin)m(t)i(it)h(without)g(problem,)f(but)g(the)i
+(resulting)e(text)i(ma)m(y)g(b)s(e)f(horrible.)219 4239
+y(The)22 b(only)g(real)h(di\013erence)f(from)h(one)g(prin)m(ter)e(to)j
+(another)f(really)f(dep)s(ends)f(on)h(whic)m(h)g(fon)m(t)h(are)h(a)m(v)
+-5 b(ailable)94 4338 y(in)30 b(the)g(prin)m(ter,)f(used)h(in)f(prin)m
+(ting)f(the)j(lab)s(el)d(asso)s(ciated)j(to)g(the)g(bars)f(\(if)f
+(requested\).)219 4457 y(Earlier)j(LaserJet)j(supp)s(orts)d(only)h
+(bitmaps)f(fon)m(ts,)k(so)e(these)g(are)h(not)f Fj(")p
+Fl(scalable)p Fj(")p Fl(.)50 b(\(Ljet)35 b(I)s(I)e(?\),)i(Also)94
+4556 y(these)c(fon)m(ts,)f(when)f(a)m(v)-5 b(ailable,)29
+b(ha)m(v)m(e)i(a)f(sp)s(eci\014ed)e(direction,)h(and)g(not)h(all)f(of)g
+(them)h(are)g(a)m(v)-5 b(ailable)29 b(in)g(b)s(oth)94
+4656 y(P)m(ortrait)i(and)f(Landscap)s(e)g(mo)s(de.)219
+4774 y(F)-8 b(rom)23 b(LaserJet)g(4)f(series,)i(\(except)g(4L/5L)f
+(that)g(are)g(en)m(try-lev)m(el)f(prin)m(ters\),)h(Arial)e(scalable)h
+(fon)m(t)h(should)94 4874 y(b)s(e)30 b(a)m(v)-5 b(ailable,)30
+b(so)h(it's)f(the)g Fj(")p Fl(default)g(fon)m(t)p Fj(")g
+Fl(used)g(b)m(y)g(this)f(program.)219 4992 y(LaserJet)41
+b(I)s(I)s(I)d(series)i(prin)m(ters)e(\(and)i(4L,)g(5L\),)h(don't)f
+(feature)h Fj(")p Fl(Arial)p Fj(")d Fl(as)i(a)h(residen)m(t)e(fon)m(t,)
+k(so)e(y)m(ou)94 5092 y(should)27 b(use)i Fj(BARCODE_OUT_PCL_III)23
+b Fl(instead)28 b(of)h Fj(BARCODE_OUT_PCL.)p Fl(,)c(and)j(fon)m(t)h
+(the)g(fon)m(t)h(used)d(will)g(b)s(e)94 5191 y Fj(")p
+Fl(Univ)m(ers)p Fj(")j Fl(instead)f(of)i Fj(")p Fl(Arial)p
+Fj(")p Fl(.)219 5309 y(Results)26 b(on)i(compatible)e(prin)m(ters,)h
+(ma)m(y)h(dep)s(end)d(on)i(consistency)g(of)h(PCL5)f(compatibilit)m(y)
+-8 b(,)26 b(in)g(doubt,)94 5409 y(try)31 b(BAR)m(CODE)p
+713 5409 28 4 v 33 w(OUT)p 951 5409 V 32 w(PCL)p 1168
+5409 V 32 w(I)s(I)s(I)219 5527 y(PJL)f(commands)g(are)g(not)h(used)f
+(here,)g(as)h(it's)f(not)g(v)m(ery)h(compatible.)219
+5645 y(T)-8 b(ested)31 b(Prin)m(ters:)p eop
+%%Page: 10 11
+10 10 bop 94 -116 a Fl(Chapter)30 b(8:)41 b(Bugs)31 b(and)f(P)m(ending)
+f(Issues.)2211 b(10)169 365 y Fb(\017)60 b Fl(Hp)30 b(LaserJet)h(4050)
+169 490 y Fb(\017)60 b Fl(Hp)30 b(LaserJet)h(2100)169
+614 y Fb(\017)60 b Fl(Epson)30 b(N-1200)j(em)m(ul)c(PCL)169
+739 y Fb(\017)60 b Fl(T)-8 b(oshiba)30 b(DP2570)i(\(copier\))f
+Fj(+)f Fl(PCL)g(option)169 863 y Fb(\017)60 b Fl(Epson)30
+b(EPL-7100)i(em)m(ul.)40 b(HP)30 b(LaserJet)h(I)s(I:)f(bars)g(prin)m(t)
+f(\014ne)g(but)h(text)i(is)d(bad.)94 1146 y Fi(8)81 b(Bugs)52
+b(and)i(P)l(ending)f(Issues.)219 1370 y Fl(The)42 b(curren)m(t)g
+(managemen)m(t)h(of)g(b)s(orders/margins)d(is)h(far)h(from)g(optimal.)
+75 b(The)42 b(\\default")g(margin)94 1469 y(applied)d(b)m(y)h(the)h
+(library)d(in)m(terferes)i(with)f(the)i(external)g(represen)m(tation,)i
+(but)d(I)g(feel)g(it)g(is)g(mandatory)94 1569 y(to)f(a)m(v)m(oid)f
+(creating)g(barco)s(de)f(output)h(with)e(no)i(surrounding)c(white)j
+(space)h(\(the)g(problem)e(is)h(esp)s(ecially)94 1669
+y(relev)-5 b(an)m(t)31 b(for)f(EPS)g(output\).)219 1793
+y(EAN-128)44 b(is)d(not)h(\(y)m(et\))i(supp)s(orted.)73
+b(I)42 b(plan)e(to)j(implemen)m(t)e(it)g(prett)m(y)h(so)s(on)g(and)f
+(then)h(bless)f(the)94 1893 y(pac)m(k)-5 b(age)33 b(as)d(v)m(ersion)g
+(1.0.)p eop
+%%Page: -1 12
+-1 11 bop 3849 -116 a Fl(i)94 365 y Fi(T)-13 b(able)55
+b(of)e(Con)l(ten)l(ts)94 697 y Fk(Barco)t(de)45 b(to)t(ols)16
+b Fa(.)k(.)g(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)
+f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g
+(.)h(.)60 b Fk(1)94 955 y(1)135 b(Ov)l(erview)12 b Fa(.)21
+b(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h
+(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)
+f(.)57 b Fk(1)94 1212 y(2)135 b(The)45 b(Underlying)g(Data)h(Structure)
+41 b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)86
+b Fk(1)393 1337 y Fl(2.1)92 b(The)30 b(Fields)19 b Fg(.)14
+b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49
+b Fl(1)692 1436 y(Use)31 b(of)g(the)f Fg(width)39 b Fl(and)30
+b Fg(sc)-5 b(alef)50 b Fl(\014elds.)25 b Fg(.)15 b(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)56 b Fl(2)393 1536 y(2.2)92 b(The)30 b(In)m(termediate)h
+(Represen)m(tation)24 b Fg(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)54 b Fl(3)94 1768 y Fk(3)135 b(The)45 b(Flags)28
+b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f
+(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)
+f(.)g(.)73 b Fk(3)94 2026 y(4)135 b(F)-11 b(unctions)44
+b(Exp)t(orted)h(b)l(y)g(the)g(Library)37 b Fa(.)19 b(.)h(.)f(.)g(.)h(.)
+f(.)h(.)f(.)h(.)f(.)g(.)81 b Fk(4)94 2283 y(5)135 b(The)45
+b Fa(b)-7 b(ar)g(c)g(o)g(de)52 b Fk(fron)l(tend)46 b(program)11
+b Fa(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h
+(.)55 b Fk(5)393 2408 y Fl(5.1)92 b(The)30 b(Command)g(Line)24
+b Fg(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
+g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fl(5)94 2640 y Fk(6)135
+b(Supp)t(orted)44 b(Enco)t(dings)33 b Fa(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f
+(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)
+78 b Fk(7)94 2897 y(7)135 b(PCL)45 b(Output)40 b Fa(.)20
+b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
+(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)85
+b Fk(9)94 3155 y(8)135 b(Bugs)45 b(and)f(P)l(ending)h(Issues.)36
+b Fa(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h
+(.)f(.)g(.)h(.)79 b Fk(10)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/barcode-0.98/doc/barcodedoc.txt b/barcode-0.98/doc/barcodedoc.txt
new file mode 100644 (file)
index 0000000..2d242f9
--- /dev/null
@@ -0,0 +1,734 @@
+
+
+This is barcode.info, produced by makeinfo version 4.0b from
+barcode.texinfo.
+
+   This file is the User's Manual for the barcode library (version
+0.98).
+
+
+
+
+*Node: Overview
+                               Overview
+                               ********
+
+   The "barcode" package is mainly a C library for creating bar-code
+output files. It also includes a command line front-end and (in a
+foreseeable future) a graphic frontend.
+
+   The package is designed as a library because we think the main use
+for barcode-generation tools is inside more featured applications. The
+library addresses bar code printing as two distinct problems: creation
+of bar information and actual conversion to an output format. To this
+aim we use an intermediate representation for bar codes, which is
+currently documented in the `ps.c' source file (not in this document).
+
+   Note that the library and the accompanying material is released
+according to the GPL license, not the LGPL one. A copy of the GPL is
+included in the distribution tarball.
+
+
+
+
+*Node: The Barcode Object
+                               The Underlying Data Structure
+                               *****************************
+
+   Every barcode-related function acts on a data structure defined in
+the `barcode.h' header, which must be included by any C source file
+that uses the library. The header is installed by make install.
+
+   The definition of the data structure is included here for reference:
+
+     struct Barcode_Item {
+         int flags;         /* type of encoding and other flags */
+         char *ascii;       /* malloced */
+         char *partial;     /* malloced too */
+         char *textinfo;    /* information about text placement */
+         char *encoding;    /* code name, filled by encoding engine */
+         int width, height; /* output units */
+         int xoff, yoff;    /* output units */
+         int margin;        /* output units */
+         double scalef;     /* requested scaling for barcode */
+         int error;         /* an errno-like value, in case of failure */
+     };
+
+   The exact meaning of each field and the various flags implemented are
+described in the following sections.
+
+   Even though you won't usually need to act on the contents of this
+structure, some of the functions in the library receive arguments that
+are directly related to one or more of these fields.
+
+
+
+
+*Node: The Field List
+                               The Fields
+                               ==========
+
+`int flags;'
+     The flags are, as you may suspect, meant to specify the exact
+     behaviour of the library. They are often passed as an argument to
+     barcode functions and are discussed in the next section.
+
+`char *ascii;'
+`char *partial;'
+`char *textinfo;'
+`char *encoding;'
+     These fields are internally managed by the library, and you are
+     not expected to touch them if you use the provided API. All of
+     them are allocated with malloc.
+
+`int width;'
+`int height;'
+     They specify the width and height of the active barcode region
+     (i.e., excluding the white margin), in the units used to create
+     output data (for postscript they are points, 1/72th of an inch,
+     0.352 mm). The fields can be either assigned to in the structure
+     or via Barcode_Position(), at your choice.  If either value or
+     both are left to their default value of zero, the output engine
+     will assign default values according to the specified scaling
+     factor. If the specified width is bigger than needed (according to
+     the scaling factor), the output barcode will be centered in its
+     requested region. If either the width of the height are too small
+     for the specified scale factor, the output bar code will expand
+     symmetrically around the requested region.
+
+`int xoff;'
+`int yoff;'
+     The fields specify offset from the coordinate origin of the output
+     engine (for postscript, position 0,0 is the lower left corner of
+     the page).  The fields can be either assigned to in the structure
+     or via Barcode_Position(), at your choice.  The offset specifies
+     where the white margin begins, not where the first bar will be
+     printed. To print real ink to the specified position you should
+     set margin to 0.
+
+`int margin;'
+     The white margin that will be left around the printed area of the
+     bar code. The same margin is applied to all sides of the printed
+     area. The default value for the margin is defined in `barcode.h'
+     as BARCODE_DEFAULT_MARGIN (10).
+
+`double scalef;'
+     The enlarge or shrink value for the bar code over its default
+     dimension. The width and scalef fields interact deeply in the
+     creation of the output, and a complete description of the issues
+     appears later in this section.
+
+`int error;'
+     The field is used when a barcode function fails to host an
+     errno-like integer value.
+
+Use of the width and scalef fields.
+-----------------------------------
+
+   A width unit is the width of the thinnest bar and/or space in the
+chosen code; it defaults to 1 point if the output is postscript or
+encapsulated postscript.
+
+   Either or both the code width and the scale factor can be left
+unspecified (i.e., zero). The library deals with defaults in the
+following way:
+
+Both unspecified
+     If both the width and the scale factor are unspecified, the scale
+     factor will default to 1.0 and the width is calculated according
+     to the actual width of the bar code being printed.
+
+Width unspecified
+     If the width is not specified, it is calculated according to the
+     values of scalef.
+
+Scale factor unspecified
+     If the scale factor is not specified, it will be chosen so that
+     the generated bar code exactly fits the specified width.
+
+Both specified
+     The code will be printed inside the specified region according to
+     the specified scale factor. It will be aligned to the left.  If,
+     however, the chosen width is too small for the specific bar code
+     and scaling factor, then the code will extend symmetrically to the
+     left and to the right of the chosen region.
+
+
+
+
+*Node: The Intermediate Representation
+                               The Intermediate Representation
+                               ===============================
+
+   The encoding functions print their output into the partial and
+texinfo fields of the barcode data structure. Those fields, together
+with position information, are then used to generate actual output.
+This is an informal description of the intermediate format.
+
+   The first char in partial tells how much extra space to add to the
+left of the bars. For EAN-13, it is used to leave space to print the
+first digit, other codes may have '0' for no-extra-space-needed.
+
+   The next characters are alternating bars and spaces, as multiples of
+the base dimension which is 1 unless the code is rescaled. Rescaling is
+calculated as the ratio from the requested width and the calculated
+width.  Digits represent bar/space dimensions. Lower-case letters
+represent those bars that should extend lower than the others: 'a' is
+equivalent to '1', 'b' is '2' and so on up to 'i' which is equivalent to
+'9'. Other letters will be used for encoding-specific meanings, as soon
+as I implement them.
+
+   The textinfo string is made up of fields %lf:%lf:%c separated by
+blank space. The first integer is the x position of the character, the
+second is the font size (before rescaling) and the char item is the
+character to be printed.
+
+   Both the partial and textinfo strings may include "-" or "+" as
+special characters (in textinfo the char should be a stand-alone word).
+They state where the text should be printed: below the bars ("-",
+default) or above the bars. This is used, for example, to print the
+add-5 and add-2 codes to the right of UPC or EAN codes (the add-5
+extension is mostly used in ISBN codes).
+
+
+
+
+*Node: Supported Flags
+                               The Flags
+                               *********
+
+   The following flags are supported by version 0.98 of the library:
+
+`BARCODE_ENCODING_MASK'
+     The mask is used to extract the encoding-type identifier from the
+     flags field.
+
+`BARCODE_EAN'
+`BARCODE_UPC'
+`BARCODE_ISBN'
+`BARCODE_128B'
+`BARCODE_128C'
+`BARCODE_128'
+`BARCODE_128RAW'
+`BARCODE_39'
+`BARCODE_I25'
+`BARCODE_CBR'
+`BARCODE_MSI'
+`BARCODE_PLS'
+`BARCODE_93'
+     The currently supported encoding types: EAN (13 digits, 8 digits,
+     13 + 2 add-on and 13 + 5 add-on), UPC (UPC-A, UPC-E, UPC-A with 2
+     or 5 digit add-on), ISBN (with or without the 5-digit add-on),
+     CODE128-B (the whole set of printable ASCII characters), CODE128-C
+     (two digits encoded by each barcode symbol), CODE128 (all ASCII
+     values), a "raw-input" pseudo-code that generates CODE128 output,
+     CODE39 (alphanumeric), "interleaved 2 of 5" (numeric), Codabar
+     (numeric plus a few symbols), MSI (numeric) and Plessey (hex
+     digits).  *Note Supported Encodings::.
+
+`BARCODE_ANY'
+     This special encoding type (represented by a value of zero, so it
+     will be the default) tells the encoding procedure to look for the
+     first encoding type that can deal with a textual string.
+     Therefore, a 11-digit code will be printed as UPC (as well as
+     6-digit, 11+2 and 11+5), a 12-digit (or 7-digit, or 12+2 or 12+5)
+     as EAN13, an ISBN code (with or without hyphens, with or without
+     add-5) will be encoded in its EAN13 representation, an even number
+     of digits is encoded using CODE128C and a generic string is
+     encoded using CODE128B. Since code-39 offers a much larger
+     representation for the same text string, code128-b is preferred
+     over code39 for alphanumeric strings.
+
+`BARCODE_NO_ASCII'
+     Instructs the engine not to print the ascii string on output. By
+     default the bar code is accompanied with an ascii version of the
+     text it encodes.
+
+`BARCODE_NO_CHECKSUM'
+     Instructs the engine not to add the checksum character to the
+     output. Not all the encoding types can drop the checksum; those
+     where the checksum is mandatory (like EAN and UPC) just ignore the
+     flag.
+
+`BARCODE_OUTPUT_MASK'
+     The mask is used to extract the output-type identifier from the
+     flags field.
+
+`BARCODE_OUT_PS'
+`BARCODE_OUT_EPS'
+`BARCODE_OUT_PCL'
+`BARCODE_OUT_PCL_III'
+     The currently supported encoding types: full-page postscript and
+     encapsulated postscript; PCL (print command language, for HP
+     printers) and PCL-III (same as PCL, but uses a font not available
+     on older printers).
+
+`BARCODE_OUT_NOHEADERS'
+     The flag instructs the printing engine not to print the header and
+     footer part of the file. This makes sense for the postscript
+     engine but might not make sense for other engines; such other
+     engines will silently ignore the flag just like the PCL back-end
+     does.
+
+
+
+
+*Node: The API
+                               Functions Exported by the Library
+                               *********************************
+
+   The functions included in the barcode library are declared in the
+header file barcode.h.  They perform the following tasks:
+
+`struct Barcode_Item *Barcode_Create(char *text);'
+     The function creates a new barcode object to deal with a specified
+     text string.  It returns NULL in case of failure and a pointer to
+     a barcode data structure in case of success.
+
+`int Barcode_Delete(struct Barcode_Item *bc);'
+     Destroy a barcode object. Always returns 0 (success)
+
+`int Barcode_Encode(struct Barcode_Item *bc, int flags);'
+     Encode the text included in the bc object. Valid flags are the
+     encoding type (other flags are ignored) and BARCODE_NO_CHECKSUM
+     (other flags are silently ignored); if the flag argument is zero,
+     bc->flags will apply. The function returns 0 on success and -1 in
+     case of error. After successful termination the data structure
+     will host the description of the bar code and its textual
+     representation, after a failure the error field will include the
+     reason of the failure.
+
+`int Barcode_Print(struct Barcode_Item *bc, FILE *f, int flags);'
+     Print the bar code described by bc to the specified file.  Valid
+     flags are the output type, BARCODE_NO_ASCII and
+     BARCODE_OUT_NOHEADERS, other flags are ignored. If any of these
+     flags is zero, it will be inherited from bc->flags which therefore
+     takes precedence. The function returns 0 on success and -1 in case
+     of error (with bc->error set accordingly). In case of success, the
+     bar code is printed to the specified file, which won't be closed
+     after use.
+
+`int Barcode_Position(struct Barcode_Item *bc, int wid, int hei, int xoff, int yoff, double scalef);'
+     The function is a shortcut to assign values to the data structure.
+
+`int Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei, int xoff, int yoff, int flags);'
+     The function deals with the whole life of the barcode object by
+     calling the other functions; it uses all the specified flags.
+
+`int Barcode_Version(char *versionname);'
+     Returns the current version as an integer number of the form major
+     * 10000 + minor * 100 + release. Therefore, version 1.03.5 will be
+     returned as 10305 and version 0.53 as 5300.  If the argument is
+     non-null, it will be used to return the version number as a
+     string. Note that the same information is available from two
+     preprocessor macros: BARCODE_VERSION (the string) and
+     BARCODE_VERSION_INT (the integer number).
+
+
+
+
+*Node: The barcode Executable
+                               The barcode frontend program
+                               ****************************
+
+   The barcode program is a front-end to access some features of the
+library from the command line.  It is able to read user supplied
+strings from the command line or a data file (standard input by default)
+and encode all of them.
+
+
+
+
+*Node: The Command Line
+                               The Command Line
+                               ================
+
+   barcode accepts the following options:
+
+`--help or -h'
+     Print a usage summary and exit.
+
+`-i filename'
+     Identify a file where strings to be encoded are read from. If
+     missing (and if -b is not used) it defaults to standard input.
+     Each data line of the input file will be used to create one
+     barcode output.
+
+`-o filename'
+     Output file. It defaults to standard output.
+
+`-b string'
+     Specify a single "barcode" string to be encoded.  The option can
+     be used multiple times in order to encode multiple strings (this
+     will result in multi-page postscript output or a table of barcodes
+     if -t is specified).  The strings must match the encoding chosen;
+     if it doesn't match the program will print a warning to stderr and
+     generate "blank" output (although not zero-length).  Please note
+     that a string including spaces or other special characters must be
+     properly quoted.
+
+`-e encoding'
+     encoding is the name of the chosen encoding format being used. It
+     defaults to the value of the environment variable BARCODE_ENCODING
+     or to auto detection if the environment is also unset.
+
+`-g geometry'
+     The geometry argument is of the form "[<width> x <height>] [+
+     <xmargin> + <ymargin>]" (with no intervening spaces). Unspecified
+     margin values will result in no margin; unspecified size results
+     in default size.  The specified values represent print points by
+     default, and can be inches, millimeters or other units according
+     to the -u option or the BARCODE_UNIT environment variable.  The
+     argument is used to place the printout code on the page. Note that
+     an additional white margin of 10 points is added to the printout.
+     If the option is unspecified, BARCODE_GEOMETRY is looked up in the
+     environment, if missing a default size and no margin (but the
+     default 10 points) are used.
+
+`-t table-geometry'
+     Used to print several barcodes to a single page, this option is
+     meant to be used to print stickers. The argument is of the form
+     "<columns> x <lines> [+ <leftmargin> + <bottommargin> [-
+     <rightmargin> [- <topmargin>]]]" (with no intervening spaces); if
+     missing, the top and right margin will default to be the same as
+     the bottom and left margin. The margins are specified in print
+     points or in the chosen unit (see -u below).  If the option is not
+     specified, BARCODE_TABLE is looked up in the environment,
+     otherwise no table is printed and each barcode will get its own
+     page.  The size (but not the position) of a barcode item within a
+     table can also be selected using -g (see "geometry" above),
+     without struggling with external and internal margins.  I still
+     think management of geometries in a table is suboptimal, but I
+     can't make it better without introducing incompatibilities.
+
+`-m margin(s)'
+     Specifies an internal margin for each sticker in the table. The
+     argument is of the form "<xmargin>,<ymargin>" and the margin is
+     applied symmetrically to the sticker. If unspecified, the
+     environment variable BARCODE_MARGIN is used or a default internal
+     margin of 10 points is used.
+
+`-n'
+     "Numeric" output: don't print the ASCII form of the code, only the
+     bars.
+
+`-c'
+     No checksum character (for encodings that allow it, like code 39,
+     other codes, like UPC or EAN, ignore this option).
+
+`-E'
+     Encapsulated postscript (default is normal postscript). When the
+     output is generated as EPS only one barcode is encoded.
+
+`-P'
+     PCL output. Please note that the Y direction goes from top to
+     bottom for PCL, and the origin for an image is the top-left corner
+     instead of the bottom-left
+
+`-p pagesize'
+     Specify a non-default page size. The page size can be specified in
+     millimeters, inches or plain numbers (for example: "210x297mm",
+     "8.5x11in", "595x842"). A page specification as numbers will be
+     interpreted according to the current unit specification (see -u
+     below). If libpaper is available, you can also specify the page
+     size with its name, like "A3" or "letter" (libpaper is a standard
+     component of Debian GNU/Linux, but may be missing elsewhere). The
+     default page size is your system-wide default if libpaper is
+     there, A4 otherwise.
+
+`-u unit'
+     Choose the unit used in size specifications. Accepted values are
+     "mm", "cm", "in" and "pt". By default, the program will check
+     BARCODE_UNIT in the environment, and assume points otherwise (this
+     behaviour is compatible with 0.92 and previous versions. If -u
+     appears more than once, each instance will modified the behaviour
+     for the arguments at its right, as the command line is processes
+     left to right. The program internally works with points, and any
+     size is approximated to the nearest multiple of one point. The -u
+     option affect -g (geometry), -t (table) and -p (page size).
+
+
+
+
+*Node: Supported Encodings
+                               Supported Encodings
+                               *******************
+
+   The program encodes text strings passed either on the command line
+(with -b) or retrieved from standard input. The text representation is
+interpreted according to the following rules. When auto-detection of
+the encoding is enabled (i.e, no explicit encoding type is specified),
+the encoding types are scanned to find one that can digest the text
+string.  The following list of supported types is sorted in the same
+order the library uses when auto-detecting a suitable encoding for a
+string.
+
+EAN
+     The EAN frontend is similar to UPC; it accepts strings of digits,
+     12 or 7 characters long. Strings of 13 or 8 characters are
+     accepted if the provided checksum digit is correct.  I expect most
+     users to feed input without a checksum, though. The add-2 and
+     add-5 extension are accepted for both the EAN-13 and the EAN-8
+     encodings.  The following are example of valid input strings:
+     "123456789012" (EAN-13), "1234567890128" (EAN-13 wih checksum),
+     "1234567" (EAN-8), "12345670 12345" (EAN-8 with checksum and
+     add-5), "123456789012 12" (EAN-13 with add-2), "123456789012
+     12345" (EAN-13 with add-5).
+
+UPC
+     The UPC frontend accepts only strings made up of digits (and, if a
+     supplemental encoding is used, a blank to separate it).  It
+     accepts strings of 11 or 12 digits (UPC-A) and 6 or 7 or 8 digits
+     (UPC-E).
+
+     The 12th digit of UPC-A is the checksum and is added by the
+     library if not specified in the input; if it is specified, it must
+     be the right checksum or the code is rejected as invalid.  For
+     UPC-E, 6 digit are considered to be the middle part of the code, a
+     leading 0 is assumed and the checksum is added; 7 digits are
+     either considered the initial part (leading digit 0 or 1, checksum
+     missing) or the final part (checksum specified, leading 0
+     assumed); 8 digits are considered to be the complete code, with
+     leading 0 or 1 and checksum.  For both UPC-A and UPC-E, a trailing
+     string of 2 digits or 5 digits is accepted as well. Therefore, the
+     following are examples of valid strings that can be encoded as UPC:
+     "01234567890" (UPC-A) "012345678905" (UPC-A with checksum),
+     "012345" (UPC-E), "01234567890 12" (UPC-A, add-2) and "01234567890
+     12345" (UPC-A, add-5), "0123456 12" (UPC-E, add-2).  Please note
+     that when setting BARCODE_ANY to auto-detect the encoding to be
+     used, 12-digit strings and 7-digit strings will always be
+     identified as EAN. This because I expect most user to provide
+     input without a checksum. If you need to specify UPC-with-checksum
+     as input you must explicitly set BARCODE_UPC as a flag or use -e
+     upc on the command line.
+
+ISBN
+     ISBN numbers are encoded as EAN-13 symbols, with an optional add-5
+     trailer. The ISBN frontend of the library accepts real ISBN
+     numbers and deals with any hyphen and, if present, the ISBN
+     checksum character before encoding data. Valid representations for
+     ISBN strings are for example: "1-56592-292-1", "3-89721-122-X" and
+     "3-89721-122-X 06900".
+
+CODE 128-B
+     This encoding can represent all of the printing ASCII characters,
+     from the space (32) to DEL (127). The checksum digit is mandatory
+     in this encoding.
+
+CODE 128-C
+     The "C" variation of Code-128 uses Code-128 symbols to represent
+     two digits at a time (Code-128 is made up of 104 symbols whose
+     interpretation is controlled by the start symbol being used). Code
+     128-C is thus the most compact way to represent any even number of
+     digits. The encoder refuses to deal with an odd number of digits
+     because the caller is expected to provide proper padding to an
+     even number of digits. (Since Code-128 includes control symbols to
+     switch charset, it is theoretically possible to represent the odd
+     digit as a Code 128-A or 128-B symbol, but this tool doesn't
+     currently implement this option).
+
+CODE 128 RAW
+     Code-128 output represented symbol-by-symbol in the input string.
+     To override part of the problems outlined below in specifying
+     code128 symbols, this pseudo-encoding allows the used to specify a
+     list of code128 symbols separated by spaces. Each symbol is
+     represented by a number in the range 0-105.  The list should
+     include the leading character.The checksum and the stop character
+     are automatically added by the library. Most likely this
+     pseudo-encoding will be used with BARCODE_NO_ASCII and some
+     external program to supply the printed text.
+
+CODE 39
+     The code-39 standard can encode uppercase letters, digits, the
+     blank space, plus, minus, dot, star, dollar, slash, percent.  Any
+     string that is only composed of such characters is accepted by the
+     code-39 encoder. To avoid loosing information, the encoder refuses
+     to encode mixed-case strings (a lowercase string is nonetheless
+     accepted as a shortcut, but is encoded as uppercase).
+
+INTERLEAVED 2 OF 5
+     This encoding can only represent an even number of digits (odd
+     digits are represented by bars, and even digits by the
+     interleaving spaces). The name stresses the fact that two of the
+     five items (bars or spaces) allocated to each symbol are wide,
+     while the rest are narrow. The checksum digit is optional (can be
+     disabled via BARCODE_NO_CHECKSUM).  Since the number of digits,
+     including the checksum, must be even, a leading zero is inserted
+     in the string being encoded if needed (this is specifically stated
+     in the specs I have access to).
+
+CODE 128
+     Automatic selection between alphabet A, B and C of the Code-128
+     standard. This encoding can represent all ASCII symbols, from 0
+     (NUL) to 127 (DEL), as well as four special symbols, named F1, F2,
+     F3, F4. The set of symbols available in this encoding is not
+     easily represented as input to the barcode library, so the
+     following convention is used.  In the input string, which is a
+     C-language null-terminated string, the NUL char is represented by
+     the value 128 (0x80, 0200) and the F1-F4 characters are
+     represented by the values 193-196 (0xc1-0xc4, 0301-0304).  The
+     values have been chosen to ease their representation as escape
+     sequences.
+
+     Since the shell doesn't seem to interpret escape sequences on the
+     command line, the "-b" option cannot be easily used to designate
+     the strings to be encoded. As a workaround you can resort to the
+     command echo, either within back-ticks or used separately to
+     create a file that is then fed to the standard-input of barcode -
+     assuming your echo command processes escape sequences.  The
+     newline character is especially though to encode (but not
+     impossible unless you use a csh variant.
+
+     These problems only apply to the command-line tool; the use of
+     library functions doesn't give any problem. In needed, you can use
+     the "code 128 raw" pseudo-encoding to represent code128 symbols by
+     their numerical value. This encoding is used late in the
+     auto-selection mechanism because (almost) any input string can be
+     represented using code128.
+
+CODABAR
+     Codabar can encode the ten digits and a few special symbols
+     (minus, plus, dollar, colon, bar, dot). The characters "A", "B",
+     "C" and "D" are used to represent four different start/stop
+     characters. The input string to the barcode library can include
+     the start and stop characters or not include them (in which case
+     "A" is used as start and "B" as stop). Start and stop characters
+     in the input string can be either all lowercase or all uppercase
+     and are always printed as uppercase.
+
+PLESSEY
+     Plessey barcodes can encode all the hexadecimal digits. Alphabetic
+     digits in the input string must either be all lowercase or all
+     uppercase. The output text is always uppercase.
+
+MSI
+     MSI can only encode the decimal digits. While the standard
+     specifies either one or two check digits, the current
+     implementation in this library only generates one check digit.
+
+CODE 93
+     The code-93 standard can natively encode 48 different characters,
+     including uppercase letters, digits, the blank space, plus, minus,
+     dot, star, dollar, slash, percent, as well as five special
+     characters:  a start/stop delimiter and four "shift characters"
+     used for extended encoding.    Using this "extended encoding"
+     method, any standard 7-bit ASCII character can be encoded, but it
+     takes up two symbol lengths in barcode if the character is not
+     natively supported (one of the 48).  The encoder here fully
+     implements the code 93 encoding standard.  Any characters natively
+     supported (A-Z, 0-9, ".+-/$&%") will be encoded as such - for any
+     other characters (such as lower case letters, brackets,
+     parentheses, etc.), the encoder will revert to extended encoding.
+     As a note, the option to exclude the checksum will eliminate the
+     two modulo-47 checksums (called C and K) from the barcode, but this
+     probably will make it unreadable by 99% of all scanning systems.
+     These checksums are specified to be used at the firmware level,
+     and their absence will be interpreted as an invalid barcode.
+
+
+
+
+*Node: PCL Output
+                               PCL Output
+                               **********
+
+   While the default output is Postscript (possibly EPS), and Postscript
+can be post-processed to almost anything, it is sometimes desirable to
+create output directly usable by the specific printer at hand.  PCL is
+currently supported as an output format for this reason.  Please note
+that the Y coordinate for PCL goes from top to bottom, while for
+Postscript it goes from bottom to top. Consistently, while in
+Postscript you specify the bottom-left corner as origin, for PCL you
+specify the top-left corner.
+
+   Barcode output for PCL Printers (HP LaserJet and compatibles), was
+developed using PCL5 Reference manuals from HP.  that really refers to
+these printers:
+   * LaserJet III, III P, III D, III Si,
+
+   * LaserJet 4 family
+
+   * LaserJet 5 family
+
+   * LaserJet 6 family
+
+   * Color LaserJet
+
+   * DeskJet 1200 and 1600.
+
+
+   However, barcode printing uses a very small subset of PCL, probably
+also LaserJet II should print it without problem, but the resulting
+text may be horrible.
+
+   The only real difference from one printer to another really depends
+on which font are available in the printer, used in printing the label
+associated to the bars (if requested).
+
+   Earlier LaserJet supports only bitmaps fonts, so these are not
+"scalable". (Ljet II ?), Also these fonts, when available, have a
+specified direction, and not all of them are available in both Portrait
+and Landscape mode.
+
+   From LaserJet 4 series, (except 4L/5L that are entry-level printers),
+Arial scalable font should be available, so it's the "default font"
+used by this program.
+
+   LaserJet III series printers (and 4L, 5L), don't feature "Arial" as a
+resident font, so you should use BARCODE_OUT_PCL_III instead of
+BARCODE_OUT_PCL., and font the font used will be "Univers" instead of
+"Arial".
+
+   Results on compatible printers, may depend on consistency of PCL5
+compatibility, in doubt, try BARCODE_OUT_PCL_III
+
+   PJL commands are not used here, as it's not very compatible.
+
+   Tested Printers:
+   * Hp LaserJet 4050
+
+   * Hp LaserJet 2100
+
+   * Epson N-1200 emul PCL
+
+   * Toshiba DP2570 (copier) + PCL option
+
+   * Epson EPL-7100 emul. HP LaserJet II: bars print fine but text is
+     bad.
+
+
+
+
+*Node: Bugs and Pending Issues
+                               Bugs and Pending Issues.
+                               ************************
+
+   The current management of borders/margins is far from optimal. The
+"default" margin applied by the library interferes with the external
+representation, but I feel it is mandatory to avoid creating barcode
+output with no surrounding white space (the problem is especially
+relevant for EPS output).
+
+   EAN-128 is not (yet) supported. I plan to implement it pretty soon
+and then bless the package as version 1.0.
+
+
+
+
+
+Tag Table:Node: Top\7f154
+                               Node: Overview\7f526
+                               Node: The Barcode Object\7f1404
+Node: The Field List\7f2821
+Node: The Intermediate Representation\7f6586
+Node: Supported Flags\7f8359
+Node: The API\7f11343
+Node: The barcode Executable\7f14029
+Node: The Command Line\7f14458
+Node: Supported Encodings\7f19557
+Node: PCL Output\7f28997
+Node: Bugs and Pending Issues\7f31316
+
+
+
+End Tag Table
\ No newline at end of file
diff --git a/barcode-0.98/doc/doc.barcode b/barcode-0.98/doc/doc.barcode
new file mode 100644 (file)
index 0000000..7b46055
--- /dev/null
@@ -0,0 +1,939 @@
+\input texinfo    @c -*-texinfo-*-
+%
+% doc.barcode - main file for the documentation
+%
+%%%%
+
+%------------------------------------------------------------------------------
+%
+%                         NOTE FOR THE UNAWARE USER
+%                         =========================
+%
+%    This file is a texinfo source. It isn't the binary file of some strange
+%    editor of mine. If you want ascii, you should "make barcodedoc.txt".
+%
+%------------------------------------------------------------------------------
+
+%
+% This is not a conventional info file...
+% I use two extra features:
+%       - The '%' as a comment marker, if at beg. of line ("\%" -> "%")
+%       - leading blanks are allowed
+%
+
+@comment %**start of header
+@setfilename barcode.info
+@settitle Barcode @value{version}
+@iftex
+@afourpaper
+@end iftex
+@comment %**end of header
+
+@setchapternewpage off
+
+@set version 0.98
+@set update-month March 2002
+
+@finalout
+
+@ifinfo
+
+This file is the User's Manual for the barcode library (version
+@value{version}).
+
+@end ifinfo
+
+@setchapternewpage odd
+@titlepage
+@c use the new format for titles
+@title barcode @value{version}
+@subtitle A library for drawing bar codes
+@subtitle @value{update-month}
+
+@author by Alessandro Rubini (@code{rubini@@gnu.org})
+
+@end titlepage
+@setchapternewpage off
+@headings single
+
+
+@node Top, Overview, (dir), (dir)
+@top Barcode tools
+
+This file documents version @value{version} of the barcode
+library and sample programs (@value{update-month}).
+
+@menu
+* Overview::                    
+* The Barcode Object::          
+* Supported Flags::             
+* The API::                     
+* The barcode Executable::      
+* Supported Encodings::         
+* PCL Output::                  
+* Bugs and Pending Issues::     
+@end menu
+
+
+%##########################################################################
+%##########################################################################
+
+@node Overview, The Barcode Object, Top, Top
+@chapter Overview
+
+The @dfn{barcode} package is mainly a C library for creating bar-code
+output files. It also includes a command line front-end and (in a
+foreseeable future) a graphic frontend.
+
+The package is designed as a library because we think the main use for
+barcode-generation tools is inside more featured applications. The
+library addresses bar code printing as two distinct problems: creation
+of bar information and actual conversion to an output format. To this
+aim we use an intermediate representation for bar codes, which is
+currently documented in the @file{ps.c} source file (not in this
+document).
+
+Note that the library and the accompanying material is released
+according to the GPL license, not the LGPL one. A copy of the GPL is
+included in the distribution tarball.
+
+%##########################################################################
+
+@node  The Barcode Object, Supported Flags, Overview, Top
+@chapter The Underlying Data Structure
+
+Every barcode-related function acts on a data structure defined in the
+@file{barcode.h} header, which must be included by any C source file
+that uses the library. The header is installed by @t{make install}.
+
+The definition of the data structure is included here for reference:
+
+@lisp
+struct Barcode_Item @{
+    int flags;         /* type of encoding and other flags */
+    char *ascii;       /* malloced */
+    char *partial;     /* malloced too */
+    char *textinfo;    /* information about text placement */
+    char *encoding;    /* code name, filled by encoding engine */
+    int width, height; /* output units */
+    int xoff, yoff;    /* output units */
+    int margin;        /* output units */
+    double scalef;     /* requested scaling for barcode */
+    int error;         /* an errno-like value, in case of failure */
+@};
+@end lisp
+
+The exact meaning of each field and the various flags implemented are
+described in the following sections.
+
+Even though you won't usually need to act on the contents of this
+structure, some of the functions in the library receive arguments that
+are directly related to one or more of these fields.
+
+%==========================================================================
+
+@menu
+* The Field List::              
+* The Intermediate Representation::  
+@end menu
+
+%--------------------------------------------------------------------------
+@node The Field List, The Intermediate Representation, The Barcode Object, The Barcode Object
+@section The Fields
+
+@table @code
+
+@item int flags;
+
+        The flags are, as you may suspect, meant to specify the exact
+        behaviour of the library. They are often passed as an argument
+        to @i{barcode} functions and are discussed in the next section.
+
+@item char *ascii;
+@itemx char *partial;
+@itemx char *textinfo;
+@itemx char *encoding;
+
+        These fields are internally managed by the library, and you are
+        not expected to touch them if you use the provided API. All
+        of them are allocated with @i{malloc}.
+
+@item int width;
+@itemx int height;
+
+        They specify the width and height of the @i{active} barcode
+       region (i.e., excluding the white margin), in the units used
+       to create output data (for postscript they are points, 1/72th
+       of an inch, 0.352 mm). The fields can be either assigned to
+       in the structure or via @i{Barcode_Position()}, at your
+       choice.  If either value or both are left to their default
+       value of zero, the output engine will assign default values
+       according to the specified scaling factor. If the specified
+       width is bigger than needed (according to the scaling factor),
+       the output barcode will be centered in its requested
+       region. If either the width of the height are too small for
+       the specified scale factor, the output bar code will expand
+       symmetrically around the requested region.
+        
+@item int xoff;
+@itemx int yoff;
+
+       The fields specify offset from the coordinate origin of the
+       output engine (for postscript, position 0,0 is the lower left
+       corner of the page).  The fields can be either assigned to in
+       the structure or via @i{Barcode_Position()}, at your choice.
+       The offset specifies where the white margin begins, not where
+       the first bar will be printed. To print real ink to the
+       specified position you should set @i{margin} to 0.
+
+@item int margin;
+
+       The white margin that will be left around the printed area of
+       the bar code. The same margin is applied to all sides of the
+       printed area. The default value for the margin is defined in
+       @file{barcode.h} as @t{BARCODE_DEFAULT_MARGIN} (10).
+
+@item double scalef;
+
+       The enlarge or shrink value for the bar code over its default
+       dimension. The @i{width} and @i{scalef} fields interact deeply
+       in the creation of the output, and a complete description of
+       the issues appears later in this section.
+
+@item int error;
+
+       The field is used when a @i{barcode} function fails to host
+        an @t{errno}-like integer value.
+
+@end table
+
+
+@unnumberedsubsec Use of the @i{width} and @i{scalef} fields.
+
+A width unit is the width of the thinnest bar and/or space in the
+chosen code; it defaults to 1 point if the output is postscript or
+encapsulated postscript.
+
+Either or both the code width and the scale factor can be left
+unspecified (i.e., zero). The library deals with defaults in the
+following way:
+
+@table @i
+
+@item Both unspecified
+
+       If both the width and the scale factor are unspecified, the
+       scale factor will default to 1.0 and the width is calculated
+       according to the actual width of the bar code being printed.
+
+@item Width unspecified
+
+       If the width is not specified, it is calculated according to
+       the values of @i{scalef}. 
+
+@item Scale factor unspecified
+
+       If the scale factor is not specified, it will be chosen so
+       that the generated bar code exactly fits the specified width.
+
+@item Both specified
+
+       The code will be printed inside the specified region according
+       to the specified scale factor. It will be aligned to the left.
+       If, however, the chosen width is too small for the specific
+       bar code and scaling factor, then the code will extend
+       symmetrically to the left and to the right of the chosen
+       region.
+
+@end table
+
+%--------------------------------------------------------------------------
+@node The Intermediate Representation,  , The Field List, The Barcode Object
+@section The Intermediate Representation
+
+The encoding functions print their output into the @t{partial} and
+@t{texinfo} fields of the barcode data structure. Those fields, together
+with position information, are then used to generate actual output.
+This is an informal description of the intermediate format.
+
+The first char in @t{partial} tells how much extra space to add to the
+left of the bars. For EAN-13, it is used to leave space to print the
+first digit, other codes may have '0' for no-extra-space-needed.
+
+The next characters are alternating bars and spaces, as multiples of the
+base dimension which is 1 unless the code is rescaled. Rescaling is
+calculated as the ratio from the requested width and the calculated
+width.  Digits represent bar/space dimensions. Lower-case letters
+represent those bars that should extend lower than the others: 'a' is
+equivalent to '1', 'b' is '2' and so on up to 'i' which is equivalent to
+'9'. Other letters will be used for encoding-specific meanings, as soon
+as I implement them.
+
+The @t{textinfo} string is made up of fields @t{%lf:%lf:%c} separated by
+blank space. The first integer is the x position of the character,
+the second is the font size (before rescaling) and the char item is
+the character to be printed.
+
+Both the @t{partial} and @t{textinfo} strings may include ``@t{-}'' or
+``@t{+}'' as special characters (in @t{textinfo} the char should be a
+stand-alone word).  They state where the text should be printed: below
+the bars (``@t{-}'', default) or above the bars. This is used, for
+example, to print the add-5 and add-2 codes to the right of UPC or EAN
+codes (the add-5 extension is mostly used in ISBN codes).
+
+
+
+
+%==========================================================================
+
+@node Supported Flags, The API, The Barcode Object, Top
+@chapter The Flags
+
+The following flags are supported by version @value{version} of the
+library:
+
+@table @code
+
+@item BARCODE_ENCODING_MASK
+
+       The mask is used to extract the encoding-type identifier from
+       the @i{flags} field.
+
+@item BARCODE_EAN
+@itemx BARCODE_UPC
+@itemx BARCODE_ISBN
+@itemx BARCODE_128B
+@itemx BARCODE_128C
+@itemx BARCODE_128
+@itemx BARCODE_128RAW
+@itemx BARCODE_39
+@itemx BARCODE_I25
+@itemx BARCODE_CBR
+@itemx BARCODE_MSI
+@itemx BARCODE_PLS
+@itemx BARCODE_93
+
+       The currently supported encoding types: EAN (13 digits, 8
+       digits, 13 + 2 add-on and 13 + 5 add-on), UPC (UPC-A, UPC-E,
+       UPC-A with 2 or 5 digit add-on), ISBN (with or without the
+       5-digit add-on), CODE128-B (the whole set of printable
+        ASCII characters), CODE128-C (two digits encoded by each barcode
+       symbol), CODE128 (all ASCII values), a ``raw-input'' pseudo-code
+       that generates CODE128 output, CODE39 (alphanumeric),
+        "interleaved 2 of 5" (numeric), Codabar (numeric plus a few
+       symbols), MSI (numeric) and Plessey (hex digits).
+        @xref{Supported Encodings}.
+
+@item BARCODE_ANY
+
+       This special encoding type (represented by a value of zero, so
+       it will be the default) tells the encoding procedure to look
+       for the first encoding type that can deal with a textual
+       string.  Therefore, a 11-digit code will be printed as UPC (as
+       well as 6-digit, 11+2 and 11+5), a 12-digit (or 7-digit, or
+       12+2 or 12+5) as EAN13, an ISBN code (with or without hyphens,
+       with or without add-5) will be encoded in its EAN13
+       representation, an even number of digits is encoded using
+       CODE128C and a generic string is encoded using CODE128B. Since
+        code-39 offers a much larger representation for the same
+        text string, code128-b is preferred over code39 for
+        alphanumeric strings.
+
+@item BARCODE_NO_ASCII
+
+       Instructs the engine not to print the ascii string on
+       output. By default the bar code is accompanied with an ascii
+       version of the text it encodes.
+
+@item BARCODE_NO_CHECKSUM
+
+       Instructs the engine not to add the checksum character to the
+       output. Not all the encoding types can drop the checksum;
+       those where the checksum is mandatory (like EAN and UPC)
+       just ignore the flag.
+
+@item BARCODE_OUTPUT_MASK
+
+       The mask is used to extract the output-type identifier from
+       the @i{flags} field.
+
+@item BARCODE_OUT_PS
+@itemx BARCODE_OUT_EPS
+@itemx BARCODE_OUT_PCL
+@itemx BARCODE_OUT_PCL_III
+
+       The currently supported encoding types: full-page postscript
+       and encapsulated postscript; PCL (print command language, for
+        HP printers) and PCL-III (same as PCL, but uses a font not
+        available on older printers).
+
+@item BARCODE_OUT_NOHEADERS
+
+       The flag instructs the printing engine not to print the header
+       and footer part of the file. This makes sense for the
+       postscript engine but might not make sense for other engines;
+       such other engines will silently ignore the flag just like
+        the PCL back-end does.
+
+@end table
+
+%##########################################################################
+
+@node  The API, The barcode Executable, Supported Flags, Top
+@chapter Functions Exported by the Library
+
+%MANPAGE barcode.3
+%M .TH BARCODE 3 "October 1999" "GNU" "GNU barcode"
+%M .UC 4
+%M .SH NAME
+%M barcode \- a library to create and print bar codes
+%M .SH SYNOPSIS
+%M .B #include <barcode.h>
+%M .sp
+%M .BI "struct Barcode_Item *Barcode_Create(char *" text ");"
+%M .br
+%M .BI "int Barcode_Delete(struct Barcode_Item *" bc ");"
+%M .br
+%M .BI "int Barcode_Encode(struct Barcode_Item *" bc ", int " flags ");"
+%M .br
+%M .BI "int Barcode_Print(struct Barcode_Item *" bc ", FILE *" f ", int " flags ");"
+%M .br
+%M .BI "int Barcode_Position(struct Barcode_Item *" bc ", int " wid ", int " hei ", int " xoff ", int " yoff " , double " scalef ");"
+%M .br
+%M .BI "int Barcode_Encode_and_Print(char *" text ", FILE *" f ", int " wid ", int " hei ", int " xoff ", int " yoff ", int " flags ");"
+%M .br
+%M .BI "int Barcode_Version(char *" versionname ");"
+%M
+%M .SH DESCRIPTION
+%M
+%M The barcode family of library functions is meant to ease
+%M creation of bar-code printouts.
+%M
+%M The information below is extracted from the texinfo file, which is the
+%M preferred source of information.
+
+The functions included in the barcode library are declared in the
+header file @t{barcode.h}.  They perform the following tasks:
+
+@table @code
+
+@item struct Barcode_Item *Barcode_Create(char *text);
+       The function creates a new barcode object to deal with a
+       specified text string.  It returns NULL in case of failure and
+       a pointer to a barcode data structure in case of success.
+
+@item int Barcode_Delete(struct Barcode_Item *bc);
+       Destroy a barcode object. Always returns 0 (success)
+
+@item int Barcode_Encode(struct Barcode_Item *bc, int flags);
+       Encode the text included in the @i{bc} object. Valid flags are
+       the encoding type (other flags are ignored) and
+       BARCODE_NO_CHECKSUM (other flags are silently ignored); if the
+       flag argument is zero, @t{bc->flags} will apply. The function
+       returns 0 on success and -1 in case of error. After
+       successful termination the data structure will host the
+       description of the bar code and its textual representation,
+       after a failure the @t{error} field will include the reason of
+       the failure.
+
+@item int Barcode_Print(struct Barcode_Item *bc, FILE *f, int flags);
+       Print the bar code described by @t{bc} to the specified file.
+       Valid flags are the output type, @t{BARCODE_NO_ASCII} and
+       @t{BARCODE_OUT_NOHEADERS}, other flags are ignored. If any of
+       these flags is zero, it will be inherited from @t{bc->flags}
+       which therefore takes precedence. The function returns 0 on
+       success and -1 in case of error (with @t{bc->error} set
+       accordingly). In case of success, the bar code is printed to
+       the specified file, which won't be closed after use.
+
+@item int Barcode_Position(struct Barcode_Item *bc, int wid, int hei, int xoff, int yoff, double scalef);
+       The function is a shortcut to assign values to the data
+       structure.
+
+@item int Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei, int xoff, int yoff, int flags);
+       The function deals with the whole life of the barcode
+       object by calling the other functions; it uses all the specified
+       flags.
+
+@item int Barcode_Version(char *versionname);
+       Returns the current version as an integer number of the form
+       major * 10000 + minor * 100 + release. Therefore, version
+       1.03.5 will be returned as 10305 and version 0.53 as 5300.  If
+        the argument is non-null, it will be used to return the version
+        number as a string. Note that the same information is available from
+        two preprocessor macros: @t{BARCODE_VERSION} (the string) and
+        @t{BARCODE_VERSION_INT} (the integer number).
+
+@end table
+
+%MANPAGE END
+
+%##########################################################################
+
+@node  The barcode Executable, Supported Encodings, The API, Top
+@chapter The @i{barcode} frontend program
+
+%MANPAGE barcode.1
+%M .TH BARCODE 1 "October 2001" "GNU" "GNU barcode"
+%M .UC 4
+%M .SH NAME
+%M barcode \- a stand alone program to run the barcode library
+%M .SH SYNOPSIS
+%M .B barcode
+%M [\-b - | string] [\-e encoding] [\-o - | outfile] [
+%M .I other-flags
+%M ]
+%M .SH DESCRIPTION
+%M
+%M The information below is extracted from the texinfo file, which is the
+%M preferred source of information.
+%M .PP
+The @b{barcode} program is a front-end to access some features of the
+library from the command line.  It is able to read user supplied
+strings from the command line or a data file (standard input by default)
+and encode all of them.
+
+%M .SH OPTIONS
+%M .PP
+
+@menu
+* The Command Line::            
+@end menu
+
+%--------------------------------------------------------------------------
+@node  The Command Line,  , The barcode Executable, The barcode Executable
+@section The Command Line
+
+
+@b{barcode} accepts the following options:
+
+@table @code
+
+@item --help or -h
+       Print a usage summary and exit.
+
+@item -i filename
+       Identify a file where strings to be encoded are read from. If
+       missing (and if @t{-b} is not used) it defaults to standard
+       input. Each data line of the input file will be used to create
+       one barcode output.
+
+@item -o filename
+       Output file. It defaults to standard output.
+
+@item -b string
+       Specify a single ``barcode'' string to be encoded.
+        The option can be used multiple times in order to encode
+        multiple strings (this will result in multi-page postscript
+        output or a table of barcodes if @t{-t} is specified).  The
+        strings must match the encoding chosen; if it doesn't
+        match the program will print a warning to @t{stderr} and
+        generate ``blank'' output (although not zero-length).
+        Please note that a string including spaces or
+        other special characters must be properly quoted.
+
+@item -e encoding
+        @b{encoding} is the name of the chosen encoding format being
+       used. It defaults to the value of the environment variable
+       @t{BARCODE_ENCODING} or to auto detection if the environment is
+       also unset.
+
+@item -g geometry
+       The geometry argument is of the form ``[@i{<width>} @t{x}
+       @i{<height>}] [@t{+} @i{<xmargin>} @t{+} @i{<ymargin>}]'' (with
+       no intervening spaces). Unspecified margin values will result in
+        no margin; unspecified size results in default size.
+       The specified values represent print points by
+       default, and can be inches, millimeters or other units
+       according to the @t{-u} option or the @t{BARCODE_UNIT}
+       environment variable.  The argument is used to place the
+       printout code on the page. Note that an additional white
+       margin of 10 points is added to the printout. If the option is
+       unspecified, @t{BARCODE_GEOMETRY} is looked up in the
+       environment, if missing a default size and no margin (but the
+       default 10 points) are used.
+
+@item -t table-geometry
+       Used to print several barcodes to a single page, this option
+        is meant to be used to print stickers. The argument is of the
+        form ``@i{<columns>} @t{x} @i{<lines>} [@t{+} @i{<leftmargin>}
+        @t{+} @i{<bottommargin>} [@t{-} @i{<rightmargin>} [@t{-}
+        @i{<topmargin>}]]]'' (with no intervening spaces); if missing,
+        the top and right margin will default to be the same as the
+        bottom and left margin. The margins are specified in print
+        points or in the chosen unit (see @t{-u} below).  If the
+        option is not specified, @t{BARCODE_TABLE} is looked up in the
+        environment, otherwise no table is printed and each barcode
+        will get its own page.  The size (but not the position)
+        of a barcode item within a table can also be selected using
+        @t{-g} (see "geometry" above), without struggling with
+        external and internal margins.  I still think management of
+        geometries in a table is suboptimal, but I can't make it
+        better without introducing incompatibilities.
+
+
+@item -m margin(s)
+       Specifies an internal margin for each sticker in the
+       table. The argument is of the form
+       ``@i{<xmargin>}@t{,}@i{<ymargin>}'' and the margin is applied
+       symmetrically to the sticker. If unspecified, the environment
+       variable @t{BARCODE_MARGIN} is used or a default internal
+       margin of 10 points is used.
+
+@item -n
+       ``Numeric'' output: don't print the ASCII form of the code,
+       only the bars.
+
+@item -c
+       No checksum character (for encodings that allow it, like code 39,
+       other codes, like UPC or EAN, ignore this option).
+
+@item -E
+       Encapsulated postscript (default is normal postscript). When
+       the output is generated as EPS only one barcode is encoded.
+
+@item -P
+       PCL output. Please note that the Y direction goes from top
+        to bottom for PCL, and the origin for an image is the top-left
+        corner instead of the bottom-left
+
+@item -p pagesize
+       Specify a non-default page size. The page size can be specified
+        in millimeters, inches or plain numbers (for example: "@t{210x297mm}",
+        "@t{8.5x11in}", "@t{595x842}"). A page specification as numbers
+       will be interpreted according to the current unit specification
+       (see @t{-u} below). If libpaper is available,
+        you can also specify the page size with its name, like "@t{A3}"
+        or "@t{letter}" (libpaper is a standard component of Debian
+        GNU/Linux, but may be missing elsewhere). The default page
+        size is your system-wide default if libpaper is there, A4 otherwise.
+
+@item -u unit
+       Choose the unit used in size specifications. Accepted values
+       are ``mm'', ``cm'', ``in'' and ``pt''. By default, the program
+       will check @t{BARCODE_UNIT} in the environment, and assume
+       points otherwise (this behaviour is compatible with 0.92 and
+       previous versions. If @t{-u} appears more than once, each
+       instance will modified the behaviour for the arguments at its
+       right, as the command line is processes left to right. The
+       program internally works with points, and any size is
+       approximated to the nearest multiple of one point. The @t{-u}
+       option affect @t{-g} (geometry), @t{-t} (table) and @t{-p}
+       (page size).
+       
+@end table
+
+%M .SH ENCODING TYPES
+%M .PP
+
+%##########################################################################
+@node  Supported Encodings, PCL Output, The barcode Executable, Top
+@chapter Supported Encodings
+
+The program encodes text strings passed either on the command line
+(with -b) or retrieved from standard input. The text representation is
+interpreted according to the following rules. When auto-detection
+of the encoding is enabled (i.e, no explicit encoding type is specified),
+the encoding types are scanned to find one that can digest the text string.
+The following list of supported types is sorted in the same order
+the library uses when auto-detecting a suitable encoding for a string.
+
+@table @var
+
+@item EAN
+       The EAN frontend is similar to UPC; it accepts strings of
+       digits, 12 or 7 characters long. Strings of 13 or 8 characters
+        are accepted if the provided checksum digit is correct.
+        I expect most users to feed input without a 
+        checksum, though. The add-2 and add-5 extension are accepted for both
+        the EAN-13 and the EAN-8 encodings.
+        The following are example of valid input strings:
+       ``@t{123456789012}'' (EAN-13), ``@t{1234567890128}'' (EAN-13 wih
+        checksum),  ``@t{1234567}'' (EAN-8), ``@t{12345670 12345}'' (EAN-8
+        with checksum and add-5),
+       ``@t{123456789012 12}'' (EAN-13 with add-2),
+       ``@t{123456789012 12345}'' (EAN-13 with add-5).
+
+@item UPC
+       The UPC frontend accepts only strings made up of digits (and,
+       if a supplemental encoding is used, a blank to separate it).
+       It accepts strings of 11 or 12 digits (UPC-A) and 6 or 7 or 8
+        digits (UPC-E).
+
+       The 12th digit of UPC-A is the checksum and is added by the
+       library if not specified in the input; if it is specified, it
+        must be the right checksum or the code is rejected as invalid.
+        For UPC-E, 6 digit are considered to be the middle part of the
+        code, a leading 0 is assumed and the checksum is added;
+        7 digits are either considered the initial part (leading digit
+        0 or 1, checksum missing) or the final part (checksum specified,
+        leading 0 assumed); 8 digits are considered to be the complete code,
+        with leading 0 or 1 and checksum.
+        For both UPC-A and UPC-E, a trailing string of 2 digits or 5 digits
+       is accepted as well. Therefore, the following are examples
+        of valid strings that can be encoded as UPC:
+       ``@t{01234567890}'' (UPC-A)
+        ``@t{012345678905}'' (UPC-A with checksum), ``@t{012345}''
+       (UPC-E), ``@t{01234567890 12}'' (UPC-A, add-2) and
+       ``@t{01234567890 12345}'' (UPC-A, add-5), ``@t{0123456 12}''
+        (UPC-E, add-2).
+        Please note that when setting @t{BARCODE_ANY} to auto-detect
+        the encoding to be used, 12-digit strings and 7-digit strings
+        will always be identified as EAN. This because I expect most
+        user to provide input without a checksum. If you need to
+        specify UPC-with-checksum as input you must explicitly set
+        @t{BARCODE_UPC} as a flag or use @t{-e upc} on the command line.
+
+@item ISBN
+       ISBN numbers are encoded as EAN-13 symbols, with an optional
+       add-5 trailer. The ISBN frontend of the library accepts real
+       ISBN numbers and deals with any hyphen and, if present, the
+       ISBN checksum character before encoding data. Valid
+       representations for ISBN strings are for example:
+       ``@t{1-56592-292-1}'', ``@t{3-89721-122-X}'' and ``@t{3-89721-122-X
+       06900}''.
+
+@item code 128-B
+       This encoding can represent all of the printing ASCII
+        characters, from the space (32) to DEL (127). The checksum
+        digit is mandatory in this encoding.
+
+@item code 128-C
+       The ``C'' variation of Code-128 uses Code-128 symbols to
+       represent two digits at a time (Code-128 is made up of 104
+       symbols whose interpretation is controlled by the start symbol
+       being used). Code 128-C is thus the most compact way to
+       represent any even number of digits. The encoder refuses to
+       deal with an odd number of digits because the caller is
+       expected to provide proper padding to an even number of
+       digits. (Since Code-128 includes control symbols to switch
+       charset, it is theoretically possible to represent the odd
+       digit as a Code 128-A or 128-B symbol, but this tool doesn't
+       currently implement this option).
+
+@item code 128 raw
+       Code-128 output represented symbol-by-symbol in the input
+       string.  To override part of the problems outlined below in
+       specifying code128 symbols, this pseudo-encoding allows the
+       used to specify a list of code128 symbols separated by
+       spaces. Each symbol is represented by a number in the range
+       0-105.  The list should include the leading character.The
+       checksum and the stop character are automatically added by the
+       library. Most likely this pseudo-encoding will be used with
+       @t{BARCODE_NO_ASCII} and some external program to supply the
+       printed text.
+
+@item code 39
+       The code-39 standard can encode uppercase letters, digits, the
+       blank space, plus, minus, dot, star, dollar, slash, percent.
+       Any string that is only composed of such characters is
+       accepted by the code-39 encoder. To avoid loosing information,
+       the encoder refuses to encode mixed-case strings (a lowercase
+       string is nonetheless accepted as a shortcut, but is encoded
+       as uppercase).
+
+@item interleaved 2 of 5
+       This encoding can only represent an even number of digits
+        (odd digits are represented by bars, and even digits by the
+        interleaving spaces). The name stresses the fact that two
+        of the five items (bars or spaces) allocated to each symbol
+        are wide, while the rest are narrow. The checksum digit is
+        optional (can be disabled via @t{BARCODE_NO_CHECKSUM}).
+        Since the number of digits, including the checksum, must be even,
+        a leading zero is inserted in the string being encoded if needed
+        (this is specifically stated in the specs I have access to).
+
+@item code 128
+       Automatic selection between alphabet A, B and C of the Code-128
+        standard. This encoding can represent all ASCII symbols, from
+        0 (NUL) to 127 (DEL), as well as four special symbols, named
+        F1, F2, F3, F4. The set of symbols available in this encoding
+        is not easily represented as input to the @i{barcode} library,
+        so the following convention is used.  In the input string,
+        which is a C-language null-terminated string, the NUL char
+        is represented by the value 128 (0x80, 0200) and the F1-F4 characters
+        are represented by the values 193-196 (0xc1-0xc4, 0301-0304).
+        The values have been chosen to ease their representation as
+        escape sequences.
+
+        Since the shell doesn't seem to interpret escape sequences on the
+        command line, the "-b" option cannot be easily used to designate
+        the strings to be encoded. As a workaround you can resort
+        to the command @t{echo}, either within back-ticks or used
+        separately to create a file that is then fed to the standard-input
+        of @i{barcode} -- assuming your @t{echo} command processes escape
+        sequences.  The newline character is especially though to encode
+        (but not impossible unless you use a @t{csh} variant.
+
+        These problems only apply to the command-line tool; the use of
+        library functions doesn't give any problem. In needed, you can
+        use the ``@i{code 128 raw}'' pseudo-encoding to represent
+        code128 symbols by their numerical value. This encoding is
+        used late in the auto-selection mechanism because (almost) any
+        input string can be represented using code128.
+
+@item Codabar
+       Codabar can encode the ten digits and a few special symbols
+       (minus, plus, dollar, colon, bar, dot). The characters
+       ``@t{A}'', ``@t{B}'', ``@t{C}'' and ``@t{D}'' are used to
+       represent four different start/stop characters. The input
+       string to the barcode library can include the start and stop
+       characters or not include them (in which case ``@t{A}'' is
+       used as start and ``@t{B}'' as stop). Start and stop
+       characters in the input string can be either all lowercase or
+       all uppercase and are always printed as uppercase.
+
+@item Plessey
+       Plessey barcodes can encode all the hexadecimal
+       digits. Alphabetic digits in the input string must either be
+       all lowercase or all uppercase. The output text is always
+       uppercase.
+
+@item MSI
+       MSI can only encode the decimal digits. While the standard
+       specifies either one or two check digits, the current
+       implementation in this library only generates one check digit.
+
+@item code 93
+      The code-93 standard can natively encode 48 different characters,
+      including uppercase letters, digits, the blank space, plus, minus,
+      dot, star, dollar, slash, percent, as well as five special
+      characters:  a start/stop delimiter and four "shift characters" used
+      for extended encoding.    Using this "extended encoding" method, any
+      standard 7-bit ASCII character can be encoded, but it takes up two
+      symbol lengths in barcode if the character is not natively supported
+      (one of the 48).
+      The encoder here fully implements the code 93 encoding standard.
+      Any characters natively supported (A-Z, 0-9, ".+-/$&%") will be
+      encoded as such - for any other characters (such as lower case
+      letters, brackets, parentheses, etc.), the encoder will revert
+      to extended encoding.
+      As a note, the option to exclude the checksum will eliminate the
+      two modulo-47 checksums (called C and K) from the barcode, but this
+      probably will make it unreadable by 99% of all scanning systems.
+      These checksums are specified to be used at the firmware level,
+      and their absence will be interpreted as an invalid barcode.
+
+
+@end table
+
+%M .SH PCL OUTPUT
+
+%##########################################################################
+@node  PCL Output, Bugs and Pending Issues, Supported Encodings, Top
+@chapter PCL Output
+
+While the default output is Postscript (possibly EPS), and Postscript
+can be post-processed to almost anything, it is sometimes desirable to
+create output directly usable by the specific printer at hand. 
+PCL is currently supported as an output format for this reason.
+Please note that the Y coordinate for PCL goes from top to bottom, while
+for Postscript it goes from bottom to top. Consistently, while in
+Postscript you specify the bottom-left corner as origin, for PCL
+you specify the top-left corner.
+
+Barcode output for PCL Printers (HP LaserJet and compatibles),
+was developed using PCL5 Reference manuals from HP.
+that really refers to these printers:
+@itemize @bullet
+
+@item
+LaserJet III, III P, III D, III Si,
+
+@item
+LaserJet 4 family
+
+@item
+LaserJet 5 family
+
+@item
+LaserJet 6 family
+
+@item
+Color LaserJet
+
+@item
+DeskJet 1200 and 1600.
+
+@end itemize
+
+However, barcode printing uses a very small subset of PCL, probably also
+LaserJet II should print it without problem, but the resulting text may
+be horrible.
+
+The only real difference from one printer to another really depends on
+which font are available in the printer, used in printing the label
+associated to the bars (if requested).
+
+Earlier LaserJet supports only bitmaps fonts, so these are not
+"scalable". (Ljet II ?), Also these fonts, when available, have a
+specified direction, and not all of them are available in
+both Portrait and Landscape mode.
+
+From LaserJet 4 series, (except 4L/5L that are entry-level printers),
+Arial scalable font should be available, so it's the "default font"
+used by this program.
+
+LaserJet III series printers (and 4L, 5L), don't feature "Arial" as a
+resident font, so you should use @t{BARCODE_OUT_PCL_III} instead of
+@t{BARCODE_OUT_PCL.}, and font the font used will be "Univers" instead
+of "Arial".
+
+Results on compatible printers, may depend on consistency of
+PCL5 compatibility, in doubt, try BARCODE_OUT_PCL_III
+
+PJL commands are not used here, as it's not very compatible.
+
+
+Tested Printers:
+@itemize @bullet
+@item
+Hp LaserJet 4050
+@item
+Hp LaserJet 2100
+@item
+Epson N-1200 emul PCL
+@item
+Toshiba DP2570 (copier) + PCL option
+@item
+Epson EPL-7100 emul. HP LaserJet II: bars print fine but text is bad.
+@end itemize
+
+
+%M .SH BUGS
+
+%##########################################################################
+@node  Bugs and Pending Issues,  , PCL Output, Top
+@chapter Bugs and Pending Issues.
+
+The current management of borders/margins is far from optimal. The
+``default'' margin applied by the library interferes with the external
+representation, but I feel it is mandatory to avoid creating barcode
+output with no surrounding white space (the problem is especially
+relevant for EPS output).
+
+EAN-128 is not (yet) supported. I plan to implement it pretty soon and
+then bless the package as version 1.0.
+
+%M .SH "SEE ALSO"
+%M \fBbarcode(3)\fP
+%M
+%M .SH AUTHORS
+%M Alessandro Rubini <rubini@gnu.org> (maintainer)
+%M .PP
+%M Leonid A. Broukhis <leob@mailcom.com> (several encodings)
+%M .PP
+%M Andrea Scopece <a.scopece@tin.it> (PCL output)
+%MANPAGE END
+
+@iftex
+@contents
+@end iftex
+
+@bye
+@c  LocalWords:  barcode ifinfo titlepage iftex texinfo ascii frontend LGPL
+@c  LocalWords:  tarball malloced textinfo scalef isbn Plessey codabar GPL Ljet
+@c  LocalWords:  LocalWords LaserJet Univers Arial Debian libpaper pagesize
+@c  LocalWords:  Epson MANPAGE stderr barcodes emul DeskJet xmargin ymargin
+@c  LocalWords:  leftmargin rightmargin topmargin bottommargin unset struct
+@c  LocalWords:  NOHEADERS yoff xoff versionname errno malloc behaviour charset
diff --git a/barcode-0.98/doc/infofilter b/barcode-0.98/doc/infofilter
new file mode 100755 (executable)
index 0000000..92bc8b7
--- /dev/null
@@ -0,0 +1,16 @@
+#! /usr/bin/sed -f
+
+
+# allow "%" as a comment char, but only at the beginning of the line
+s/^%/@c /
+#s/[^\\]%.*$//
+s/^\\%/%/
+
+#preserve blanks in @lisp blocks
+/@lisp/,/@end lisp/ p
+/@lisp/,/@end lisp/ d
+
+# remove leading blanks
+s/^[   ]*//
+
+#s/\\t/@code/g
diff --git a/barcode-0.98/doc/manpager b/barcode-0.98/doc/manpager
new file mode 100755 (executable)
index 0000000..46de5be
--- /dev/null
@@ -0,0 +1,120 @@
+#! /usr/bin/awk -f
+# Copyright (c) 1998-2001 Alessandro Rubini
+
+BEGIN {IN=0}
+
+/^%MANPAGE END/ {IN=0; next}
+/^%MANPAGE/     {IN=1; USELP=NEEDLP=INTABLE=0; NAME=$2; next}
+IN==0           {next}
+
+/^%MSKIP/      {SKIP=1;next}
+/^%M/          {SKIP=0}
+
+/^@menu/        {SKIP=1;next}
+/^@end menu/    {SKIP=0;next}
+
+SKIP==1         {next}
+/^%M$/         {next}
+/^@ignore/     {next}
+/^@end ign/     {next}
+
+#now perform all the substitutions needed
+
+               { gsub("^%M ?",""); }
+
+# Use gensub for converting tags: itz Sep 30 1998
+#
+# However, the gensub function is gawk-specific, and we want things
+# to work with original-awk too (for portability).
+# Therefore, use a normal gsub, even though it's a subobptimal solution
+# as it may step in extra braces. The good solution will be piping to sed,
+# or match, extract subesxpression, replace, reinsert -- bleah...
+# (ARub, Oct 10 2000)
+/@b\{/ {
+  #$0 = gensub(/@b\{([^}]+)\}/, "\\\\fB\\1\\\\fP","g");
+  gsub("@b\{","\\fB");
+  gsub("\}","\\fP");
+} 
+
+/@var\{/ {
+  #$0 = gensub(/@var\{([^}]+)\}/, "\\\\fI\\1\\\\fP","g");
+  gsub("@var\{","\\fB");
+  gsub("\}","\\fP");
+} 
+
+/@(samp|code|file)\{/ {
+  #$0 = gensub(/@(samp|code|file)\{([^}]+)\}/, "`\\2'","g");
+  gsub("@(samp|code|file)\{","");
+  gsub("\}","");
+}
+
+
+/@xref\{.*\}\./ {
+  gsub(/@xref\{.*\}\./,"");
+}
+
+/@ref\{.*\}/ {
+  gsub("@ref\{","");
+  gsub("\}","");
+}
+
+/@\*/ {
+  gsub(/@\* */,"\n.br\n");
+}
+
+/@[a-z]+\{/      {
+                gsub("@[a-z]+\\{","");
+               gsub("}","");
+               }
+
+/^@table/       { TABLE=1; }
+/^@itemize/     { TABLE=1; next}
+
+/^@item/        {
+               gsub("^@item *","");
+               printf ".TP\n%s\n",$0 > NAME;
+               NEEDLP=0; next;
+               }
+
+/^@end table/   {TABLE=0}
+/^@end itemize/ {TABLE=0}
+
+# discard other texinfo commands
+
+/^@/           {next}
+
+# manage comments and '%'
+
+/^%/           {next}
+
+
+               {
+               gsub("[^\\\\]%.*$","");
+               gsub("\\%","%");
+               }
+
+# remove leading blanks
+
+/^[ \t]/       {gsub("^[ \t]*","");}
+
+# put a .LP at blank lines
+
+/^.nf/          {USELP=0}
+/^.fi/          {USELP=1}
+
+/^$/           {if (USELP) {NEEDLP++; next;} }
+
+
+/./            { if (NEEDLP) { printf "\n.LP\n" > NAME; NEEDLP=0; } }
+
+/^.TH/         {USELP=1}
+
+# Escape single slashes (e.g. in documentation for `-l' command line option)
+
+               {gsub("\\\\ ", "\\\\ ");}
+
+                {gsub("~", "~~");}
+
+               {print > NAME}
+
+
diff --git a/barcode-0.98/doc/mktxt b/barcode-0.98/doc/mktxt
new file mode 100755 (executable)
index 0000000..bd3f88b
--- /dev/null
@@ -0,0 +1,38 @@
+#! /usr/bin/awk -f
+
+# Warning: this may use gnu-awk features
+
+# Program to create ascii from info;
+# Missing: table of contents
+
+# skip 
+
+BEGIN {NODELINE=0; NODE=0; KEEP=1; printf "\n\n"}
+
+
+/^\037$/     { NODELINE=1; NODE=NODE+1; KEEP=1; next}
+
+NODE==1      { next }
+
+NODELINE==1  {
+             NODELINE=2;
+            sub("^.*Node: ","*Node: ");
+            sub(",.*$","");
+            printf "\n\n\n%s",$0;
+#print
+            next;
+            }
+
+NODELINE     { NODELINE=NODELINE+1 }
+
+NODELINE==4  { printf "\t\t\t\t"; }
+NODELINE==5  { printf "\t\t\t\t"; NODELINE=0}
+
+
+/^\* Menu:$/  { KEEP=0 }
+
+
+
+KEEP==0      { next }
+
+{ print }
diff --git a/barcode-0.98/doc/texi2html b/barcode-0.98/doc/texi2html
new file mode 100755 (executable)
index 0000000..2c61aa9
--- /dev/null
@@ -0,0 +1,2021 @@
+#!/usr/local/bin/perl
+'di ';
+'ig 00 ';
+#+##############################################################################
+#                                                                              #
+# File: texi2html                                                              #
+#                                                                              #
+# Description: Program to transform most Texinfo documents to HTML             #
+#                                                                              #
+#-##############################################################################
+
+# @(#)texi2html        1.51 09/10/96   Written (mainly) by Lionel Cons, Lionel.Cons@cern.ch
+
+# The man page for this program is included at the end of this file and can be
+# viewed using the command 'nroff -man texi2html'.
+# Please read the copyright at the end of the man page.
+
+#+++############################################################################
+#                                                                              #
+# Constants                                                                    #
+#                                                                              #
+#---############################################################################
+
+$DEBUG_TOC   =  1;
+$DEBUG_INDEX =  2;
+$DEBUG_BIB   =  4;
+$DEBUG_GLOSS =  8;
+$DEBUG_DEF   = 16;
+$DEBUG_HTML  = 32;
+$DEBUG_USER  = 64;
+
+$BIBRE = '\[[\w\/]+\]';                        # RE for a bibliography reference
+$FILERE = '[\/\w.+-]+';                        # RE for a file name
+$VARRE = '[^\s\{\}]+';                 # RE for a variable name
+$NODERE = '[^@{}:\'`",]+';             # RE for a node name
+$NODESRE = '[^@{}:\'`"]+';             # RE for a list of node names
+$XREFRE = '[^@{}]+';                   # RE for a xref (should use NODERE)
+
+$ERROR = "***";                                # prefix for errors and warnings
+$THISPROG = "texi2html 1.51";                  # program name and version
+$HOMEPAGE = "http://wwwcn.cern.ch/dci/texi2html/"; # program home page
+$TODAY = &pretty_date;                 # like "20 September 1993"
+$SPLITTAG = "<!-- SPLIT HERE -->\n";   # tag to know where to split
+$PROTECTTAG = "_ThisIsProtected_";     # tag to recognize protected sections
+$html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//EN">';
+
+#
+# language dependent constants
+#
+#$LDC_SEE = 'see';
+#$LDC_SECTION = 'section';
+#$LDC_IN = 'in';
+#$LDC_TOC = 'Table of Contents';
+#$LDC_GOTO = 'Go to the';
+#$LDC_FOOT = 'Footnotes';
+# TODO: @def* shortcuts
+
+#
+# pre-defined indices
+#
+%predefined_index = (
+                   'cp', 'c',
+                   'fn', 'f',
+                   'vr', 'v',
+                   'ky', 'k',
+                   'pg', 'p',
+                   'tp', 't',
+                   );
+
+#
+# valid indices
+#
+%valid_index = (
+                   'c', 1,
+                   'f', 1,
+                   'v', 1,
+                   'k', 1,
+                   'p', 1,
+                   't', 1,
+               );
+
+#
+# texinfo section names to level
+#
+%sec2level = (
+             'top', 0,
+             'chapter', 1,
+             'unnumbered', 1,
+             'majorheading', 1,
+             'chapheading', 1,
+             'appendix', 1,
+             'section', 2,
+             'unnumberedsec', 2,
+             'heading', 2,
+             'appendixsec', 2,
+             'appendixsection', 2,
+             'subsection', 3,
+             'unnumberedsubsec', 3,
+             'subheading', 3,
+             'appendixsubsec', 3,
+             'subsubsection', 4,
+             'unnumberedsubsubsec', 4,
+             'subsubheading', 4,
+             'appendixsubsubsec', 4,
+             );
+
+#
+# accent map, TeX command to ISO name
+#
+%accent_map = (
+              '"',  'uml',
+              '~',  'tilde',
+              '^',  'circ',
+              '`',  'grave',
+              '\'', 'acute',
+              );
+
+#
+# texinfo "simple things" (@foo) to HTML ones
+#
+%simple_map = (
+              # cf. makeinfo.c
+              "*", "<BR>",             # HTML+
+              " ", " ",
+              "\n", "\n",
+              "|", "",
+              # spacing commands
+              ":", "",
+              "!", "!",
+              "?", "?",
+              ".", ".",
+              );
+
+#
+# texinfo "things" (@foo{}) to HTML ones
+#
+%things_map = (
+              'TeX', 'TeX',
+              'br', '<P>',             # paragraph break
+              'bullet', '*',
+              'copyright', '(C)',
+              'dots', '...',
+              'equiv', '==',
+              'error', 'error-->',
+              'expansion', '==>',
+              'minus', '-',
+              'point', '-!-',
+              'print', '-|',
+              'result', '=>',
+              'today', $TODAY,
+              );
+
+#
+# texinfo styles (@foo{bar}) to HTML ones
+#
+%style_map = (
+             'asis', '',
+             'b', 'B',
+             'cite', 'CITE',
+             'code', 'CODE',
+             'ctrl', '&do_ctrl',       # special case
+             'dfn', 'STRONG',          # DFN tag is illegal in the standard
+             'dmn', '',                # useless
+             'emph', 'EM',
+             'file', '"TT',            # will put quotes, cf. &apply_style
+             'i', 'I',
+             'kbd', 'KBD',
+             'key', 'KBD',
+             'r', '',                  # unsupported
+             'samp', '"SAMP',          # will put quotes, cf. &apply_style
+             'sc', '&do_sc',           # special case
+             'strong', 'STRONG',
+             't', 'TT',
+             'titlefont', '',          # useless
+             'var', 'VAR',
+             'w', '',                  # unsupported
+             );
+
+#
+# texinfo format (@foo/@end foo) to HTML ones
+#
+%format_map = (
+              'display', 'PRE',
+              'example', 'PRE',
+              'format', 'PRE',
+              'lisp', 'PRE',
+              'quotation', 'BLOCKQUOTE',
+              'smallexample', 'PRE',
+              'smalllisp', 'PRE',
+              # lists
+              'itemize', 'UL',
+              'enumerate', 'OL',
+              # poorly supported
+              'flushleft', 'PRE',
+              'flushright', 'PRE',
+              );
+
+#
+# texinfo definition shortcuts to real ones
+#
+%def_map = (
+           # basic commands
+           'deffn', 0,
+           'defvr', 0,
+           'deftypefn', 0,
+           'deftypevr', 0,
+           'defcv', 0,
+           'defop', 0,
+           'deftp', 0,
+           # basic x commands
+           'deffnx', 0,
+           'defvrx', 0,
+           'deftypefnx', 0,
+           'deftypevrx', 0,
+           'defcvx', 0,
+           'defopx', 0,
+           'deftpx', 0,
+           # shortcuts
+           'defun', 'deffn Function',
+           'defmac', 'deffn Macro',
+           'defspec', 'deffn {Special Form}',
+           'defvar', 'defvr Variable',
+           'defopt', 'defvr {User Option}',
+           'deftypefun', 'deftypefn Function',
+           'deftypevar', 'deftypevr Variable',
+           'defivar', 'defcv {Instance Variable}',
+           'defmethod', 'defop Method',
+           # x shortcuts
+           'defunx', 'deffnx Function',
+           'defmacx', 'deffnx Macro',
+           'defspecx', 'deffnx {Special Form}',
+           'defvarx', 'defvrx Variable',
+           'defoptx', 'defvrx {User Option}',
+           'deftypefunx', 'deftypefnx Function',
+           'deftypevarx', 'deftypevrx Variable',
+           'defivarx', 'defcvx {Instance Variable}',
+           'defmethodx', 'defopx Method',
+           );
+
+#
+# things to skip
+#
+%to_skip = (
+           # comments
+           'c', 1,
+           'comment', 1,
+           # useless
+           'contents', 1,
+           'shortcontents', 1,
+           'summarycontents', 1,
+           'footnotestyle', 1,
+           'end ifclear', 1,
+           'end ifset', 1,
+           'titlepage', 1,
+           'end titlepage', 1,
+           # unsupported commands (formatting)
+           'afourpaper', 1,
+           'cropmarks', 1,
+           'finalout', 1,
+           'headings', 1,
+           'need', 1,
+           'page', 1,
+           'setchapternewpage', 1,
+           'everyheading', 1,
+           'everyfooting', 1,
+           'evenheading', 1,
+           'evenfooting', 1,
+           'oddheading', 1,
+           'oddfooting', 1,
+           'smallbook', 1,
+           'vskip', 1,
+           'filbreak', 1,
+           # unsupported formats
+           'cartouche', 1,
+           'end cartouche', 1,
+           'group', 1,
+           'end group', 1,
+           );
+
+#+++############################################################################
+#                                                                              #
+# Argument parsing, initialisation                                             #
+#                                                                              #
+#---############################################################################
+
+$use_bibliography = 1;
+$use_acc = 0;
+$debug = 0;
+$doctype = '';
+$check = 0;
+$expandinfo = 0;
+$use_glossary = 0;
+$invisible_mark = '';
+$use_iso = 0;
+@include_dirs = ();
+$show_menu = 0;
+$number_sections = 0;
+$split_node = 0;
+$split_chapter = 0;
+$monolithic = 0;
+$verbose = 0;
+$usage = <<EOT;
+This is $THISPROG
+To convert a Texinfo file to HMTL: $0 [options] file
+  where options can be:
+    -expandinfo    : use \@ifinfo sections, not \@iftex
+    -glossary      : handle a glossary
+    -invisible name: use 'name' as an invisible anchor
+    -I dir         : search also for files in 'dir'
+    -menu          : handle menus
+    -monolithic    : output only one file including ToC
+    -number        : number sections
+    -split_chapter : split on main sections
+    -split_node    : split on nodes
+    -usage         : print usage instructions
+    -verbose       : verbose output
+To check converted files: $0 -check [-verbose] files
+EOT
+
+while ($#ARGV >= 0 && $ARGV[0] =~ /^-/) {
+    $_ = shift(@ARGV);
+    if (/^-acc$/)            { $use_acc = 1; next; }
+    if (/^-d(ebug)?(\d+)?$/) { $debug = $2 || shift(@ARGV); next; }
+    if (/^-doctype$/)        { $doctype = shift(@ARGV); next; }
+    if (/^-c(heck)?$/)       { $check = 1; next; }
+    if (/^-e(xpandinfo)?$/)  { $expandinfo = 1; next; }
+    if (/^-g(lossary)?$/)    { $use_glossary = 1; next; }
+    if (/^-i(nvisible)?$/)   { $invisible_mark = shift(@ARGV); next; }
+    if (/^-iso$/)            { $use_iso = 1; next; }
+    if (/^-I(.+)?$/)         { push(@include_dirs, $1 || shift(@ARGV)); next; }
+    if (/^-m(enu)?$/)        { $show_menu = 1; next; }
+    if (/^-mono(lithic)?$/)  { $monolithic = 1; next; }
+    if (/^-n(umber)?$/)      { $number_sections = 1; next; }
+    if (/^-s(plit)?_?(n(ode)?|c(hapter)?)?$/) {
+       if ($2 =~ /^n/) {
+           $split_node = 1;
+       } else {
+           $split_chapter = 1;
+       }
+       next;
+    }
+    if (/^-v(erbose)?$/)     { $verbose = 1; next; }
+    die $usage;
+}
+if ($check) {
+    die $usage unless @ARGV > 0;
+    &check;
+    exit;
+}
+
+if (($split_node || $split_chapter) && $monolithic) {
+    warn "Can't use -monolithic with -split, -monolithic ignored.\n";
+    $monolithic = 0;
+}
+if ($expandinfo) {
+    $to_skip{'ifinfo'}++;
+    $to_skip{'end ifinfo'}++;
+} else {
+    $to_skip{'iftex'}++;
+    $to_skip{'end iftex'}++;
+}
+$invisible_mark = '<IMG SRC="invisible.xbm">' if $invisible_mark eq 'xbm';
+die $usage unless @ARGV == 1;
+$docu = shift(@ARGV);
+if ($docu =~ /.*\//) {
+    chop($docu_dir = $&);
+    $docu_name = $';
+} else {
+    $docu_dir = '.';
+    $docu_name = $docu;
+}
+unshift(@include_dirs, $docu_dir);
+$docu_name =~ s/\.te?x(i|info)?$//;    # basename of the document
+
+$docu_doc = "$docu_name.html";         # document's contents
+if ($monolithic) {
+    $docu_toc = $docu_foot = $docu_doc;
+} else {
+    $docu_toc  = "${docu_name}_toc.html";  # document's table of contents
+    $docu_foot = "${docu_name}_foot.html"; # document's footnotes
+}
+
+#
+# variables
+#
+%value = ();                           # hold texinfo variables
+$value{'html'} = 1;                    # predefine html (the output format)
+$value{'texi2html'} = '1.51';          # predefine texi2html (the translator)
+# _foo: internal to track @foo
+foreach ('_author', '_title', '_subtitle',
+        '_settitle', '_setfilename') {
+    $value{$_} = '';                   # prevent -w warnings
+}
+%node2sec = ();                                # node to section name
+%node2href = ();                       # node to HREF
+%bib2href = ();                                # bibliography reference to HREF
+%gloss2href = ();                      # glossary term to HREF
+@sections = ();                                # list of sections
+%tag2pro = ();                         # protected sections
+
+#
+# initial indexes
+#
+$bib_num = 0;
+$foot_num = 0;
+$gloss_num = 0;
+$idx_num = 0;
+$sec_num = 0;
+$doc_num = 0;
+$html_num = 0;
+
+#
+# can I use ISO8879 characters? (HTML+)
+#
+if ($use_iso) {
+    $things_map{'bullet'} = "&bull;";
+    $things_map{'copyright'} = "&copy;";
+    $things_map{'dots'} = "&hellip;";
+    $things_map{'equiv'} = "&equiv;";
+    $things_map{'expansion'} = "&rarr;";
+    $things_map{'point'} = "&lowast;";
+    $things_map{'result'} = "&rArr;";
+}
+
+#
+# read texi2html extensions (if any)
+#
+$extensions = 'texi2html.ext'; # extensions in working directory
+if (-f $extensions) {
+    print "# reading extensions from $extensions\n" if $verbose;
+    require($extensions);
+}
+($progdir = $0) =~ s/[^\/]+$//;
+if ($progdir && ($progdir ne './')) {
+    $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory
+    if (-f $extensions) {
+       print "# reading extensions from $extensions\n" if $verbose;
+       require($extensions);
+    }
+}
+
+print "# reading from $docu\n" if $verbose;
+
+#+++############################################################################
+#                                                                              #
+# Pass 1: read source, handle command, variable, simple substitution           #
+#                                                                              #
+#---############################################################################
+
+@lines = ();                           # whole document
+@toc_lines = ();                       # table of contents
+$toplevel = 0;                         # top level seen in hierarchy
+$curlevel = 0;                         # current level in TOC
+$node = '';                            # current node name
+$in_table = 0;                         # am I inside a table
+$table_type = '';                      # type of table ('', 'f', 'v')
+@tables = ();                          # nested table support
+$in_bibliography = 0;                  # am I inside a bibliography
+$in_glossary = 0;                      # am I inside a glossary
+$in_top = 0;                           # am I inside the top node
+$in_pre = 0;                           # am I inside a preformatted section
+$in_list = 0;                          # am I inside a list
+$in_html = 0;                          # am I inside an HTML section
+$first_line = 1;                       # is it the first line
+$dont_html = 0;                                # don't protect HTML on this line
+$split_num = 0;                                # split index
+$deferred_ref = '';                    # deferred reference for indexes
+@html_stack = ();                      # HTML elements stack
+$html_element = '';                    # current HTML element
+&html_reset;
+
+# build code for simple substitutions
+# the maps used (%simple_map and %things_map) MUST be aware of this
+# watch out for regexps, / and escaped characters!
+$subst_code = '';
+foreach (keys(%simple_map)) {
+    ($re = $_) =~ s/(\W)/\\$1/g; # protect regexp chars
+    $subst_code .= "s/\\\@$re/$simple_map{$_}/g;\n";
+}
+foreach (keys(%things_map)) {
+    $subst_code .= "s/\\\@$_\\{\\}/$things_map{$_}/g;\n";
+}
+if ($use_acc) {
+    # accentuated characters
+    foreach (keys(%accent_map)) {
+       if ($_ eq "`") {
+           $subst_code .= "s/$;3";
+       } elsif ($_ eq "'") {
+           $subst_code .= "s/$;4";
+       } else {
+           $subst_code .= "s/\\\@\\$_";
+       }
+       $subst_code .= "([aeiou])/&\${1}$accent_map{$_};/gi;\n";
+    }
+}
+eval("sub simple_substitutions { $subst_code }");
+
+&init_input;
+while ($_ = &next_line) {
+    #
+    # remove \input on the first lines only
+    #
+    if ($first_line) {
+       next if /^\\input/;
+       $first_line = 0;
+    }
+    #
+    # parse texinfo tags
+    #
+    $tag = '';
+    $end_tag = '';
+    if (/^\@end\s+(\w+)\b/) {
+       $end_tag = $1;
+    } elsif (/^\@(\w+)\b/) {
+       $tag = $1;
+    }
+    #
+    # handle @ifhtml / @end ifhtml
+    #
+    if ($in_html) {
+       if ($end_tag eq 'ifhtml') {
+           $in_html = 0;
+       } else {
+           $tag2pro{$in_html} .= $_;
+       }
+       next;
+    } elsif ($tag eq 'ifhtml') {
+       $in_html = $PROTECTTAG . ++$html_num;
+       push(@lines, $in_html);
+       next;
+    }
+    #
+    # try to skip the line
+    #
+    if ($end_tag) {
+       next if $to_skip{"end $end_tag"};
+    } elsif ($tag) {
+       next if $to_skip{$tag};
+       last if $tag eq 'bye';
+    }
+    if ($in_top) {
+       # parsing the top node
+       if ($tag eq 'node' || $tag eq 'include' || $sec2level{$tag}) {
+           # no more in top
+           $in_top = 0;
+       } else {
+           # skip it
+           next;
+       }
+    }
+    #
+    # try to remove inlined comments
+    # syntax from tex-mode.el comment-start-skip
+    #
+    s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/;
+    # non-@ substitutions cf. texinfmt.el
+    s/``/\"/g;
+    s/''/\"/g;
+    s/([\w ])---([\w ])/$1--$2/g;
+    #
+    # analyze the tag
+    #
+    if ($tag) {
+       # skip lines
+       &skip_until($tag), next if $tag eq 'ignore';
+       if ($expandinfo) {
+           &skip_until($tag), next if $tag eq 'iftex';
+       } else {
+           &skip_until($tag), next if $tag eq 'ifinfo';
+       }
+       &skip_until($tag), next if $tag eq 'tex';
+       # handle special tables
+       if ($tag eq 'table') {
+           $table_type = '';
+       } elsif ($tag eq 'ftable') {
+           $tag = 'table';
+           $table_type = 'f';
+       } elsif ($tag eq 'vtable') {
+           $tag = 'table';
+           $table_type = 'v';
+       }
+       # special cases
+       if ($tag eq 'top' || ($tag eq 'node' && /^\@node\s+top\s*,/i)) {
+           $in_top = 1;
+           @lines = (); # ignore all lines before top (title page garbage)
+           next;
+       } elsif ($tag eq 'node') {
+           $in_top = 0;
+           warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o;
+           $_ = &protect_html($_); # if node contains '&' for instance
+           s/^\@node\s+//;
+           ($node) = split(/,/);
+           &normalise_node($node);
+           if ($split_node) {
+               &next_doc;
+               push(@lines, $SPLITTAG) if $split_num++;
+               push(@sections, $node);
+           }
+           next;
+       } elsif ($tag eq 'include') {
+           if (/^\@include\s+($FILERE)\s*$/o) {
+               $file = $1;
+               unless (-e $file) {
+                   foreach $dir (@include_dirs) {
+                       $file = "$dir/$1";
+                       last if -e $file;
+                   }
+               }
+               if (-e $file) {
+                   &open($file);
+                   print "# including $file\n" if $verbose;
+               } else {
+                   warn "$ERROR Can't find $file, skipping";
+               }
+           } else {
+               warn "$ERROR Bad include line: $_";
+           }
+           next;
+       } elsif ($tag eq 'ifclear') {
+           if (/^\@ifclear\s+($VARRE)\s*$/o) {
+               next unless defined($value{$1});
+               &skip_until($tag);
+           } else {
+               warn "$ERROR Bad ifclear line: $_";
+           }
+           next;
+       } elsif ($tag eq 'ifset') {
+           if (/^\@ifset\s+($VARRE)\s*$/o) {
+               next if defined($value{$1});
+               &skip_until($tag);
+           } else {
+               warn "$ERROR Bad ifset line: $_";
+           }
+           next;
+       } elsif ($tag eq 'menu') {
+           unless ($show_menu) {
+               &skip_until($tag);
+               next;
+           }
+           &html_push_if($tag);
+           push(@lines, &html_debug("\n", __LINE__));
+       } elsif ($format_map{$tag}) {
+           $in_pre = 1 if $format_map{$tag} eq 'PRE';
+           &html_push_if($format_map{$tag});
+           push(@lines, &html_debug("\n", __LINE__));
+           $in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ;
+           push(@lines, &debug("<$format_map{$tag}>\n", __LINE__));
+           next;
+       } elsif ($tag eq 'table') {
+           if (/^\@[fv]?table\s+\@(\w+)\s*$/) {
+               $in_table = $1;
+               unshift(@tables, join($;, $table_type, $in_table));
+               push(@lines, &debug("<DL COMPACT>\n", __LINE__));
+               &html_push_if('DL');
+               push(@lines, &html_debug("\n", __LINE__));
+           } else {
+               warn "$ERROR Bad table line: $_";
+           }
+           next;
+       } elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') {
+           if (/^\@$tag\s+(\w)\w\s+(\w)\w\s*$/) {
+               eval("*${1}index = *${2}index");
+           } else {
+               warn "$ERROR Bad syn*index line: $_";
+           }
+           next;
+       } elsif ($tag eq 'sp') {
+           push(@lines, &debug("<P>\n", __LINE__));
+           next;
+       } elsif ($tag eq 'setref') {
+           &protect_html; # if setref contains '&' for instance
+           if (/^\@$tag\s*{($NODERE)}\s*$/) {
+               $setref = $1;
+               $setref =~ s/\s+/ /g; # normalize
+               $setref =~ s/ $//;
+               $node2sec{$setref} = $name;
+               $node2href{$setref} = "$docu_doc#$docid";
+           } else {
+               warn "$ERROR Bad setref line: $_";
+           }
+           next;
+       } elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') {
+           if (/^\@$tag\s+(\w\w)\s*$/) {
+               $valid_index{$1} = 1;
+           } else {
+               warn "$ERROR Bad defindex line: $_";
+           }
+           next;
+       } elsif (defined($def_map{$tag})) {
+           if ($def_map{$tag}) {
+               s/^\@$tag\s+//;
+               $tag = $def_map{$tag};
+               $_ = "\@$tag $_";
+               $tag =~ s/\s.*//;
+           }
+       } elsif (defined($user_sub{$tag})) {
+           s/^\@$tag\s+//;
+           $sub = $user_sub{$tag};
+           print "# user $tag = $sub, arg: $_" if $debug & $DEBUG_USER;
+           if (defined(&$sub)) {
+               chop($_);
+               &$sub($_);
+           } else {
+               warn "$ERROR Bad user sub for $tag: $sub\n";
+           }
+           next;
+       }
+       if (defined($def_map{$tag})) {
+           s/^\@$tag\s+//;
+           if ($tag =~ /x$/) {
+               # extra definition line
+               $tag = $`;
+               $is_extra = 1;
+           } else {
+               $is_extra = 0;
+           }
+           while (/\{([^\{\}]*)\}/) {
+               # this is a {} construct
+               ($before, $contents, $after) = ($`, $1, $');
+               # protect spaces
+               $contents =~ s/\s+/$;9/g;
+               # restore $_ protecting {}
+               $_ = "$before$;7$contents$;8$after";
+           }
+           @args = split(/\s+/, &protect_html($_));
+           foreach (@args) {
+               s/$;9/ /g;      # unprotect spaces
+               s/$;7/\{/g;     # ... {
+               s/$;8/\}/g;     # ... }
+           }
+           $type = shift(@args);
+           $type =~ s/^\{(.*)\}$/$1/;
+           print "# def ($tag): {$type} ", join(', ', @args), "\n"
+               if $debug & $DEBUG_DEF;
+           $type .= ':'; # it's nicer like this
+           $name = shift(@args);
+           $name =~ s/^\{(.*)\}$/$1/;
+           if ($is_extra) {
+               $_ = &debug("<DT>", __LINE__);
+           } else {
+               $_ = &debug("<DL>\n<DT>", __LINE__);
+           }
+           if ($tag eq 'deffn' || $tag eq 'defvr' || $tag eq 'deftp') {
+               $_ .= "<U>$type</U> <B>$name</B>";
+               $_ .= " <I>@args</I>" if @args;
+           } elsif ($tag eq 'deftypefn' || $tag eq 'deftypevr'
+                    || $tag eq 'defcv' || $tag eq 'defop') {
+               $ftype = $name;
+               $name = shift(@args);
+               $name =~ s/^\{(.*)\}$/$1/;
+               $_ .= "<U>$type</U> $ftype <B>$name</B>";
+               $_ .= " <I>@args</I>" if @args;
+           } else {
+               warn "$ERROR Unknown definition type: $tag\n";
+               $_ .= "<U>$type</U> <B>$name</B>";
+               $_ .= " <I>@args</I>" if @args;
+           }
+           $_ .= &debug("\n<DD>", __LINE__);
+           $name = &unprotect_html($name);
+           if ($tag eq 'deffn' || $tag eq 'deftypefn') {
+               unshift(@input_spool, "\@findex $name\n");
+           } elsif ($tag eq 'defop') {
+               unshift(@input_spool, "\@findex $name on $ftype\n");
+           } elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') {
+               unshift(@input_spool, "\@vindex $name\n");
+           } else {
+               unshift(@input_spool, "\@tindex $name\n");
+           }
+           $dont_html = 1;
+       }
+    } elsif ($end_tag) {
+       if ($format_map{$end_tag}) {
+           $in_pre = 0 if $format_map{$end_tag} eq 'PRE';
+           $in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ;
+           &html_pop_if('LI', 'P');
+           &html_pop_if();
+           push(@lines, &debug("</$format_map{$end_tag}>\n", __LINE__));
+           push(@lines, &html_debug("\n", __LINE__));
+       } elsif ($end_tag eq 'table' ||
+                $end_tag eq 'ftable' ||
+                $end_tag eq 'vtable') {
+           shift(@tables);
+           if (@tables) {
+               ($table_type, $in_table) = split($;, $tables[0]);
+           } else {
+               $in_table = 0;
+           }
+           push(@lines, "</DL>\n");
+           &html_pop_if('DD');
+           &html_pop_if();
+       } elsif (defined($def_map{$end_tag})) {
+           push(@lines, &debug("</DL>\n", __LINE__));
+       } elsif ($end_tag eq 'menu') {
+           &html_pop_if();
+           push(@lines, $_); # must keep it for pass 2
+       }
+       next;
+    }
+    #
+    # misc things
+    #
+    # protect texi and HTML things
+    &protect_texi;
+    $_ = &protect_html($_) unless $dont_html;
+    $dont_html = 0;
+    # substitution (unsupported things)
+    s/^\@center\s+//g;
+    s/^\@exdent\s+//g;
+    s/\@noindent\s+//g;
+    s/\@refill\s+//g;
+    # other substitutions
+    &simple_substitutions;
+    s/\@value{($VARRE)}/$value{$1}/eg;
+    s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4
+    #
+    # analyze the tag again
+    #
+    if ($tag) {
+       if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) {
+           if (/^\@$tag\s+(.+)$/) {
+               $name = $1;
+               $name =~ s/\s+$//;
+               $level = $sec2level{$tag};
+               $name = &update_sec_num($tag, $level) . "  $name"
+                   if $number_sections && $tag !~ /^unnumbered/;
+               if ($tag =~ /heading$/) {
+                   push(@lines, &html_debug("\n", __LINE__));
+                   if ($html_element ne 'body') {
+                       # We are in a nice pickle here. We are trying to get a H? heading
+                       # even though we are not in the body level. So, we convert it to a
+                       # nice, bold, line by itself.
+                       $_ = &debug("\n\n<P><STRONG>$name</STRONG></P>\n\n", __LINE__);
+                   } else {
+                       $_ = &debug("<H$level>$name</H$level>\n", __LINE__);
+                       &html_push_if('body');
+                   }
+                   print "# heading, section $name, level $level\n"
+                       if $debug & $DEBUG_TOC;
+               } else {
+                   if ($split_chapter) {
+                       unless ($toplevel) {
+                           # first time we see a "section"
+                           unless ($level == 1) {
+                               warn "$ERROR The first section found is not of level 1: $_";
+                               warn "$ERROR I'll split on sections of level $level...\n";
+                           }
+                           $toplevel = $level;
+                       }
+                       if ($level == $toplevel) {
+                           &next_doc;
+                           push(@lines, $SPLITTAG) if $split_num++;
+                           push(@sections, $name);
+                       }
+                   }
+                   $sec_num++;
+                   $docid = "SEC$sec_num";
+                   $tocid = "TOC$sec_num";
+                   # check biblio and glossary
+                   $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i);
+                   $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i);
+                   # check node
+                   if ($node) {
+                       if ($node2sec{$node}) {
+                           warn "$ERROR Duplicate node found: $node\n";
+                       } else {
+                           $node2sec{$node} = $name;
+                           $node2href{$node} = "$docu_doc#$docid";
+                           print "# node $node, section $name, level $level\n"
+                               if $debug & $DEBUG_TOC;
+                       }
+                       $node = '';
+                   } else {
+                       print "# no node, section $name, level $level\n"
+                           if $debug & $DEBUG_TOC;
+                   }
+                   # update TOC
+                   while ($level > $curlevel) {
+                       $curlevel++;
+                       push(@toc_lines, "<UL>\n");
+                   }
+                   while ($level < $curlevel) {
+                       $curlevel--;
+                       push(@toc_lines, "</UL>\n");
+                   }
+                   $_ = "<LI>" . &anchor($tocid, "$docu_doc#$docid", $name, 1);
+                   push(@toc_lines, &substitute_style($_));
+                   # update DOC
+                   push(@lines, &html_debug("\n", __LINE__));
+                   &html_reset;
+                   $_ =  "<H$level>".&anchor($docid, "$docu_toc#$tocid", $name)."</H$level>\n";
+                   $_ = &debug($_, __LINE__);
+                   push(@lines, &html_debug("\n", __LINE__));
+               }
+               # update DOC
+               foreach $line (split(/\n+/, $_)) {
+                   push(@lines, "$line\n");
+               }
+               next;
+           } else {
+               warn "$ERROR Bad section line: $_";
+           }
+       } else {
+           # track variables
+           $value{$1} = $2, next if /^\@set\s+($VARRE)\s+(.*)$/o;
+           delete $value{$1}, next if /^\@clear\s+($VARRE)\s*$/o;
+           # store things
+           $value{'_setfilename'}   = $1, next if /^\@setfilename\s+(.*)$/;
+           $value{'_settitle'}      = $1, next if /^\@settitle\s+(.*)$/;
+           $value{'_author'}   .= "$1\n", next if /^\@author\s+(.*)$/;
+           $value{'_subtitle'} .= "$1\n", next if /^\@subtitle\s+(.*)$/;
+           $value{'_title'}    .= "$1\n", next if /^\@title\s+(.*)$/;
+           # index
+           if (/^\@(..?)index\s+/) {
+               unless ($valid_index{$1}) {
+                   warn "$ERROR Undefined index command: $_";
+                   next;
+               }
+               $id = 'IDX' . ++$idx_num;
+               $index = $1 . 'index';
+               $what = &substitute_style($');
+               $what =~ s/\s+$//;
+               print "# found $index for '$what' id $id\n"
+                   if $debug & $DEBUG_INDEX;
+               eval(<<EOC);
+               if (defined(\$$index\{\$what\})) {
+                   \$$index\{\$what\} .= "$;$docu_doc#$id";
+               } else {
+                   \$$index\{\$what\} = "$docu_doc#$id";
+               }
+EOC
+               #
+               # dirty hack to see if I can put an invisible anchor...
+               #
+               if ($html_element eq 'P' ||
+                   $html_element eq 'LI' ||
+                   $html_element eq 'DT' ||
+                   $html_element eq 'DD' ||
+                   $html_element eq 'ADDRESS' ||
+                   $html_element eq 'B' ||
+                   $html_element eq 'BLOCKQUOTE' ||
+                   $html_element eq 'PRE' ||
+                   $html_element eq 'SAMP') {
+                    push(@lines, &anchor($id, '', $invisible_mark, !$in_pre));
+                } elsif ($html_element eq 'body') {
+                   push(@lines, &debug("<P>\n", __LINE__));
+                    push(@lines, &anchor($id, '', $invisible_mark, !$in_pre));
+                   &html_push('P');
+               } elsif ($html_element eq 'DL' ||
+                        $html_element eq 'UL' ||
+                        $html_element eq 'OL' ) {
+                   $deferred_ref .= &anchor($id, '', $invisible_mark, !$in_pre) . " ";
+               }
+               next;
+           }
+           # list item
+           if (/^\@itemx?\s+/) {
+               $what = $';
+               $what =~ s/\s+$//;
+               if ($in_bibliography && $use_bibliography) {
+                   if ($what =~ /^$BIBRE$/o) {
+                       $id = 'BIB' . ++$bib_num;
+                       $bib2href{$what} = "$docu_doc#$id";
+                       print "# found bibliography for '$what' id $id\n"
+                           if $debug & $DEBUG_BIB;
+                       $what = &anchor($id, '', $what);
+                   }
+               } elsif ($in_glossary && $use_glossary) {
+                   $id = 'GLOSS' . ++$gloss_num;
+                   $entry = $what;
+                   $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
+                   $gloss2href{$entry} = "$docu_doc#$id";
+                   print "# found glossary for '$entry' id $id\n"
+                       if $debug & $DEBUG_GLOSS;
+                   $what = &anchor($id, '', $what);
+               }
+               &html_pop_if('P');
+               if ($html_element eq 'DL' || $html_element eq 'DD') {
+                   if ($things_map{$in_table} && !$what) {
+                       # special case to allow @table @bullet for instance
+                       push(@lines, &debug("<DT>$things_map{$in_table}\n", __LINE__));
+                   } else {
+                       push(@lines, &debug("<DT>\@$in_table\{$what\}\n", __LINE__));
+                   }
+                   push(@lines, "<DD>");
+                   &html_push('DD') unless $html_element eq 'DD';
+                   if ($table_type) { # add also an index
+                       unshift(@input_spool, "\@${table_type}index $what\n");
+                   }
+               } else {
+                   push(@lines, &debug("<LI>$what\n", __LINE__));
+                   &html_push('LI') unless $html_element eq 'LI';
+               }
+               push(@lines, &html_debug("\n", __LINE__));
+               if ($deferred_ref) {
+                   push(@lines, &debug("$deferred_ref\n", __LINE__));
+                   $deferred_ref = '';
+               }
+               next;
+           }
+       }
+    }
+    # paragraph separator
+    if ($_ eq "\n") {
+       next if $#lines >= 0 && $lines[$#lines] eq "\n";
+       if ($html_element eq 'P') {
+           push(@lines, "\n");
+           $_ = &debug("</P>\n", __LINE__);
+           &html_pop;
+       }
+    } elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE') {
+       push(@lines, "<P>\n");
+       &html_push('P');
+       $_ = &debug($_, __LINE__);
+    }
+    # otherwise
+    push(@lines, $_);
+}
+
+# finish TOC
+$level = 0;
+while ($level < $curlevel) {
+    $curlevel--;
+    push(@toc_lines, "</UL>\n");
+}
+
+print "# end of pass 1\n" if $verbose;
+
+#+++############################################################################
+#                                                                              #
+# Pass 2/3: handle style, menu, index, cross-reference                         #
+#                                                                              #
+#---############################################################################
+
+@lines2 = ();                          # whole document (2nd pass)
+@lines3 = ();                          # whole document (3rd pass)
+$in_menu = 0;                          # am I inside a menu
+
+while (@lines) {
+    $_ = shift(@lines);
+    #
+    # special case (protected sections)
+    #
+    if (/^$PROTECTTAG/o) {
+       push(@lines2, $_);
+       next;
+    }
+    #
+    # menu
+    #
+    $in_menu = 1, push(@lines2, &debug("<UL>\n", __LINE__)), next if /^\@menu\b/;
+    $in_menu = 0, push(@lines2, &debug("</UL>\n", __LINE__)), next if /^\@end\s+menu\b/;
+    if ($in_menu) {
+       if (/^\*\s+($NODERE)::/o) {
+           $descr = $';
+           chop($descr);
+           &menu_entry($1, $1, $descr);
+       } elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/) {
+           $descr = $';
+           chop($descr);
+           &menu_entry($1, $2, $descr);
+       } elsif (/^\*/) {
+           warn "$ERROR Bad menu line: $_";
+       } else { # description continued?
+           push(@lines2, $_);
+       }
+       next;
+    }
+    #
+    # printindex
+    #
+    if (/^\@printindex\s+(\w\w)\b/) {
+       local($index, *ary, @keys, $key, $letter, $last_letter, @refs);
+       if ($predefined_index{$1}) {
+           $index = $predefined_index{$1} . 'index';
+       } else {
+           $index = $1 . 'index';
+       }
+       eval("*ary = *$index");
+       @keys = keys(%ary);
+       foreach $key (@keys) {
+           $_ = $key;
+           1 while s/<(\w+)>\`(.*)\'<\/\1>/$2/; # remove HTML tags with quotes
+           1 while s/<(\w+)>(.*)<\/\1>/$2/;     # remove HTML tags
+           $_ = &unprotect_html($_);
+           &unprotect_texi;
+           tr/A-Z/a-z/; # lowercase
+           $key2alpha{$key} = $_;
+           print "# index $key sorted as $_\n"
+               if $key ne $_ && $debug & $DEBUG_INDEX;
+       }
+       $last_letter = undef;
+       foreach $key (sort byalpha @keys) {
+           $letter = substr($key2alpha{$key}, 0, 1);
+           $letter = substr($key2alpha{$key}, 0, 2) if $letter eq $;;
+           if (!defined($last_letter) || $letter ne $last_letter) {
+               push(@lines2, "</DIR>\n") if defined($last_letter);
+               push(@lines2, "<H2>" . &protect_html($letter) . "</H2>\n");
+               push(@lines2, "<DIR>\n");
+               $last_letter = $letter;
+           }
+           @refs = ();
+           foreach (split(/$;/, $ary{$key})) {
+               push(@refs, &anchor('', $_, $key, 0));
+           }
+           push(@lines2, "<LI>" . join(", ", @refs) . "\n");
+       }
+       push(@lines2, "</DIR>\n") if defined($last_letter);
+       next;
+    }
+    #
+    # simple style substitutions
+    #
+    $_ = &substitute_style($_);
+    #
+    # xref
+    #
+    while (/\@(x|px|info|)ref{($XREFRE)(}?)/o) {
+       # note: Texinfo may accept other characters
+       ($type, $nodes, $full) = ($1, $2, $3);
+       ($before, $after) = ($`, $');
+       if (! $full && $after) {
+           warn "$ERROR Bad xref (no ending } on line): $_";
+           $_ = "$before$;0${type}ref\{$nodes$after";
+           next; # while xref
+       }
+       if ($type eq 'x') {
+           $type = 'See ';
+       } elsif ($type eq 'px') {
+           $type = 'see ';
+       } elsif ($type eq 'info') {
+           $type = 'See Info';
+       } else {
+           $type = '';
+       }
+       unless ($full) {
+           $next = shift(@lines);
+           $next = &substitute_style($next);
+           chop($nodes); # remove final newline
+           if ($next =~ /\}/) { # split on 2 lines
+               $nodes .= " $`";
+               $after = $';
+           } else {
+               $nodes .= " $next";
+               $next = shift(@lines);
+               $next = &substitute_style($next);
+               chop($nodes);
+               if ($next =~ /\}/) { # split on 3 lines
+                   $nodes .= " $`";
+                   $after = $';
+               } else {
+                   warn "$ERROR Bad xref (no ending }): $_";
+                   $_ = "$before$;0xref\{$nodes$after";
+                   unshift(@lines, $next);
+                   next; # while xref
+               }
+           }
+       }
+       $nodes =~ s/\s+/ /g; # remove useless spaces
+       @args = split(/\s*,\s*/, $nodes);
+       $node = $args[0]; # the node is always the first arg
+       &normalise_node($node);
+       $sec = $node2sec{$node};
+       if (@args == 5) { # reference to another manual
+           $sec = $args[2] || $node;
+           $man = $args[4] || $args[3];
+           $_ = "${before}${type}section `$sec' in \@cite{$man}$after";
+       } elsif ($type =~ /Info/) { # inforef
+           warn "$ERROR Wrong number of arguments: $_" unless @args == 3;
+           ($nn, $_, $in) = @args;
+           $_ = "${before}${type} file `$in', node `$nn'$after";
+       } elsif ($sec) {
+           $href = $node2href{$node};
+           $_ = "${before}${type}section " . &anchor('', $href, $sec) . $after;
+       } else {
+           warn "$ERROR Undefined node ($node): $_";
+           $_ = "$before$;0xref{$nodes}$after";
+       }
+    }
+    #
+    # try to guess bibliography references or glossary terms
+    #
+    unless (/^<H\d><A NAME=\"SEC\d/) {
+       if ($use_bibliography) {
+           $done = '';
+           while (/$BIBRE/o) {
+               ($pre, $what, $post) = ($`, $&, $');
+               $href = $bib2href{$what};
+               if (defined($href) && $post !~ /^[^<]*<\/A>/) {
+                   $done .= $pre . &anchor('', $href, $what);
+               } else {
+                   $done .= "$pre$what";
+               }
+               $_ = $post;
+           }
+           $_ = $done . $_;
+       }
+       if ($use_glossary) {
+           $done = '';
+           while (/\b\w+\b/) {
+               ($pre, $what, $post) = ($`, $&, $');
+               $entry = $what;
+               $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
+               $href = $gloss2href{$entry};
+               if (defined($href) && $post !~ /^[^<]*<\/A>/) {
+                   $done .= $pre . &anchor('', $href, $what);
+               } else {
+                   $done .= "$pre$what";
+               }
+               $_ = $post;
+           }
+           $_ = $done . $_;
+       }
+    }
+    # otherwise
+    push(@lines2, $_);
+}
+print "# end of pass 2\n" if $verbose;
+
+#
+# split style substitutions
+#
+while (@lines2) {
+    $_ = shift(@lines2);
+    #
+    # special case (protected sections)
+    #
+    if (/^$PROTECTTAG/o) {
+       push(@lines3, $_);
+       next;
+    }
+    #
+    # split style substitutions
+    #
+    $old = '';
+    while ($old ne $_) {
+        $old = $_;
+       if (/\@(\w+)\{/) {
+           ($before, $style, $after) = ($`, $1, $');
+           if (defined($style_map{$style})) {
+               $_ = $after;
+               $text = '';
+               $after = '';
+               $failed = 1;
+               while (@lines2) {
+                   if (/\}/) {
+                       $text .= $`;
+                       $after = $';
+                       $failed = 0;
+                       last;
+                   } else {
+                       $text .= $_;
+                       $_ = shift(@lines2);
+                   }
+               }
+               if ($failed) {
+                   die "* Bad syntax (\@$style) after: $before\n";
+               } else {
+                   $text = &apply_style($style, $text);
+                   $_ = "$before$text$after";
+               }
+           }
+       }
+    }
+    # otherwise
+    push(@lines3, $_);
+}
+print "# end of pass 3\n" if $verbose;
+
+#+++############################################################################
+#                                                                              #
+# Pass 4: foot notes, final cleanup                                            #
+#                                                                              #
+#---############################################################################
+
+@foot_lines = ();                      # footnotes
+@doc_lines = ();                       # final document
+$end_of_para = 0;                      # true if last line is <P>
+
+while (@lines3) {
+    $_ = shift(@lines3);
+    #
+    # special case (protected sections)
+    #
+    if (/^$PROTECTTAG/o) {
+       push(@doc_lines, $_);
+       $end_of_para = 0;
+       next;
+    }
+    #
+    # footnotes
+    #
+    while (/\@footnote([^\{\s]+)\{/) {
+       ($before, $d, $after) = ($`, $1, $');
+       $_ = $after;
+       $text = '';
+       $after = '';
+       $failed = 1;
+       while (@lines3) {
+           if (/\}/) {
+               $text .= $`;
+               $after = $';
+               $failed = 0;
+               last;
+           } else {
+               $text .= $_;
+               $_ = shift(@lines3);
+           }
+       }
+       if ($failed) {
+           die "* Bad syntax (\@footnote) after: $before\n";
+       } else {
+           $foot_num++;
+           $docid  = "DOCF$foot_num";
+           $footid = "FOOT$foot_num";
+           $foot = "($foot_num)";
+           push(@foot_lines, "<H3>" . &anchor($footid, "$d#$docid", $foot) . "</H3>\n");
+           $text = "<P>$text" unless $text =~ /^\s*<P>/;
+           push(@foot_lines, "$text\n");
+           $_ = $before . &anchor($docid, "$docu_foot#$footid", $foot) . $after;
+       }
+    }
+    #
+    # remove unnecessary <P>
+    #
+    if (/^\s*<P>\s*$/) {
+       next if $end_of_para++;
+    } else {
+       $end_of_para = 0;
+    }
+    # otherwise
+    push(@doc_lines, $_);
+}
+print "# end of pass 4\n" if $verbose;
+
+#+++############################################################################
+#                                                                              #
+# Pass 5: print things                                                         #
+#                                                                              #
+#---############################################################################
+
+$header = <<EOT;
+<!-- This HTML file has been created by $THISPROG
+     from $docu on $TODAY -->
+EOT
+
+$full_title = $value{'_title'} || $value{'_settitle'} || "Untitled Document";
+$title = $value{'_settitle'} || $full_title;
+$_ = &substitute_style($full_title);
+&unprotect_texi;
+s/\n$//; # rmv last \n (if any)
+$full_title = "<H1>" . join("</H1>\n<H1>", split(/\n/, $_)) . "</H1>\n";
+
+#
+# print ToC
+#
+if (!$monolithic && @toc_lines) {
+    if (open(FILE, "> $docu_toc")) {
+       print "# creating $docu_toc...\n" if $verbose;
+       &print_toplevel_header("$title - Table of Contents");
+       &print_ruler;
+       &print(*toc_lines, FILE);
+       &print_toplevel_footer;
+       close(FILE);
+    } else {
+       warn "$ERROR Can't write to $docu_toc: $!\n";
+    }
+}
+
+#
+# print footnotes
+#
+if (!$monolithic && @foot_lines) {
+    if (open(FILE, "> $docu_foot")) {
+       print "# creating $docu_foot...\n" if $verbose;
+       &print_toplevel_header("$title - Footnotes");
+       &print_ruler;
+        &print(*foot_lines, FILE);
+       &print_toplevel_footer;
+       close(FILE);
+    } else {
+       warn "$ERROR Can't write to $docu_foot: $!\n";
+    }
+}
+
+#
+# print document
+#
+if ($split_chapter || $split_node) { # split
+    $doc_num = 0;
+    $last_num = scalar(@sections);
+    $first_doc = &doc_name(1);
+    $last_doc = &doc_name($last_num);
+    while (@sections) {
+       $section = shift(@sections);
+       &next_doc;
+       if (open(FILE, "> $docu_doc")) {
+           print "# creating $docu_doc...\n" if $verbose;
+           &print_header("$title - $section");
+           $prev_doc = ($doc_num == 1 ? undef : &doc_name($doc_num - 1));
+           $next_doc = ($doc_num == $last_num ? undef : &doc_name($doc_num + 1));
+           $navigation = "Go to the ";
+           $navigation .= ($prev_doc ? &anchor('', $first_doc, "first") : "first");
+           $navigation .= ", ";
+           $navigation .= ($prev_doc ? &anchor('', $prev_doc, "previous") : "previous");
+           $navigation .= ", ";
+           $navigation .= ($next_doc ? &anchor('', $next_doc, "next") : "next");
+           $navigation .= ", ";
+           $navigation .= ($next_doc ? &anchor('', $last_doc, "last") : "last");
+           $navigation .= " section, " . &anchor('', $docu_toc, "table of contents") . ".\n";
+           print FILE $navigation;
+           &print_ruler;
+           # find corresponding lines
+            @tmp_lines = ();
+            while (@doc_lines) {
+               $_ = shift(@doc_lines);
+               last if ($_ eq $SPLITTAG);
+               push(@tmp_lines, $_);
+           }
+            &print(*tmp_lines, FILE);
+           &print_ruler;
+           print FILE $navigation;
+           &print_footer;
+           close(FILE);
+       } else {
+           warn "$ERROR Can't write to $docu_doc: $!\n";
+       }
+    }
+} else { # not split
+    if (open(FILE, "> $docu_doc")) {
+       print "# creating $docu_doc...\n" if $verbose;
+       if ($monolithic || !@toc_lines) {
+           &print_toplevel_header($title);
+       } else {
+           &print_header($title);
+           print FILE $full_title;
+       }
+       if ($monolithic && @toc_lines) {
+           &print_ruler;
+           print FILE "<H1>Table of Contents</H1>\n";
+           &print(*toc_lines, FILE);
+       }
+       &print_ruler;
+        &print(*doc_lines, FILE);
+       if ($monolithic && @foot_lines) {
+           &print_ruler;
+           print FILE "<H1>Footnotes</H1>\n";
+           &print(*foot_lines, FILE);
+       }
+       if ($monolithic || !@toc_lines) {
+           &print_toplevel_footer;
+       } else {
+           &print_footer;
+       }
+       close(FILE);
+    } else {
+       warn "$ERROR Can't write to $docu_doc: $!\n";
+    }
+}
+
+print "# that's all folks\n" if $verbose;
+
+#+++############################################################################
+#                                                                              #
+# Low level functions                                                          #
+#                                                                              #
+#---############################################################################
+
+sub update_sec_num {
+    local($name, $level) = @_;
+
+    $level--; # here we start at 0
+    if ($name =~ /^appendix/) {
+       # appendix style
+       if (defined(@appendix_sec_num)) {
+           &incr_sec_num($level, @appendix_sec_num);
+       } else {
+           @appendix_sec_num = ('A', 0, 0, 0);
+       }
+       return(join('.', @appendix_sec_num[0..$level]));
+    } else {
+       # normal style
+       if (defined(@normal_sec_num)) {
+           &incr_sec_num($level, @normal_sec_num);
+       } else {
+           @normal_sec_num = (1, 0, 0, 0);
+       }
+       return(join('.', @normal_sec_num[0..$level]));
+    }
+}
+
+sub incr_sec_num {
+    local($level, $l);
+    $level = shift(@_);
+    $_[$level]++;
+    foreach $l ($level+1 .. 3) {
+       $_[$l] = 0;
+    }
+}
+
+sub check {
+    local($_, %seen, %context, $before, $match, $after);
+
+    while (<>) {
+       if (/\@(\*|\.|\:|\@|\{|\})/) {
+           $seen{$&}++;
+           $context{$&} .= "> $_" if $verbose;
+           $_ = "$`XX$'";
+           redo;
+       }
+       if (/\@(\w+)/) {
+           ($before, $match, $after) = ($`, $&, $');
+           if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address
+               $seen{'e-mail address'}++;
+               $context{'e-mail address'} .= "> $_" if $verbose;
+           } else {
+               $seen{$match}++;
+               $context{$match} .= "> $_" if $verbose;
+           }
+           $match =~ s/^\@/X/;
+           $_ = "$before$match$after";
+           redo;
+       }
+    }
+    
+    foreach (sort(keys(%seen))) {
+       if ($verbose) {
+           print "$_\n";
+           print $context{$_};
+       } else {
+           print "$_ ($seen{$_})\n";
+       }
+    }
+}
+
+sub open {
+    local($name) = @_;
+
+    ++$fh_name;
+    if (open($fh_name, $name)) {
+       unshift(@fhs, $fh_name);
+    } else {
+       warn "$ERROR Can't read file $name: $!\n";
+    }
+}
+
+sub init_input {
+    @fhs = ();                 # hold the file handles to read
+    @input_spool = ();         # spooled lines to read
+    $fh_name = 'FH000';
+    &open($docu);
+}
+
+sub next_line {
+    local($fh, $line);
+
+    if (@input_spool) {
+       $line = shift(@input_spool);
+       return($line);
+    }
+    while (@fhs) {
+       $fh = $fhs[0];
+       $line = <$fh>;
+       return($line) if $line;
+       close($fh);
+       shift(@fhs);
+    }
+    return(undef);
+}
+
+# used in pass 1, use &next_line
+sub skip_until {
+    local($tag) = @_;
+    local($_);
+
+    while ($_ = &next_line) {
+       return if /^\@end\s+$tag\s*$/;
+    }
+    die "* Failed to find '$tag' after: " . $lines[$#lines];
+}
+
+#
+# HTML stacking to have a better HTML output
+#
+
+sub html_reset {
+    @html_stack = ('html');
+    $html_element = 'body';
+}
+
+sub html_push {
+    local($what) = @_;
+    push(@html_stack, $html_element);
+    $html_element = $what;
+}
+
+sub html_push_if {
+    local($what) = @_;
+    push(@html_stack, $html_element)
+       if ($html_element && $html_element ne 'P');
+    $html_element = $what;
+}
+
+sub html_pop {
+    $html_element = pop(@html_stack);
+}
+
+sub html_pop_if {
+    local($elt);
+
+    if (@_) {
+       foreach $elt (@_) {
+           if ($elt eq $html_element) {
+               $html_element = pop(@html_stack) if @html_stack;
+               last;
+           }
+       }
+    } else {
+       $html_element = pop(@html_stack) if @html_stack;
+    }
+}
+
+sub html_debug {
+    local($what, $line) = @_;
+    return("<!-- $line @html_stack, $html_element -->$what")
+       if $debug & $DEBUG_HTML;
+    return($what);
+}
+
+# to debug the output...
+sub debug {
+    local($what, $line) = @_;
+    return("<!-- $line -->$what")
+       if $debug & $DEBUG_HTML;
+    return($what);
+}
+
+sub normalise_node {
+    $_[0] =~ s/\s+/ /g;
+    $_[0] =~ s/ $//;
+    $_[0] =~ s/^ //;
+}
+
+sub menu_entry {
+    local($entry, $node, $descr) = @_;
+    local($href);
+
+    &normalise_node($node);
+    $href = $node2href{$node};
+    if ($href) {
+       $descr =~ s/^\s+//;
+       $descr = ": $descr" if $descr;
+       push(@lines2, "<LI>" . &anchor('', $href, $entry) . "$descr\n");
+    } else {
+       warn "$ERROR Undefined node ($node): $_";
+    }
+}
+
+sub do_ctrl { "^$_[0]" }
+
+sub do_sc { "\U$_[0]\E" }
+
+sub apply_style {
+    local($texi_style, $text) = @_;
+    local($style);
+
+    $style = $style_map{$texi_style};
+    if (defined($style)) { # known style
+       if ($style =~ /^\"/) { # add quotes
+           $style = $';
+           $text = "\`$text\'";
+       }
+       if ($style =~ /^\&/) { # custom
+           $style = $';
+           $text = &$style($text);
+       } elsif ($style) { # good style
+           $text = "<$style>$text</$style>";
+       } else { # no style
+       }
+    } else { # unknown style
+       $text = undef;
+    }
+    return($text);
+}
+
+# remove Texinfo styles
+sub remove_style {
+    local($_) = @_;
+    s/\@\w+{([^\{\}]+)}/$1/g;
+    return($_);
+}
+
+sub substitute_style {
+    local($_) = @_;
+    local($changed, $done, $style, $text);
+
+    $changed = 1;
+    while ($changed) {
+       $changed = 0;
+       $done = '';
+       while (/\@(\w+){([^\{\}]+)}/) {
+           $text = &apply_style($1, $2);
+           if ($text) {
+               $_ = "$`$text$'";
+               $changed = 1;
+           } else {
+               $done .= "$`\@$1";
+               $_ = "{$2}$'";
+           }
+       }
+        $_ = $done . $_;
+    }
+    return($_);
+}
+
+sub anchor {
+    local($name, $href, $text, $newline) = @_;
+    local($result);
+
+    $result = "<A";
+    $result .= " NAME=\"$name\"" if $name;
+    $result .= " HREF=\"$href\"" if $href;
+    $result .= ">$text</A>";
+    $result .= "\n" if $newline;
+    return($result);
+}
+
+sub pretty_date {
+    local(@MoY, $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
+
+    @MoY = ('January', 'Febuary', 'March', 'April', 'May', 'June',
+           'July', 'August', 'September', 'October', 'November', 'December');
+    ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
+    $year += ($year < 70) ? 2000 : 1900;
+    return("$mday $MoY[$mon] $year");
+}
+
+sub doc_name {
+    local($num) = @_;
+
+    return("${docu_name}_$num.html");
+}
+
+sub next_doc {
+    $docu_doc = &doc_name(++$doc_num);
+}
+
+sub print {
+    local(*lines, $fh) = @_;
+    local($_);
+
+    while (@lines) {
+       $_ = shift(@lines);
+       if (/^$PROTECTTAG/o) {
+           $_ = $tag2pro{$_};
+       } else {
+           &unprotect_texi;
+       }
+       print $fh $_;
+    }
+}
+
+sub print_ruler {
+    print FILE "<P><HR><P>\n";
+}
+
+sub print_header {
+    local($_);
+
+    # clean the title
+    $_ = &remove_style($_[0]);
+    &unprotect_texi;
+    # print the header
+    if ($doctype eq 'html2') {
+       print FILE $html2_doctype;
+    } elsif ($doctype) {
+       print FILE $doctype;
+    }
+    print FILE <<EOT;
+<HTML>
+<HEAD>
+$header
+<TITLE>$_</TITLE>
+</HEAD>
+<BODY>
+EOT
+}
+
+sub print_toplevel_header {
+    local($_);
+
+    &print_header; # pass given arg...
+    print FILE $full_title;
+    if ($value{'_subtitle'}) {
+       $value{'_subtitle'} =~ s/\n+$//;
+       foreach (split(/\n/, $value{'_subtitle'})) {
+           $_ = &substitute_style($_);
+           &unprotect_texi;
+           print FILE "<H2>$_</H2>\n";
+       }
+    }
+    if ($value{'_author'}) {
+       $value{'_author'} =~ s/\n+$//;
+       foreach (split(/\n/, $value{'_author'})) {
+           $_ = &substitute_style($_);
+           &unprotect_texi;
+           s/[\w.-]+\@[\w.-]+/<A HREF="mailto:$&">$&<\/A>/g;
+           print FILE "<ADDRESS>$_</ADDRESS>\n";
+       }
+    }
+    print FILE "<P>\n";
+}
+
+sub print_footer {
+    print FILE <<EOT;
+</BODY>
+</HTML>
+EOT
+}
+
+sub print_toplevel_footer {
+    &print_ruler;
+    print FILE <<EOT;
+This document was generated on $TODAY using the
+<A HREF=\"$HOMEPAGE\">texi2html</A>
+translator version 1.51.</P>
+EOT
+    &print_footer;
+}
+
+sub protect_texi {
+    # protect @ { } ` '
+    s/\@\@/$;0/go;
+    s/\@\{/$;1/go;
+    s/\@\}/$;2/go;
+    s/\@\`/$;3/go;
+    s/\@\'/$;4/go;
+}
+
+sub protect_html {
+    local($what) = @_;
+    # protect & < >
+    $what =~ s/\&/\&\#38;/g;
+    $what =~ s/\</\&\#60;/g;
+    $what =~ s/\>/\&\#62;/g;
+    # but recognize some HTML things
+    $what =~ s/\&\#60;\/A\&\#62;/<\/A>/g;            # </A>
+    $what =~ s/\&\#60;A ([^\&]+)\&\#62;/<A $1>/g;     # <A [^&]+>
+    $what =~ s/\&\#60;IMG ([^\&]+)\&\#62;/<IMG $1>/g; # <IMG [^&]+>
+    return($what);
+}
+
+sub unprotect_texi {
+    s/$;0/\@/go;
+    s/$;1/\{/go;
+    s/$;2/\}/go;
+    s/$;3/\`/go;
+    s/$;4/\'/go;
+}
+
+sub unprotect_html {
+    local($what) = @_;
+    $what =~ s/\&\#38;/\&/g;
+    $what =~ s/\&\#60;/\</g;
+    $what =~ s/\&\#62;/\>/g;
+    return($what);
+}
+
+sub byalpha {
+    $key2alpha{$a} cmp $key2alpha{$b};
+}
+
+##############################################################################
+
+       # These next few lines are legal in both Perl and nroff.
+
+.00 ;                  # finish .ig
+'di                    \" finish diversion--previous line must be blank
+.nr nl 0-1             \" fake up transition to first page again
+.nr % 0                        \" start at page 1
+'; __END__ ############# From here on it's a standard manual page ############
+.TH TEXI2HTML 1 "09/10/96"
+.AT 3
+.SH NAME
+texi2html \- a Texinfo to HTML converter
+.SH SYNOPSIS
+.B texi2html [options] file
+.PP
+.B texi2html -check [-verbose] files
+.SH DESCRIPTION
+.I Texi2html
+converts the given Texinfo file to a set of HTML files. It tries to handle
+most of the Texinfo commands. It creates hypertext links for cross-references,
+footnotes...
+.PP
+It also tries to add links from a reference to its corresponding entry in the
+bibliography (if any). It may also handle a glossary (see the
+.B \-glossary
+option).
+.PP
+.I Texi2html
+creates several files depending on the contents of the Texinfo file and on
+the chosen options (see FILES).
+.PP
+The HTML files created by
+.I texi2html
+are closer to TeX than to Info, that's why
+.I texi2html
+converts @iftex sections and not @ifinfo ones by default. You can reverse
+this with the \-expandinfo option.
+.SH OPTIONS
+.TP 12
+.B \-check
+Check the given file and give the list of all things that may be Texinfo commands.
+This may be used to check the output of
+.I texi2html
+to find the Texinfo commands that have been left in the HTML file.
+.TP
+.B \-expandinfo
+Expand @ifinfo sections, not @iftex ones.
+.TP
+.B \-glossary
+Use the section named 'Glossary' to build a list of terms and put links in the HTML
+document from each term toward its definition.
+.TP
+.B \-invisible \fIname\fP
+Use \fIname\fP to create invisible destination anchors for index links. This is a workaround
+for a known bug of many WWW browsers, including xmosaic.
+.TP
+.B \-I \fIdir\fP
+Look also in \fIdir\fP to find included files.
+.TP
+.B \-menu
+Show the Texinfo menus; by default they are ignored.
+.TP
+.B \-monolithic
+Output only one file, including the table of contents and footnotes.
+.TP
+.B \-number
+Number the sections.
+.TP
+.B \-split_chapter
+Split the output into several HTML files (one per main section:
+chapter, appendix...).
+.TP
+.B \-split_node
+Split the output into several HTML files (one per node).
+.TP
+.B \-usage
+Print usage instructions, listing the current available command-line options.
+.TP
+.B \-verbose
+Give a verbose output. Can be used with the
+.B \-check
+option.
+.PP
+.SH FILES
+By default
+.I texi2html
+creates the following files (foo being the name of the Texinfo file):
+.TP 16
+.B foo_toc.html
+The table of contents.
+.TP
+.B foo.html
+The document's contents.
+.TP
+.B foo_foot.html
+The footnotes (if any).
+.PP
+When used with the
+.B \-split
+option, it creates several files (one per chapter or node), named
+.B foo_n.html
+(n being the indice of the chapter or node), instead of the single
+.B foo.html
+file.
+.PP
+When used with the
+.B \-monolithic
+option, it creates only one file:
+.B foo.html
+.SH VARIABLES
+.I texi2html
+predefines the following variables: \fBhtml\fP, \fBtexi2html\fP.
+.SH ADDITIONAL COMMANDS
+.I texi2html
+implements the following non-Texinfo commands:
+.TP 16
+.B @ifhtml
+This indicates the start of an HTML section, this section will passed through
+without any modofication.
+.TP
+.B @end ifhtml
+This indcates the end of an HTML section.
+.SH VERSION
+This is \fItexi2html\fP version 1.51, 09/10/96.
+.PP
+The latest version of \fItexi2html\fP can be found in WWW, cf. URL
+http://wwwcn.cern.ch/dci/texi2html/
+.SH AUTHOR
+The main author is Lionel Cons, CERN CN/DCI/UWS, Lionel.Cons@cern.ch.
+Many other people around the net contributed to this program.
+.SH COPYRIGHT
+This program is the intellectual property of the European
+Laboratory for Particle Physics (known as CERN). No guarantee whatsoever is
+provided by CERN. No liability whatsoever is accepted for any loss or damage
+of any kind resulting from any defect or inaccuracy in this information or
+code.
+.PP
+CERN, 1211 Geneva 23, Switzerland
+.SH "SEE ALSO"
+GNU Texinfo Documentation Format,
+HyperText Markup Language (HTML),
+World Wide Web (WWW).
+.SH BUGS
+This program does not understand all Texinfo commands (yet).
+.PP
+TeX specific commands (normally enclosed in @iftex) will be
+passed unmodified.
+.ex
diff --git a/barcode-0.98/ean.c b/barcode-0.98/ean.c
new file mode 100644 (file)
index 0000000..0801a0e
--- /dev/null
@@ -0,0 +1,774 @@
+/*
+ * ean.c -- encoding for ean, upc and isbn
+ *
+ * Copyright (c) 1999 Alessandro Rubini <rubini@gnu.org>
+ * Copyright (c) 1999 Prosa Srl. <prosa@prosa.it>
+ * Copyright (c) 2001 Boszormenyi Zoltan <zboszor@mail.externet.hu>
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+/*
+ * IMPORTANT NOTE: if you are reading this file to learn how to add a
+ * new encoding type, this is the wrong place as there are too many
+ * special cases. Please refer to code39.c instead. If you want to
+ * learn how UPC, EAN, ISBN work, on the other hand, I did my best to
+ * commend things and hope you enjoy it.
+ */
+
+/*
+ * These following static arrays are used to describe the barcode.
+ *
+ * The various forms of UPC and EAN are documented as using three
+ * different alphabets to encode the ten digits. However, each digit
+ * has exactly one encoding; only, it is sometimes mirrored. Moreover,
+ * if you represent the width of each symbol (bar/space) instead of
+ * the sequence of 1's and 0's, you find that even-parity and odd-parity
+ * encoding are exactly the same. So, here are the digits: */
+static char *digits[] = {
+     "3211","2221","2122","1411","1132",
+     "1231","1114","1312","1213","3112"};
+
+/*
+ * What EAN encoding does is adding a leading digit (the 13th digit).
+ * Such an extra digit is encoded by mirroring three of the six digits that
+ * appear in the left half of the UPC code. Here how mirroring works:
+ */
+static char *ean_mirrortab[] = {
+     "------","--1-11","--11-1","--111-","-1--11",
+     "-11--1","-111--","-1-1-1","-1-11-","-11-1-"
+};
+
+/*
+ * UPC-E (the 6-digit one), instead, encodes the check character as
+ * a mirroring of the symbols. This is similar, but the encoding for "0" is
+ * different (EAN uses no mirroring for "0" to be compatible with UPC).
+ * The same rule is used for UPC-5 (the supplemental digits for ISBN)
+ */
+static char *upc_mirrortab[] = {
+     "---111","--1-11","--11-1","--111-","-1--11",
+     "-11--1","-111--","-1-1-1","-1-11-","-11-1-"
+};
+
+/*
+ * UPC-E mirroring for encoding "1"
+ */
+static char *upc_mirrortab1[] = {
+     "111---","11-1--","11--1-","11---1","1-11--",
+     "1--11-","1---11","1-1-1-","1-1--1","1--1-1"
+};
+
+/* UPC-2 has just two digits to mirror */
+static char *upc_mirrortab2[] = {
+    "11","1-","-1","--"
+};
+
+/*
+ * initial, middle, final guard bars (first symbol is a a space).
+ * EAN-13 overwrites the first "0" with "9" to make space for the extra digit.
+ */
+static char *guard[] = {"0a1a","1a1a1","a1a"};
+
+/* initial, final guard bars for UPC-E*/
+static char *guardE[] = {"0a1a","1a1a1a"};
+
+/* initial and inter-char guard bars for supplementals (first is space) */
+static char *guardS[] = {"9112","11"};
+
+/*
+ * These functions are shortcuts I use in the encoding engine
+ */
+static int ean_make_checksum(char *text, int mode)
+{
+    int esum = 0, osum = 0, i;
+    int even=1; /* last char is even */
+
+    if (strchr(text, ' '))
+       i = strchr(text, ' ') - text; /* end of first part */
+    else 
+       i = strlen(text); /* end of all */
+
+    while (i-- > 0) {
+       if (even) esum += text[i]-'0';
+       else      osum += text[i]-'0';
+       even = !even;
+    }
+    if (!mode) { /* standard upc/ean checksum */
+       i = (3*esum + osum) % 10;
+       return (10-i) % 10; /* complement to 10 */
+    } else { /* add-5 checksum */
+       i = (3*esum + 9*osum);
+       return i%10;
+    }
+}
+
+/*
+ * Check that the text can be encoded. Returns 0 or -1.
+ * Accept:
+ *   13 or 12 digits: EAN-13 w/ or w/o checksum
+ * or
+ *   8 or 7 digits: EAN-8 w/ or w/o checksum.
+ * For both EAN-13 and EAN-8, accept an addon of 2 or 5 digits,
+ * separated by ' '
+ */
+int Barcode_ean_verify(unsigned char *text)
+{
+    int i, len0, len, addon;
+    unsigned char tmp[24], *spc;
+
+    len = strlen(text);
+    spc = strchr(text, ' ');
+    if (spc) {
+       len0 = spc - text;
+       addon = len - len0 - 1;
+       if (addon != 2 && addon != 5)
+               return -1;
+       for (i=len0+1; i<len; i++)
+           if (!isdigit(text[i]))
+               return -1;
+    } else
+       len0 = len;
+
+    for (i=0; i<len0; i++)
+        if (!isdigit(text[i]))
+            return -1;
+
+    switch (len0) {
+    case 8:
+       strncpy(tmp, text, 7);
+       tmp[7] = '\0';
+       if (text[7] != (ean_make_checksum(tmp, 0) + '0'))
+               return -1;
+    case 7:
+       break;
+    case 13:
+       strncpy(tmp, text, 12);
+       tmp[12] = '\0';
+       if (text[12] != (ean_make_checksum(tmp, 0) + '0'))
+               return -1;
+    case 12:
+       break;
+    default:
+       return -1;
+    }
+    return 0;
+}
+
+/* Expand the middle part of UPC-E to UPC-A */
+static char *upc_e_to_a0(unsigned char *text)
+{
+    static char result[16];
+    strcpy(result, "00000000000"); /* 11 0's */
+
+    switch(text[5]) { /* last char */
+        case '0': case '1': case '2':
+           strncpy(result+1, text,  2); result[3]=text[5]; /* Manuf. */
+           memcpy(result+8, text+2, 3); /* Product */
+           break;
+        case '3':
+           memcpy(result+1, text,   3); /* Manufacturer */
+           memcpy(result+9, text+3, 2); /* Product */
+           break;
+        case '4':
+           memcpy(result+1,  text,   4); /* Manufacturer */
+           memcpy(result+10, text+4, 1); /* Product */
+           break;
+        default:
+           memcpy(result+1,  text,   5); /* Manufacturer */
+           memcpy(result+10, text+5, 1); /* Product */
+           break;
+    }
+    return result;
+}
+
+/* Try to expand an UPC-E barcode to its UPC-A equivalent.
+ * Accept 6, 7 or 8-digit sequence (not counting the addon):
+ *  6:  only the middle part, encoding "0", w/o checksum.
+ *  7:  the middle part, encoding "0" with a correct checksum
+ *    or
+ *      the middle part, encoding "0" or "1" prepended
+ *  8:  fully qualified UPC-E with checksum.
+ *
+ * Returns a 11 digit UPC-A (w/o checksum) for valid EPC-E barcode
+ * or an empty string for an invalid one.
+ *
+ * The checksum for UPC-E is calculated using its UPC-A equivalent.
+ */
+static char *upc_e_to_a(unsigned char *text)
+{
+    static unsigned char       result[16], *spc;
+    int                                len, chk;
+
+    spc = strchr(text, ' ');
+    if (spc)
+       len = spc - text;
+    else
+       len = strlen(text);
+
+    switch (len) {
+    case 6:
+       strcpy(result, upc_e_to_a0(text));
+       return result;
+    case 7:
+       /* the first char is '0' or '1':
+        * valid number system for UPC-E and no checksum
+        */
+       if (text[0] == '0' || text[0] == '1') {
+               strcpy(result, upc_e_to_a0(text+1));
+               result[0] = text[0];
+               return result;
+       }
+
+       /* Find out whether the 7th char is correct checksum */
+       strcpy(result, upc_e_to_a0(text));
+       chk = ean_make_checksum(result, 0);
+
+       if (chk == (text[len-1] - '0'))
+               return result;
+       /* Invalid 7 digit representation for UPC-E. */
+       return NULL;
+    case 8:
+       if (text[0] == '0' || text[0] == '1') {
+               strcpy(result, upc_e_to_a0(text+1));
+               result[0] = text[0];
+               chk = ean_make_checksum(result, 0);
+               if (chk == (text[len-1] - '0'))
+                       return result;
+       }
+    default:
+       /* Invalid representation for UPC-E. */
+       return NULL;
+    }
+}
+
+/*
+ * Accept a 11 or 12 digit UPC-A barcode and
+ * shrink it into an 8-digit UPC-E equivalent if possible.
+ * Return NULL if impossible, the UPC-E barcode if possible.
+ */
+static unsigned char *upc_a_to_e(unsigned char *text)
+{
+    static unsigned char       result[16];
+    int                                len, chksum;
+
+    len = strlen(text);
+    switch (len) {
+    case 12:
+       strcpy(result, text);
+       result[11] = '\0';
+       chksum = ean_make_checksum(result, 0);
+       if (text[11] != (chksum - '0'))
+               return NULL;
+       break;
+    case 11:
+       chksum = ean_make_checksum(text, 0);
+       break;
+    default:
+       return NULL;
+    }
+
+    strcpy(result, "00000000"); /* 8 0's*/
+
+    /* UPC-E can only be used with number system 0 or 1 */
+    if (text[0] != '0' && text[0] != '1')
+       return NULL;
+
+    result[0] = text[0];
+
+    if ((text[3] == '0' || text[3] == '1' || text[3] == '2')
+           && !strncmp(text+4, "0000", 4)) {
+       memcpy(&result[1], text+1, 2);
+       memcpy(&result[3], text+8, 3);
+       result[6] = text[3];
+    } else if (!strncmp(text+4, "00000", 5)) {
+       memcpy(&result[1], text+1, 3);
+       memcpy(&result[4], text+9, 2);
+       result[6] = '3';
+    } else if (!strncmp(text+5, "00000", 5)) {
+       memcpy(&result[1], text+1, 4);
+       result[5] = text[10];
+       result[6] = '4';
+    } else if ((text[5] != '0') && !strncmp(text+6, "0000", 4)
+           && text[10] >= '5' && text[10] <= '9') {
+       memcpy(&result[1], text+1, 5);
+       result[6] = text[10];
+    } else {
+       return NULL;
+    }
+    result[7] = chksum + '0';
+
+    return result;
+}
+
+/*
+ * UPC-A is the same as EAN, but accept
+ *    12 or 11 digits (UPC-A w/ or w/o checksum)
+ * or accept UPC-E as:
+ *    6 digits (w/o number system and checksum): number system '0' assumed,
+ *    7 digits (either w/o number system or checksum),
+ *    8 digits (w/ number system and checksum)
+ * plus the 2 or 5-digit add-on
+ */
+int Barcode_upc_verify(unsigned char *text)
+{
+    int i, len0, len, addon;
+    unsigned char tmp[24], *spc;
+
+    len = strlen(text);
+    spc = strchr(text, ' ');
+    if (spc) {
+       len0 = spc - text;
+       addon = len - len0 - 1;
+       if (addon != 2 && addon != 5)
+               return -1;
+       for (i=len0+1; i<len; i++)
+           if (!isdigit(text[i]))
+               return -1;
+    } else
+       len0 = len;
+
+    for (i=0; i<len0; i++)
+        if (!isdigit(text[i]))
+            return -1;
+
+    switch (len0) {
+    case 6: case 7: case 8:
+       strncpy(tmp, text, len0);
+       tmp[len0] = '\0';
+       if (!upc_e_to_a(tmp))
+               return -1;
+       break;
+    case 12:
+       strncpy(tmp, text, 11);
+       tmp[11] = '\0';
+       if (text[11] != (ean_make_checksum(tmp, 0) + '0'))
+               return -1;
+    case 11:
+       break;
+    default:
+       return -1;
+    }
+    return 0;
+}
+
+/*
+ * Isbn is the same as EAN, just shorter. Dashes are accepted, the
+ * check character (if specified) is skipped, the extra 5 digits are
+ * accepted after a blank.
+ */
+int Barcode_isbn_verify(unsigned char *text)
+{
+    int i, ndigit=0;
+
+    for (i=0; text[i]; i++) {
+       if (text[i] == '-')
+           continue;
+       if (isdigit(text[i])) {
+           ndigit++;
+           if (ndigit == 9) { /* got it all */
+               i++; break;
+           }
+           continue;
+       }
+       return -1; /* found non-digit */
+    }
+    if (ndigit!=9) return -1; /* too short */
+
+    /* skip an hyphen, if any */
+    if (text[i] == '-')
+       i++;
+    /* accept one more char if any (the checksum) */
+    if (isdigit(text[i]) || toupper(text[i])=='X')
+       i++;
+    if (text[i] == '\0')
+       return 0; /* Ok */
+
+    /* and accept the extra price tag (blank + 5 digits), if any */
+    if (strlen(text+i) != 6)
+       return -1;
+    if (text[i] != ' ')
+       return -1;
+    i++; /* skip the blank */
+    while (text[i]) {
+       if (!isdigit(text[i]))
+           return -1;
+       i++;
+    }
+    return 0; /* Ok: isbn + 5-digit addon */
+}
+
+static int width_of_partial(unsigned char *partial)
+{
+    int i=0;
+    while (*partial) {
+       if (isdigit(*partial))
+           i += *partial - '0';
+       else if (islower(*partial))
+           i += *partial - 'a' + 1;
+       partial++;
+    }
+    return i;
+}
+
+/*
+ * The encoding functions fills the "partial" and "textinfo" fields.
+ * This one deals with both upc (-A and -E) and ean (13 and 8).
+ */
+int Barcode_ean_encode(struct Barcode_Item *bc)
+{
+    static char text[24];
+    static char partial[256];
+    static char textinfo[256];
+    char *mirror, *ptr1, *ptr2, *tptr = textinfo; /* where text is written */
+    char *spc;
+
+    enum {UPCA, UPCE, EAN13, EAN8, ISBN} encoding = ISBN;
+    int i, xpos, checksum, len, len0, addon;
+
+    if (!bc->ascii) {
+       bc->error = EINVAL;
+       return -1;
+    }
+
+    /* Find out whether the barcode has addon and
+     * the length of the barcode w/o the addon.
+     */
+    len = strlen(bc->ascii);
+    spc = strchr(bc->ascii, ' ');
+    if (spc) {
+       len0 = spc - bc->ascii;
+       addon = strlen(spc + 1);
+       if (addon != 2 && addon != 5) {
+           bc->error = EINVAL; /* impossible, actually */
+           return -1;
+       }
+    } else {
+       len0 = len;
+       addon = 0;
+    }
+
+    if (!bc->encoding) {
+       /* ISBN already wrote what it is; if unknown, find it out */
+
+       /*
+        * Do not decide only by barcode length, it may be ambiguous.
+        * Anyway, either the user specified the barcode type or
+        * we already found a fitting one.
+        */
+       switch(bc->flags & BARCODE_ENCODING_MASK) {
+       case BARCODE_EAN:
+               switch (len0) {
+               case 7: case 8:
+                       bc->encoding = strdup("EAN-8");
+                       encoding = EAN8;
+                       break;
+               case 12: case 13:
+                       bc->encoding = strdup("EAN-13");
+                       encoding = EAN13;
+                       break;
+               default:
+                       bc->error = -EINVAL;
+                       return -1;
+               }
+               break;
+
+       case BARCODE_UPC:
+               switch (len0) {
+               case 6: case 7: case 8:
+                       bc->encoding = strdup("UPC-E");
+                       encoding = UPCE;
+                       break;
+               case 11: case 12:
+                       bc->encoding = strdup("UPC-A");
+                       encoding = UPCA;
+                       break;
+               default:
+                       bc->error = -EINVAL;
+                       return -1;
+               }
+               break;
+       default:
+               /* else, it's wrong (impossible, as the text is checked) */
+               bc->error = -EINVAL;
+               return -1;
+       }
+    }
+
+    /* better safe than sorry */
+    if (bc->partial)   free(bc->partial);  bc->partial =  NULL;
+    if (bc->textinfo)  free(bc->textinfo); bc->textinfo = NULL;
+
+    if (encoding == UPCA) { /* add the leading 0 (not printed) */
+       text[0] = '0';
+       strcpy(text+1, bc->ascii);
+    } else if (encoding == UPCE) {
+       strcpy(text, upc_a_to_e(upc_e_to_a(bc->ascii)));
+    } else {
+       strcpy(text, bc->ascii);
+    }
+
+    /*
+     * build the checksum and the bars: any encoding is slightly different
+     */
+    if (encoding == UPCA || encoding == EAN13 || encoding == ISBN) {
+       if (!(encoding == UPCA && len0 == 12) &&
+               !(encoding == EAN13 && len0 == 13)) {
+               checksum = ean_make_checksum(text, 0);
+               text[12] = '0' + checksum; /* add it to the text */
+               text[13] = '\0';
+       }
+
+       strcpy(partial, guard[0]);
+       if (encoding == EAN13 || encoding == ISBN) { /* The first digit */
+           sprintf(tptr,"0:12:%c ",text[0]);
+           tptr += strlen(tptr);
+           partial[0] = '9'; /* extra space for the digit */
+       } else if (encoding == UPCA)
+           partial[0] = '9'; /* UPC has one digit before the symbol, too */
+       xpos = width_of_partial(partial);
+       mirror = ean_mirrortab[text[0]-'0'];
+
+       /* left part */
+       for (i=1;i<7;i++) {      
+           ptr1 = partial + strlen(partial); /* target */
+           ptr2 =  digits[text[i]-'0'];      /* source */
+           strcpy(ptr1, ptr2);
+           if (mirror[i-1] == '1') {
+               /* mirror this */
+               ptr1[0] = ptr2[3];
+               ptr1[1] = ptr2[2];
+               ptr1[2] = ptr2[1];
+               ptr1[3] = ptr2[0];
+           }
+           /*
+            * Write the ascii digit. UPC has a special case
+            * for the first digit, which is out of the bars
+            */
+           if (encoding == UPCA && i==1) {
+               sprintf(tptr, "0:10:%c ", text[i]);
+               tptr += strlen(tptr);
+               ptr1[1] += 'a'-'1'; /* bars are long */
+               ptr1[3] += 'a'-'1';
+           } else {
+               sprintf(tptr, "%i:12:%c ", xpos, text[i]);
+               tptr += strlen(tptr);
+           }
+           /* count the width of the symbol */
+           xpos += 7; /* width_of_partial(ptr2) */
+       }
+
+       strcat(partial, guard[1]); /* middle */
+       xpos += width_of_partial(guard[1]);
+    
+       /* right part */
+       for (i=7;i<13;i++) {  
+           ptr1 = partial + strlen(partial); /* target */
+           ptr2 =  digits[text[i]-'0'];      /* source */
+           strcpy(ptr1, ptr2);
+           /*
+            * Ascii digit. Once again, UPC has a special
+            * case for the last digit
+            */
+           if (encoding == UPCA && i==12) {
+               sprintf(tptr, "%i:10:%c ", xpos+13, text[i]);
+               tptr += strlen(tptr);
+               ptr1[0] += 'a'-'1'; /* bars are long */
+               ptr1[2] += 'a'-'1';
+           } else {
+               sprintf(tptr, "%i:12:%c ", xpos, text[i]);
+               tptr += strlen(tptr);
+           }
+           xpos += 7; /* width_of_partial(ptr2) */
+       }
+       tptr[-1] = '\0'; /* overwrite last space */
+       strcat(partial, guard[2]); /* end */
+       xpos += width_of_partial(guard[2]);
+
+    } else if (encoding == UPCE) {
+       checksum = text[7] - '0';
+
+       strcpy(partial, guardE[0]);
+       partial[0] = '9'; /* UPC-A has one digit before the symbol, too */
+       xpos = width_of_partial(partial);
+
+       /* UPC-E has the number system written before the bars. */
+       sprintf(tptr, "0:10:%c ", text[0]);
+       tptr += strlen(tptr);
+
+       if (text[0] == '0')
+               mirror = upc_mirrortab[checksum];
+       else
+               mirror = upc_mirrortab1[checksum];
+
+       for (i=0;i<6;i++) {      
+           ptr1 = partial + strlen(partial); /* target */
+           ptr2 =  digits[text[i+1]-'0'];      /* source */
+           strcpy(ptr1, ptr2);
+           if (mirror[i] != '1') { /* negated wrt EAN13 */
+               /* mirror this */
+               ptr1[0] = ptr2[3];
+               ptr1[1] = ptr2[2];
+               ptr1[2] = ptr2[1];
+               ptr1[3] = ptr2[0];
+           }
+           sprintf(tptr, "%i:12:%c ", xpos, text[i+1]);
+           tptr += strlen(tptr);
+           xpos += 7; /* width_of_partial(ptr2) */
+       }
+
+       sprintf(tptr, "%i:10:%c ", xpos+10, text[7]);
+       tptr += strlen(tptr);
+       ptr1[0] += 'a'-'1'; /* bars are long */
+       ptr1[2] += 'a'-'1';
+
+       tptr[-1] = '\0'; /* overwrite last space */
+       strcat(partial, guardE[1]); /* end */
+
+    } else { /* EAN-8  almost identical to EAN-13 but no mirroring */
+
+       if (len0 != 8) {
+           checksum = ean_make_checksum(text, 0);
+           text[7] = '0' + checksum; /* add it to the text */
+           text[8] = '\0';
+       }
+
+       strcpy(partial, guard[0]);
+       xpos = width_of_partial(partial);
+
+       /* left part */
+       for (i=0;i<4;i++) {      
+           strcpy(partial + strlen(partial), digits[text[i]-'0']);
+           sprintf(tptr, "%i:12:%c ", xpos, text[i]);
+           tptr += strlen(tptr);
+           xpos += 7; /* width_of_partial(digits[text[i]-'0' */
+       }
+       strcat(partial, guard[1]); /* middle */
+       xpos += width_of_partial(guard[1]);
+    
+       /* right part */
+       for (i=4;i<8;i++) {      
+           strcpy(partial + strlen(partial), digits[text[i]-'0']);
+           sprintf(tptr, "%i:12:%c ", xpos, text[i]);
+           tptr += strlen(tptr);
+           xpos += 7; /* width_of_partial(digits[text[i]-'0' */
+       }
+       tptr[-1] = '\0'; /* overwrite last space */
+       strcat(partial, guard[2]); /* end */
+    }
+
+    /*
+     * And that's it. Now, in case some add-on is specified it
+     * must be encoded too. Look for it.
+     */
+    if ( (ptr1 = spc) ) {
+       ptr1++;
+       strcpy(text, ptr1);
+       if (strlen(ptr1)==5) {
+           checksum = ean_make_checksum(text, 1 /* special way */);
+           mirror = upc_mirrortab[checksum]+1; /* only last 5 digits */
+       } else {
+           checksum = atoi(text)%4;
+           mirror = upc_mirrortab2[checksum];
+       }
+       strcat(textinfo, " +"); strcat(partial, "+");
+       tptr = textinfo + strlen(textinfo);
+       for (i=0; i<strlen(text); i++) {
+           if (!i) {
+               strcat(partial, guardS[0]); /* separation and head */
+               xpos += width_of_partial(guardS[0]);
+           } else {
+               strcat(partial, guardS[1]);
+               xpos += width_of_partial(guardS[1]);
+           }
+           ptr1 = partial + strlen(partial); /* target */
+           ptr2 =  digits[text[i]-'0'];      /* source */
+           strcpy(ptr1, ptr2);
+           if (mirror[i] != '1') { /* negated wrt EAN13 */
+               /* mirror this */
+               ptr1[0] = ptr2[3];
+               ptr1[1] = ptr2[2];
+               ptr1[2] = ptr2[1];
+               ptr1[3] = ptr2[0];
+           }
+           /* and the text */
+           sprintf(tptr, " %i:12:%c", xpos, text[i]);
+           tptr += strlen(tptr);
+           xpos += 7; /* width_of_partial(ptr2) */
+       }
+    }
+
+    /* all done, copy results to the data structure */
+    bc->partial = strdup(partial);
+    if (!bc->partial) {
+       bc->error = errno;
+       return -1;
+    }
+    bc->textinfo = strdup(textinfo);
+    if (!bc->textinfo) {
+       bc->error = errno;
+       free(bc->partial);
+       bc->partial = NULL;
+       return -1;
+    }
+    if (!bc->width)
+       bc->width = width_of_partial(partial);
+
+    return 0; /* success */
+}
+
+int Barcode_upc_encode(struct Barcode_Item *bc)
+{
+    return Barcode_ean_encode(bc); /* UPC is folded into EAN */
+}
+
+int Barcode_isbn_encode(struct Barcode_Item *bc)
+{
+    /* For ISBN we must normalize the string and prefix "978" */
+    unsigned char *text = malloc(24); /* 13 + ' ' + 5 plus some slack */
+    unsigned char *otext;
+    int i, j, retval;
+
+    if (!text) {
+       bc->error = ENOMEM;
+       return -1;
+    }
+    strcpy(text, "978"); j=3;
+
+    otext = bc->ascii;
+    for (i=0; otext[i]; i++) {
+       if (isdigit(otext[i]))
+           text[j++] = otext[i];
+       if (j == 12) /* checksum added later */
+           break;
+    }
+    text[j]='\0';
+    if (strchr(otext, ' '))
+       strcat(text, strchr(otext, ' '));
+    bc->ascii = text;
+    bc->encoding = strdup("ISBN");
+    retval = Barcode_ean_encode(bc);
+    bc->ascii = otext; /* restore ascii for the ps comments */
+    free(text);
+    return retval;
+}
+    
diff --git a/barcode-0.98/i25.c b/barcode-0.98/i25.c
new file mode 100644 (file)
index 0000000..72bd035
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * i25.c -- "interleaved 2 of 5"
+ *
+ * Copyright (c) 1999,2000 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999      Prosa Srl. (prosa@prosa.it)
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+static char *codes[] = {
+    "11331", "31113", "13113", "33111", "11313",
+    "31311", "13311", "11133", "31131", "13131"
+};
+
+static char *guard[] = {"a1a1", "c1a"}; /* begin end */
+
+int Barcode_i25_verify(unsigned char *text)
+{
+    if (!text[0])
+       return -1;
+    while (*text && isdigit(*text))
+       text++;
+    if (*text)
+       return -1; /* a non-digit char */
+    return 0; /* ok */
+}
+
+int Barcode_i25_encode(struct Barcode_Item *bc)
+{
+    unsigned char *text;
+    unsigned char *partial;  /* dynamic */
+    unsigned char *textinfo; /* dynamic */
+    unsigned char *textptr, *p1, *p2, *pd;
+    int i, len, sum[2], textpos, usesum = 0;
+
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("interleaved 2 of 5");
+
+    text = bc->ascii;
+    if (!bc->ascii) {
+        bc->error = EINVAL;
+        return -1;
+    }
+
+    if ((bc->flags & BARCODE_NO_CHECKSUM)) usesum = 0; else usesum = 1;
+
+    /* create the real text string, padded to an even number of digits */
+    text = malloc(strlen(bc->ascii) + 3); /* leading 0, checksum, term. */
+    if (!text) {
+       bc->error = errno;
+       return -1;
+    }
+    /* add the leading 0 if needed */
+    i = strlen(bc->ascii) + usesum;
+    if (i % 2) {
+       /* add a leading 0 */
+       text[0] = '0';
+       strcpy(text+1, bc->ascii);
+    } else {
+       strcpy(text, bc->ascii);
+    }
+    /* add the trailing checksum if needed, the leading 0 is ignored */
+    if (usesum) {
+       sum[0] = sum[1] = 0;
+       for (i=0; text[i]; i++) 
+           sum[i%2] += text[i]-'0';
+       /*
+        * The "even" sum must be multiplied by three, and the *
+        * rightmost digit is defined as "even". The digits' position
+        * is already correct, whether or not we added a leading zero.
+        * (e.g., they are in pos. 0..4 or 1..4 of the string)
+        */
+       i = sum[0] * 3 + sum[1];
+       strcat(text, "0");
+       text[strlen(text)-1] += (10 - (i%10)) % 10;
+    }
+
+    /* the partial code is 5 * (text + check) + 4(head) + 3(tail) + term. */
+    partial = malloc( (strlen(text) + 3) * 5 +2); /* be large... */
+    if (!partial) {
+        bc->error = errno;
+       free(text);
+        return -1;
+    }
+
+    /* the text information is at most "nnn:fff:c " * (strlen+1) +term */
+    textinfo = malloc(10*(strlen(text)+1) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+       free(text);
+        return -1;
+    }
+
+
+    strcpy(partial, "0"); /* the first space */
+    strcat(partial, guard[0]); /* start */
+    textpos = 4; /* width of initial guard */
+    textptr = textinfo;
+
+    len = strlen(text);
+    for (i=0; i<len; i+=2) {
+        if (!isdigit(text[i]) || !isdigit(text[i+1])) {
+            bc->error = EINVAL; /* impossible if text is verified */
+            free(partial);
+            free(textinfo);
+            free(text);
+            return -1;
+        }
+       /* interleave two digits */
+       p1 = codes[text[i]-'0'];
+       p2 = codes[text[i+1]-'0'];
+       pd = partial + strlen(partial); /* destination */
+       while (*p1) {
+           *(pd++) = *(p1++);
+           *(pd++) = *(p2++);
+       }
+       *pd = '\0';
+       /* and print the ascii text (but don't print the checksum, if any */
+       if (usesum && strlen(text+i)==2) {
+           /* print only one digit, discard the checksum */
+           sprintf(textptr, "%i:12:%c ", textpos, text[i]);
+       } else {
+           sprintf(textptr, "%i:12:%c %i:12:%c ", textpos, text[i],
+                   textpos+9, text[i+1]);
+       }
+        textpos += 18; /* width of two codes */
+        textptr += strlen(textptr);
+    }
+    strcat(partial, guard[1]);
+
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+    free(text);
+
+    return 0;
+}
+    
diff --git a/barcode-0.98/install-sh b/barcode-0.98/install-sh
new file mode 100644 (file)
index 0000000..ab74c88
--- /dev/null
@@ -0,0 +1,238 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5.
+#
+# 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.
+#
+
+
+# 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}"
+
+tranformbasename=""
+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/barcode-0.98/library.c b/barcode-0.98/library.c
new file mode 100644 (file)
index 0000000..a878702
--- /dev/null
@@ -0,0 +1,244 @@
+/*
+ * library.c -- external functions of libbarcode
+ *
+ * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#ifdef HAVE_UNISTD_H /* sometimes (windows, for instance) it's missing */
+#  include <unistd.h>
+#endif
+#include <errno.h>
+
+#include "barcode.h"
+
+/*
+ * This function allocates a barcode structure and strdup()s the
+ * text string. It returns NULL in case of error
+ */
+struct Barcode_Item *Barcode_Create(char *text)
+{
+    struct Barcode_Item *bc;
+
+    bc = malloc(sizeof(*bc));
+    if (!bc) return NULL;
+
+    memset(bc, 0, sizeof(*bc));
+    bc->ascii = strdup(text);
+    bc->margin = BARCODE_DEFAULT_MARGIN; /* default margin */
+    return bc;
+}
+
+
+/*
+ * Free a barcode structure
+ */
+int Barcode_Delete(struct Barcode_Item *bc)
+{
+    if (bc->ascii)
+       free(bc->ascii);
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    if (bc->encoding)
+       free(bc->encoding);
+    free(bc);
+    return 0; /* always success */
+}
+
+
+/*
+ * The various supported encodings.  This might be extended to support
+ * dynamic addition of extra encodings
+ */
+extern int Barcode_ean_verify(unsigned char *text);
+extern int Barcode_ean_encode(struct Barcode_Item *bc);
+extern int Barcode_upc_verify(unsigned char *text);
+extern int Barcode_upc_encode(struct Barcode_Item *bc);
+extern int Barcode_isbn_verify(unsigned char *text);
+extern int Barcode_isbn_encode(struct Barcode_Item *bc);
+extern int Barcode_39_verify(unsigned char *text);
+extern int Barcode_39_encode(struct Barcode_Item *bc);
+extern int Barcode_128b_verify(unsigned char *text);
+extern int Barcode_128b_encode(struct Barcode_Item *bc);
+extern int Barcode_128c_verify(unsigned char *text);
+extern int Barcode_128c_encode(struct Barcode_Item *bc);
+extern int Barcode_128_verify(unsigned char *text);
+extern int Barcode_128_encode(struct Barcode_Item *bc);
+extern int Barcode_128raw_verify(unsigned char *text);
+extern int Barcode_128raw_encode(struct Barcode_Item *bc);
+extern int Barcode_i25_verify(unsigned char *text);
+extern int Barcode_i25_encode(struct Barcode_Item *bc);
+extern int Barcode_cbr_verify(unsigned char *text);
+extern int Barcode_cbr_encode(struct Barcode_Item *bc);
+extern int Barcode_msi_verify(unsigned char *text);
+extern int Barcode_msi_encode(struct Barcode_Item *bc);
+extern int Barcode_pls_verify(unsigned char *text);
+extern int Barcode_pls_encode(struct Barcode_Item *bc);
+extern int Barcode_93_verify(unsigned char *text);
+extern int Barcode_93_encode(struct Barcode_Item *bc);
+
+
+struct encoding {
+    int type;
+    int (*verify)(unsigned char *text);
+    int (*encode)(struct Barcode_Item *bc);
+};
+
+struct encoding encodings[] = {
+    {BARCODE_EAN,    Barcode_ean_verify,    Barcode_ean_encode},
+    {BARCODE_UPC,    Barcode_upc_verify,    Barcode_upc_encode},
+    {BARCODE_ISBN,   Barcode_isbn_verify,   Barcode_isbn_encode},
+    {BARCODE_128B,   Barcode_128b_verify,   Barcode_128b_encode},
+    {BARCODE_128C,   Barcode_128c_verify,   Barcode_128c_encode},
+    {BARCODE_128RAW, Barcode_128raw_verify, Barcode_128raw_encode},
+    {BARCODE_39,     Barcode_39_verify,     Barcode_39_encode},
+    {BARCODE_I25,    Barcode_i25_verify,    Barcode_i25_encode},
+    {BARCODE_128,    Barcode_128_verify,    Barcode_128_encode},
+    {BARCODE_CBR,    Barcode_cbr_verify,    Barcode_cbr_encode},
+    {BARCODE_PLS,    Barcode_pls_verify,    Barcode_pls_encode},
+    {BARCODE_MSI,    Barcode_msi_verify,    Barcode_msi_encode},
+    {BARCODE_93,     Barcode_93_verify,     Barcode_93_encode},
+    {0,              NULL,                  NULL}
+};
+
+/*
+ * A function to encode a string into bc->partial, ready for
+ * postprocessing to the output file. Meaningful bits for "flags" are
+ * the encoding mask and the no-checksum flag. These bits
+ * get saved in the data structure.
+ */
+int Barcode_Encode(struct Barcode_Item *bc, int flags)
+{
+    int validbits = BARCODE_ENCODING_MASK | BARCODE_NO_CHECKSUM;
+    struct encoding *cptr;
+
+    /* If any flag is cleared in "flags", inherit it from "bc->flags" */
+    if (!(flags & BARCODE_ENCODING_MASK))
+       flags |= bc->flags & BARCODE_ENCODING_MASK;
+    if (!(flags & BARCODE_NO_CHECKSUM))
+       flags |= bc->flags & BARCODE_NO_CHECKSUM;
+    flags = bc->flags = (flags & validbits) | (bc->flags & ~validbits);
+
+    if (!(flags & BARCODE_ENCODING_MASK)) {
+       /* get the first code able to handle the text */
+       for (cptr = encodings; cptr->verify; cptr++)
+           if (cptr->verify((unsigned char *)bc->ascii)==0)
+               break;
+       if (!cptr->verify) {
+           bc->error = EINVAL; /* no code can handle this text */
+           return -1;
+       }
+       flags |= cptr->type; /* this works */
+       bc->flags |= cptr->type;
+    }
+    for (cptr = encodings; cptr->verify; cptr++)
+       if (cptr->type == (flags & BARCODE_ENCODING_MASK))
+           break;
+    if (!cptr->verify) {
+       bc->error = EINVAL; /* invalid barcode type */
+       return -1;
+    }
+    if (cptr->verify(bc->ascii) != 0) {
+       bc->error = EINVAL;
+       return -1;
+    }
+    return cptr->encode(bc);
+}
+
+
+/* 
+ * When multiple output formats are supported, there will
+ * be a jumpt table like the one for the types. Now we don't need it
+ */
+extern int Barcode_ps_print(struct Barcode_Item *bc, FILE *f);
+extern int Barcode_pcl_print(struct Barcode_Item *bc, FILE *f);
+
+/*
+ * A function to print a partially decoded string. Meaningful bits for
+ * "flags" are the output mask etc. These bits get saved in the data
+ * structure. 
+ */
+int Barcode_Print(struct Barcode_Item *bc, FILE *f, int flags)
+{
+    int validbits = BARCODE_OUTPUT_MASK | BARCODE_NO_ASCII
+       | BARCODE_OUT_NOHEADERS;
+
+    /* If any flag is clear in "flags", inherit it from "bc->flags" */
+    if (!(flags & BARCODE_OUTPUT_MASK))
+       flags |= bc->flags & BARCODE_OUTPUT_MASK;
+    if (!(flags & BARCODE_NO_ASCII))
+       flags |= bc->flags & BARCODE_NO_ASCII;
+    if (!(flags & BARCODE_OUT_NOHEADERS))
+       flags |= bc->flags & BARCODE_OUT_NOHEADERS;
+    flags = bc->flags = (flags & validbits) | (bc->flags & ~validbits);
+
+    if (bc->flags & BARCODE_OUT_PCL)
+       return Barcode_pcl_print(bc, f);
+    return Barcode_ps_print(bc, f);
+}
+
+/*
+ * Choose the position
+ */
+int Barcode_Position(struct Barcode_Item *bc, int wid, int hei,
+                    int xoff, int yoff, double scalef)
+{
+    bc->width = wid; bc->height = hei;
+    bc->xoff = xoff; bc->yoff = yoff;
+    bc->scalef = scalef;
+    return 0;
+}
+
+/*
+ * Do it all in one step
+ */
+int Barcode_Encode_and_Print(char *text, FILE *f, int wid, int hei,
+                                   int xoff, int yoff, int flags)
+{
+    struct Barcode_Item * bc;
+    
+    if (!(bc=Barcode_Create(text))) {
+       errno = -ENOMEM;
+       return -1;
+    }
+    if (     Barcode_Position(bc, wid, hei, xoff, yoff, 0.0) < 0
+         || Barcode_Encode(bc, flags) < 0
+         || Barcode_Print(bc, f, flags) < 0) {
+       errno = bc->error;
+       Barcode_Delete(bc);
+       return -1;
+    }
+    Barcode_Delete(bc);
+    return 0;
+}
+
+/*
+ * Return the version
+ */
+
+int Barcode_Version(char *vptr)
+{
+    if (vptr)
+       strcpy(vptr, BARCODE_VERSION);
+    return BARCODE_VERSION_INT;
+}
diff --git a/barcode-0.98/main.c b/barcode-0.98/main.c
new file mode 100644 (file)
index 0000000..e07e4d3
--- /dev/null
@@ -0,0 +1,604 @@
+/*
+ * main.c - a commandline frontend for the barcode library
+ *
+ * Copyright (c) 1999 Michele Comitini (mcm@glisco.it)
+ * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ *
+ *   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.
+ */
+       
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "cmdline.h"
+#include "barcode.h"
+
+#ifndef NO_LIBPAPER
+#include <paper.h>
+#endif
+
+/*
+ * Most of this file deals with command line options, by exploiting
+ * the cmdline.[ch] engine to offer defaults via environment variables
+ * and handling functions for complex options.
+ *
+ * In order to offer a friendly interface (for those who feel the
+ * cmdline *is* friendly, like me), we have to convert names to enums...
+ */
+
+struct {
+    char *name;
+    int type;
+} encode_tab[] = {
+    {"ean",      BARCODE_EAN},
+    {"ean13",    BARCODE_EAN},
+    {"ean-13",   BARCODE_EAN},
+    {"ean8",     BARCODE_EAN},
+    {"ean-8",    BARCODE_EAN},
+    {"upc",      BARCODE_UPC},
+    {"upc-a",    BARCODE_UPC},
+    {"upc-e",    BARCODE_UPC},
+    {"isbn",     BARCODE_ISBN},
+    {"39",       BARCODE_39},
+    {"code39",   BARCODE_39},
+    {"128c",     BARCODE_128C},
+    {"code128c", BARCODE_128C},
+    {"128b",     BARCODE_128B},
+    {"code128b", BARCODE_128B},
+    {"128",      BARCODE_128},
+    {"code128",  BARCODE_128},
+    {"128raw",   BARCODE_128RAW},
+    {"i25",      BARCODE_I25},
+    {"interleaved 2 of 5", BARCODE_I25},
+    {"cbr",      BARCODE_CBR},
+    {"codabar",  BARCODE_CBR},
+    {"msi",     BARCODE_MSI},
+    {"pls",      BARCODE_PLS},
+    {"plessey",  BARCODE_PLS},
+    {"code93",   BARCODE_93},
+    {"93",       BARCODE_93},
+
+    {NULL, 0}
+};
+
+/*
+ * Get encoding type from string rapresentation.
+ * Returns -1 on error.
+ */
+#ifndef HAVE_STRCASECMP /* some libs (windows, for example) have stricmp */
+#  define strcasecmp stricmp
+#endif
+
+int encode_id(char *encode_name)
+{
+    int i;
+    for (i = 0;  encode_tab[i].name; i++)
+       if (!strcasecmp(encode_tab[i].name, encode_name))
+           return encode_tab[i].type;
+    return -1;
+}
+
+int list_encodes(FILE *f) /* used in the help message */
+{
+    int prev = -1;
+    int i;
+
+    fprintf(f, "Known encodings are (synonyms appear on the same line):");
+    for (i = 0;  encode_tab[i].name; i++) {
+       if (encode_tab[i].type != prev)
+           fprintf(f, "\n\t");
+       else
+           fprintf(f, ", ");
+       fprintf(f, "\"%s\"", encode_tab[i].name);
+       prev = encode_tab[i].type;
+    }
+    fprintf(f, "\n");
+    return 0;
+}
+
+
+/*
+ * Variables to hold cmdline arguments (or defaults)
+ */
+
+char *ifilename, *ofilename;
+int encoding_type;                    /* filled by get_encoding() */
+int code_width, code_height;          /* "-g" for standalone codes */
+int lines, columns;                   /* "-t" for tables */
+int xmargin0, ymargin0;               /* both for "-g" and "-t" */
+int xmargin1, ymargin1;               /* same, but right and top */
+int ximargin, yimargin;               /* "-m": internal margins */
+int eps, pcl, ps, noascii, nochecksum; /* boolean flags */
+int page_wid, page_hei;               /* page size in points */
+char *page_name;                      /* name of the media */
+double unit = 1.0;                    /* unit specification */
+
+char *prgname;  /* used to print error msgs, initialized to argv[0] by main */
+
+/*
+ * Functions to handle command line arguments
+ */
+
+struct encode_item {
+    char *string;
+    struct encode_item *next;
+} *list_head, *list_tail;
+
+/* each "-b" option adds a string to the input pool allocating its space */
+int get_input_string(void *arg)
+{
+    struct encode_item *item = malloc(sizeof(*item));
+    if (!item) {
+       fprintf(stderr, "%s: malloc: %s\n", prgname, strerror(errno));
+       return -2;
+    }
+    item->string = strdup(arg);
+    if (!list_head) {
+       list_head = list_tail = item;
+    } else {
+       list_tail->next = item;
+       list_tail = item;
+    }
+    item->next = NULL;
+    return 0;
+}
+
+/* and this function extracts strings from the pool */
+unsigned char *retrieve_input_string(FILE *ifile)
+{
+    char *string;
+    static char fileline[128];
+
+    struct encode_item *item = list_head;
+    if (list_tail) { /* this means at least one "-b" was specified */
+       if (!item)
+           return NULL; /* the list is empty */
+       string = item->string;
+       list_head = item->next;
+       free(item);
+       return string;
+    }
+
+    /* else,  read from the file */
+    if (!fgets(fileline, 128, ifile))
+       return NULL;
+    if (fileline[strlen(fileline)-1]=='\n')
+       fileline[strlen(fileline)-1]= '\0';
+    return strdup(fileline);
+}
+
+/* accept a unit specification */
+int get_unit(void *arg)
+{
+    static struct {
+       char *str;
+       double unit;
+    } *ptr, unittab[] = {
+       {"pt",  1.0},
+       {"in",  72.0},
+       {"cm",  72.0/2.54},
+       {"mm",  72.0/25.4},
+       {NULL, 0.0}
+    };
+
+    for (ptr = unittab; ptr->str && strcmp((char *)arg, ptr->str); ptr++)
+       ;
+    unit = ptr->unit;
+    if (ptr->str) return 0;
+
+    fprintf(stderr, "%s: incorrect unit \"%s\" (use one of",
+           prgname, (char *)arg);
+    for (ptr = unittab; ptr->str; ptr++)
+       fprintf(stderr, " \"%s\"", ptr->str);
+    fprintf(stderr, ")\n");
+    return -2;
+}
+
+/* convert an encoding name to an encoding integer code */
+int get_encoding(void *arg)
+{
+    encoding_type = encode_id((char *)arg);
+    if (encoding_type >=0) return 0;
+    fprintf(stderr, "%s: wrong encoding \"%s\"\n", prgname,
+           (char *)arg);
+    return -2; /* error, no help */
+}
+
+/* convert a geometry specification */
+int get_geometry(void *arg)
+{
+    double w = 0.0, h = 0.0;
+    double x = 0.0, y = 0.0;
+    int n;
+
+    if (((char *)arg)[0]=='+') {
+       n = sscanf((char *)arg, "+%lf+%lf%s", &x, &y, (char *)arg);
+    } else {
+       n = sscanf((char *)arg, "%lfx%lf+%lf+%lf%s", &w, &h, &x, &y,
+                  (char *)arg);
+    }
+    if (n!=4 && n!=2) {
+       fprintf(stderr, "%s: wrong geometry \"%s\"\n", prgname, (char *)arg);
+       return -2;
+    }
+    /* convert to points */
+    code_width  = w * unit;
+    code_height = h * unit;
+    xmargin0 = x * unit;
+    ymargin0 = y * unit;
+    return 0;
+}
+
+/* convert a geometry specification */
+int get_table(void *arg)
+{
+    double x0 = 0.0, y0 = 0.0, x1 = 0.0, y1 = 0.0;
+    int n;
+
+    n = sscanf((char *)arg, "%dx%d+%lf+%lf-%lf-%lf",
+              &columns, &lines, &x0, &y0, &x1, &y1);
+
+    if (n==1 || n==3) { /* error: 2, 4, 5, 6 are fine */
+       fprintf(stderr, "%s: wrong table specification \"%s\"\n", prgname,
+               (char *)arg);
+       return -2;
+    }
+    if (n < 6) y1 = y0; /* symmetric by default */
+    if (n < 5) x1 = x0;
+
+    /* convert and return */
+    xmargin0 = x0 * unit;
+    ymargin0 = y0 * unit;
+    xmargin1 = x1 * unit;
+    ymargin1 = y1 * unit;
+    return 0;
+}
+
+/* convert an internal margin specification */
+int get_margin(void *arg)
+{
+    char separator;
+    double x,y;
+    int n;
+
+    /* accept one number or two, separated by any char */
+    n = sscanf((char *)arg, "%lf%c%lf", &x, &separator, &y);
+
+    if (n==1) {
+       n=3; y = x;
+    }
+    if (n==3) {
+       ximargin = x * unit;
+       yimargin = y * unit;
+       return 0;
+    }
+    fprintf(stderr, "%s: wrong margin specification \"%s\"\n", prgname,
+           (char *)arg);
+       return -2;
+    return 0;
+}
+
+/* convert a page geometry specification */
+int get_page_geometry(void *arg)
+{
+    int n;
+    double dpw, dph; /* page width, height in mm or inches */
+    static char tmpstr[20];
+    page_name = arg; /* if undecipherable, we won't run the program :) */
+    /*
+     * try to decode a "mm" string (eg. "210mmx297mm" or "210x297mm")
+     */
+    n = sscanf((char *)arg, "%lfmmx%lf", &dpw, &dph);
+    if (n != 2 && strlen(arg)<20) {
+       n =  sscanf((char *)arg, "%lfx%lf%s", &dpw, &dph, tmpstr);
+       if (n == 3 && !strcmp(tmpstr, "mm")) {
+           /* Ok, convert to points: 1in is 25.4mm, 1in is also 72p */
+           page_wid = (int)(dpw / 25.4 * 72.0 + 0.5);
+           page_hei = (int)(dph / 25.4 * 72.0 + 0.5);
+           return 0;
+       }
+    }
+
+    /*
+     * try to decode an "in" string (eg. "8.5inx11in" or "8.5x11in")
+     */
+    n = sscanf((char *)arg, "%lfinx%lf", &dpw, &dph);
+    if (n != 2 && strlen(arg)<20) {
+       n =  sscanf((char *)arg, "%lfx%lf%s", &dpw, &dph, tmpstr);
+       if (n == 3 && !strcmp(tmpstr, "in")) {
+           page_wid = (int)(dpw * 72.0 + 0.5); /* round to points */
+           page_hei = (int)(dph * 72.0 + 0.5);
+           return 0;
+       }
+    }
+
+    /*
+     * try to decode a numeric specification
+     */
+    n = sscanf((char *)arg, "%lfx%lf", &dpw, &dph);
+    if (n == 2) {
+       page_wid = dpw * unit;
+       page_hei = dph * unit;
+       if (unit != 1.0) { /* rebuild the page name */
+           page_name = malloc(32); /* big, to avoid snprintf, missing on HP */
+           if (page_name)
+               sprintf(page_name, "%dx%d\n", page_wid, page_hei);
+       }
+       return 0;
+    }
+
+#ifndef NO_LIBPAPER
+    /*
+     * try to use libpaper, since it is available
+     */
+    {
+    const struct paper* paptr;
+
+    paperinit();
+    paptr = paperinfo(arg);
+    if (!paptr) { /* unknown name */
+       paperdone();
+       return -1;
+    }
+    page_wid = (int)(paperpswidth(paptr) + 0.5);
+    page_hei = (int)(paperpsheight(paptr) + 0.5);
+    paperdone();
+    return 0;
+    }
+#endif
+    /* If we got here, the argument is undecipherable: fail */
+    fprintf(stderr, "%s: wrong page size specification \"%s\"\n", prgname,
+           (char *)arg);
+    return -2;
+}
+
+/*
+ * The table of possible arguments
+ */
+struct commandline option_table[] = {
+    {'i', CMDLINE_S, &ifilename, NULL, NULL, NULL,
+                   "input file (strings to encode), default is stdin"},
+    {'o', CMDLINE_S, &ofilename, NULL, NULL, NULL,
+                    "output file, default is stdout"},
+    {'b', CMDLINE_S, NULL, get_input_string, NULL, NULL,
+                   "string to encode (use input file if missing)"},
+    {'e', CMDLINE_S, NULL, get_encoding, "BARCODE_ENCODING", NULL,
+                   "encoding type (default is best fit for first string)"},
+    {'u', CMDLINE_S, NULL, get_unit, "BARCODE_UNIT", NULL,
+                    "unit (\"mm\", \"in\", ...) used to decode -g, -t, -p"},
+    {'g', CMDLINE_S, NULL, get_geometry, "BARCODE_GEOMETRY", NULL,
+                    "geometry on the page: [<wid>x<hei>][+<margin>+<margin>]"},
+    {'t', CMDLINE_S, NULL, get_table, "BARCODE_TABLE", NULL,
+                    "table geometry: <cols>x<lines>[+<margin>+<margin>]"},
+    {'m', CMDLINE_S, NULL, get_margin, "BARCODE_MARGIN", "10",
+                    "internal margin for each item in a table: <xm>[,<ym>]"},
+    {'n', CMDLINE_NONE, &noascii, NULL, NULL, NULL,
+                    "\"numeric\": avoid printing text along with the bars"},
+    {'c', CMDLINE_NONE, &nochecksum, NULL, NULL, NULL,
+                    "no Checksum character, if the chosen encoding allows it"},
+    {'E', CMDLINE_NONE, &eps, NULL, NULL, NULL,
+                    "print one code as eps file (default: multi-page ps)"},
+    {'P', CMDLINE_NONE, &pcl, NULL, NULL, NULL,
+                    "create PCL output instead of postscript"},
+    {'p', CMDLINE_S, NULL, get_page_geometry, NULL, NULL,
+                    "page size (refer to the man page)"},
+    {0,}
+};
+
+#ifdef NO_STRERROR
+/*
+ * A strerror replacement (thanks to Thad Floryan <thad@thadlabs.com>)
+ */
+char *strerror(int error)
+{
+    static char msg[16];
+    if (error >= 0 && error < sys_nerr)
+       return sys_errlist[error];
+    sprintf(msg, "Error %d", error);
+    return msg;
+}
+#endif
+        
+/*
+ * The main function
+ */
+int main(int argc, char **argv)
+{
+    struct Barcode_Item * bc;
+    FILE *ifile = stdin;
+    FILE *ofile = stdout;
+    char *line;
+    int flags=0; /* for the library */
+    int page, retval;
+
+    prgname = argv[0];
+
+    /* First of all, accept "--help" and "-h" as a special case */
+    if (argc == 2 && (!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h"))) {
+       commandline_errormsg(stderr, option_table, argv[0], "Options:\n");
+       fprintf(stderr,"\n");
+       list_encodes(stderr);
+       exit(1);
+    }
+    /* Also, accept "--version" as a special case */
+    if (argc == 2 && (!strcmp(argv[1],"--version"))) {
+       printf("barcode frontend (GNU barcode) " BARCODE_VERSION "\n");
+       exit(0);
+    }
+
+    /* Otherwise, parse the commandline */
+    retval = commandline(option_table, argc, argv, "Use: %s [options]\n");
+    if (retval) {
+       if (retval == -1) /* help printed, complete it */
+           list_encodes(stderr);
+       else /* no help printed, suggest it */
+           fprintf(stderr, "%s: try \"%s --help\"\n", prgname, prgname);
+       exit(1);
+    }
+
+    /* If no paper size has been specified, use the default, if any */
+    if (!page_name) {
+       page_wid = 595; page_hei = 842;
+       page_name = "A4"; /* I live in Europe :) */
+#ifndef NO_LIBPAPER
+       get_page_geometry(systempapername()); /* or the system default */
+#endif
+    }
+
+    /* FIXME: print warnings for incompatible options */
+
+    /* open the input stream if specified */
+    if (ifilename)
+       ifile = fopen(ifilename,"r");
+    if (!ifile) {
+       fprintf(stderr, "%s: %s: %s\n", argv[0], ifilename,
+               strerror(errno));
+       exit(1);
+    }
+
+    /* open the output stream if specified */
+    if (ofilename)
+       ofile = fopen(ofilename,"w");
+    if (!ofile) {
+       fprintf(stderr, "%s: %s: %s\n", argv[0], ofilename,
+               strerror(errno));
+       exit(1);
+    }
+
+    if (encoding_type < 0) { /* unknown type specified */
+       fprintf(stderr,"%s: Unknown endoding. Try \"%s --help\"\n",
+               argv[0], argv[0]);
+       exit(1);
+    }
+    flags |= encoding_type;  
+    if (pcl) {
+       flags |= BARCODE_OUT_PCL;
+    } else {
+       ps = !eps; /* a shortcut */
+       if (eps)
+           flags |= BARCODE_OUT_EPS; /* print headers too */
+       else
+           flags |= BARCODE_OUT_PS | BARCODE_OUT_NOHEADERS;
+    }
+    if (noascii)
+       flags |= BARCODE_NO_ASCII;
+    if (nochecksum)
+       flags |= BARCODE_NO_CHECKSUM;
+
+    /* the table is not available in eps mode */
+    if (eps && (lines>1 || columns>1)) {
+       fprintf(stderr, "%s: can't print tables in EPS format\n",argv[0]);
+       exit(1);
+    }
+
+    if (ps) { /* The header is independent of single/table mode */
+       /* Headers. Don't let the library do it, we may need multi-page */
+       fprintf(ofile, "%%!PS-Adobe-2.0\n");
+       /* It would be nice to know the bounding box. Leave it alone */
+       fprintf(ofile, "%%%%Creator: \"barcode\", "
+               "libbarcode sample frontend\n");
+       if (page_name)
+           fprintf(ofile, "%%%%DocumentPaperSizes: %s\n", page_name);
+       fprintf(ofile, "%%%%EndComments\n");
+       fprintf(ofile, "%%%%EndProlog\n\n");
+    }
+
+    /*
+     * Here we are, ready to work. Handle the one-per-page case first,
+     * as it is shorter.
+     */
+    if (!lines && !columns) {
+       page = 0;
+       while ( (line = retrieve_input_string(ifile)) ) {
+           page++;
+           if (ps) {
+               fprintf(ofile, "%%%%Page: %i %i\n\n",page,page);
+           }
+           if (Barcode_Encode_and_Print(line, ofile, code_width, code_height,
+                                        xmargin0, ymargin0, flags) < 0) {
+               fprintf(stderr, "%s: can't encode \"%s\"\n", argv[0], line);
+           }
+           if (eps) break; /* if output is eps, do it once only */
+           if (ps) fprintf(ofile, "showpage\n");
+           if (pcl) fprintf(ofile, "\f");
+       }
+       /* no more lines, print footers */
+       if (ps) {
+           fprintf(ofile, "%%%%Trailer\n\n");
+       }
+    } else {
+
+       /* table mode, the header has been already printed */
+       
+       int xstep = (page_wid - xmargin0 - xmargin1)/columns;
+       int ystep = (page_hei - ymargin0 - ymargin1)/lines;
+       int x = columns, y = -1; /* position in the table, start off-page */
+
+       if (!ximargin) ximargin = BARCODE_DEFAULT_MARGIN;
+       if (!yimargin) yimargin = BARCODE_DEFAULT_MARGIN;
+       /* Assign default size unless -g did it (Joachim Reichelt) */
+       if ( !code_width && !code_height) {
+           code_width = xstep - 2*ximargin;
+           code_height = ystep - 2*yimargin;
+       }
+
+       page=0;
+       while ( (line = retrieve_input_string(ifile)) ) {
+           x++;  /* fit x and y */
+           if (x >= columns) {
+               x=0; y--;
+               if (y<0) {
+                   y = lines-1; page++;
+                   /* flush page */
+                   if (ps && page > 1) fprintf(ofile, "showpage\n");
+                   if (pcl && page > 1) fprintf(ofile, "\f");
+                   /* new page */
+                   if (ps) fprintf(ofile, "%%%%Page: %i %i\n\n",page,page);
+               }
+           }
+
+           /*
+            * Create a barcode item. This allows to set the margin to 0, as
+            * we have [xy]imargin to use. But don't use Encode_and_Print(),
+            * unroll it here instead
+            */
+           bc = Barcode_Create(line);
+           if (!bc) {
+               fprintf(stderr, "%s: Barcode_Create(): %s\n", argv[0],
+                       strerror(errno));
+               exit(1);
+           }
+           bc->margin = 0;
+           if ( (Barcode_Position(bc, code_width, code_height,
+                                  xmargin0 + ximargin + x * xstep,
+                                  ymargin0 + yimargin + y * ystep, 0.0) < 0)
+                || (Barcode_Encode(bc, flags) < 0)
+                || (Barcode_Print(bc, ofile, flags) < 0) ) {
+               fprintf(stderr, "%s: can't encode \"%s\": %s\n", argv[0],
+                       line, strerror(bc->error));
+           }
+           Barcode_Delete(bc);
+       }
+       if (ps) fprintf(ofile, "showpage\n\n%%%%Trailer\n\n");
+       if (pcl) fprintf(ofile, "\f");
+    }
+    return 0;
+}
+
+
+
diff --git a/barcode-0.98/missing b/barcode-0.98/missing
new file mode 100755 (executable)
index 0000000..d46f79f
--- /dev/null
@@ -0,0 +1,198 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
+# Franc,ois Pinard <pinard@iro.umontreal.ca>, 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
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.in; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+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_ac'.  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_ac'.  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_ac'.  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_ac`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $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_ac'.
+         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$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  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/barcode-0.98/mkinstalldirs b/barcode-0.98/mkinstalldirs
new file mode 100755 (executable)
index 0000000..6b3b5fc
--- /dev/null
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id$
+
+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"
+
+        mkdir "$pathcomp" || lasterr=$?
+
+        if test ! -d "$pathcomp"; then
+         errstatus=$lasterr
+        fi
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/barcode-0.98/msi.c b/barcode-0.98/msi.c
new file mode 100644 (file)
index 0000000..77a373b
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * msi.c -- encoding for MSI-Plessey
+ *
+ * Copyright (c) 2000 Leonid A. Broukhis (leob@mailcom.com)
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+
+/* Patterns */
+static char *patterns[] = { "13", "31" };
+
+static char *fillers[] = { "031", "131" };
+
+static int width = 16 /* each character uses 4 patterns */,
+       startpos = 6 /* length of the first filler */;
+
+/*
+ * Check that the text can be encoded. Returns 0 or -1.
+ */
+int Barcode_msi_verify(unsigned char *text)
+{
+    int i;
+
+    if (!strlen(text))
+       return -1;
+    for (i=0; text[i]; i++) {
+        if (!isdigit(text[i]))
+            return -1;
+    }
+    return 0;
+}
+
+static int add_one(char *ptr, int code)
+{
+    sprintf(ptr, "%s%s%s%s", 
+       patterns[(code >> 3) & 1],
+       patterns[(code >> 2) & 1],
+       patterns[(code >> 1) & 1],
+       patterns[code & 1]);
+    return 0;
+}
+
+/*
+ * The encoding functions fills the "partial" and "textinfo" fields.
+ * Lowercase chars are converted to uppercase
+ */
+int Barcode_msi_encode(struct Barcode_Item *bc)
+{
+    static char *text;
+    static char *partial;  /* dynamic */
+    static char *textinfo; /* dynamic */
+    char *ptr, *textptr;
+    int i, code, textpos, usesum, checksum = 0;
+
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("msi");
+
+    if ((bc->flags & BARCODE_NO_CHECKSUM))
+       usesum = 0;
+    else
+       usesum = 1;
+
+    text = bc->ascii;
+
+    /* the partial code is head + 8 * (text + check) + tail + margin + term. */
+    partial = malloc( 3 + 8 * (strlen(text) + 1) + 3 + 2 );
+    if (!partial) {
+        bc->error = errno;
+        return -1;
+    }
+
+    /* the text information is at most "nnn:fff:c " * strlen +term */
+    textinfo = malloc(10*strlen(text) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+        return -1;
+    }
+
+    strcpy(partial, fillers[0]);
+    ptr = partial + strlen(partial);
+    textptr = textinfo;
+    textpos = startpos;
+    
+    for (i=0; i<strlen(text); i++) {
+        code = text[i] - '0';
+        add_one(ptr, code);
+        sprintf(textptr, "%i:12:%c ", textpos, text[i]);
+        
+        textpos += width; /* width of each code */
+        textptr += strlen(textptr);
+        ptr += strlen(ptr); 
+       if (usesum) {
+       /* For a code ...FEDCBA the checksum is computed
+        * as the sum of digits of the number ...FDB plus
+        * the sum of digits of the number ...ECA * 2.
+        * Which is equivalent to the sum of each digit of ...ECA doubled
+        * plus carry.
+        */
+           if ((i ^ strlen(text)) & 1) {
+               /* a last digit, 2 away from last, etc. */
+               checksum += 2 * code + (2 * code) / 10;
+           } else {
+               checksum += code;
+           }
+       }
+    }
+    /* Some implementations use a double checksum. Currently the only way
+     * to print a barcode with double checksum is to put the checksum
+     * digit printed below at the end of a code in the command line
+     * and re-run the program.
+     */
+    if (usesum) {
+       /* the check digit is the complement of the checksum
+        * to a multiple of 10.
+        */
+       checksum = (checksum + 9) / 10 * 10 - checksum;
+       /* fprintf(stderr, "Checksum: %d\n", checksum); */
+       add_one(ptr, checksum);
+       ptr += strlen(ptr);
+    }
+
+    strcpy(ptr, fillers[1]);
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+
+    return 0;
+}
diff --git a/barcode-0.98/pcl.c b/barcode-0.98/pcl.c
new file mode 100644 (file)
index 0000000..d5ec097
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ * pcl.c -- printing the "partial" bar encoding in PCL format
+ *
+ * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ * Copyright (c) 2001 Andrea Scopece (a.scopece@tin.it)
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+#define SHRINK_AMOUNT 0.15  /* shrink the bars to account for ink spreading */
+
+
+/*
+ * How do the "partial" and "textinfo" strings work? See file "ps.c"
+ */
+
+
+int Barcode_pcl_print(struct Barcode_Item *bc, FILE *f)
+{
+    int i, j, k, barlen;
+    double f1, f2, fsav=0;
+    int mode = '-'; /* text below bars */
+    double scalef=1, xpos, x0, y0, yr;
+    unsigned char *ptr;
+    unsigned char c;
+
+    char font_id[6];           /* default font, should be "scalable" */
+    /* 0     Line printer,    use on older LJet II, isn't scalable   */
+    /* 4148  Univers,         use on LJet III series, and Lj 4L, 5L  */
+    /* 16602 Arial,           default LJ family 4, 5, 6, Color, Djet */
+
+    if (!bc->partial || !bc->textinfo) {
+       bc->error = EINVAL;
+       return -1;
+    }
+
+    /*
+     * Maybe this first part can be made common to several printing back-ends,
+     * we'll see how that works when other ouput engines are added
+     */
+
+    /* First, calculate barlen */
+    barlen = bc->partial[0] - '0';
+    for (ptr = bc->partial+1; *ptr; ptr++)
+       if (isdigit(*ptr)) 
+           barlen += (*ptr - '0');
+       else if (islower(*ptr))
+           barlen += (*ptr - 'a'+1);
+
+    /* The scale factor depends on bar length */
+    if (!bc->scalef) {
+        if (!bc->width) bc->width = barlen; /* default */
+        scalef = bc->scalef = (double)bc->width / (double)barlen;
+    }
+
+    /* The width defaults to "just enough" */
+    if (!bc->width) bc->width = barlen * scalef +1;
+
+    /* But it can be too small, in this case enlarge and center the area */
+    if (bc->width < barlen * scalef) {
+        int wid = barlen * scalef + 1;
+        bc->xoff -= (wid - bc->width)/2 ;
+        bc->width = wid;
+        /* Can't extend too far on the left */
+        if (bc->xoff < 0) {
+            bc->width += -bc->xoff;
+            bc->xoff = 0;
+        }
+    }
+
+    /* The height defaults to 80 points (rescaled) */
+    if (!bc->height) bc->height = 80 * scalef;
+
+#if 0
+    /* If too small (5 + text), enlarge and center */
+    i = 5 + 10 * ((bc->flags & BARCODE_NO_ASCII)==0);
+    if (bc->height < i * scalef ) {
+        int hei = i * scalef;
+        bc->yoff -= (hei-bc->height)/2;
+        bc->height = hei;
+        if (bc->yoff < 0) {
+            bc->height += -bc->yoff;
+            bc->yoff = 0;
+        }
+    }
+#else
+    /* If too small (5 + text), reduce the scale factor and center */
+    i = 5 + 10 * ((bc->flags & BARCODE_NO_ASCII)==0);
+    if (bc->height < i * scalef ) {
+        double scaleg = ((double)bc->height) / i;
+        int wid = bc->width * scaleg / scalef;
+        bc->xoff += (bc->width - wid)/2;
+        bc->width = wid;
+        scalef = scaleg;
+    }
+#endif
+
+    /*
+     * deal with PCL output
+     */
+
+    xpos = bc->margin + (bc->partial[0]-'0') * scalef;
+    for (ptr = bc->partial+1, i=1; *ptr; ptr++, i++) {
+       /* special cases: '+' and '-' */
+       if (*ptr == '+' || *ptr == '-') {
+           mode = *ptr; /* don't count it */ i++; continue;
+       }
+
+       /* j is the width of this bar/space */
+       if (isdigit (*ptr))   j = *ptr-'0';
+       else                  j = *ptr-'a'+1;
+       if (i%2) { /* bar */
+           x0 = bc->xoff + xpos;
+            y0 = bc->yoff + bc->margin;
+            yr = bc->height;
+            if (!(bc->flags & BARCODE_NO_ASCII)) { /* leave space for text */
+               if (mode == '-') {
+                   /* text below bars: 10 points or five points */
+                   yr -= (isdigit(*ptr) ? 10 : 5) * scalef;
+               } else { /* '+' */
+                   /* text above bars: 10 or 0 from bottom, and 10 from top */
+                   y0 += (isdigit(*ptr) ? 10 : 0) * scalef;
+                   yr -= (isdigit(*ptr) ? 20 : 10) * scalef; 
+               }
+           }
+
+           fprintf(f,"%c&a%.0fH", 27, x0 * 10.0);
+           fprintf(f,"%c&a%.0fV", 27, y0 * 10.0);
+           fprintf(f,"%c*c%.0fH", 27, ((j*scalef)-SHRINK_AMOUNT) * 10.0);
+           fprintf(f,"%c*c%.0fV", 27, yr * 10.0);
+           fprintf(f,"%c*c0P\n", 27);
+       }
+       xpos += j * scalef;
+    }
+
+    /* the text */
+
+    mode = '-'; /* reinstantiate default */
+    if (!(bc->flags & BARCODE_NO_ASCII)) {
+        k=0; /* k is the "previous font size" */
+        for (ptr = bc->textinfo; ptr; ptr = strchr(ptr, ' ')) {
+            while (*ptr == ' ') ptr++;
+            if (!*ptr) break;
+           if (*ptr == '+' || *ptr == '-') {
+               mode = *ptr; continue;
+           }
+            if (sscanf(ptr, "%lf:%lf:%c", &f1, &f2, &c) != 3) {
+               fprintf(stderr, "barcode: impossible data: %s\n", ptr);
+                continue;
+            }
+
+    /* select a Scalable Font */
+
+           if (fsav != f2)
+           {   
+               if ((bc->flags & BARCODE_OUT_PCL_III) == BARCODE_OUT_PCL_III)
+               {       strcpy(font_id, "4148");        /* font Univers */
+               }
+               else
+               {       strcpy(font_id, "16602");       /* font Arial */
+               }
+
+               fprintf(f,"%c(8U%c(s1p%5.2fv0s0b%sT", 27, 27, f2 * scalef, font_id);
+           }
+           fsav = f2;
+       
+           fprintf(f,"%c&a%.0fH", 27, (bc->xoff + f1 * scalef + bc->margin) * 10.0);
+           fprintf(f,"%c&a%.0fV", 27,
+                   mode != '-'
+                       ? ((double)bc->yoff + bc->margin              + 8*scalef) * 10.0
+                      : ((double)bc->yoff + bc->margin + bc->height           ) * 10.0);
+
+               fprintf(f, "%c", c);
+       }
+
+    }
+
+    return 0;
+}
diff --git a/barcode-0.98/plessey.c b/barcode-0.98/plessey.c
new file mode 100644 (file)
index 0000000..ec47100
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * plessey.c -- encoding for Plessey
+ *
+ * Copyright (c) 2000 Leonid A. Broukhis (leob@mailcom.com)
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+static char * patterns[] = { "13", "31" };
+
+/* this is ordered in decades to simplify encoding */
+static char alphabet[] = 
+   "0123456789" "ABCDEF";
+
+/* stop sequence may be 231311313 (barcodemill.com) */
+static char *fillers[] = { "031311331", "331311313" };
+
+static int width = 16, startpos = 16;
+
+/*
+ * Check that the text can be encoded. Returns 0 or -1.
+ * If it's all lowecase convert to uppercase and accept it
+ */
+int Barcode_pls_verify(unsigned char *text)
+{
+    int i, upper = 0, lower = 0;
+
+    if (!strlen(text))
+       return -1;
+    for (i=0; text[i]; i++) {
+        if (!strchr(alphabet,toupper(text[i])))
+            return -1;
+       if (isupper(text[i])) upper++;
+       if (islower(text[i])) lower++;
+    }
+    if (upper && lower)
+       return -1;
+    return 0;
+}
+
+static int add_one(char *ptr, int code)
+{
+    sprintf(ptr, "%s%s%s%s", 
+       patterns[code & 1],
+       patterns[(code >> 1) & 1],
+       patterns[(code >> 2) & 1],
+       patterns[(code >> 3) & 1]
+    );
+    return 0;
+}
+
+/*
+ * The encoding functions fills the "partial" and "textinfo" fields.
+ * Lowercase chars are converted to uppercase
+ */
+int Barcode_pls_encode(struct Barcode_Item *bc)
+{
+    static char *text;
+    static char *partial;  /* dynamic */
+    static char *textinfo; /* dynamic */
+    char *c, *ptr, *textptr;
+    unsigned char *checkptr;
+    int i, code, textpos;
+    static char check[9] = {1,1,1,1,0,1,0,0,1};
+    if (bc->partial)
+       free(bc->partial);
+    if (bc->textinfo)
+       free(bc->textinfo);
+    bc->partial = bc->textinfo = NULL; /* safe */
+
+    if (!bc->encoding)
+       bc->encoding = strdup("plessey");
+
+    text = bc->ascii;
+    if (!text) {
+        bc->error = EINVAL;
+        return -1;
+    }
+    /* the partial code is 8 * (head + text + check + tail) + margin + term. */
+    partial = malloc( (strlen(text) + 4) * 8 + 3);
+    checkptr = calloc (1, strlen(text) * 4 + 8);
+
+    if (!partial || !checkptr) {
+       if (partial) free(partial);
+       if (checkptr) free(checkptr);
+        bc->error = errno;
+        return -1;
+    }
+
+    /* the text information is at most "nnn:fff:c " * strlen +term */
+    textinfo = malloc(10*strlen(text) + 2);
+    if (!textinfo) {
+        bc->error = errno;
+        free(partial);
+        return -1;
+    }
+
+    strcpy(partial, fillers[0]);
+    ptr = partial + strlen(partial);
+    textptr = textinfo;
+    textpos = startpos;
+    
+    for (i=0; i<strlen(text); i++) {
+        c = strchr(alphabet, toupper(text[i]));
+        if (!c) {
+            bc->error = EINVAL; /* impossible if text is verified */
+            free(partial);
+            free(textinfo);
+            return -1;
+        }
+        code = c - alphabet;
+        add_one(ptr, code);
+        sprintf(textptr, "%i:12:%c ", textpos, toupper(text[i]));
+        
+        textpos += width; /* width of each code */
+        textptr += strlen(textptr);
+        ptr += strlen(ptr); 
+       checkptr[4*i] = code & 1;
+       checkptr[4*i+1] = (code >> 1) & 1;
+       checkptr[4*i+2] = (code >> 2) & 1;
+       checkptr[4*i+3] = (code >> 3) & 1;
+    }
+    /* The CRC checksum is required */
+    for (i=0; i < 4*strlen(text); i++) {
+        int j;
+        if (checkptr[i])
+                for (j = 0; j < 9; j++)
+                        checkptr[i+j] ^= check[j];
+    }
+    for (i = 0; i < 8; i++) {
+        sprintf(ptr, patterns[checkptr[strlen(text) * 4 + i]]);
+       ptr += 2;
+    }
+    fprintf(stderr, "CRC: ");
+    for (i = 0; i < 8; i++) {
+        fputc('0' + checkptr[strlen(text) * 4 + i], stderr);
+    }
+    fputc('\n', stderr);
+    strcpy(ptr, fillers[1]);
+    bc->partial = partial;
+    bc->textinfo = textinfo;
+
+    return 0;
+}
diff --git a/barcode-0.98/ps.c b/barcode-0.98/ps.c
new file mode 100644 (file)
index 0000000..3591751
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+ * ps.c -- printing the "partial" bar encoding
+ *
+ * Copyright (c) 1999 Alessandro Rubini (rubini@gnu.org)
+ * Copyright (c) 1999 Prosa Srl. (prosa@prosa.it)
+ *
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include "barcode.h"
+
+#define SHRINK_AMOUNT 0.15 /* shrink the bars to account for ink spreading */
+
+
+/*
+ * How do the "partial" and "textinfo" strings work?
+ *
+ * The first char in "partial" tells how much extra space to add to the
+ * left of the bars. For EAN-13, it is used to leave space to print the
+ * first digit, other codes may have '0' for no-extra-space-needed.
+ *
+ * The next characters are alternating bars and spaces, as multiples
+ * of the base dimension which is 1 unless the code is
+ * rescaled. Rescaling is calculated as the ratio from the requested
+ * width and the calculated width.  Digits represent bar/space
+ * dimensions. Lower-case letters represent those bars that should
+ * extend lower than the others: 'a' is equivalent to '1', 'b' is '2' and
+ * so on.
+ *
+ * The "textinfo" string is made up of fields "%lf:%lf:%c" separated by
+ * blank space. The first integer is the x position of the character,
+ * the second is the font size (before rescaling) and the char item is
+ * the charcter to be printed.
+ *
+ * Both the "partial" and "textinfo" strings may include "-" or "+" as
+ * special characters (in "textinfo" the char should be a standalone
+ * word).  They state where the text should be printed: below the bars
+ * ("-", default) or above the bars. This is used, for example, to
+ * print the add-5 and add-2 codes to the right of UPC or EAN codes
+ * (the add-5 extension is mostly used in ISBN codes.
+ */
+
+
+int Barcode_ps_print(struct Barcode_Item *bc, FILE *f)
+{
+    int i, j, k, barlen, printable=1;
+    double f1, f2, fsav=0;
+    int mode = '-'; /* text below bars */
+    double scalef=1, xpos, x0, y0, yr;
+    unsigned char *ptr;
+    unsigned char c;
+
+    if (!bc->partial || !bc->textinfo) {
+       bc->error = EINVAL;
+       return -1;
+    }
+
+
+    /*
+     * Maybe this first part can be made common to several printing back-ends,
+     * we'll see how that works when other ouput engines are added
+     */
+
+    /* First, calculate barlen */
+    barlen = bc->partial[0] - '0';
+    for (ptr = bc->partial+1; *ptr; ptr++)
+       if (isdigit(*ptr)) 
+           barlen += (*ptr - '0');
+       else if (islower(*ptr))
+           barlen += (*ptr - 'a'+1);
+
+    /* The scale factor depends on bar length */
+    if (!bc->scalef) {
+        if (!bc->width) bc->width = barlen; /* default */
+        scalef = bc->scalef = (double)bc->width / (double)barlen;
+    }
+
+    /* The width defaults to "just enough" */
+    if (!bc->width) bc->width = barlen * scalef +1;
+
+    /* But it can be too small, in this case enlarge and center the area */
+    if (bc->width < barlen * scalef) {
+        int wid = barlen * scalef + 1;
+        bc->xoff -= (wid - bc->width)/2 ;
+        bc->width = wid;
+        /* Can't extend too far on the left */
+        if (bc->xoff < 0) {
+            bc->width += -bc->xoff;
+            bc->xoff = 0;
+        }
+    }
+
+    /* The height defaults to 80 points (rescaled) */
+    if (!bc->height) bc->height = 80 * scalef;
+
+#if 0
+    /* If too small (5 + text), enlarge and center */
+    i = 5 + 10 * ((bc->flags & BARCODE_NO_ASCII)==0);
+    if (bc->height < i * scalef ) {
+        int hei = i * scalef;
+        bc->yoff -= (hei-bc->height)/2;
+        bc->height = hei;
+        if (bc->yoff < 0) {
+            bc->height += -bc->yoff;
+            bc->yoff = 0;
+        }
+    }
+#else
+    /* If too small (5 + text), reduce the scale factor and center */
+    i = 5 + 10 * ((bc->flags & BARCODE_NO_ASCII)==0);
+    if (bc->height < i * scalef ) {
+        double scaleg = ((double)bc->height) / i;
+        int wid = bc->width * scaleg / scalef;
+        bc->xoff += (bc->width - wid)/2;
+        bc->width = wid;
+        scalef = scaleg;
+    }
+#endif
+
+    /*
+     * Ok, then deal with actual ps (eps) output
+     */
+
+    if (!(bc->flags & BARCODE_OUT_NOHEADERS)) { /* spit a header first */
+       if (bc->flags & BARCODE_OUT_EPS) 
+           fprintf(f, "%%!PS-Adobe-2.0 EPSF-1.2\n");
+       else
+           fprintf(f, "%%!PS-Adobe-2.0\n");
+       fprintf(f, "%%%%Creator: libbarcode\n");
+       if (bc->flags & BARCODE_OUT_EPS)  {
+           fprintf(f, "%%%%BoundingBox: %i %i %i %i\n",
+                   bc->xoff,
+                   bc->yoff,
+                   bc->xoff + bc->width + 2* bc->margin,
+                   bc->yoff + bc->height + 2* bc->margin);
+       }
+       fprintf(f, "%%%%EndComments\n");
+       if (bc->flags & BARCODE_OUT_PS)  {
+           fprintf(f, "%%%%EndProlog\n\n");
+           fprintf(f, "%%%%Page: 1 1\n\n");
+       }
+    }
+
+    /* Print some informative comments */
+    for (i=0; bc->ascii[i]; i++)
+       if (bc->ascii[i] < ' ')
+           printable = 0;
+
+    fprintf(f,"%% Printing barcode for \"%s\", scaled %5.2f",
+           printable ? bc->ascii : "<unprintable string>", scalef);
+    if (bc->encoding)
+       fprintf(f,", encoded using \"%s\"",bc->encoding);
+    fprintf(f, "\n");
+    fprintf(f,"%% The space/bar succession is represented "
+           "by the following widths (space first):\n"
+           "%% ");
+    for (i=0; i<strlen(bc->partial); i++) {
+        unsigned char c = bc->partial[i];
+       if (isdigit(c)) putc(c, f);
+       if (islower(c)) putc(c-'a'+'1', f);
+       if (isupper(c)) putc(c-'A'+'1', f);
+    }
+    /* open array for "forall" */
+    fprintf(f, "\n[\n%%  height  xpos   ypos  width"
+                "       height  xpos   ypos  width\n");
+
+    xpos = bc->margin + (bc->partial[0]-'0') * scalef;
+    for (ptr = bc->partial+1, i=1; *ptr; ptr++, i++) {
+       /* special cases: '+' and '-' */
+       if (*ptr == '+' || *ptr == '-') {
+           mode = *ptr; /* don't count it */ i++; continue;
+       }
+       /* j is the width of this bar/space */
+       if (isdigit (*ptr))   j = *ptr-'0';
+       else                  j = *ptr-'a'+1;
+       if (i%2) { /* bar */
+           x0 = bc->xoff + xpos + (j*scalef)/2;
+            y0 = bc->yoff + bc->margin;
+            yr = bc->height;
+            if (!(bc->flags & BARCODE_NO_ASCII)) { /* leave space for text */
+               if (mode == '-') {
+                   /* text below bars: 10 points or five points */
+                   y0 += (isdigit(*ptr) ? 10 : 5) * scalef;
+                   yr -= (isdigit(*ptr) ? 10 : 5) * scalef;
+               } else { /* '+' */
+                   /* text above bars: 10 or 0 from bottom, and 10 from top */
+                   y0 += (isdigit(*ptr) ? 10 : 0) * scalef;
+                   yr -= (isdigit(*ptr) ? 20 : 10) * scalef; 
+               }
+           }
+           /* Define an array and then use "forall" (Hans Schou) */
+            fprintf(f,"   [%5.2f %6.2f %6.2f %5.2f]%s",
+                    yr, x0, y0, (j * scalef) - SHRINK_AMOUNT,
+                   i%4 == 1 ? "   " : "\n");
+       }
+       xpos += j * scalef;
+    }
+    fprintf(f,"\n]\t{ {} forall setlinewidth moveto 0 exch rlineto stroke} "
+           "bind forall\n");
+
+    /* Then, the text */
+
+    mode = '-'; /* reinstantiate default */
+    if (!(bc->flags & BARCODE_NO_ASCII)) {
+       fprintf(f, "[\n%%   char    xpos   ypos fontsize\n");
+        k=0; /* k is the "previous font size" */
+        for (ptr = bc->textinfo; ptr; ptr = strchr(ptr, ' ')) {
+            while (*ptr == ' ') ptr++;
+            if (!*ptr) break;
+           if (*ptr == '+' || *ptr == '-') {
+               mode = *ptr; continue;
+           }
+            if (sscanf(ptr, "%lf:%lf:%c", &f1, &f2, &c) != 3) {
+               fprintf(stderr, "barcode: impossible data: %s\n", ptr);
+                continue;
+            }
+
+            fprintf(f, "    [(");
+           /* Both the backslash and the two parens are special */
+           if (c=='\\' || c==')' || c=='(')
+               fprintf(f, "\\%c) ", c);
+           else
+               fprintf(f, "%c)  ", c);
+            fprintf(f, "%6.2f %6.2f %5.2f]\n", 
+                    bc->xoff + f1 * scalef + bc->margin,
+                   mode == '-'
+                       ? (double)bc->yoff + bc->margin
+                      : (double)bc->yoff + bc->margin+bc->height - 8*scalef,
+                   fsav == f2 ? 0.0 : f2 * scalef);
+           fsav = f2;
+       }
+       fprintf(f,"]   { {} forall dup 0.00 ne {\n\t"
+               "/Helvetica findfont exch scalefont setfont\n"
+               "    } {pop} ifelse\n"
+               "    moveto show} bind forall\n");
+       
+
+    }
+
+    fprintf(f,"%% End barcode for \"%s\"\n\n",
+           printable ? bc->ascii : "<unprintable string>");
+
+    if (!(bc->flags & BARCODE_OUT_NOHEADERS)) {
+       if (bc->flags & BARCODE_OUT_PS)  {
+           fprintf(f,"showpage\n");
+           fprintf(f, "%%%%Trailer\n\n");
+       }
+    }
+    return 0;
+}
+
+
+
+
diff --git a/barcode-0.98/sample.c b/barcode-0.98/sample.c
new file mode 100644 (file)
index 0000000..46e6205
--- /dev/null
@@ -0,0 +1,98 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "barcode.h"
+
+int main(int argc, char **argv)
+{
+    int ps = 1, pcl = 0, oflags;
+    if (argc == 2 && !strcmp(argv[1],"-P")) {
+       ps = 0; pcl = 1; argc=1;
+    }
+    if (argc>2) {
+       fprintf(stderr, "%s: use \"%s\" for postscript or \"%s -P\" for PCL\n",
+               argv[0], argv[0], argv[0]);
+       exit(1);
+    }
+    if (pcl) {
+       oflags = BARCODE_OUT_PCL;
+    } else {
+       oflags = BARCODE_OUT_PS | BARCODE_OUT_NOHEADERS;
+       printf("%%!PS-Adobe-2.0\n");
+       printf("%%%%Creator: barcode sample program\n");
+       printf("%%%%EndComments\n");
+       printf("%%%%EndProlog\n\n");
+       printf("%%%%Page: 1 1\n\n");
+    }
+    /* Print a few barcodes in several places in the page */
+
+    /* default size, bottom left */
+    Barcode_Encode_and_Print("800894002700",stdout, 0, 0, 40, 40, 
+                      BARCODE_EAN | oflags);
+
+    /* smaller */
+    Barcode_Encode_and_Print("800894002700",stdout, 70, 50, 160, 55, 
+                      BARCODE_EAN | oflags);
+
+    /* smallest */
+    Barcode_Encode_and_Print("800894002700",stdout, 40, 30, 270, 70, 
+                      BARCODE_EAN | oflags);
+
+    /* A bigger all-0 */
+    Barcode_Encode_and_Print("000000000000",stdout, 170, 0, 40, 160, 
+                      BARCODE_EAN | oflags);
+
+    /* Still bigger all-0 (but UPC, this time) */
+    Barcode_Encode_and_Print("00000000000",stdout, 250, 0, 270, 160, 
+                      BARCODE_UPC | oflags);
+
+    /* A few code-39 ones */
+    Barcode_Encode_and_Print("silly code",stdout, 0, 0, 40, 320, 
+                      BARCODE_39 | oflags);
+    Barcode_Encode_and_Print("SAMPLE CODES",stdout, 100, 30, 400, 80, 
+                      BARCODE_39 | oflags);
+
+    /* ISBN with add-5 */
+    Barcode_Encode_and_Print("1-56592-292-1 90000",stdout, 0, 0, 40, 430, 
+                      BARCODE_ISBN | oflags);
+
+    /* UPC with add-2 */
+    Barcode_Encode_and_Print("07447084452 07",stdout, 0, 0, 300, 410, 
+                      BARCODE_UPC | oflags);
+
+    /* code 128-C */
+    Barcode_Encode_and_Print("12345678900123456789",stdout, 0, 0, 40, 530, 
+                      BARCODE_128C | oflags);
+
+    /* and my data as code-128B autodetected */
+    Barcode_Encode_and_Print("RBNLSN68T11E897W",stdout, 0, 60, 240, 510, 
+                oflags);
+    /* same as code-39, forced */
+    Barcode_Encode_and_Print("RBNLSN68T11E897W",stdout, 0, 60, 240, 590, 
+                BARCODE_NO_CHECKSUM | BARCODE_39 | oflags);
+
+    /* one interleaved 2 of 5 */
+    Barcode_Encode_and_Print("0123456789",stdout, 0, 0, 40, 620, 
+                BARCODE_I25 | oflags);
+
+    /* upc-e and ean-8 (autotected based on code size) */
+    Barcode_Encode_and_Print("012345",stdout, 0, 0, 50, 720, oflags);
+    Barcode_Encode_and_Print("0123456",stdout, 0, 0, 160, 720, oflags);
+
+
+    
+    if (pcl) {
+       printf("\f");
+    } else {
+       printf("\nshowpage\n");
+       printf("%%%%Trailer\n\n");
+    }
+    return 0;
+}
+
+
+
+
+
+
+
diff --git a/config.guess b/config.guess
new file mode 100755 (executable)
index 0000000..dc84c68
--- /dev/null
@@ -0,0 +1,1501 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+#   Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, 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.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# 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.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 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."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+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
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           sh5el) machine=sh5le-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep -q __ELF__
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # 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.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (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 ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    s390x:SunOS:*:*)
+       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+       echo i386-pc-auroraux${UNAME_RELEASE}
+       exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+       eval $set_cc_for_build
+       SUN_ARCH="i386"
+       # If there is a compiler, see if it is configured for 64-bit objects.
+       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+       # This test works for both compilers.
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               SUN_ARCH="x86_64"
+           fi
+       fi
+       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    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 ;;
+    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 ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /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 ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #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_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${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 ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????: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 ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       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 ;;
+    *:AIX:*:[456])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | 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=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep -q __LP64__
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       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_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       case ${UNAME_MACHINE} in
+           pc98)
+               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           amd64)
+               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    *:Interix*:*)
+       case ${UNAME_MACHINE} in
+           x86)
+               echo i586-pc-interix${UNAME_RELEASE}
+               exit ;;
+           authenticamd | genuineintel | EM64T)
+               echo x86_64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+           IA64)
+               echo ia64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+       esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    8664:Windows_NT:*)
+       echo x86_64-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep -q ld.so.1
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    arm*:Linux:*:*)
+       eval $set_cc_for_build
+       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_EABI__
+       then
+           echo ${UNAME_MACHINE}-unknown-linux-gnu
+       else
+           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+       fi
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       LIBC=gnu
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef ${UNAME_MACHINE}
+       #undef ${UNAME_MACHINE}el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=${UNAME_MACHINE}el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=${UNAME_MACHINE}
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo or32-unknown-linux-gnu
+       exit ;;
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-gnu
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    xtensa*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:DYNIX/ptx:4*:*)
+       # 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.
+       echo i386-sequent-sysv4
+       exit ;;
+    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 ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    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|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i586.
+       # Note: whatever this is, it MUST be the same as what config.sub
+       # prints for the "djgpp" host, or else GDB configury will decide that
+       # this is a cross-build.
+       echo i586-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    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 ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*: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; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+       OS_REL='.3'
+       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; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *: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 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
+       echo i586-pc-haiku
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-7:SUPER-UX:*:*)
+       echo sx7-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8:SUPER-UX:*:*)
+       echo sx8-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8R:SUPER-UX:*:*)
+       echo sx8r-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           i386)
+               eval $set_cc_for_build
+               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                     grep IS_64BIT_ARCH >/dev/null
+                 then
+                     UNAME_PROCESSOR="x86_64"
+                 fi
+               fi ;;
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+    i*86:AROS:*:*)
+       echo ${UNAME_MACHINE}-pc-aros
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+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\n"); 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`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%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)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# 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_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# 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 ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..9a3a81a
--- /dev/null
@@ -0,0 +1,83 @@
+/* config.h.in.  Generated from configure.in by autoheader.  */
+
+/* always defined to indicate that i18n is enabled */
+#undef ENABLE_NLS
+
+/* Gettext package */
+#undef GETTEXT_PACKAGE
+
+/* Define to 1 if you have the `bind_textdomain_codeset' function. */
+#undef HAVE_BIND_TEXTDOMAIN_CODESET
+
+/* Define to 1 if you have the `dcgettext' function. */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 for EDS support */
+#undef HAVE_LIBEBOOK
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
diff --git a/config.sub b/config.sub
new file mode 100755 (executable)
index 0000000..2a55a50
--- /dev/null
@@ -0,0 +1,1705 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+#   Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, 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.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# 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.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# 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.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 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."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+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
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    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 | -axis | -knuth | -cray | -microblaze)
+               os=
+               basic_machine=$1
+               ;;
+        -bluegene*)
+               os=-cnk
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -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/'`
+               ;;
+       -sco5v6*)
+               # 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/'`
+               ;;
+       -udk*)
+               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
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+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.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fido | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | lm32 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | mcore | mep | metag \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64octeon | mips64octeonel \
+       | mips64orion | mips64orionel \
+       | mips64r5900 | mips64r5900el \
+       | mips64vr | mips64vrel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | moxie \
+       | mt \
+       | msp430 \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | rx \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | spu | strongarm \
+       | tahoe | thumb | tic4x | tic80 | tron \
+       | ubicom32 \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k | z80)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-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*86 | x86_64)
+         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.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | lm32-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64octeon-* | mips64octeonel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64r5900-* | mips64r5900el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* | rx-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+       | tron-* \
+       | ubicom32-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | xstormy16-* | xtensa*-* \
+       | ymp-* \
+       | z8k-* | z80-*)
+               ;;
+       # Recognize the basic CPU types without company name, with glob match.
+       xtensa*)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aros)
+               basic_machine=i386-pc
+               os=-aros
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       blackfin)
+               basic_machine=bfin-unknown
+               os=-linux
+               ;;
+       blackfin-*)
+               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       bluegene*)
+               basic_machine=powerpc-ibm
+               os=-cnk
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+        cegcc)
+               basic_machine=arm-unknown
+               os=-cegcc
+               ;;
+       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 | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16)
+               basic_machine=cr16-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dicos)
+               basic_machine=i686-pc
+               os=-dicos
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       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
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-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
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m68knommu)
+               basic_machine=m68k-unknown
+               os=-linux
+               ;;
+       m68knommu-*)
+               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+        microblaze)
+               basic_machine=microblaze-xilinx
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       mingw32ce)
+               basic_machine=arm-unknown
+               os=-mingw32ce
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       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
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       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
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       parisc)
+               basic_machine=hppa-unknown
+               os=-linux
+               ;;
+       parisc-*)
+               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-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/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sde)
+               basic_machine=mipsisa32-sde
+               os=-elf
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh5el)
+               basic_machine=sh5le-unknown
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       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
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tic55x | c55x*)
+               basic_machine=tic55x-unknown
+               os=-coff
+               ;;
+       tic6x | c6x*)
+               basic_machine=tic6x-unknown
+               os=-coff
+               ;;
+       tile*)
+               basic_machine=tile-unknown
+               os=-linux-gnu
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       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
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       z80-*-coff)
+               basic_machine=z80-unknown
+               os=-sim
+               ;;
+       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.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               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.
+        -auroraux)
+               os=-auroraux
+               ;;
+       -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* | -cnk* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+             | -sym* | -kopensolaris* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* | -aros* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -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|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -dicos*)
+               os=-dicos
+               ;;
+       -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
+        score-*)
+               os=-elf
+               ;;
+        spu-*)
+               os=-elf
+               ;;
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       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
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+        mep-*)
+               os=-elf
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-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
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               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
+                               ;;
+                       -cnk*|-aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..041da4d
--- /dev/null
+++ b/configure
@@ -0,0 +1,19337 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.63 for glabels 2.2.8.
+#
+# Report bugs to <http://sourceforge.net/tracker/?func=add&group_id=46122&atid=445116>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes &&    (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+        /*)
+          for as_base in sh bash ksh sh5; do
+            as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+          done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+        # Try only shells that exist, to save several forks.
+        if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+               { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+              as_have_required=yes
+              if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+       do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+       done
+       export CONFIG_SHELL
+       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell bug-autoconf@gnu.org about your system,
+  echo including any error possibly output before this message.
+  echo This can help us improve future autoconf versions.
+  echo Configuration will now proceed without shell functions.
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+$*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "$0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='glabels'
+PACKAGE_TARNAME='glabels'
+PACKAGE_VERSION='2.2.8'
+PACKAGE_STRING='glabels 2.2.8'
+PACKAGE_BUGREPORT='http://sourceforge.net/tracker/?func=add&group_id=46122&atid=445116'
+
+ac_unique_file="src/glabels.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+MKINSTALLDIRS
+POSUB
+POFILES
+PO_IN_DATADIR_FALSE
+PO_IN_DATADIR_TRUE
+INTLLIBS
+INSTOBJEXT
+GMOFILES
+CATOBJEXT
+CATALOGS
+MSGFMT_OPTS
+GETTEXT_PACKAGE
+ENABLE_UPDATE_DESKTOPDB_FALSE
+ENABLE_UPDATE_DESKTOPDB_TRUE
+ENABLE_UPDATE_MIMEDB_FALSE
+ENABLE_UPDATE_MIMEDB_TRUE
+HAVE_NEWER_MIME_FALSE
+HAVE_NEWER_MIME_TRUE
+UPDATE_DESKTOP_DATABASE
+HAVE_NEW_MIME_FALSE
+HAVE_NEW_MIME_TRUE
+UPDATE_MIME_DATABASE
+DISABLE_DEPRECATED_CFLAGS
+HAVE_XML_PARSE_HUGE
+XML_PARSE_HUGE_LIBS
+XML_PARSE_HUGE_CFLAGS
+MYGAL_LIBS
+MYGAL_CFLAGS
+LIBGLABELS_LIBS
+LIBGLABELS_CFLAGS
+GLABELS_LIBS
+GLABELS_CFLAGS
+LIBEBOOK_LIBS
+LIBEBOOK_CFLAGS
+LIBEBOOK_REQUIRED
+LIBGLADE_REQUIRED
+LIBXML_REQUIRED
+LIBGNOMEUI_REQUIRED
+LIBGNOME_REQUIRED
+GTK_REQUIRED
+GLIB_REQUIRED
+LIBGLABELS_VERSION_INFO
+GTK_DOC_USE_LIBTOOL_FALSE
+GTK_DOC_USE_LIBTOOL_TRUE
+ENABLE_GTK_DOC_FALSE
+ENABLE_GTK_DOC_TRUE
+GTKDOC_CHECK
+HTML_DIR
+GLIB_GENMARSHAL
+WARN_CFLAGS
+CPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+lt_ECHO
+RANLIB
+AR
+OBJDUMP
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+DATADIRNAME
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+ALL_LINGUAS
+INTLTOOL_PERL
+GMSGFMT
+MSGFMT
+MSGMERGE
+XGETTEXT
+INTLTOOL_POLICY_RULE
+INTLTOOL_SERVICE_RULE
+INTLTOOL_THEME_RULE
+INTLTOOL_SCHEMAS_RULE
+INTLTOOL_CAVES_RULE
+INTLTOOL_XML_NOMERGE_RULE
+INTLTOOL_XML_RULE
+INTLTOOL_KBD_RULE
+INTLTOOL_XAM_RULE
+INTLTOOL_UI_RULE
+INTLTOOL_SOUNDLIST_RULE
+INTLTOOL_SHEET_RULE
+INTLTOOL_SERVER_RULE
+INTLTOOL_PONG_RULE
+INTLTOOL_OAF_RULE
+INTLTOOL_PROP_RULE
+INTLTOOL_KEYS_RULE
+INTLTOOL_DIRECTORY_RULE
+INTLTOOL_DESKTOP_RULE
+INTLTOOL_EXTRACT
+INTLTOOL_MERGE
+INTLTOOL_UPDATE
+USE_NLS
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+HAVE_GNOME_DOC_UTILS_FALSE
+HAVE_GNOME_DOC_UTILS_TRUE
+DISTCHECK_CONFIGURE_FLAGS
+ENABLE_SK_FALSE
+ENABLE_SK_TRUE
+DOC_USER_FORMATS
+OMF_DIR
+HELP_DIR
+PKG_CONFIG
+LN_S
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+with_help_dir
+with_omf_dir
+with_help_formats
+enable_scrollkeeper
+enable_maintainer_mode
+enable_nls
+enable_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+enable_compile_warnings
+enable_iso_c
+with_html_dir
+enable_gtk_doc
+with_libebook
+enable_deprecations
+enable_update_mimedb
+enable_update_desktopdb
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+PKG_CONFIG
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+LIBEBOOK_CFLAGS
+LIBEBOOK_LIBS
+GLABELS_CFLAGS
+GLABELS_LIBS
+LIBGLABELS_CFLAGS
+LIBGLABELS_LIBS
+MYGAL_CFLAGS
+MYGAL_LIBS
+XML_PARSE_HUGE_CFLAGS
+XML_PARSE_HUGE_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+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=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)   ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -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_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$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 ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$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 | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$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 ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    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 | -n)
+    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 ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$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_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=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 ;;
+
+  -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { $as_echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
+   { (exit 1); exit 1; }; } ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
+               datadir sysconfdir sharedstatedir localstatedir includedir \
+               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+               libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { $as_echo "$as_me: error: working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# 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 the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_myself" : 'X\(//\)[^/]' \| \
+        X"$as_myself" : 'X\(//\)$' \| \
+        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  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
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+       pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # 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 <<_ACEOF
+\`configure' configures glabels 2.2.8 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/glabels]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --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
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of glabels 2.2.8:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-scrollkeeper  do not make updates to the scrollkeeper database
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+                         (and sometimes confusing) to the casual installer
+  --disable-nls           do not use Native Language Support
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-compile-warnings=[no/minimum/yes/maximum/error]
+                          Turn on compiler warnings
+  --enable-iso-c          Try to warn if code is not ISO C
+  --enable-gtk-doc        use gtk-doc to build documentation [default=no]
+  --enable-deprecations   warn about deprecated usages [default=no]
+  --disable-update-mimedb disable the update-mime-database after install
+                          default=no
+  --disable-update-desktopdb
+                          disable the update-desktop-database after install
+                          default=no
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-help-dir=DIR     path to help docs
+  --with-omf-dir=DIR      path to OMF files
+  --with-help-formats=FORMATS
+                          list of formats
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-html-dir=PATH    path to installed docs
+  --without-libebook      build without Evolution Data Server support
+
+Some influential environment variables:
+  PKG_CONFIG  path to pkg-config utility
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  LIBEBOOK_CFLAGS
+              C compiler flags for LIBEBOOK, overriding pkg-config
+  LIBEBOOK_LIBS
+              linker flags for LIBEBOOK, overriding pkg-config
+  GLABELS_CFLAGS
+              C compiler flags for GLABELS, overriding pkg-config
+  GLABELS_LIBS
+              linker flags for GLABELS, overriding pkg-config
+  LIBGLABELS_CFLAGS
+              C compiler flags for LIBGLABELS, overriding pkg-config
+  LIBGLABELS_LIBS
+              linker flags for LIBGLABELS, overriding pkg-config
+  MYGAL_CFLAGS
+              C compiler flags for MYGAL, overriding pkg-config
+  MYGAL_LIBS  linker flags for MYGAL, overriding pkg-config
+  XML_PARSE_HUGE_CFLAGS
+              C compiler flags for XML_PARSE_HUGE, overriding pkg-config
+  XML_PARSE_HUGE_LIBS
+              linker flags for XML_PARSE_HUGE, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <http://sourceforge.net/tracker/?func=add&group_id=46122&atid=445116>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+glabels configure 2.2.8
+generated by GNU Autoconf 2.63
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by glabels $as_me 2.2.8, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  $as_echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+       "s/'\''/'\''\\\\'\'''\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       $as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test -r "$ac_site_file"; then
+    { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       # differences in whitespace do not lead to failure.
+       ac_old_val_w=`echo x $ac_old_val`
+       ac_new_val_w=`echo x $ac_new_val`
+       if test "$ac_old_val_w" != "$ac_new_val_w"; then
+         { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         ac_cache_corrupted=:
+       else
+         { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         eval $ac_var=\$ac_old_val
+       fi
+       { $as_echo "$as_me:$LINENO:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { $as_echo "$as_me:$LINENO:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+am__api_version='1.11'
+
+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
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# 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
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+
+done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+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.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&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_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5
+$as_echo "$as_me: error: unsafe absolute working directory name" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
+    { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5
+$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+
+# 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" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $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".
+      { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+$as_echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+$as_echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+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"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=glabels
+ VERSION=2.2.8
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { $as_echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+
+fi
+
+gdu_cv_version_required=0.3.2
+
+{ $as_echo "$as_me:$LINENO: checking gnome-doc-utils >= $gdu_cv_version_required" >&5
+$as_echo_n "checking gnome-doc-utils >= $gdu_cv_version_required... " >&6; }
+if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils >= \$gdu_cv_version_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gnome-doc-utils >= $gdu_cv_version_required") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  gdu_cv_have_gdu=yes
+else
+  gdu_cv_have_gdu=no
+fi
+
+if test "$gdu_cv_have_gdu" = "yes"; then
+       { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+else
+       { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+       { { $as_echo "$as_me:$LINENO: error: gnome-doc-utils >= $gdu_cv_version_required not found" >&5
+$as_echo "$as_me: error: gnome-doc-utils >= $gdu_cv_version_required not found" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+# Check whether --with-help-dir was given.
+if test "${with_help_dir+set}" = set; then
+  withval=$with_help_dir;
+else
+  with_help_dir='${datadir}/gnome/help'
+fi
+
+HELP_DIR="$with_help_dir"
+
+
+
+# Check whether --with-omf-dir was given.
+if test "${with_omf_dir+set}" = set; then
+  withval=$with_omf_dir;
+else
+  with_omf_dir='${datadir}/omf'
+fi
+
+OMF_DIR="$with_omf_dir"
+
+
+
+# Check whether --with-help-formats was given.
+if test "${with_help_formats+set}" = set; then
+  withval=$with_help_formats;
+else
+  with_help_formats=''
+fi
+
+DOC_USER_FORMATS="$with_help_formats"
+
+
+# Check whether --enable-scrollkeeper was given.
+if test "${enable_scrollkeeper+set}" = set; then
+  enableval=$enable_scrollkeeper;
+else
+  enable_scrollkeeper=yes
+fi
+
+ if test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"; then
+  ENABLE_SK_TRUE=
+  ENABLE_SK_FALSE='#'
+else
+  ENABLE_SK_TRUE='#'
+  ENABLE_SK_FALSE=
+fi
+
+
+DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS"
+
+
+ if test "$gdu_cv_have_gdu" = "yes"; then
+  HAVE_GNOME_DOC_UTILS_TRUE=
+  HAVE_GNOME_DOC_UTILS_FALSE='#'
+else
+  HAVE_GNOME_DOC_UTILS_TRUE='#'
+  HAVE_GNOME_DOC_UTILS_FALSE=
+fi
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+    # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then
+  enableval=$enable_nls; USE_NLS=$enableval
+else
+  USE_NLS=yes
+fi
+
+  { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_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 $# != 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
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       then :; else
+          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       fi
+       # We set ac_cv_exeext here because the later test for it is not
+       # safe: cross compilers may not add the suffix if given an `-o'
+       # argument, so we may need to know it at that point already.
+       # Even if this section looks crufty: it has the advantage of
+       # actually working.
+       break;;
+    * )
+       break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+
+
+case "$am__api_version" in
+    1.01234)
+       { { $as_echo "$as_me:$LINENO: error: Automake 1.5 or newer is required to use intltool" >&5
+$as_echo "$as_me: error: Automake 1.5 or newer is required to use intltool" >&2;}
+   { (exit 1); exit 1; }; }
+    ;;
+    *)
+    ;;
+esac
+
+if test -n "0.21"; then
+    { $as_echo "$as_me:$LINENO: checking for intltool >= 0.21" >&5
+$as_echo_n "checking for intltool >= 0.21... " >&6; }
+
+    INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.21 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+    INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+    INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+
+    { $as_echo "$as_me:$LINENO: result: $INTLTOOL_APPLIED_VERSION found" >&5
+$as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; }
+    test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
+       { { $as_echo "$as_me:$LINENO: error: Your intltool is too old.  You need intltool 0.21 or later." >&5
+$as_echo "$as_me: error: Your intltool is too old.  You need intltool 0.21 or later." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# Extract the first word of "intltool-update", so it can be a program name with args.
+set dummy intltool-update; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_INTLTOOL_UPDATE+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $INTLTOOL_UPDATE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE
+if test -n "$INTLTOOL_UPDATE"; then
+  { $as_echo "$as_me:$LINENO: result: $INTLTOOL_UPDATE" >&5
+$as_echo "$INTLTOOL_UPDATE" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "intltool-merge", so it can be a program name with args.
+set dummy intltool-merge; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_INTLTOOL_MERGE+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $INTLTOOL_MERGE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE
+if test -n "$INTLTOOL_MERGE"; then
+  { $as_echo "$as_me:$LINENO: result: $INTLTOOL_MERGE" >&5
+$as_echo "$INTLTOOL_MERGE" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "intltool-extract", so it can be a program name with args.
+set dummy intltool-extract; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_INTLTOOL_EXTRACT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $INTLTOOL_EXTRACT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT
+if test -n "$INTLTOOL_EXTRACT"; then
+  { $as_echo "$as_me:$LINENO: result: $INTLTOOL_EXTRACT" >&5
+$as_echo "$INTLTOOL_EXTRACT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then
+    { { $as_echo "$as_me:$LINENO: error: The intltool scripts were not found. Please install intltool." >&5
+$as_echo "$as_me: error: The intltool scripts were not found. Please install intltool." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@'
+     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@'
+      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_SERVICE_RULE='%.service: %.service.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+   INTLTOOL_POLICY_RULE='%.policy:    %.policy.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check the gettext tools to make sure they are GNU
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $XGETTEXT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+XGETTEXT=$ac_cv_path_XGETTEXT
+if test -n "$XGETTEXT"; then
+  { $as_echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $MSGMERGE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+MSGMERGE=$ac_cv_path_MSGMERGE
+if test -n "$MSGMERGE"; then
+  { $as_echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $MSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+MSGFMT=$ac_cv_path_MSGFMT
+if test -n "$MSGFMT"; then
+  { $as_echo "$as_me:$LINENO: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_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
+  { $as_echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then
+    { { $as_echo "$as_me:$LINENO: error: GNU gettext tools not found; required for intltool" >&5
+$as_echo "$as_me: error: GNU gettext tools not found; required for intltool" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`"
+mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`"
+mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`"
+if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then
+    { { $as_echo "$as_me:$LINENO: error: GNU gettext tools not found; required for intltool" >&5
+$as_echo "$as_me: error: GNU gettext tools not found; required for intltool" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_INTLTOOL_PERL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $INTLTOOL_PERL in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL
+if test -n "$INTLTOOL_PERL"; then
+  { $as_echo "$as_me:$LINENO: result: $INTLTOOL_PERL" >&5
+$as_echo "$INTLTOOL_PERL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$INTLTOOL_PERL"; then
+   { { $as_echo "$as_me:$LINENO: error: perl not found" >&5
+$as_echo "$as_me: error: perl not found" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ $as_echo "$as_me:$LINENO: checking for perl >= 5.8.1" >&5
+$as_echo_n "checking for perl >= 5.8.1... " >&6; }
+$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
+if test $? -ne 0; then
+   { { $as_echo "$as_me:$LINENO: error: perl 5.8.1 is required for intltool" >&5
+$as_echo "$as_me: error: perl 5.8.1 is required for intltool" >&2;}
+   { (exit 1); exit 1; }; }
+else
+   IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`"
+   { $as_echo "$as_me:$LINENO: result: $IT_PERL_VERSION" >&5
+$as_echo "$IT_PERL_VERSION" >&6; }
+fi
+if test "x" != "xno-xml"; then
+   { $as_echo "$as_me:$LINENO: checking for XML::Parser" >&5
+$as_echo_n "checking for XML::Parser... " >&6; }
+   if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+       { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+   else
+       { { $as_echo "$as_me:$LINENO: error: XML::Parser perl module is required for intltool" >&5
+$as_echo "$as_me: error: XML::Parser perl module is required for intltool" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+fi
+
+# Substitute ALL_LINGUAS so we can use it in po/Makefile
+
+
+# Set DATADIRNAME correctly if it is not set yet
+# (copied from glib-gettext.m4)
+if test -z "$DATADIRNAME"; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+extern int _nl_msg_cat_cntr;
+                       return _nl_msg_cat_cntr
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  DATADIRNAME=share
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       case $host in
+    *-*-solaris*)
+                        { $as_echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5
+$as_echo_n "checking for bind_textdomain_codeset... " >&6; }
+if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define bind_textdomain_codeset to an innocuous variant, in case <limits.h> declares bind_textdomain_codeset.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define bind_textdomain_codeset innocuous_bind_textdomain_codeset
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char bind_textdomain_codeset (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef bind_textdomain_codeset
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char bind_textdomain_codeset ();
+/* 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_bind_textdomain_codeset || defined __stub___bind_textdomain_codeset
+choke me
+#endif
+
+int
+main ()
+{
+return bind_textdomain_codeset ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_bind_textdomain_codeset=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_bind_textdomain_codeset=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5
+$as_echo "$ac_cv_func_bind_textdomain_codeset" >&6; }
+if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then
+  DATADIRNAME=share
+else
+  DATADIRNAME=lib
+fi
+
+    ;;
+    *)
+    DATADIRNAME=lib
+    ;;
+    esac
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { $as_echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+
+fi
+
+case `pwd` in
+  *\ * | *\    *)
+    { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.6b'
+macro_revision='1.3017'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     $as_unset ac_script || ac_script=
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-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 "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      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
+  { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:$LINENO: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; 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
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:5573: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:5576: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:5579: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:$LINENO: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+# 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='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       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 $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:$LINENO: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 6773 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  lt_cv_cc_needs_belf=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_cc_needs_belf=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:$LINENO: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  lt_cv_ld_exported_symbols_list=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_ld_exported_symbols_list=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[012]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#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))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+            # Check whether --enable-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.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-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.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+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 "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:$LINENO: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8626: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8630: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='--shared'
+       lt_prog_compiler_static='--static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8965: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8969: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9070: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9074: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9125: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9129: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         whole_archive_flag_spec=
+         tmp_sharedflag='--shared' ;;
+       xl[cC]*)                        # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec=
+         hardcode_libdir_flag_spec_ld='-rpath $libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' ${wl}-bernotok'
+         allow_undefined_flag=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         whole_archive_flag_spec='$convenience'
+         archive_cmds_need_lc=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  whole_archive_flag_spec=''
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # 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 $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_flag_spec_ld='+b $libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+         export_dynamic_flag_spec='${wl}-E'
+       else
+         case $host_os in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+       pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+         archive_cmds_need_lc=no
+        else
+         archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    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'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+  shlibpath_overrides_runpath=yes
+fi
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != 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
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
+$as_echo_n "checking for shl_load... " >&6; }
+if test "${ac_cv_func_shl_load+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+/* 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_shl_load || defined __stub___shl_load
+choke me
+#endif
+
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_shl_load=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_shl_load=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+$as_echo "$ac_cv_func_shl_load" >&6; }
+if test "x$ac_cv_func_shl_load" = x""yes; then
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_shl_load=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
+$as_echo_n "checking for dlopen... " >&6; }
+if test "${ac_cv_func_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+/* 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_dlopen || defined __stub___dlopen
+choke me
+#endif
+
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+$as_echo "$ac_cv_func_dlopen" >&6; }
+if test "x$ac_cv_func_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_svld_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_dld_link=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11928 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 12024 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&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
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:$LINENO: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for library containing strerror" >&5
+$as_echo_n "checking for library containing strerror... " >&6; }
+if test "${ac_cv_search_strerror+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror ();
+int
+main ()
+{
+return strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' cposix; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_strerror=$ac_res
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_strerror+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_strerror+set}" = set; then
+  :
+else
+  ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+$as_echo "$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_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 $# != 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
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_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 $# != 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
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  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 <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#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))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+
+
+
+    # Check whether --enable-compile-warnings was given.
+if test "${enable_compile_warnings+set}" = set; then
+  enableval=$enable_compile_warnings;
+else
+  enable_compile_warnings="yes"
+fi
+
+
+    warnCFLAGS=
+    if test "x$GCC" != xyes; then
+       enable_compile_warnings=no
+    fi
+
+    warning_flags=
+    realsave_CFLAGS="$CFLAGS"
+
+    case "$enable_compile_warnings" in
+    no)
+       warning_flags=
+       ;;
+    minimum)
+       warning_flags="-Wall"
+       ;;
+    yes)
+       warning_flags="-Wall -Wmissing-prototypes"
+       ;;
+    maximum|error)
+       warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith"
+       CFLAGS="$warning_flags $CFLAGS"
+       for option in -Wno-sign-compare; do
+               SAVE_CFLAGS="$CFLAGS"
+               CFLAGS="$CFLAGS $option"
+               { $as_echo "$as_me:$LINENO: checking whether gcc understands $option" >&5
+$as_echo_n "checking whether gcc understands $option... " >&6; }
+               cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  has_option=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       has_option=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+               CFLAGS="$SAVE_CFLAGS"
+               { $as_echo "$as_me:$LINENO: result: $has_option" >&5
+$as_echo "$has_option" >&6; }
+               if test $has_option = yes; then
+                 warning_flags="$warning_flags $option"
+               fi
+               unset has_option
+               unset SAVE_CFLAGS
+       done
+       unset option
+       if test "$enable_compile_warnings" = "error" ; then
+           warning_flags="$warning_flags -Werror"
+       fi
+       ;;
+    *)
+       { { $as_echo "$as_me:$LINENO: error: Unknown argument '$enable_compile_warnings' to --enable-compile-warnings" >&5
+$as_echo "$as_me: error: Unknown argument '$enable_compile_warnings' to --enable-compile-warnings" >&2;}
+   { (exit 1); exit 1; }; }
+       ;;
+    esac
+    CFLAGS="$realsave_CFLAGS"
+    { $as_echo "$as_me:$LINENO: checking what warning flags to pass to the C compiler" >&5
+$as_echo_n "checking what warning flags to pass to the C compiler... " >&6; }
+    { $as_echo "$as_me:$LINENO: result: $warning_flags" >&5
+$as_echo "$warning_flags" >&6; }
+
+    # Check whether --enable-iso-c was given.
+if test "${enable_iso_c+set}" = set; then
+  enableval=$enable_iso_c;
+else
+  enable_iso_c=no
+fi
+
+
+    { $as_echo "$as_me:$LINENO: checking what language compliance flags to pass to the C compiler" >&5
+$as_echo_n "checking what language compliance flags to pass to the C compiler... " >&6; }
+    complCFLAGS=
+    if test "x$enable_iso_c" != "xno"; then
+       if test "x$GCC" = "xyes"; then
+       case " $CFLAGS " in
+           *\ \        -ansi\ \        *) ;;
+           *) complCFLAGS="$complCFLAGS -ansi" ;;
+       esac
+       case " $CFLAGS " in
+           *\ \        -pedantic\ \    *) ;;
+           *) complCFLAGS="$complCFLAGS -pedantic" ;;
+       esac
+       fi
+    fi
+    { $as_echo "$as_me:$LINENO: result: $complCFLAGS" >&5
+$as_echo "$complCFLAGS" >&6; }
+
+    WARN_CFLAGS="$warning_flags $complCFLAGS"
+
+
+
+# Extract the first word of "glib-genmarshal", so it can be a program name with args.
+set dummy glib-genmarshal; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GLIB_GENMARSHAL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $GLIB_GENMARSHAL in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GLIB_GENMARSHAL="$GLIB_GENMARSHAL" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GLIB_GENMARSHAL="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GLIB_GENMARSHAL=$ac_cv_path_GLIB_GENMARSHAL
+if test -n "$GLIB_GENMARSHAL"; then
+  { $as_echo "$as_me:$LINENO: result: $GLIB_GENMARSHAL" >&5
+$as_echo "$GLIB_GENMARSHAL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+# Check whether --with-html-dir was given.
+if test "${with_html_dir+set}" = set; then
+  withval=$with_html_dir;
+else
+  with_html_dir='${datadir}/gtk-doc/html'
+fi
+
+  HTML_DIR="$with_html_dir"
+
+
+    # Check whether --enable-gtk-doc was given.
+if test "${enable_gtk_doc+set}" = set; then
+  enableval=$enable_gtk_doc;
+else
+  enable_gtk_doc=no
+fi
+
+
+  if test x$enable_gtk_doc = xyes; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.0\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  :
+else
+  { { $as_echo "$as_me:$LINENO: error: You need to have gtk-doc >= 1.0 installed to build gtk-doc" >&5
+$as_echo "$as_me: error: You need to have gtk-doc >= 1.0 installed to build gtk-doc" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+  fi
+
+  { $as_echo "$as_me:$LINENO: checking whether to build gtk-doc documentation" >&5
+$as_echo_n "checking whether to build gtk-doc documentation... " >&6; }
+  { $as_echo "$as_me:$LINENO: result: $enable_gtk_doc" >&5
+$as_echo "$enable_gtk_doc" >&6; }
+
+  for ac_prog in gtkdoc-check
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GTKDOC_CHECK+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $GTKDOC_CHECK in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK
+if test -n "$GTKDOC_CHECK"; then
+  { $as_echo "$as_me:$LINENO: result: $GTKDOC_CHECK" >&5
+$as_echo "$GTKDOC_CHECK" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$GTKDOC_CHECK" && break
+done
+
+
+   if test x$enable_gtk_doc = xyes; then
+  ENABLE_GTK_DOC_TRUE=
+  ENABLE_GTK_DOC_FALSE='#'
+else
+  ENABLE_GTK_DOC_TRUE='#'
+  ENABLE_GTK_DOC_FALSE=
+fi
+
+   if test -n "$LIBTOOL"; then
+  GTK_DOC_USE_LIBTOOL_TRUE=
+  GTK_DOC_USE_LIBTOOL_FALSE='#'
+else
+  GTK_DOC_USE_LIBTOOL_TRUE='#'
+  GTK_DOC_USE_LIBTOOL_FALSE=
+fi
+
+
+
+LIBGLABELS_C=6
+LIBGLABELS_R=2
+LIBGLABELS_A=1
+
+LIBGLABELS_VERSION_INFO=${LIBGLABELS_C}:${LIBGLABELS_R}:${LIBGLABELS_A}
+
+
+
+GLIB_REQUIRED=2.12.0
+GTK_REQUIRED=2.10.0
+LIBGNOME_REQUIRED=2.16.0
+LIBGNOMEUI_REQUIRED=2.16.0
+LIBXML_REQUIRED=2.6.0
+LIBGLADE_REQUIRED=2.6.0
+LIBEBOOK_REQUIRED=1.8.0
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-libebook was given.
+if test "${with_libebook+set}" = set; then
+  withval=$with_libebook;
+fi
+
+have_libebook=no
+if test "x$with_libebook" != xno; then
+
+pkg_failed=no
+{ $as_echo "$as_me:$LINENO: checking for LIBEBOOK" >&5
+$as_echo_n "checking for LIBEBOOK... " >&6; }
+
+if test -n "$LIBEBOOK_CFLAGS"; then
+    pkg_cv_LIBEBOOK_CFLAGS="$LIBEBOOK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libebook-1.2 >= \$LIBEBOOK_REQUIRED\"") >&5
+  ($PKG_CONFIG --exists --print-errors "libebook-1.2 >= $LIBEBOOK_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_LIBEBOOK_CFLAGS=`$PKG_CONFIG --cflags "libebook-1.2 >= $LIBEBOOK_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LIBEBOOK_LIBS"; then
+    pkg_cv_LIBEBOOK_LIBS="$LIBEBOOK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libebook-1.2 >= \$LIBEBOOK_REQUIRED\"") >&5
+  ($PKG_CONFIG --exists --print-errors "libebook-1.2 >= $LIBEBOOK_REQUIRED") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_LIBEBOOK_LIBS=`$PKG_CONFIG --libs "libebook-1.2 >= $LIBEBOOK_REQUIRED" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               LIBEBOOK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libebook-1.2 >= $LIBEBOOK_REQUIRED" 2>&1`
+        else
+               LIBEBOOK_PKG_ERRORS=`$PKG_CONFIG --print-errors "libebook-1.2 >= $LIBEBOOK_REQUIRED" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$LIBEBOOK_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+                have_libebook=no
+elif test $pkg_failed = untried; then
+       have_libebook=no
+else
+       LIBEBOOK_CFLAGS=$pkg_cv_LIBEBOOK_CFLAGS
+       LIBEBOOK_LIBS=$pkg_cv_LIBEBOOK_LIBS
+        { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       have_libebook=yes
+fi
+fi
+
+if test "x$have_libebook" = "xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBEBOOK 1
+_ACEOF
+
+       OPTIONAL_MODULES="$OPTIONAL_MODULES libebook-1.2 >= $LIBEBOOK_REQUIRED"
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:$LINENO: checking for GLABELS" >&5
+$as_echo_n "checking for GLABELS... " >&6; }
+
+if test -n "$GLABELS_CFLAGS"; then
+    pkg_cv_GLABELS_CFLAGS="$GLABELS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\\
+glib-2.0 >= \$GLIB_REQUIRED \\
+gtk+-2.0 >= \$GTK_REQUIRED \\
+libgnome-2.0 >= \$LIBGNOME_REQUIRED \\
+libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED \\
+libxml-2.0 >= \$LIBXML_REQUIRED \\
+libglade-2.0 >= \$LIBGLADE_REQUIRED \\
+\$OPTIONAL_MODULES \\
+\"") >&5
+  ($PKG_CONFIG --exists --print-errors "\
+glib-2.0 >= $GLIB_REQUIRED \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnome-2.0 >= $LIBGNOME_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+libglade-2.0 >= $LIBGLADE_REQUIRED \
+$OPTIONAL_MODULES \
+") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GLABELS_CFLAGS=`$PKG_CONFIG --cflags "\
+glib-2.0 >= $GLIB_REQUIRED \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnome-2.0 >= $LIBGNOME_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+libglade-2.0 >= $LIBGLADE_REQUIRED \
+$OPTIONAL_MODULES \
+" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GLABELS_LIBS"; then
+    pkg_cv_GLABELS_LIBS="$GLABELS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\\
+glib-2.0 >= \$GLIB_REQUIRED \\
+gtk+-2.0 >= \$GTK_REQUIRED \\
+libgnome-2.0 >= \$LIBGNOME_REQUIRED \\
+libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED \\
+libxml-2.0 >= \$LIBXML_REQUIRED \\
+libglade-2.0 >= \$LIBGLADE_REQUIRED \\
+\$OPTIONAL_MODULES \\
+\"") >&5
+  ($PKG_CONFIG --exists --print-errors "\
+glib-2.0 >= $GLIB_REQUIRED \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnome-2.0 >= $LIBGNOME_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+libglade-2.0 >= $LIBGLADE_REQUIRED \
+$OPTIONAL_MODULES \
+") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GLABELS_LIBS=`$PKG_CONFIG --libs "\
+glib-2.0 >= $GLIB_REQUIRED \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnome-2.0 >= $LIBGNOME_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+libglade-2.0 >= $LIBGLADE_REQUIRED \
+$OPTIONAL_MODULES \
+" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               GLABELS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "\
+glib-2.0 >= $GLIB_REQUIRED \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnome-2.0 >= $LIBGNOME_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+libglade-2.0 >= $LIBGLADE_REQUIRED \
+$OPTIONAL_MODULES \
+" 2>&1`
+        else
+               GLABELS_PKG_ERRORS=`$PKG_CONFIG --print-errors "\
+glib-2.0 >= $GLIB_REQUIRED \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnome-2.0 >= $LIBGNOME_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+libglade-2.0 >= $LIBGLADE_REQUIRED \
+$OPTIONAL_MODULES \
+" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$GLABELS_PKG_ERRORS" >&5
+
+       { { $as_echo "$as_me:$LINENO: error: Package requirements (\
+glib-2.0 >= $GLIB_REQUIRED \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnome-2.0 >= $LIBGNOME_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+libglade-2.0 >= $LIBGLADE_REQUIRED \
+$OPTIONAL_MODULES \
+) were not met:
+
+$GLABELS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLABELS_CFLAGS
+and GLABELS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+$as_echo "$as_me: error: Package requirements (\
+glib-2.0 >= $GLIB_REQUIRED \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnome-2.0 >= $LIBGNOME_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+libglade-2.0 >= $LIBGLADE_REQUIRED \
+$OPTIONAL_MODULES \
+) were not met:
+
+$GLABELS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLABELS_CFLAGS
+and GLABELS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+       { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLABELS_CFLAGS
+and GLABELS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLABELS_CFLAGS
+and GLABELS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+else
+       GLABELS_CFLAGS=$pkg_cv_GLABELS_CFLAGS
+       GLABELS_LIBS=$pkg_cv_GLABELS_LIBS
+        { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:$LINENO: checking for LIBGLABELS" >&5
+$as_echo_n "checking for LIBGLABELS... " >&6; }
+
+if test -n "$LIBGLABELS_CFLAGS"; then
+    pkg_cv_LIBGLABELS_CFLAGS="$LIBGLABELS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\\
+glib-2.0 >= \$GLIB_REQUIRED \\
+libxml-2.0 >= \$LIBXML_REQUIRED \\
+\"") >&5
+  ($PKG_CONFIG --exists --print-errors "\
+glib-2.0 >= $GLIB_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_LIBGLABELS_CFLAGS=`$PKG_CONFIG --cflags "\
+glib-2.0 >= $GLIB_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LIBGLABELS_LIBS"; then
+    pkg_cv_LIBGLABELS_LIBS="$LIBGLABELS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\\
+glib-2.0 >= \$GLIB_REQUIRED \\
+libxml-2.0 >= \$LIBXML_REQUIRED \\
+\"") >&5
+  ($PKG_CONFIG --exists --print-errors "\
+glib-2.0 >= $GLIB_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_LIBGLABELS_LIBS=`$PKG_CONFIG --libs "\
+glib-2.0 >= $GLIB_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               LIBGLABELS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "\
+glib-2.0 >= $GLIB_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+" 2>&1`
+        else
+               LIBGLABELS_PKG_ERRORS=`$PKG_CONFIG --print-errors "\
+glib-2.0 >= $GLIB_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$LIBGLABELS_PKG_ERRORS" >&5
+
+       { { $as_echo "$as_me:$LINENO: error: Package requirements (\
+glib-2.0 >= $GLIB_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+) were not met:
+
+$LIBGLABELS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables LIBGLABELS_CFLAGS
+and LIBGLABELS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+$as_echo "$as_me: error: Package requirements (\
+glib-2.0 >= $GLIB_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+) were not met:
+
+$LIBGLABELS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables LIBGLABELS_CFLAGS
+and LIBGLABELS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+       { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables LIBGLABELS_CFLAGS
+and LIBGLABELS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables LIBGLABELS_CFLAGS
+and LIBGLABELS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+else
+       LIBGLABELS_CFLAGS=$pkg_cv_LIBGLABELS_CFLAGS
+       LIBGLABELS_LIBS=$pkg_cv_LIBGLABELS_LIBS
+        { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:$LINENO: checking for MYGAL" >&5
+$as_echo_n "checking for MYGAL... " >&6; }
+
+if test -n "$MYGAL_CFLAGS"; then
+    pkg_cv_MYGAL_CFLAGS="$MYGAL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\\
+gtk+-2.0 >= \$GTK_REQUIRED \\
+libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED \\
+\"") >&5
+  ($PKG_CONFIG --exists --print-errors "\
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MYGAL_CFLAGS=`$PKG_CONFIG --cflags "\
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$MYGAL_LIBS"; then
+    pkg_cv_MYGAL_LIBS="$MYGAL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\\
+gtk+-2.0 >= \$GTK_REQUIRED \\
+libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED \\
+\"") >&5
+  ($PKG_CONFIG --exists --print-errors "\
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MYGAL_LIBS=`$PKG_CONFIG --libs "\
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               MYGAL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "\
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+" 2>&1`
+        else
+               MYGAL_PKG_ERRORS=`$PKG_CONFIG --print-errors "\
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$MYGAL_PKG_ERRORS" >&5
+
+       { { $as_echo "$as_me:$LINENO: error: Package requirements (\
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+) were not met:
+
+$MYGAL_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MYGAL_CFLAGS
+and MYGAL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+$as_echo "$as_me: error: Package requirements (\
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+) were not met:
+
+$MYGAL_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MYGAL_CFLAGS
+and MYGAL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+       { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MYGAL_CFLAGS
+and MYGAL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MYGAL_CFLAGS
+and MYGAL_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+else
+       MYGAL_CFLAGS=$pkg_cv_MYGAL_CFLAGS
+       MYGAL_LIBS=$pkg_cv_MYGAL_LIBS
+        { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:$LINENO: checking for XML_PARSE_HUGE" >&5
+$as_echo_n "checking for XML_PARSE_HUGE... " >&6; }
+
+if test -n "$XML_PARSE_HUGE_CFLAGS"; then
+    pkg_cv_XML_PARSE_HUGE_CFLAGS="$XML_PARSE_HUGE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.7.0\"") >&5
+  ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.7.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_XML_PARSE_HUGE_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.7.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$XML_PARSE_HUGE_LIBS"; then
+    pkg_cv_XML_PARSE_HUGE_LIBS="$XML_PARSE_HUGE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.7.0\"") >&5
+  ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.7.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_XML_PARSE_HUGE_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.7.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               XML_PARSE_HUGE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libxml-2.0 >= 2.7.0" 2>&1`
+        else
+               XML_PARSE_HUGE_PKG_ERRORS=`$PKG_CONFIG --print-errors "libxml-2.0 >= 2.7.0" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$XML_PARSE_HUGE_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+                HAVE_XML_PARSE_HUGE="-UHAVE_XML_PARSE_HUGE"
+elif test $pkg_failed = untried; then
+       HAVE_XML_PARSE_HUGE="-UHAVE_XML_PARSE_HUGE"
+else
+       XML_PARSE_HUGE_CFLAGS=$pkg_cv_XML_PARSE_HUGE_CFLAGS
+       XML_PARSE_HUGE_LIBS=$pkg_cv_XML_PARSE_HUGE_LIBS
+        { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       HAVE_XML_PARSE_HUGE="-DHAVE_XML_PARSE_HUGE"
+fi
+
+
+
+# Check whether --enable-deprecations was given.
+if test "${enable_deprecations+set}" = set; then
+  enableval=$enable_deprecations;
+else
+  enable_deprecations=no
+fi
+
+
+if test "x$enable_deprecations" = "xyes"; then
+   DISABLE_DEPRECATED_CFLAGS="\
+-DG_DISABLE_DEPRECATED \
+-DGDK_DISABLE_DEPRECATED \
+-DGTK_DISABLE_DEPRECATED \
+-DGDK_PIXBUF_DISABLE_DEPRECATED \
+-DGNOME_DISABLE_DEPRECATED \
+-DLIBGLADE_DISABLE_DEPRECATED"
+
+fi
+
+
+# Extract the first word of "update-mime-database", so it can be a program name with args.
+set dummy update-mime-database; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_UPDATE_MIME_DATABASE+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $UPDATE_MIME_DATABASE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_UPDATE_MIME_DATABASE="$UPDATE_MIME_DATABASE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_UPDATE_MIME_DATABASE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_UPDATE_MIME_DATABASE" && ac_cv_path_UPDATE_MIME_DATABASE="no"
+  ;;
+esac
+fi
+UPDATE_MIME_DATABASE=$ac_cv_path_UPDATE_MIME_DATABASE
+if test -n "$UPDATE_MIME_DATABASE"; then
+  { $as_echo "$as_me:$LINENO: result: $UPDATE_MIME_DATABASE" >&5
+$as_echo "$UPDATE_MIME_DATABASE" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test x$UPDATE_MIME_DATABASE != xno; then
+  HAVE_NEW_MIME_TRUE=
+  HAVE_NEW_MIME_FALSE='#'
+else
+  HAVE_NEW_MIME_TRUE='#'
+  HAVE_NEW_MIME_FALSE=
+fi
+
+
+# Extract the first word of "update-desktop-database", so it can be a program name with args.
+set dummy update-desktop-database; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_UPDATE_DESKTOP_DATABASE+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $UPDATE_DESKTOP_DATABASE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_UPDATE_DESKTOP_DATABASE="$UPDATE_DESKTOP_DATABASE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_UPDATE_DESKTOP_DATABASE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_UPDATE_DESKTOP_DATABASE" && ac_cv_path_UPDATE_DESKTOP_DATABASE="no"
+  ;;
+esac
+fi
+UPDATE_DESKTOP_DATABASE=$ac_cv_path_UPDATE_DESKTOP_DATABASE
+if test -n "$UPDATE_DESKTOP_DATABASE"; then
+  { $as_echo "$as_me:$LINENO: result: $UPDATE_DESKTOP_DATABASE" >&5
+$as_echo "$UPDATE_DESKTOP_DATABASE" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test x$UPDATE_DESKTOP_DATABASE != xno; then
+  HAVE_NEWER_MIME_TRUE=
+  HAVE_NEWER_MIME_FALSE='#'
+else
+  HAVE_NEWER_MIME_TRUE='#'
+  HAVE_NEWER_MIME_FALSE=
+fi
+
+
+# Check whether --enable-update-mimedb was given.
+if test "${enable_update_mimedb+set}" = set; then
+  enableval=$enable_update_mimedb;
+else
+  enable_update_mimedb=yes
+fi
+
+ if test x$enable_update_mimedb = xyes; then
+  ENABLE_UPDATE_MIMEDB_TRUE=
+  ENABLE_UPDATE_MIMEDB_FALSE='#'
+else
+  ENABLE_UPDATE_MIMEDB_TRUE='#'
+  ENABLE_UPDATE_MIMEDB_FALSE=
+fi
+
+
+# Check whether --enable-update-desktopdb was given.
+if test "${enable_update_desktopdb+set}" = set; then
+  enableval=$enable_update_desktopdb;
+else
+  enable_update_desktopdb=yes
+fi
+
+ if test x$enable_update_desktopdb = xyes; then
+  ENABLE_UPDATE_DESKTOPDB_TRUE=
+  ENABLE_UPDATE_DESKTOPDB_FALSE='#'
+else
+  ENABLE_UPDATE_DESKTOPDB_TRUE='#'
+  ENABLE_UPDATE_DESKTOPDB_FALSE=
+fi
+
+
+
+GETTEXT_PACKAGE=glabels
+
+
+cat >>confdefs.h <<_ACEOF
+#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE"
+_ACEOF
+
+
+
+
+for ac_header in locale.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ---------------------------------------------------------------------------------- ##
+## Report this to http://sourceforge.net/tracker/?func=add&group_id=46122&atid=445116 ##
+## ---------------------------------------------------------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    if test $ac_cv_header_locale_h = yes; then
+    { $as_echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
+$as_echo_n "checking for LC_MESSAGES... " >&6; }
+if test "${am_cv_val_LC_MESSAGES+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <locale.h>
+int
+main ()
+{
+return LC_MESSAGES
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  am_cv_val_LC_MESSAGES=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       am_cv_val_LC_MESSAGES=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5
+$as_echo "$am_cv_val_LC_MESSAGES" >&6; }
+    if test $am_cv_val_LC_MESSAGES = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LC_MESSAGES 1
+_ACEOF
+
+    fi
+  fi
+     USE_NLS=yes
+
+
+    gt_cv_have_gettext=no
+
+    CATOBJEXT=NONE
+    XGETTEXT=:
+    INTLLIBS=
+
+    if test "${ac_cv_header_libintl_h+set}" = set; then
+  { $as_echo "$as_me:$LINENO: checking for libintl.h" >&5
+$as_echo_n "checking for libintl.h... " >&6; }
+if test "${ac_cv_header_libintl_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
+$as_echo "$ac_cv_header_libintl_h" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking libintl.h usability" >&5
+$as_echo_n "checking libintl.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <libintl.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking libintl.h presence" >&5
+$as_echo_n "checking libintl.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: libintl.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libintl.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: libintl.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libintl.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: libintl.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libintl.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: libintl.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ---------------------------------------------------------------------------------- ##
+## Report this to http://sourceforge.net/tracker/?func=add&group_id=46122&atid=445116 ##
+## ---------------------------------------------------------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for libintl.h" >&5
+$as_echo_n "checking for libintl.h... " >&6; }
+if test "${ac_cv_header_libintl_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_header_libintl_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
+$as_echo "$ac_cv_header_libintl_h" >&6; }
+
+fi
+if test "x$ac_cv_header_libintl_h" = x""yes; then
+  gt_cv_func_dgettext_libintl="no"
+      libintl_extra_libs=""
+
+      #
+      # First check in libc
+      #
+      { $as_echo "$as_me:$LINENO: checking for ngettext in libc" >&5
+$as_echo_n "checking for ngettext in libc... " >&6; }
+if test "${gt_cv_func_ngettext_libc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <libintl.h>
+
+int
+main ()
+{
+return !ngettext ("","", 1)
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  gt_cv_func_ngettext_libc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gt_cv_func_ngettext_libc=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_ngettext_libc" >&5
+$as_echo "$gt_cv_func_ngettext_libc" >&6; }
+
+      if test "$gt_cv_func_ngettext_libc" = "yes" ; then
+             { $as_echo "$as_me:$LINENO: checking for dgettext in libc" >&5
+$as_echo_n "checking for dgettext in libc... " >&6; }
+if test "${gt_cv_func_dgettext_libc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <libintl.h>
+
+int
+main ()
+{
+return !dgettext ("","")
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  gt_cv_func_dgettext_libc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gt_cv_func_dgettext_libc=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_dgettext_libc" >&5
+$as_echo "$gt_cv_func_dgettext_libc" >&6; }
+      fi
+
+      if test "$gt_cv_func_ngettext_libc" = "yes" ; then
+
+for ac_func in bind_textdomain_codeset
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* 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
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+      fi
+
+      #
+      # If we don't have everything we want, check in libintl
+      #
+      if test "$gt_cv_func_dgettext_libc" != "yes" \
+        || test "$gt_cv_func_ngettext_libc" != "yes" \
+         || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
+
+        { $as_echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5
+$as_echo_n "checking for bindtextdomain in -lintl... " >&6; }
+if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char bindtextdomain ();
+int
+main ()
+{
+return bindtextdomain ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_intl_bindtextdomain=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_intl_bindtextdomain=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5
+$as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; }
+if test "x$ac_cv_lib_intl_bindtextdomain" = x""yes; then
+  { $as_echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5
+$as_echo_n "checking for ngettext in -lintl... " >&6; }
+if test "${ac_cv_lib_intl_ngettext+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ngettext ();
+int
+main ()
+{
+return ngettext ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_intl_ngettext=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_intl_ngettext=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5
+$as_echo "$ac_cv_lib_intl_ngettext" >&6; }
+if test "x$ac_cv_lib_intl_ngettext" = x""yes; then
+  { $as_echo "$as_me:$LINENO: checking for dgettext in -lintl" >&5
+$as_echo_n "checking for dgettext in -lintl... " >&6; }
+if test "${ac_cv_lib_intl_dgettext+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dgettext ();
+int
+main ()
+{
+return dgettext ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_intl_dgettext=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_intl_dgettext=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dgettext" >&5
+$as_echo "$ac_cv_lib_intl_dgettext" >&6; }
+if test "x$ac_cv_lib_intl_dgettext" = x""yes; then
+  gt_cv_func_dgettext_libintl=yes
+fi
+
+fi
+
+fi
+
+
+       if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
+         { $as_echo "$as_me:$LINENO: checking if -liconv is needed to use gettext" >&5
+$as_echo_n "checking if -liconv is needed to use gettext... " >&6; }
+         { $as_echo "$as_me:$LINENO: result: " >&5
+$as_echo "" >&6; }
+         { $as_echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5
+$as_echo_n "checking for ngettext in -lintl... " >&6; }
+if test "${ac_cv_lib_intl_ngettext+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl -liconv $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ngettext ();
+int
+main ()
+{
+return ngettext ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_intl_ngettext=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_intl_ngettext=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5
+$as_echo "$ac_cv_lib_intl_ngettext" >&6; }
+if test "x$ac_cv_lib_intl_ngettext" = x""yes; then
+  { $as_echo "$as_me:$LINENO: checking for dcgettext in -lintl" >&5
+$as_echo_n "checking for dcgettext in -lintl... " >&6; }
+if test "${ac_cv_lib_intl_dcgettext+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl -liconv $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dcgettext ();
+int
+main ()
+{
+return dcgettext ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_intl_dcgettext=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_intl_dcgettext=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dcgettext" >&5
+$as_echo "$ac_cv_lib_intl_dcgettext" >&6; }
+if test "x$ac_cv_lib_intl_dcgettext" = x""yes; then
+  gt_cv_func_dgettext_libintl=yes
+                       libintl_extra_libs=-liconv
+else
+  :
+fi
+
+else
+  :
+fi
+
+        fi
+
+        #
+        # If we found libintl, then check in it for bind_textdomain_codeset();
+        # we'll prefer libc if neither have bind_textdomain_codeset(),
+        # and both have dgettext and ngettext
+        #
+        if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS -lintl $libintl_extra_libs"
+          unset ac_cv_func_bind_textdomain_codeset
+
+for ac_func in bind_textdomain_codeset
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* 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
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+          LIBS="$glib_save_LIBS"
+
+          if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
+            gt_cv_func_dgettext_libc=no
+          else
+            if test "$gt_cv_func_dgettext_libc" = "yes" \
+               && test "$gt_cv_func_ngettext_libc" = "yes"; then
+              gt_cv_func_dgettext_libintl=no
+            fi
+          fi
+        fi
+      fi
+
+      if test "$gt_cv_func_dgettext_libc" = "yes" \
+       || test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        gt_cv_have_gettext=yes
+      fi
+
+      if test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        INTLLIBS="-lintl $libintl_extra_libs"
+      fi
+
+      if test "$gt_cv_have_gettext" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+       # Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+  $as_echo_n "(cached) " >&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 "$MSGFMT" != "no"; then
+  { $as_echo "$as_me:$LINENO: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+       if test "$MSGFMT" != "no"; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS $INTLLIBS"
+
+for ac_func in dcgettext
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* 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
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+         MSGFMT_OPTS=
+         { $as_echo "$as_me:$LINENO: checking if msgfmt accepts -c" >&5
+$as_echo_n "checking if msgfmt accepts -c... " >&6; }
+         cat >conftest.foo <<_ACEOF
+
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: test 1.0\n"
+"PO-Revision-Date: 2007-02-15 12:01+0100\n"
+"Last-Translator: test <foo@bar.xx>\n"
+"Language-Team: C <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+_ACEOF
+if { ($as_echo "$as_me:$LINENO: \$MSGFMT -c -o /dev/null conftest.foo") >&5
+  ($MSGFMT -c -o /dev/null conftest.foo) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  MSGFMT_OPTS=-c; { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+echo "$as_me: failed input was:" >&5
+sed 's/^/| /' conftest.foo >&5
+fi
+
+         # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_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
+  { $as_echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+         # Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+  $as_echo_n "(cached) " >&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 "$XGETTEXT" != ":"; then
+  { $as_echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+         cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+extern int _nl_msg_cat_cntr;
+                        return _nl_msg_cat_cntr
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  CATOBJEXT=.gmo
+             DATADIRNAME=share
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       case $host in
+           *-*-solaris*)
+                                                               { $as_echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5
+$as_echo_n "checking for bind_textdomain_codeset... " >&6; }
+if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define bind_textdomain_codeset to an innocuous variant, in case <limits.h> declares bind_textdomain_codeset.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define bind_textdomain_codeset innocuous_bind_textdomain_codeset
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char bind_textdomain_codeset (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef bind_textdomain_codeset
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char bind_textdomain_codeset ();
+/* 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_bind_textdomain_codeset || defined __stub___bind_textdomain_codeset
+choke me
+#endif
+
+int
+main ()
+{
+return bind_textdomain_codeset ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_bind_textdomain_codeset=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_bind_textdomain_codeset=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5
+$as_echo "$ac_cv_func_bind_textdomain_codeset" >&6; }
+if test "x$ac_cv_func_bind_textdomain_codeset" = x""yes; then
+  CATOBJEXT=.gmo
+               DATADIRNAME=share
+else
+  CATOBJEXT=.mo
+               DATADIRNAME=lib
+fi
+
+           ;;
+           *)
+           CATOBJEXT=.mo
+            DATADIRNAME=lib
+           ;;
+           esac
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+          LIBS="$glib_save_LIBS"
+         INSTOBJEXT=.mo
+       else
+         gt_cv_have_gettext=no
+       fi
+      fi
+
+fi
+
+
+
+    if test "$gt_cv_have_gettext" = "yes" ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+    fi
+
+        if test "$XGETTEXT" != ":"; then
+                  if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+        : ;
+      else
+        { $as_echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+$as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; }
+        XGETTEXT=":"
+      fi
+    fi
+
+    # We need to process the po/ directory.
+    POSUB=po
+
+    ac_config_commands="$ac_config_commands default-1"
+
+
+                for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+
+
+
+
+
+
+
+
+
+
+
+
+   if test "$gt_cv_have_gettext" = "yes"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       { $as_echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+$as_echo_n "checking for catalogs to be installed... " >&6; }
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
+           desiredlanguages="$LINGUAS"
+         else
+           desiredlanguages="$ALL_LINGUAS"
+         fi
+         for desiredlang in $desiredlanguages; do
+          # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
+       { $as_echo "$as_me:$LINENO: result: $LINGUAS" >&5
+$as_echo "$LINGUAS" >&6; }
+     fi
+
+          if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   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
+
+
+         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
+
+
+
+ac_config_files="$ac_config_files Makefile barcode-0.98/Makefile iec16022-0.2.1/Makefile libglabels/Makefile libglabels/libglabels.pc src/Makefile src/pixmaps/Makefile src/stock-pixmaps/Makefile src/mygal/Makefile data/Makefile data/templates/Makefile data/pixmaps/Makefile data/mime/Makefile data/glade/Makefile data/desktop/Makefile data/dtd/Makefile data/man/Makefile po/Makefile.in help/Makefile docs/Makefile docs/libglabels/Makefile glabels.spec"
+
+cat >confcache <<\_ACEOF
+# 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, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# 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.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${ENABLE_SK_TRUE}" && test -z "${ENABLE_SK_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"ENABLE_SK\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"ENABLE_SK\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GNOME_DOC_UTILS_TRUE}" && test -z "${HAVE_GNOME_DOC_UTILS_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_GNOME_DOC_UTILS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_GNOME_DOC_UTILS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+  ac_config_commands="$ac_config_commands po/stamp-it"
+
+
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_NEW_MIME_TRUE}" && test -z "${HAVE_NEW_MIME_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_NEW_MIME\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_NEW_MIME\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_NEWER_MIME_TRUE}" && test -z "${HAVE_NEWER_MIME_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_NEWER_MIME\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_NEWER_MIME\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ENABLE_UPDATE_MIMEDB_TRUE}" && test -z "${ENABLE_UPDATE_MIMEDB_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"ENABLE_UPDATE_MIMEDB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"ENABLE_UPDATE_MIMEDB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ENABLE_UPDATE_DESKTOPDB_TRUE}" && test -z "${ENABLE_UPDATE_DESKTOPDB_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"ENABLE_UPDATE_DESKTOPDB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"ENABLE_UPDATE_DESKTOPDB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by glabels $as_me 2.2.8, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTION]... [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_version="\\
+glabels config.status 2.2.8
+configured by $0, generated by GNU Autoconf 2.63,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { $as_echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { $as_echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "barcode-0.98/Makefile") CONFIG_FILES="$CONFIG_FILES barcode-0.98/Makefile" ;;
+    "iec16022-0.2.1/Makefile") CONFIG_FILES="$CONFIG_FILES iec16022-0.2.1/Makefile" ;;
+    "libglabels/Makefile") CONFIG_FILES="$CONFIG_FILES libglabels/Makefile" ;;
+    "libglabels/libglabels.pc") CONFIG_FILES="$CONFIG_FILES libglabels/libglabels.pc" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/pixmaps/Makefile") CONFIG_FILES="$CONFIG_FILES src/pixmaps/Makefile" ;;
+    "src/stock-pixmaps/Makefile") CONFIG_FILES="$CONFIG_FILES src/stock-pixmaps/Makefile" ;;
+    "src/mygal/Makefile") CONFIG_FILES="$CONFIG_FILES src/mygal/Makefile" ;;
+    "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
+    "data/templates/Makefile") CONFIG_FILES="$CONFIG_FILES data/templates/Makefile" ;;
+    "data/pixmaps/Makefile") CONFIG_FILES="$CONFIG_FILES data/pixmaps/Makefile" ;;
+    "data/mime/Makefile") CONFIG_FILES="$CONFIG_FILES data/mime/Makefile" ;;
+    "data/glade/Makefile") CONFIG_FILES="$CONFIG_FILES data/glade/Makefile" ;;
+    "data/desktop/Makefile") CONFIG_FILES="$CONFIG_FILES data/desktop/Makefile" ;;
+    "data/dtd/Makefile") CONFIG_FILES="$CONFIG_FILES data/dtd/Makefile" ;;
+    "data/man/Makefile") CONFIG_FILES="$CONFIG_FILES data/man/Makefile" ;;
+    "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+    "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;;
+    "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
+    "docs/libglabels/Makefile") CONFIG_FILES="$CONFIG_FILES docs/libglabels/Makefile" ;;
+    "glabels.spec") CONFIG_FILES="$CONFIG_FILES glabels.spec" ;;
+    "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;;
+
+  *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   $as_echo "$as_me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr='\r'
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = "\a"
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+$as_echo "$as_me: error: could not setup config files machinery" >&2;}
+   { (exit 1); exit 1; }; }
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[    ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[      ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[    ]*#[    ]*define[       ][      ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = "\a"
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #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.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+   { (exit 1); exit 1; }; }
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
+$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+        # (if the path is not absolute).  The absolute path cannot be DOS-style,
+        # because $ac_f cannot contain `:'.
+        test -f "$ac_f" ||
+          case $ac_f in
+          [\\/$]*) false;;
+          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+          esac ||
+          { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      ac_file_inputs="$ac_file_inputs '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+       `' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; } ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+       || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+$as_echo "$as_me: error: could not create -" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$_am_arg" : 'X\(//\)[^/]' \| \
+        X"$_am_arg" : 'X\(//\)$' \| \
+        X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      { as_dir=$dirpart/$fdir
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_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=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# 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
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# 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 "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+ ;;
+    "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*)
+        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+      esac ;;
+    "po/stamp-it":C)
+    if  ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then
+       { { $as_echo "$as_me:$LINENO: error: po/Makefile.in.in was not created by intltoolize." >&5
+$as_echo "$as_me: error: po/Makefile.in.in was not created by intltoolize." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp"
+    >"po/stamp-it.tmp"
+    sed '/^#/d
+        s/^[[].*] *//
+        /^[    ]*$/d
+       '"s|^|  $ac_top_srcdir/|" \
+      "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES"
+
+    sed '/^POTFILES =/,/[^\\]$/ {
+               /^POTFILES =/!d
+               r po/POTFILES
+         }
+        ' "po/Makefile.in" >"po/Makefile"
+    rm -f "po/Makefile.tmp"
+    mv "po/stamp-it.tmp" "po/stamp-it"
+   ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+
+echo "
+Configuration:
+
+       Package:                        ${PACKAGE}-${VERSION}:
+        Installation prefix             ${prefix}
+        Source code location:           ${srcdir}
+        Compiler:                       ${CC}
+       Evolution Data Server support:  ${have_libebook}
+
+"
+
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..0258b0f
--- /dev/null
@@ -0,0 +1,234 @@
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.52)
+
+AC_INIT(glabels, 2.2.8, http://sourceforge.net/tracker/?func=add&group_id=46122&atid=445116)
+AC_CONFIG_SRCDIR(src/glabels.c)
+AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+GNOME_DOC_INIT
+
+AM_MAINTAINER_MODE
+AM_CONFIG_HEADER(config.h)
+
+AC_PROG_INTLTOOL([0.21])
+PKG_PROG_PKG_CONFIG
+
+AM_PROG_LIBTOOL
+
+AC_ISC_POSIX
+AC_PROG_CC
+AM_PROG_CC_STDC
+AC_HEADER_STDC
+
+GNOME_COMPILE_WARNINGS
+
+AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
+
+GTK_DOC_CHECK(1.0)
+
+dnl ---------------------------------------------------------------------------
+dnl - LIBGLABELS API versioning
+dnl ---------------------------------------------------------------------------
+dnl From the libtool manual:
+dnl 1. Start with version information of `0:0:0' for each libtool library.
+dnl 2. Update the version information only immediately before a public release.
+dnl    More frequent updates are unnecessary, and only guarantee that the current
+dnl    interface number gets larger faster.
+dnl 3. If the library source code has changed at all since the last update, then increment
+dnl    revision (`c:r:a' becomes `c:r+1:a').
+dnl 4. If any interfaces have been added, removed, or changed since the last update,
+dnl    increment current, and set revision to 0.
+dnl 5. If any interfaces have been added since the last public release, then increment age.
+dnl 6. If any interfaces have been removed since the last public release, then set age
+dnl    to 0.
+LIBGLABELS_C=6
+LIBGLABELS_R=2
+LIBGLABELS_A=1
+
+LIBGLABELS_VERSION_INFO=${LIBGLABELS_C}:${LIBGLABELS_R}:${LIBGLABELS_A}
+AC_SUBST(LIBGLABELS_VERSION_INFO)
+
+
+dnl ---------------------------------------------------------------------------
+dnl - Library dependencies
+dnl ---------------------------------------------------------------------------
+GLIB_REQUIRED=2.12.0
+GTK_REQUIRED=2.10.0
+LIBGNOME_REQUIRED=2.16.0
+LIBGNOMEUI_REQUIRED=2.16.0
+LIBXML_REQUIRED=2.6.0
+LIBGLADE_REQUIRED=2.6.0
+LIBEBOOK_REQUIRED=1.8.0
+
+dnl Make above strings available for packaging files (e.g. rpm spec files)
+AC_SUBST(GLIB_REQUIRED)
+AC_SUBST(GTK_REQUIRED)
+AC_SUBST(LIBGNOME_REQUIRED)
+AC_SUBST(LIBGNOMEUI_REQUIRED)
+AC_SUBST(LIBXML_REQUIRED)
+AC_SUBST(LIBGLADE_REQUIRED)
+AC_SUBST(LIBEBOOK_REQUIRED)
+
+
+dnl ---------------------------------------------------------------------------
+dnl - Check for evolution data server
+dnl ---------------------------------------------------------------------------
+AC_ARG_WITH(libebook,
+           [AC_HELP_STRING([--without-libebook],
+                            [build without Evolution Data Server support])])
+have_libebook=no
+if test "x$with_libebook" != xno; then
+       PKG_CHECK_MODULES(LIBEBOOK, libebook-1.2 >= $LIBEBOOK_REQUIRED,
+                         [have_libebook=yes], [have_libebook=no])
+fi
+
+if test "x$have_libebook" = "xyes"; then
+       AC_DEFINE(HAVE_LIBEBOOK,1,[Define to 1 for EDS support])
+       OPTIONAL_MODULES="$OPTIONAL_MODULES libebook-1.2 >= $LIBEBOOK_REQUIRED"
+fi
+
+
+dnl ---------------------------------------------------------------------------
+dnl - GLABELS prerequisites
+dnl ---------------------------------------------------------------------------
+PKG_CHECK_MODULES(GLABELS, \
+glib-2.0 >= $GLIB_REQUIRED \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnome-2.0 >= $LIBGNOME_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+libglade-2.0 >= $LIBGLADE_REQUIRED \
+$OPTIONAL_MODULES \
+)
+
+AC_SUBST(GLABELS_CFLAGS)
+AC_SUBST(GLABELS_LIBS)
+
+
+dnl ---------------------------------------------------------------------------
+dnl - LIBGLABELS more modest prerequisites
+dnl ---------------------------------------------------------------------------
+PKG_CHECK_MODULES(LIBGLABELS, \
+glib-2.0 >= $GLIB_REQUIRED \
+libxml-2.0 >= $LIBXML_REQUIRED \
+)
+
+AC_SUBST(LIBGLABELS_CFLAGS)
+AC_SUBST(LIBGLABELS_LIBS)
+
+
+dnl ---------------------------------------------------------------------------
+dnl - MYGAL prerequisites
+dnl ---------------------------------------------------------------------------
+PKG_CHECK_MODULES(MYGAL, \
+gtk+-2.0 >= $GTK_REQUIRED \
+libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED \
+)
+
+AC_SUBST(MYGAL_CFLAGS)
+AC_SUBST(MYGAL_LIBS)
+
+
+dnl ---------------------------------------------------------------------------
+dnl - Is XML_PARSE_HUGE available?
+dnl ---------------------------------------------------------------------------
+PKG_CHECK_MODULES(XML_PARSE_HUGE, libxml-2.0 >= 2.7.0,
+                  HAVE_XML_PARSE_HUGE="-DHAVE_XML_PARSE_HUGE",
+                  HAVE_XML_PARSE_HUGE="-UHAVE_XML_PARSE_HUGE")
+AC_SUBST(HAVE_XML_PARSE_HUGE)
+
+
+dnl ---------------------------------------------------------------------------
+dnl - Enable deprecation testing
+dnl ---------------------------------------------------------------------------
+AC_ARG_ENABLE(deprecations,
+              [AC_HELP_STRING([--enable-deprecations],
+                              [warn about deprecated usages [default=no]])],,
+              [enable_deprecations=no])
+
+if test "x$enable_deprecations" = "xyes"; then
+   DISABLE_DEPRECATED_CFLAGS="\
+-DG_DISABLE_DEPRECATED \
+-DGDK_DISABLE_DEPRECATED \
+-DGTK_DISABLE_DEPRECATED \
+-DGDK_PIXBUF_DISABLE_DEPRECATED \
+-DGNOME_DISABLE_DEPRECATED \
+-DLIBGLADE_DISABLE_DEPRECATED"
+   AC_SUBST(DISABLE_DEPRECATED_CFLAGS)
+fi
+
+
+dnl ---------------------------------------------------------------------------
+dnl - Is freedesktop mime dbase available?
+dnl ---------------------------------------------------------------------------
+AC_PATH_PROG(UPDATE_MIME_DATABASE, update-mime-database, no)
+AM_CONDITIONAL(HAVE_NEW_MIME, test x$UPDATE_MIME_DATABASE != xno)
+
+AC_PATH_PROG(UPDATE_DESKTOP_DATABASE, update-desktop-database, no)
+AM_CONDITIONAL(HAVE_NEWER_MIME, test x$UPDATE_DESKTOP_DATABASE != xno)
+
+AC_ARG_ENABLE(update-mimedb, AC_HELP_STRING([--disable-update-mimedb],
+              [disable the update-mime-database after install [default=no]]),,
+              enable_update_mimedb=yes)
+AM_CONDITIONAL(ENABLE_UPDATE_MIMEDB, test x$enable_update_mimedb = xyes)
+
+AC_ARG_ENABLE(update-desktopdb, AC_HELP_STRING([--disable-update-desktopdb],
+              [disable the update-desktop-database after install [default=no]]),,
+              enable_update_desktopdb=yes)
+AM_CONDITIONAL(ENABLE_UPDATE_DESKTOPDB, test x$enable_update_desktopdb = xyes)
+
+
+dnl ---------------------------------------------------------------------------
+dnl - Supported languages
+dnl ---------------------------------------------------------------------------
+GETTEXT_PACKAGE=glabels
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package])
+
+AM_GLIB_GNU_GETTEXT
+
+
+dnl ---------------------------------------------------------------------------
+dnl - Makefiles, etc.
+dnl ---------------------------------------------------------------------------
+AC_OUTPUT([
+Makefile
+barcode-0.98/Makefile
+iec16022-0.2.1/Makefile
+libglabels/Makefile
+libglabels/libglabels.pc
+src/Makefile
+src/pixmaps/Makefile
+src/stock-pixmaps/Makefile
+src/mygal/Makefile
+data/Makefile
+data/templates/Makefile
+data/pixmaps/Makefile
+data/mime/Makefile
+data/glade/Makefile
+data/desktop/Makefile
+data/dtd/Makefile
+data/man/Makefile
+po/Makefile.in
+help/Makefile
+docs/Makefile
+docs/libglabels/Makefile
+glabels.spec
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl - Print configuration information
+dnl ---------------------------------------------------------------------------
+echo "
+Configuration:
+
+       Package:                        ${PACKAGE}-${VERSION}:
+        Installation prefix             ${prefix}
+        Source code location:           ${srcdir}
+        Compiler:                       ${CC} 
+       Evolution Data Server support:  ${have_libebook}
+
+"
+
+dnl cat ${srcdir}/MESSAGE-OF-DOOM
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644 (file)
index 0000000..6b00c46
--- /dev/null
@@ -0,0 +1,5 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS = desktop dtd glade man mime pixmaps templates
+
+
diff --git a/data/Makefile.in b/data/Makefile.in
new file mode 100644 (file)
index 0000000..3885360
--- /dev/null
@@ -0,0 +1,604 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = desktop dtd glade man mime pixmaps templates
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu data/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# 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.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+       install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       ctags ctags-recursive distclean distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am
+
+
+# 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/data/desktop/Makefile.am b/data/desktop/Makefile.am
new file mode 100644 (file)
index 0000000..ce2a21f
--- /dev/null
@@ -0,0 +1,13 @@
+## Process this file with automake to produce Makefile.in
+
+@INTLTOOL_DESKTOP_RULE@
+
+DESKTOP_IN_FILES = glabels.desktop.in
+DESKTOP_FILES =$(DESKTOP_IN_FILES:.desktop.in=.desktop)
+
+desktopdir = $(datadir)/applications
+desktop_DATA = $(DESKTOP_FILES)
+
+EXTRA_DIST = $(DESKTOP_IN_FILES)
+
+CLEANFILES = $(DESKTOP_FILES)
diff --git a/data/desktop/Makefile.in b/data/desktop/Makefile.in
new file mode 100644 (file)
index 0000000..3986b8f
--- /dev/null
@@ -0,0 +1,458 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data/desktop
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(desktopdir)"
+DATA = $(desktop_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+DESKTOP_IN_FILES = glabels.desktop.in
+DESKTOP_FILES = $(DESKTOP_IN_FILES:.desktop.in=.desktop)
+desktopdir = $(datadir)/applications
+desktop_DATA = $(DESKTOP_FILES)
+EXTRA_DIST = $(DESKTOP_IN_FILES)
+CLEANFILES = $(DESKTOP_FILES)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/desktop/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu data/desktop/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-desktopDATA: $(desktop_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(desktopdir)" || $(MKDIR_P) "$(DESTDIR)$(desktopdir)"
+       @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \
+       done
+
+uninstall-desktopDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(desktopdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(desktopdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(desktopdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-desktopDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-desktopDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-desktopDATA install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am uninstall-desktopDATA
+
+
+@INTLTOOL_DESKTOP_RULE@
+
+# 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/data/desktop/glabels.desktop.in b/data/desktop/glabels.desktop.in
new file mode 100644 (file)
index 0000000..be70f92
--- /dev/null
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+_Name=gLabels Label Designer
+_Comment=Create labels, business cards and media covers
+Exec=glabels %F
+Icon=glabels.png
+Terminal=false
+Type=Application
+Categories=GNOME;Application;Office;
+StartupNotify=true
+MimeType=application/x-glabels;
diff --git a/data/dtd/Makefile.am b/data/dtd/Makefile.am
new file mode 100644 (file)
index 0000000..0dce23d
--- /dev/null
@@ -0,0 +1,9 @@
+## Process this file with automake to produce Makefile.in
+
+dtddir = $(datadir)/glabels/dtd
+
+dtd_DATA = \
+       glabels-2.2.dtd
+
+EXTRA_DIST = $(dtd_DATA)
+
diff --git a/data/dtd/Makefile.in b/data/dtd/Makefile.in
new file mode 100644 (file)
index 0000000..3dabd77
--- /dev/null
@@ -0,0 +1,454 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data/dtd
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(dtddir)"
+DATA = $(dtd_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+dtddir = $(datadir)/glabels/dtd
+dtd_DATA = \
+       glabels-2.2.dtd
+
+EXTRA_DIST = $(dtd_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/dtd/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu data/dtd/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-dtdDATA: $(dtd_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(dtddir)" || $(MKDIR_P) "$(DESTDIR)$(dtddir)"
+       @list='$(dtd_DATA)'; test -n "$(dtddir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dtddir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(dtddir)" || exit $$?; \
+       done
+
+uninstall-dtdDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dtd_DATA)'; test -n "$(dtddir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(dtddir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(dtddir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(dtddir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dtdDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dtdDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dtdDATA install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am uninstall-dtdDATA
+
+
+# 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/data/dtd/glabels-2.2.dtd b/data/dtd/glabels-2.2.dtd
new file mode 100644 (file)
index 0000000..b23519f
--- /dev/null
@@ -0,0 +1,381 @@
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- ENTITIES: primitive types used in element attributes                 -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+
+<!-- primitives -->
+<!ENTITY % BOOLEAN_TYPE       "(False | True | 0 | 1)">
+<!ENTITY % STRING_TYPE        "CDATA">
+<!ENTITY % LENGTH_TYPE        "CDATA"> <!-- %g (pt|in|mm|cm|pc) -->
+<!ENTITY % INT_TYPE           "CDATA"> <!-- %d | 0x%x | 0%o -->
+<!ENTITY % UINT_TYPE          "CDATA"> <!-- %u | 0x%x | 0%o -->
+<!ENTITY % FLOAT_TYPE         "CDATA"> <!-- %g -->
+
+<!-- Text related enumerations/types -->
+<!ENTITY % JUSTIFY_TYPE       "(Left | Right | Center)">
+<!ENTITY % FONT_WEIGHT_TYPE   "(Regular | Bold)">
+
+<!-- Barcode related enumerations/types -->
+<!ENTITY % BC_STYLE_TYPE      "CDATA">
+                              <!-- one of:
+                              "(POSTNET    |
+                                POSTNET-5  |
+                                POSTNET-9  |
+                                POSTNET-11 |
+                                CEPNET     |
+                                EAN        |
+                                EAN-8      |
+                                EAN-8+2    |
+                                EAN-8+5    |
+                                EAN-13     |
+                                EAN-13+2   |
+                                EAN-13+5   |
+                                UPC        |
+                                UPC-A      |
+                                UPC-A+2    |
+                                UPC-A+5    |
+                                UPC-E      |
+                                UPC-E+2    |
+                                UPC-E+5    |
+                                ISBN       |
+                                ISBN+5     |
+                                Code39     |
+                                Code128    |
+                                Code128C   |
+                                Code128B   |
+                                I25        |
+                                CBR        |
+                                MSI        |
+                                PLS        |
+                               IEC16022)"
+                               -->
+
+<!-- Data encoding method -->
+<!ENTITY % DATA_ENCODING_TYPE "(None | Base64)">
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Top-level glabels paper data base                                    -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ELEMENT Glabels-paper-sizes (Paper-size*)>
+<!ATTLIST Glabels-paper-sizes
+                 xmlns           %STRING_TYPE;           #IMPLIED
+>
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Top-level glabels categories data base                               -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ELEMENT Glabels-categories (Category*)>
+<!ATTLIST Glabels-categories
+                 xmlns           %STRING_TYPE;           #IMPLIED
+>
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Top-level glabels template data base                                 -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ELEMENT Glabels-templates (Template*)>
+<!ATTLIST Glabels-templates
+                 xmlns           %STRING_TYPE;           #IMPLIED
+>
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Top-level glabels document                                           -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ELEMENT Glabels-document (Template, Objects+, Merge?, Data*)>
+<!ATTLIST Glabels-document
+                 xmlns           %STRING_TYPE;           #IMPLIED
+>
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Paper size                                                           -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ELEMENT Paper-size EMPTY>
+<!ATTLIST Paper-size
+                 id              %STRING_TYPE;           #REQUIRED
+                 name            %STRING_TYPE;           #IMPLIED
+                 _name           %STRING_TYPE;           #IMPLIED
+                 pwg_size        %STRING_TYPE;           #REQUIRED
+                 width           %LENGTH_TYPE;           #REQUIRED
+                 height          %LENGTH_TYPE;           #REQUIRED
+>
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Category                                                             -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ELEMENT Category EMPTY>
+<!ATTLIST Category
+                 id              %STRING_TYPE;           #REQUIRED
+                 name            %STRING_TYPE;           #IMPLIED
+                 _name           %STRING_TYPE;           #IMPLIED
+>
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Template Section                                                     -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ENTITY % label_element  "Label-rectangle | Label-round | Label-cd">
+<!ENTITY % markup_element "Markup-margin | Markup-line | Markup-circle | Markup-rect">
+
+<!ELEMENT Template (Meta*, (%label_element;)+, Alias*)>
+<!ATTLIST Template
+                 brand           %STRING_TYPE;           #REQUIRED
+                 part            %STRING_TYPE;           #REQUIRED
+                 name            %STRING_TYPE;           #IMPLIED
+                 size            %STRING_TYPE;           #REQUIRED
+                 width           %LENGTH_TYPE;           #IMPLIED
+                 height          %LENGTH_TYPE;           #IMPLIED
+                 description     %STRING_TYPE;           #IMPLIED
+                 _description    %STRING_TYPE;           #IMPLIED
+>
+
+<!ELEMENT Meta EMPTY>
+<!ATTLIST Meta
+                 category        %STRING_TYPE;           #REQUIRED
+>
+
+<!ELEMENT Label-rectangle ((%markup_element;)*, Layout+)>
+<!ATTLIST Label-rectangle
+                 id              %STRING_TYPE;           #REQUIRED
+                 width           %LENGTH_TYPE;           #REQUIRED
+                 height          %LENGTH_TYPE;           #REQUIRED
+                 round           %LENGTH_TYPE;           "0 pt"
+                 waste           %LENGTH_TYPE;           #IMPLIED
+                 x_waste         %LENGTH_TYPE;           #IMPLIED
+                 y_waste         %LENGTH_TYPE;           #IMPLIED
+>
+
+<!ELEMENT Label-round ((%markup_element;)*, Layout+)>
+<!ATTLIST Label-round
+                 id              %STRING_TYPE;           #REQUIRED
+                 radius          %LENGTH_TYPE;           #REQUIRED
+                 waste           %LENGTH_TYPE;           #IMPLIED
+>
+
+<!ELEMENT Label-cd ((%markup_element;)*, Layout+)>
+<!ATTLIST Label-cd
+                 id              %STRING_TYPE;           #REQUIRED
+                 radius          %LENGTH_TYPE;           #REQUIRED
+                 hole            %LENGTH_TYPE;           #REQUIRED
+                 width           %LENGTH_TYPE;           #IMPLIED
+                 height          %LENGTH_TYPE;           #IMPLIED
+                 waste           %LENGTH_TYPE;           #IMPLIED
+>
+
+<!ELEMENT Markup-margin EMPTY>
+<!ATTLIST Markup-margin
+                 size            %LENGTH_TYPE;           #REQUIRED
+>
+
+<!ELEMENT Markup-line EMPTY>
+<!ATTLIST Markup-line
+                 x1              %LENGTH_TYPE;           #REQUIRED
+                 y1              %LENGTH_TYPE;           #REQUIRED
+                 x2              %LENGTH_TYPE;           #REQUIRED
+                 y2              %LENGTH_TYPE;           #REQUIRED
+>
+
+<!ELEMENT Markup-circle EMPTY>
+<!ATTLIST Markup-circle
+                 x0              %LENGTH_TYPE;           #REQUIRED
+                 y0              %LENGTH_TYPE;           #REQUIRED
+                 radius          %LENGTH_TYPE;           #REQUIRED
+>
+
+<!ELEMENT Markup-rect EMPTY>
+<!ATTLIST Markup-rect
+                 x1              %LENGTH_TYPE;           #REQUIRED
+                 y1              %LENGTH_TYPE;           #REQUIRED
+                 w               %LENGTH_TYPE;           #REQUIRED
+                 h               %LENGTH_TYPE;           #REQUIRED
+                 r               %LENGTH_TYPE;           #REQUIRED
+>
+
+<!ELEMENT Layout EMPTY>
+<!ATTLIST Layout
+                 nx              %UINT_TYPE;             #REQUIRED
+                 ny              %UINT_TYPE;             #REQUIRED
+                 x0              %LENGTH_TYPE;           "0 pt"
+                 y0              %LENGTH_TYPE;           "0 pt"
+                 dx              %LENGTH_TYPE;           "0 pt"
+                 dy              %LENGTH_TYPE;           "0 pt"
+>
+
+<!ELEMENT Alias EMPTY>
+<!ATTLIST Alias
+                 brand           %STRING_TYPE;           #REQUIRED
+                 part            %STRING_TYPE;           #REQUIRED
+                 name            %STRING_TYPE;           #IMPLIED
+>
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Objects Section                                                      -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ENTITY % object_class_element  "Object-text    |
+                                  Object-box     |
+                                  Object-line    |
+                                  Object-ellipse |
+                                  Object-image   |
+                                  Object-barcode"
+>
+
+<!ELEMENT Objects ((%object_class_element;)*)>
+<!ATTLIST Objects
+                 id              %STRING_TYPE;           #REQUIRED
+                 rotate          %BOOLEAN_TYPE;          #REQUIRED
+>
+
+<!ENTITY % position_attrs
+                 "x              %LENGTH_TYPE;           #REQUIRED
+                  y              %LENGTH_TYPE;           #REQUIRED"
+>
+
+<!ENTITY % size_attrs
+                 "w              %LENGTH_TYPE;           #REQUIRED
+                  h              %LENGTH_TYPE;           #REQUIRED"
+>
+
+<!ENTITY % line_attrs
+                 "line_width       %LENGTH_TYPE;          #IMPLIED
+                  line_color       %UINT_TYPE;            #IMPLIED
+                  line_color_field %STRING_TYPE;          #IMPLIED"
+>
+
+<!ENTITY % fill_attrs
+                 "fill_color       %UINT_TYPE;           #IMPLIED
+                  fill_color_field %STRING_TYPE;         #IMPLIED"
+>
+
+<!ENTITY % affine_attrs
+                 "a0              %FLOAT_TYPE;           #IMPLIED
+                  a1              %FLOAT_TYPE;           #IMPLIED
+                  a2              %FLOAT_TYPE;           #IMPLIED
+                  a3              %FLOAT_TYPE;           #IMPLIED
+                  a4              %FLOAT_TYPE;           #IMPLIED
+                  a5              %FLOAT_TYPE;           #IMPLIED"
+>
+
+<!ENTITY % shadow_attrs
+                 ""
+>
+
+<!ELEMENT Object-text (Span)>
+<!ATTLIST Object-text
+                 %position_attrs;
+                 %size_attrs;
+                 justify         %JUSTIFY_TYPE;          #REQUIRED
+                 auto_shrink     %BOOLEAN_TYPE;          #IMPLIED
+                 %affine_attrs;
+                 %shadow_attrs;
+>
+
+<!ELEMENT Object-box EMPTY>
+<!ATTLIST Object-box
+                 %position_attrs;
+                 %size_attrs;
+                 %line_attrs;
+                 %fill_attrs;
+                 %affine_attrs;
+                 %shadow_attrs;
+>
+
+<!ELEMENT Object-ellipse EMPTY>
+<!ATTLIST Object-ellipse
+                 %position_attrs;
+                 %size_attrs;
+                 %line_attrs;
+                 %fill_attrs;
+                 %affine_attrs;
+                 %shadow_attrs;
+>
+
+<!ELEMENT Object-line EMPTY>
+<!ATTLIST Object-line
+                 %position_attrs;
+                 dx              %LENGTH_TYPE;           #REQUIRED
+                 dy              %LENGTH_TYPE;           #REQUIRED
+                 %line_attrs;
+                 %affine_attrs;
+                 %shadow_attrs;
+>
+
+<!ELEMENT Object-image EMPTY>
+<!ATTLIST Object-image
+                 %position_attrs;
+                 %size_attrs;
+                 src             %STRING_TYPE;           #IMPLIED
+                 field           %STRING_TYPE;           #IMPLIED
+                 embed           %BOOLEAN_TYPE;          #IMPLIED
+                 %affine_attrs;
+                 %shadow_attrs;
+>
+
+<!ELEMENT Object-barcode EMPTY>
+<!ATTLIST Object-barcode
+                 %position_attrs;
+                 %size_attrs;
+                 style            %BC_STYLE_TYPE;         #REQUIRED
+                 text             %BOOLEAN_TYPE;          #REQUIRED
+                 checksum         %BOOLEAN_TYPE;          #REQUIRED
+                 color            %UINT_TYPE;             #IMPLIED
+                 color_field      %STRING_TYPE;           #IMPLIED
+                 data             %STRING_TYPE;           #IMPLIED
+                 field            %STRING_TYPE;           #IMPLIED
+                 format           %UINT_TYPE;             #IMPLIED
+                 %affine_attrs;
+                 %shadow_attrs;
+>
+
+
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Merge Section                                                        -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ELEMENT Merge EMPTY>
+<!ATTLIST Merge
+                 type            %STRING_TYPE;           #REQUIRED
+                 src             %STRING_TYPE;           #IMPLIED
+>
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Data Section                                                         -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ENTITY % data_element "Pixdata">
+
+<!ELEMENT Data (%data_element;)*>
+
+<!-- Inline Pixdata -->
+<!ELEMENT Pixdata (#PCDATA)>
+<!ATTLIST Pixdata
+                 name            %STRING_TYPE;           #REQUIRED
+                 encoding        %DATA_ENCODING_TYPE;    "Base64"
+>
+
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!-- Text elements                                                        -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!ENTITY % text_element "#PCDATA | Span | Field | NL">
+
+<!ELEMENT Span (%text_element;)*>
+<!ATTLIST Span
+                 font_family     %STRING_TYPE;           #IMPLIED
+                 font_size       %LENGTH_TYPE;           #IMPLIED
+                 font_weight     %FONT_WEIGHT_TYPE;      #IMPLIED
+                 font_italic     %BOOLEAN_TYPE;          #IMPLIED
+                 color           %UINT_TYPE;             #IMPLIED
+                                color_field     %STRING_TYPE;           #IMPLIED
+                 line_spacing    %LENGTH_TYPE;           #IMPLIED
+>
+
+<!ELEMENT Field EMPTY>
+<!ATTLIST Field
+                 name            %STRING_TYPE;           #REQUIRED
+>
+
+<!ELEMENT NL EMPTY>
diff --git a/data/glade/Makefile.am b/data/glade/Makefile.am
new file mode 100644 (file)
index 0000000..4747c88
--- /dev/null
@@ -0,0 +1,18 @@
+## Process this file with automake to produce Makefile.in
+
+gladedir = $(datadir)/glabels/glade/
+
+glade_DATA = \
+       object-editor.glade             \
+       prefs-dialog.glade              \
+       template-designer.glade         \
+       merge-properties-dialog.glade   \
+       property-bar.glade              \
+       print-custom-widget.glade       \
+       wdgt-media-select.glade         \
+       wdgt-rotate-label.glade         \
+       new-label-dialog.glade
+
+EXTRA_DIST = $(glade_DATA)
+
+
diff --git a/data/glade/Makefile.in b/data/glade/Makefile.in
new file mode 100644 (file)
index 0000000..2c82fbd
--- /dev/null
@@ -0,0 +1,462 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data/glade
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(gladedir)"
+DATA = $(glade_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+gladedir = $(datadir)/glabels/glade/
+glade_DATA = \
+       object-editor.glade             \
+       prefs-dialog.glade              \
+       template-designer.glade         \
+       merge-properties-dialog.glade   \
+       property-bar.glade              \
+       print-custom-widget.glade       \
+       wdgt-media-select.glade         \
+       wdgt-rotate-label.glade         \
+       new-label-dialog.glade
+
+EXTRA_DIST = $(glade_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/glade/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu data/glade/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-gladeDATA: $(glade_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(gladedir)" || $(MKDIR_P) "$(DESTDIR)$(gladedir)"
+       @list='$(glade_DATA)'; test -n "$(gladedir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gladedir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(gladedir)" || exit $$?; \
+       done
+
+uninstall-gladeDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(glade_DATA)'; test -n "$(gladedir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(gladedir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(gladedir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(gladedir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-gladeDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-gladeDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-gladeDATA install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am uninstall-gladeDATA
+
+
+# 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/data/glade/merge-properties-dialog.glade b/data/glade/merge-properties-dialog.glade
new file mode 100644 (file)
index 0000000..b62dced
--- /dev/null
@@ -0,0 +1,375 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkDialog" id="merge_properties_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">dialog1</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox1">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+       <widget class="GtkHButtonBox" id="dialog-action_area1">
+         <property name="visible">True</property>
+         <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+         <child>
+           <widget class="GtkButton" id="cancelbutton1">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-cancel</property>
+             <property name="use_stock">True</property>
+             <property name="relief">GTK_RELIEF_NORMAL</property>
+             <property name="focus_on_click">True</property>
+             <property name="response_id">-6</property>
+           </widget>
+         </child>
+
+         <child>
+           <widget class="GtkButton" id="okbutton1">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-ok</property>
+             <property name="use_stock">True</property>
+             <property name="relief">GTK_RELIEF_NORMAL</property>
+             <property name="focus_on_click">True</property>
+             <property name="response_id">-5</property>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">False</property>
+         <property name="fill">True</property>
+         <property name="pack_type">GTK_PACK_END</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="merge_properties_vbox">
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">6</property>
+
+         <child>
+           <widget class="GtkFrame" id="frame1">
+             <property name="visible">True</property>
+             <property name="label_xalign">0</property>
+             <property name="label_yalign">0.5</property>
+             <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+             <child>
+               <widget class="GtkAlignment" id="alignment1">
+                 <property name="visible">True</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xscale">1</property>
+                 <property name="yscale">1</property>
+                 <property name="top_padding">0</property>
+                 <property name="bottom_padding">0</property>
+                 <property name="left_padding">12</property>
+                 <property name="right_padding">0</property>
+
+                 <child>
+                   <widget class="GtkTable" id="table1">
+                     <property name="border_width">12</property>
+                     <property name="visible">True</property>
+                     <property name="n_rows">2</property>
+                     <property name="n_columns">2</property>
+                     <property name="homogeneous">False</property>
+                     <property name="row_spacing">6</property>
+                     <property name="column_spacing">6</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="label3">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Format:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="type_combo">
+                         <property name="visible">True</property>
+                         <property name="add_tearoffs">False</property>
+                         <property name="focus_on_click">True</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkVBox" id="location_vbox">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">0</property>
+
+                         <child>
+                           <placeholder/>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="label4">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Location:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+                   </widget>
+                 </child>
+               </widget>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label1">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">&lt;b&gt;Source&lt;/b&gt;</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">True</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">label_item</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkFrame" id="frame2">
+             <property name="visible">True</property>
+             <property name="label_xalign">0</property>
+             <property name="label_yalign">0.5</property>
+             <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+             <child>
+               <widget class="GtkAlignment" id="alignment2">
+                 <property name="visible">True</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xscale">1</property>
+                 <property name="yscale">1</property>
+                 <property name="top_padding">0</property>
+                 <property name="bottom_padding">0</property>
+                 <property name="left_padding">12</property>
+                 <property name="right_padding">0</property>
+
+                 <child>
+                   <widget class="GtkVBox" id="vbox3">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">6</property>
+
+                     <child>
+                       <widget class="GtkScrolledWindow" id="scrolledwindow1">
+                         <property name="border_width">6</property>
+                         <property name="width_request">500</property>
+                         <property name="height_request">350</property>
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                         <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                         <property name="shadow_type">GTK_SHADOW_IN</property>
+                         <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+                         <child>
+                           <widget class="GtkTreeView" id="treeview">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="headers_visible">True</property>
+                             <property name="rules_hint">False</property>
+                             <property name="reorderable">False</property>
+                             <property name="enable_search">True</property>
+                             <property name="fixed_height_mode">False</property>
+                             <property name="hover_selection">False</property>
+                             <property name="hover_expand">False</property>
+                           </widget>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox1">
+                         <property name="border_width">6</property>
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkButton" id="select_all_button">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="label" translatable="yes">Select all</property>
+                             <property name="use_underline">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkButton" id="unselect_all_button">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="label" translatable="yes">Unselect all</property>
+                             <property name="use_underline">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                 </child>
+               </widget>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label2">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">&lt;b&gt;Record selection/preview&lt;/b&gt;</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">True</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">label_item</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">True</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">True</property>
+         <property name="fill">True</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
diff --git a/data/glade/new-label-dialog.glade b/data/glade/new-label-dialog.glade
new file mode 100644 (file)
index 0000000..8633976
--- /dev/null
@@ -0,0 +1,85 @@
+<?xml version="1.0"?>
+<glade-interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <widget class="GtkWindow" id="window1">
+    <property name="visible">True</property>
+    <property name="title" translatable="yes">window1</property>
+    <child>
+      <widget class="GtkVBox" id="new_label_dialog_vbox">
+        <property name="visible">True</property>
+        <property name="border_width">3</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">6</property>
+        <child>
+          <widget class="GtkFrame" id="frame1">
+            <property name="visible">True</property>
+            <property name="label_xalign">0</property>
+            <property name="shadow_type">none</property>
+            <child>
+              <widget class="GtkAlignment" id="alignment1">
+                <property name="visible">True</property>
+                <property name="left_padding">12</property>
+                <child>
+                  <widget class="GtkVBox" id="media_select_vbox">
+                    <property name="visible">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </widget>
+                </child>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">&lt;b&gt;Media type&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </widget>
+              <packing>
+                <property name="type">label_item</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkFrame" id="frame2">
+            <property name="visible">True</property>
+            <property name="label_xalign">0</property>
+            <property name="shadow_type">none</property>
+            <child>
+              <widget class="GtkAlignment" id="alignment2">
+                <property name="visible">True</property>
+                <property name="left_padding">12</property>
+                <child>
+                  <widget class="GtkVBox" id="rotate_label_vbox">
+                    <property name="visible">True</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </widget>
+                </child>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">&lt;b&gt;Label orientation&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </widget>
+              <packing>
+                <property name="type">label_item</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>
diff --git a/data/glade/object-editor.glade b/data/glade/object-editor.glade
new file mode 100644 (file)
index 0000000..d4ba2fe
--- /dev/null
@@ -0,0 +1,3471 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+<requires lib="gnome"/>
+
+<widget class="GtkDialog" id="dialog">
+  <property name="border_width">6</property>
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">dialog1</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox1">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+       <widget class="GtkHButtonBox" id="dialog-action_area1">
+         <property name="visible">True</property>
+         <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+         <child>
+           <widget class="GtkButton" id="closebutton1">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-close</property>
+             <property name="use_stock">True</property>
+             <property name="relief">GTK_RELIEF_NORMAL</property>
+             <property name="focus_on_click">True</property>
+             <property name="response_id">-7</property>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">False</property>
+         <property name="fill">True</property>
+         <property name="pack_type">GTK_PACK_END</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="editor_vbox">
+         <property name="border_width">6</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">12</property>
+
+         <child>
+           <widget class="GtkHBox" id="title_hbox">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkImage" id="title_image">
+                 <property name="visible">True</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="title_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot; size=&quot;larger&quot;&gt;Xxx object properties&lt;/span&gt;</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">True</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkNotebook" id="notebook">
+             <property name="visible">True</property>
+             <property name="can_focus">True</property>
+             <property name="show_tabs">True</property>
+             <property name="show_border">True</property>
+             <property name="tab_pos">GTK_POS_TOP</property>
+             <property name="scrollable">True</property>
+             <property name="enable_popup">False</property>
+
+             <child>
+               <widget class="GtkVBox" id="edit_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">6</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox30">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">0</property>
+
+                     <child>
+                       <widget class="GtkScrolledWindow" id="scrolledwindow1">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
+                         <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+                         <property name="shadow_type">GTK_SHADOW_NONE</property>
+                         <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+                         <child>
+                           <widget class="GtkTextView" id="edit_text_view">
+                             <property name="width_request">232</property>
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="editable">True</property>
+                             <property name="overwrite">False</property>
+                             <property name="accepts_tab">True</property>
+                             <property name="justification">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap_mode">GTK_WRAP_NONE</property>
+                             <property name="cursor_visible">True</property>
+                             <property name="pixels_above_lines">0</property>
+                             <property name="pixels_below_lines">0</property>
+                             <property name="pixels_inside_wrap">0</property>
+                             <property name="left_margin">0</property>
+                             <property name="right_margin">0</property>
+                             <property name="indent">0</property>
+                             <property name="text" translatable="yes"></property>
+                           </widget>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">True</property>
+                     <property name="fill">True</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox1">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="edit_key_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Key:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="edit_key_combo">
+                         <property name="visible">True</property>
+                         <property name="add_tearoffs">False</property>
+                         <property name="focus_on_click">True</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkButton" id="edit_insert_field_button">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="label" translatable="yes">Insert merge field</property>
+                         <property name="use_underline">True</property>
+                         <property name="relief">GTK_RELIEF_NORMAL</property>
+                         <property name="focus_on_click">True</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="edit_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Text</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="text_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox65">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="text_family_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Family:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="text_family_combo">
+                         <property name="visible">True</property>
+                         <property name="add_tearoffs">False</property>
+                         <property name="focus_on_click">True</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox66">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="text_size_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Size:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox28">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkSpinButton" id="text_size_spin">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="climb_rate">0.00999999977648</property>
+                             <property name="digits">0</property>
+                             <property name="numeric">True</property>
+                             <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                             <property name="snap_to_ticks">False</property>
+                             <property name="wrap">False</property>
+                             <property name="adjustment">1 1 100 1 10 0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox67">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="text_style_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Style:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox29">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkToggleButton" id="text_bold_toggle">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+
+                             <child>
+                               <widget class="GtkImage" id="image1">
+                                 <property name="visible">True</property>
+                                 <property name="stock">gtk-bold</property>
+                                 <property name="icon_size">4</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkToggleButton" id="text_italic_toggle">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+
+                             <child>
+                               <widget class="GtkImage" id="image2">
+                                 <property name="visible">True</property>
+                                 <property name="stock">gtk-italic</property>
+                                 <property name="icon_size">4</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox68">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="text_color_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Color:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.140000000596</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkVBox" id="vbox3">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">6</property>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox42">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkRadioButton" id="text_color_radio">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="label" translatable="yes"></property>
+                                 <property name="use_underline">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+                                 <property name="draw_indicator">True</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox43">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">12</property>
+
+                                 <child>
+                                   <widget class="Custom" id="text_color_combo">
+                                     <property name="visible">True</property>
+                                     <property name="creation_function">gl_object_editor_construct_color_combo</property>
+                                     <property name="int1">2</property>
+                                     <property name="int2">0</property>
+                                     <property name="last_modification_time">Sun, 16 Nov 2003 06:52:23 GMT</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">False</property>
+                                     <property name="fill">False</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox44">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkRadioButton" id="text_color_key_radio">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="label" translatable="yes">Key:</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+                                 <property name="draw_indicator">True</property>
+                                 <property name="group">text_color_radio</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox45">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">12</property>
+
+                                 <child>
+                                   <widget class="GtkComboBox" id="text_color_key_combo">
+                                     <property name="visible">True</property>
+                                     <property name="add_tearoffs">False</property>
+                                     <property name="focus_on_click">True</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox69">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="text_align_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Alignment:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox4">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkToggleButton" id="text_left_toggle">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+
+                             <child>
+                               <widget class="GtkImage" id="image3">
+                                 <property name="visible">True</property>
+                                 <property name="stock">gtk-justify-left</property>
+                                 <property name="icon_size">4</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkToggleButton" id="text_center_toggle">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+
+                             <child>
+                               <widget class="GtkImage" id="image4">
+                                 <property name="visible">True</property>
+                                 <property name="stock">gtk-justify-center</property>
+                                 <property name="icon_size">4</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkToggleButton" id="text_right_toggle">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+
+                             <child>
+                               <widget class="GtkImage" id="image5">
+                                 <property name="visible">True</property>
+                                 <property name="stock">gtk-justify-right</property>
+                                 <property name="icon_size">4</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                               </widget>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox70">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="text_line_spacing_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Line Spacing:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox31">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkSpinButton" id="text_line_spacing_spin">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="climb_rate">0.00999999977648</property>
+                             <property name="digits">2</property>
+                             <property name="numeric">False</property>
+                             <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                             <property name="snap_to_ticks">False</property>
+                             <property name="wrap">False</property>
+                             <property name="adjustment">1 0 5 0.01 0.1 0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkCheckButton" id="text_auto_shrink_check">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label" translatable="yes">Allow merge to automatically shrink text</property>
+                     <property name="use_underline">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                     <property name="active">False</property>
+                     <property name="inconsistent">False</property>
+                     <property name="draw_indicator">True</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="text_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Style</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="line_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox71">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="line_w_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Width:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox7">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkSpinButton" id="line_width_spin">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="climb_rate">0.00999999977648</property>
+                             <property name="digits">2</property>
+                             <property name="numeric">True</property>
+                             <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                             <property name="snap_to_ticks">False</property>
+                             <property name="wrap">False</property>
+                             <property name="adjustment">1 0.25 4 0.25 1 0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="label21">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">points</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0.5</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox72">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="line_color_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Color:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.140000000596</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkVBox" id="vbox2">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">6</property>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox38">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkRadioButton" id="line_color_radio">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="label" translatable="yes"></property>
+                                 <property name="use_underline">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+                                 <property name="draw_indicator">True</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox39">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">12</property>
+
+                                 <child>
+                                   <widget class="Custom" id="line_color_combo">
+                                     <property name="visible">True</property>
+                                     <property name="creation_function">gl_object_editor_construct_color_combo</property>
+                                     <property name="int1">1</property>
+                                     <property name="int2">0</property>
+                                     <property name="last_modification_time">Sun, 16 Nov 2003 06:52:23 GMT</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">False</property>
+                                     <property name="fill">False</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox40">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkRadioButton" id="line_key_radio">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="label" translatable="yes">Key:</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+                                 <property name="draw_indicator">True</property>
+                                 <property name="group">line_color_radio</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox41">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">12</property>
+
+                                 <child>
+                                   <widget class="GtkComboBox" id="line_key_combo">
+                                     <property name="visible">True</property>
+                                     <property name="add_tearoffs">False</property>
+                                     <property name="focus_on_click">True</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="line_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Line</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="fill_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">0</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox73">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="fill_color_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Color:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.140000000596</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkVBox" id="vbox5">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">6</property>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox50">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkRadioButton" id="fill_color_radio">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="label" translatable="yes"></property>
+                                 <property name="use_underline">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+                                 <property name="draw_indicator">True</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox51">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">12</property>
+
+                                 <child>
+                                   <widget class="Custom" id="fill_color_combo">
+                                     <property name="visible">True</property>
+                                     <property name="creation_function">gl_object_editor_construct_color_combo</property>
+                                     <property name="int1">0</property>
+                                     <property name="int2">0</property>
+                                     <property name="last_modification_time">Sun, 16 Nov 2003 06:52:23 GMT</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">False</property>
+                                     <property name="fill">False</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox52">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkRadioButton" id="fill_key_radio">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="label" translatable="yes">Key:</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+                                 <property name="draw_indicator">True</property>
+                                 <property name="group">fill_color_radio</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox53">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">12</property>
+
+                                 <child>
+                                   <widget class="GtkComboBox" id="fill_key_combo">
+                                     <property name="visible">True</property>
+                                     <property name="add_tearoffs">False</property>
+                                     <property name="focus_on_click">True</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="fill_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Fill</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="img_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox74">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkRadioButton" id="img_file_radio">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="label" translatable="yes">File:</property>
+                         <property name="use_underline">True</property>
+                         <property name="relief">GTK_RELIEF_NORMAL</property>
+                         <property name="focus_on_click">True</property>
+                         <property name="active">False</property>
+                         <property name="inconsistent">False</property>
+                         <property name="draw_indicator">True</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkFileChooserButton" id="img_file_button">
+                         <property name="visible">True</property>
+                         <property name="title" translatable="yes">Select A File</property>
+                         <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
+                         <property name="local_only">True</property>
+                         <property name="show_hidden">True</property>
+                         <property name="do_overwrite_confirmation">False</property>
+                         <property name="width_chars">-1</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox75">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkRadioButton" id="img_key_radio">
+                         <property name="visible">True</property>
+                         <property name="sensitive">False</property>
+                         <property name="can_focus">True</property>
+                         <property name="label" translatable="yes">Key:</property>
+                         <property name="use_underline">True</property>
+                         <property name="relief">GTK_RELIEF_NORMAL</property>
+                         <property name="focus_on_click">True</property>
+                         <property name="active">False</property>
+                         <property name="inconsistent">False</property>
+                         <property name="draw_indicator">True</property>
+                         <property name="group">img_file_radio</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="img_key_combo">
+                         <property name="visible">True</property>
+                         <property name="add_tearoffs">False</property>
+                         <property name="focus_on_click">True</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="img_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Image</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="data_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox76">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkRadioButton" id="data_literal_radio">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="label" translatable="yes">Literal:</property>
+                         <property name="use_underline">True</property>
+                         <property name="relief">GTK_RELIEF_NORMAL</property>
+                         <property name="focus_on_click">True</property>
+                         <property name="active">False</property>
+                         <property name="inconsistent">False</property>
+                         <property name="draw_indicator">True</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkEntry" id="data_text_entry">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="editable">True</property>
+                         <property name="visibility">True</property>
+                         <property name="max_length">0</property>
+                         <property name="text" translatable="yes"></property>
+                         <property name="has_frame">True</property>
+                         <property name="invisible_char">*</property>
+                         <property name="activates_default">False</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox77">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkRadioButton" id="data_key_radio">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="label" translatable="yes">Key:</property>
+                         <property name="use_underline">True</property>
+                         <property name="relief">GTK_RELIEF_NORMAL</property>
+                         <property name="focus_on_click">True</property>
+                         <property name="active">False</property>
+                         <property name="inconsistent">False</property>
+                         <property name="draw_indicator">True</property>
+                         <property name="group">data_literal_radio</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="data_key_combo">
+                         <property name="visible">True</property>
+                         <property name="add_tearoffs">False</property>
+                         <property name="focus_on_click">True</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox78">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="data_fill_label">
+                         <property name="visible">True</property>
+                         <property name="label">         </property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkTable" id="table9">
+                         <property name="visible">True</property>
+                         <property name="n_rows">2</property>
+                         <property name="n_columns">2</property>
+                         <property name="homogeneous">False</property>
+                         <property name="row_spacing">6</property>
+                         <property name="column_spacing">6</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="data_format_label">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">format:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">0</property>
+                             <property name="bottom_attach">1</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="data_ex_label">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">00000000000 00000</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">0</property>
+                             <property name="bottom_attach">1</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="data_digits_label">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">digits:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">1</property>
+                             <property name="bottom_attach">2</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox32">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">0</property>
+
+                             <child>
+                               <widget class="GtkSpinButton" id="data_digits_spin">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="climb_rate">1</property>
+                                 <property name="digits">0</property>
+                                 <property name="numeric">True</property>
+                                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                                 <property name="snap_to_ticks">False</property>
+                                 <property name="wrap">False</property>
+                                 <property name="adjustment">1 1 100 1 10 0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">1</property>
+                             <property name="bottom_attach">2</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options">fill</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="data_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Data</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="bc_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox79">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="bc_style_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Style:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkComboBox" id="bc_style_combo">
+                         <property name="visible">True</property>
+                         <property name="add_tearoffs">False</property>
+                         <property name="focus_on_click">True</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkCheckButton" id="bc_text_check">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label" translatable="yes">Text</property>
+                     <property name="use_underline">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                     <property name="active">False</property>
+                     <property name="inconsistent">False</property>
+                     <property name="draw_indicator">True</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkCheckButton" id="bc_cs_check">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label" translatable="yes">Checksum</property>
+                     <property name="use_underline">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                     <property name="active">False</property>
+                     <property name="inconsistent">False</property>
+                     <property name="draw_indicator">True</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox80">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="bc_color_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Color:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.140000000596</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkVBox" id="vbox4">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">6</property>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox46">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkRadioButton" id="bc_color_radio">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="label" translatable="yes"></property>
+                                 <property name="use_underline">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+                                 <property name="draw_indicator">True</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox47">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">12</property>
+
+                                 <child>
+                                   <widget class="Custom" id="bc_color_combo">
+                                     <property name="visible">True</property>
+                                     <property name="creation_function">gl_object_editor_construct_color_combo</property>
+                                     <property name="int1">1</property>
+                                     <property name="int2">0</property>
+                                     <property name="last_modification_time">Sun, 16 Nov 2003 06:52:23 GMT</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">False</property>
+                                     <property name="fill">False</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox48">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkRadioButton" id="bc_key_radio">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="label" translatable="yes">Key:</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+                                 <property name="draw_indicator">True</property>
+                                 <property name="group">bc_color_radio</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox49">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">12</property>
+
+                                 <child>
+                                   <widget class="GtkComboBox" id="bc_key_combo">
+                                     <property name="visible">True</property>
+                                     <property name="add_tearoffs">False</property>
+                                     <property name="focus_on_click">True</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">True</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="bc_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Style</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="size_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkTable" id="table6">
+                     <property name="visible">True</property>
+                     <property name="n_rows">3</property>
+                     <property name="n_columns">3</property>
+                     <property name="homogeneous">False</property>
+                     <property name="row_spacing">12</property>
+                     <property name="column_spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="size_w_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Width:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="size_h_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Height:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox11">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkSpinButton" id="size_h_spin">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="climb_rate">0.00999999977648</property>
+                             <property name="digits">2</property>
+                             <property name="numeric">True</property>
+                             <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                             <property name="snap_to_ticks">True</property>
+                             <property name="wrap">False</property>
+                             <property name="adjustment">1 0 100 0.01 10 0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="size_h_units_label">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">inches</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0.5</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox13">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkButton" id="size_reset_image_button">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="label" translatable="yes">Reset image size</property>
+                             <property name="use_underline">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">2</property>
+                         <property name="bottom_attach">3</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox10">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkSpinButton" id="size_w_spin">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="climb_rate">0.00999999977648</property>
+                             <property name="digits">2</property>
+                             <property name="numeric">True</property>
+                             <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                             <property name="snap_to_ticks">True</property>
+                             <property name="wrap">False</property>
+                             <property name="adjustment">1 0 100 0.01 10 0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="size_w_units_label">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">inches</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0.5</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="Custom" id="size_aspect_checkbutton">
+                         <property name="visible">True</property>
+                         <property name="creation_function">gl_object_editor_construct_chain_button</property>
+                         <property name="int1">0</property>
+                         <property name="int2">0</property>
+                         <property name="last_modification_time">Sat, 07 Feb 2004 02:56:47 GMT</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">2</property>
+                         <property name="right_attach">3</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options"></property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">True</property>
+                     <property name="fill">True</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="size_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Size</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="lsize_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkTable" id="table7">
+                     <property name="visible">True</property>
+                     <property name="n_rows">2</property>
+                     <property name="n_columns">2</property>
+                     <property name="homogeneous">False</property>
+                     <property name="row_spacing">12</property>
+                     <property name="column_spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="lsize_r_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Length:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="lsize_theta_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Angle:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox25">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkSpinButton" id="lsize_r_spin">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="climb_rate">0.00999999977648</property>
+                             <property name="digits">2</property>
+                             <property name="numeric">True</property>
+                             <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                             <property name="snap_to_ticks">True</property>
+                             <property name="wrap">False</property>
+                             <property name="adjustment">1 0 100 0.01 10 0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="lsize_r_units_label">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">inches</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0.5</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox26">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkSpinButton" id="lsize_theta_spin">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="climb_rate">0.00999999977648</property>
+                             <property name="digits">1</property>
+                             <property name="numeric">True</property>
+                             <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                             <property name="snap_to_ticks">True</property>
+                             <property name="wrap">False</property>
+                             <property name="adjustment">0 -180 180 0.1 5 0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="label38">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">degrees</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0.5</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options">fill</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">True</property>
+                     <property name="fill">True</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="lsize_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Size</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="pos_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkTable" id="table8">
+                     <property name="visible">True</property>
+                     <property name="n_rows">2</property>
+                     <property name="n_columns">3</property>
+                     <property name="homogeneous">False</property>
+                     <property name="row_spacing">12</property>
+                     <property name="column_spacing">12</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="pos_x_label">
+                         <property name="width_request">50</property>
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">X:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="pos_y_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">Y:</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">0</property>
+                         <property name="right_attach">1</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="pos_x_units_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">inches</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">2</property>
+                         <property name="right_attach">3</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkLabel" id="pos_y_units_label">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">inches</property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">2</property>
+                         <property name="right_attach">3</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options">fill</property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkSpinButton" id="pos_x_spin">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="climb_rate">0.00999999977648</property>
+                         <property name="digits">2</property>
+                         <property name="numeric">True</property>
+                         <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                         <property name="snap_to_ticks">True</property>
+                         <property name="wrap">False</property>
+                         <property name="adjustment">0 0 100 0.01 10 0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">0</property>
+                         <property name="bottom_attach">1</property>
+                         <property name="x_options"></property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkSpinButton" id="pos_y_spin">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="climb_rate">0.00999999977648</property>
+                         <property name="digits">2</property>
+                         <property name="numeric">True</property>
+                         <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                         <property name="snap_to_ticks">True</property>
+                         <property name="wrap">False</property>
+                         <property name="adjustment">0 0 100 0.01 10 0</property>
+                       </widget>
+                       <packing>
+                         <property name="left_attach">1</property>
+                         <property name="right_attach">2</property>
+                         <property name="top_attach">1</property>
+                         <property name="bottom_attach">2</property>
+                         <property name="x_options"></property>
+                         <property name="y_options"></property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">True</property>
+                     <property name="fill">True</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="pos_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Position</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="shadow_page_vbox">
+                 <property name="border_width">12</property>
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkCheckButton" id="shadow_enable_check">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label" translatable="yes">Enable shadow</property>
+                     <property name="use_underline">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                     <property name="active">False</property>
+                     <property name="inconsistent">False</property>
+                     <property name="draw_indicator">True</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkVBox" id="shadow_controls_table">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">12</property>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox63">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="label40">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">X Offset:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox54">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">12</property>
+
+                             <child>
+                               <widget class="GtkSpinButton" id="shadow_x_spin">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="climb_rate">0.00999999977648</property>
+                                 <property name="digits">2</property>
+                                 <property name="numeric">True</property>
+                                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                                 <property name="snap_to_ticks">True</property>
+                                 <property name="wrap">False</property>
+                                 <property name="adjustment">0 0 100 0.00999999977648 10 0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkLabel" id="shadow_x_units_label">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">inches</property>
+                                 <property name="use_underline">False</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                                 <property name="width_chars">-1</property>
+                                 <property name="single_line_mode">False</property>
+                                 <property name="angle">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox64">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="label41">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Y Offset:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox55">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">12</property>
+
+                             <child>
+                               <widget class="GtkSpinButton" id="shadow_y_spin">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="climb_rate">0.00999999977648</property>
+                                 <property name="digits">2</property>
+                                 <property name="numeric">True</property>
+                                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                                 <property name="snap_to_ticks">True</property>
+                                 <property name="wrap">False</property>
+                                 <property name="adjustment">0 0 100 0.00999999977648 10 0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkLabel" id="shadow_y_units_label">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">inches</property>
+                                 <property name="use_underline">False</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                                 <property name="width_chars">-1</property>
+                                 <property name="single_line_mode">False</property>
+                                 <property name="angle">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox61">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="label45">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Color:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.140000000596</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkVBox" id="vbox7">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox57">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">6</property>
+
+                                 <child>
+                                   <widget class="GtkRadioButton" id="shadow_color_radio">
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="label" translatable="yes"></property>
+                                     <property name="use_underline">True</property>
+                                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                                     <property name="focus_on_click">True</property>
+                                     <property name="active">False</property>
+                                     <property name="inconsistent">False</property>
+                                     <property name="draw_indicator">True</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">False</property>
+                                     <property name="fill">False</property>
+                                   </packing>
+                                 </child>
+
+                                 <child>
+                                   <widget class="GtkHBox" id="hbox58">
+                                     <property name="visible">True</property>
+                                     <property name="homogeneous">False</property>
+                                     <property name="spacing">12</property>
+
+                                     <child>
+                                       <widget class="Custom" id="shadow_color_combo">
+                                         <property name="visible">True</property>
+                                         <property name="creation_function">gl_object_editor_construct_color_combo</property>
+                                         <property name="int1">3</property>
+                                         <property name="int2">0</property>
+                                         <property name="last_modification_time">Sun, 16 Nov 2003 06:52:23 GMT</property>
+                                       </widget>
+                                       <packing>
+                                         <property name="padding">0</property>
+                                         <property name="expand">False</property>
+                                         <property name="fill">False</property>
+                                       </packing>
+                                     </child>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkHBox" id="hbox59">
+                                 <property name="visible">True</property>
+                                 <property name="homogeneous">False</property>
+                                 <property name="spacing">6</property>
+
+                                 <child>
+                                   <widget class="GtkRadioButton" id="shadow_key_radio">
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="label" translatable="yes">Key:</property>
+                                     <property name="use_underline">True</property>
+                                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                                     <property name="focus_on_click">True</property>
+                                     <property name="active">False</property>
+                                     <property name="inconsistent">False</property>
+                                     <property name="draw_indicator">True</property>
+                                     <property name="group">shadow_color_radio</property>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">False</property>
+                                     <property name="fill">False</property>
+                                   </packing>
+                                 </child>
+
+                                 <child>
+                                   <widget class="GtkHBox" id="hbox60">
+                                     <property name="visible">True</property>
+                                     <property name="homogeneous">False</property>
+                                     <property name="spacing">12</property>
+
+                                     <child>
+                                       <widget class="GtkComboBox" id="shadow_key_combo">
+                                         <property name="visible">True</property>
+                                         <property name="add_tearoffs">False</property>
+                                         <property name="focus_on_click">True</property>
+                                       </widget>
+                                       <packing>
+                                         <property name="padding">0</property>
+                                         <property name="expand">True</property>
+                                         <property name="fill">True</property>
+                                       </packing>
+                                     </child>
+                                   </widget>
+                                   <packing>
+                                     <property name="padding">0</property>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                   </packing>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkHBox" id="hbox62">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">12</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="label46">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Opacity:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox56">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">12</property>
+
+                             <child>
+                               <widget class="GtkSpinButton" id="shadow_opacity_spin">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="climb_rate">1</property>
+                                 <property name="digits">0</property>
+                                 <property name="numeric">False</property>
+                                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                                 <property name="snap_to_ticks">False</property>
+                                 <property name="wrap">False</property>
+                                 <property name="adjustment">1 0 100 1 10 0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkLabel" id="label47">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">%</property>
+                                 <property name="use_underline">False</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                                 <property name="width_chars">-1</property>
+                                 <property name="single_line_mode">False</property>
+                                 <property name="angle">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="shadow_tab_label">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Shadow</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="dummy_vbox">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">0</property>
+
+                 <child>
+                   <placeholder/>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="tab_expand">False</property>
+                 <property name="tab_fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="dummy_page">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">label48</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">tab</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">True</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">True</property>
+         <property name="fill">True</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
diff --git a/data/glade/prefs-dialog.glade b/data/glade/prefs-dialog.glade
new file mode 100644 (file)
index 0000000..b169a38
--- /dev/null
@@ -0,0 +1,1309 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkDialog" id="dialog1">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">gLabels Preferences</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox1">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+       <widget class="GtkHButtonBox" id="dialog-action_area1">
+         <property name="visible">True</property>
+         <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+         <child>
+           <widget class="GtkButton" id="closebutton1">
+             <property name="visible">True</property>
+             <property name="can_default">True</property>
+             <property name="can_focus">True</property>
+             <property name="label">gtk-close</property>
+             <property name="use_stock">True</property>
+             <property name="relief">GTK_RELIEF_NORMAL</property>
+             <property name="focus_on_click">True</property>
+             <property name="response_id">-7</property>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">False</property>
+         <property name="fill">True</property>
+         <property name="pack_type">GTK_PACK_END</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkNotebook" id="prefs_notebook">
+         <property name="visible">True</property>
+         <property name="can_focus">True</property>
+         <property name="show_tabs">True</property>
+         <property name="show_border">True</property>
+         <property name="tab_pos">GTK_POS_TOP</property>
+         <property name="scrollable">False</property>
+         <property name="enable_popup">False</property>
+
+         <child>
+           <widget class="GtkVBox" id="vbox1">
+             <property name="border_width">12</property>
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkLabel" id="label3">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Select locale specific behavior.</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkFrame" id="frame1">
+                 <property name="visible">True</property>
+                 <property name="label_xalign">0</property>
+                 <property name="label_yalign">0.5</property>
+                 <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox1">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">0</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="label6">
+                         <property name="visible">True</property>
+                         <property name="label">   </property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkVBox" id="vbox2">
+                         <property name="border_width">6</property>
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">6</property>
+
+                         <child>
+                           <widget class="GtkRadioButton" id="units_points_radio">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="label" translatable="yes">Points</property>
+                             <property name="use_underline">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+                             <property name="draw_indicator">True</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkRadioButton" id="units_inches_radio">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="label" translatable="yes">Inches</property>
+                             <property name="use_underline">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+                             <property name="draw_indicator">True</property>
+                             <property name="group">units_points_radio</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkRadioButton" id="units_mm_radio">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="label" translatable="yes">Millimeters</property>
+                             <property name="use_underline">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+                             <property name="draw_indicator">True</property>
+                             <property name="group">units_points_radio</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label4">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot;&gt;Units&lt;/span&gt;</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">True</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="type">label_item</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkFrame" id="frame2">
+                 <property name="visible">True</property>
+                 <property name="label_xalign">0</property>
+                 <property name="label_yalign">0.5</property>
+                 <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox2">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">0</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="label7">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">   </property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkVBox" id="vbox3">
+                         <property name="border_width">6</property>
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">6</property>
+
+                         <child>
+                           <widget class="GtkRadioButton" id="page_size_us_letter_radio">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="label" translatable="yes">US Letter</property>
+                             <property name="use_underline">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+                             <property name="draw_indicator">True</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkRadioButton" id="page_size_a4_radio">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="label" translatable="yes">ISO A4</property>
+                             <property name="use_underline">True</property>
+                             <property name="relief">GTK_RELIEF_NORMAL</property>
+                             <property name="focus_on_click">True</property>
+                             <property name="active">False</property>
+                             <property name="inconsistent">False</property>
+                             <property name="draw_indicator">True</property>
+                             <property name="group">page_size_us_letter_radio</property>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label5">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot;&gt;Default page size&lt;/span&gt;</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">True</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="type">label_item</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="tab_expand">False</property>
+             <property name="tab_fill">True</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkLabel" id="label1">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">Locale</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0.5</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="type">tab</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkVBox" id="vbox4">
+             <property name="border_width">12</property>
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkLabel" id="label8">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Select default properties for new objects.</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkFrame" id="frame3">
+                 <property name="visible">True</property>
+                 <property name="label_xalign">0</property>
+                 <property name="label_yalign">0.5</property>
+                 <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox3">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">0</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="label12">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">   </property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkTable" id="table1">
+                         <property name="visible">True</property>
+                         <property name="n_rows">4</property>
+                         <property name="n_columns">2</property>
+                         <property name="homogeneous">False</property>
+                         <property name="row_spacing">12</property>
+                         <property name="column_spacing">12</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="label15">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Font:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">0</property>
+                             <property name="bottom_attach">1</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="label16">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Color:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">1</property>
+                             <property name="bottom_attach">2</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="label17">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Alignment:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">2</property>
+                             <property name="bottom_attach">3</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="label22">
+                             <property name="width_request">90</property>
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Line Spacing:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">3</property>
+                             <property name="bottom_attach">4</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox6">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">12</property>
+
+                             <child>
+                               <widget class="GtkComboBox" id="text_family_combo">
+                                 <property name="visible">True</property>
+                                 <property name="add_tearoffs">False</property>
+                                 <property name="focus_on_click">True</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">True</property>
+                                 <property name="fill">True</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkSpinButton" id="text_size_spin">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="climb_rate">1</property>
+                                 <property name="digits">0</property>
+                                 <property name="numeric">True</property>
+                                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                                 <property name="snap_to_ticks">False</property>
+                                 <property name="wrap">False</property>
+                                 <property name="adjustment">1 1 100 1 10 0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkToggleButton" id="text_bold_toggle">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+
+                                 <child>
+                                   <widget class="GtkImage" id="image6">
+                                     <property name="visible">True</property>
+                                     <property name="stock">gtk-bold</property>
+                                     <property name="icon_size">4</property>
+                                     <property name="xalign">0.5</property>
+                                     <property name="yalign">0.5</property>
+                                     <property name="xpad">0</property>
+                                     <property name="ypad">0</property>
+                                   </widget>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkToggleButton" id="text_italic_toggle">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+
+                                 <child>
+                                   <widget class="GtkImage" id="image7">
+                                     <property name="visible">True</property>
+                                     <property name="stock">gtk-italic</property>
+                                     <property name="icon_size">4</property>
+                                     <property name="xalign">0.5</property>
+                                     <property name="yalign">0.5</property>
+                                     <property name="xpad">0</property>
+                                     <property name="ypad">0</property>
+                                   </widget>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">0</property>
+                             <property name="bottom_attach">1</property>
+                             <property name="y_options">fill</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox7">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">12</property>
+
+                             <child>
+                               <widget class="Custom" id="text_color_combo">
+                                 <property name="visible">True</property>
+                                 <property name="creation_function">gl_object_editor_construct_color_combo</property>
+                                 <property name="int1">2</property>
+                                 <property name="int2">0</property>
+                                 <property name="last_modification_time">Sun, 23 Nov 2003 15:42:02 GMT</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">1</property>
+                             <property name="bottom_attach">2</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options">fill</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox8">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">12</property>
+
+                             <child>
+                               <widget class="GtkToggleButton" id="text_left_toggle">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+
+                                 <child>
+                                   <widget class="GtkImage" id="image3">
+                                     <property name="visible">True</property>
+                                     <property name="stock">gtk-justify-left</property>
+                                     <property name="icon_size">4</property>
+                                     <property name="xalign">0.5</property>
+                                     <property name="yalign">0.5</property>
+                                     <property name="xpad">0</property>
+                                     <property name="ypad">0</property>
+                                   </widget>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkToggleButton" id="text_center_toggle">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+
+                                 <child>
+                                   <widget class="GtkImage" id="image4">
+                                     <property name="visible">True</property>
+                                     <property name="stock">gtk-justify-center</property>
+                                     <property name="icon_size">4</property>
+                                     <property name="xalign">0.5</property>
+                                     <property name="yalign">0.5</property>
+                                     <property name="xpad">0</property>
+                                     <property name="ypad">0</property>
+                                   </widget>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkToggleButton" id="text_right_toggle">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                                 <property name="focus_on_click">True</property>
+                                 <property name="active">False</property>
+                                 <property name="inconsistent">False</property>
+
+                                 <child>
+                                   <widget class="GtkImage" id="image5">
+                                     <property name="visible">True</property>
+                                     <property name="stock">gtk-justify-right</property>
+                                     <property name="icon_size">4</property>
+                                     <property name="xalign">0.5</property>
+                                     <property name="yalign">0.5</property>
+                                     <property name="xpad">0</property>
+                                     <property name="ypad">0</property>
+                                   </widget>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">2</property>
+                             <property name="bottom_attach">3</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options">fill</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox12">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">40</property>
+
+                             <child>
+                               <widget class="GtkSpinButton" id="text_line_spacing_spin">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="climb_rate">0.00999999977648</property>
+                                 <property name="digits">2</property>
+                                 <property name="numeric">False</property>
+                                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                                 <property name="snap_to_ticks">False</property>
+                                 <property name="wrap">False</property>
+                                 <property name="adjustment">1 0 5 0.01 0.1 0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">3</property>
+                             <property name="bottom_attach">4</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options">fill</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label9">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot;&gt;Text&lt;/span&gt;</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">True</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="type">label_item</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkFrame" id="frame4">
+                 <property name="visible">True</property>
+                 <property name="label_xalign">0</property>
+                 <property name="label_yalign">0.5</property>
+                 <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox4">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">0</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="label13">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">   </property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkTable" id="table2">
+                         <property name="visible">True</property>
+                         <property name="n_rows">2</property>
+                         <property name="n_columns">2</property>
+                         <property name="homogeneous">False</property>
+                         <property name="row_spacing">12</property>
+                         <property name="column_spacing">12</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="label18">
+                             <property name="width_request">90</property>
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Width:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">0</property>
+                             <property name="bottom_attach">1</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="label19">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Color:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">1</property>
+                             <property name="bottom_attach">2</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox9">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">12</property>
+
+                             <child>
+                               <widget class="GtkSpinButton" id="line_width_spin">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="climb_rate">0.00999999977648</property>
+                                 <property name="digits">2</property>
+                                 <property name="numeric">True</property>
+                                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                                 <property name="snap_to_ticks">False</property>
+                                 <property name="wrap">False</property>
+                                 <property name="adjustment">1 0.25 4 0.25 1 0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkLabel" id="label21">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">points</property>
+                                 <property name="use_underline">False</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                                 <property name="width_chars">-1</property>
+                                 <property name="single_line_mode">False</property>
+                                 <property name="angle">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">0</property>
+                             <property name="bottom_attach">1</property>
+                             <property name="y_options">fill</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox10">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">12</property>
+
+                             <child>
+                               <widget class="Custom" id="line_color_combo">
+                                 <property name="visible">True</property>
+                                 <property name="creation_function">gl_object_editor_construct_color_combo</property>
+                                 <property name="int1">1</property>
+                                 <property name="int2">0</property>
+                                 <property name="last_modification_time">Sun, 23 Nov 2003 15:42:41 GMT</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">1</property>
+                             <property name="bottom_attach">2</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options">fill</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label10">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot;&gt;Line&lt;/span&gt;</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">True</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="type">label_item</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkFrame" id="frame5">
+                 <property name="visible">True</property>
+                 <property name="label_xalign">0</property>
+                 <property name="label_yalign">0.5</property>
+                 <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox5">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">0</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="label14">
+                         <property name="visible">True</property>
+                         <property name="label" translatable="yes">   </property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkTable" id="table4">
+                         <property name="visible">True</property>
+                         <property name="n_rows">1</property>
+                         <property name="n_columns">2</property>
+                         <property name="homogeneous">False</property>
+                         <property name="row_spacing">12</property>
+                         <property name="column_spacing">12</property>
+
+                         <child>
+                           <widget class="GtkLabel" id="label20">
+                             <property name="width_request">90</property>
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Color:</property>
+                             <property name="use_underline">False</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">0</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">0</property>
+                             <property name="bottom_attach">1</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox11">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">12</property>
+
+                             <child>
+                               <widget class="Custom" id="fill_color_combo">
+                                 <property name="visible">True</property>
+                                 <property name="creation_function">gl_object_editor_construct_color_combo</property>
+                                 <property name="int1">0</property>
+                                 <property name="int2">0</property>
+                                 <property name="last_modification_time">Sun, 23 Nov 2003 15:43:12 GMT</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">0</property>
+                             <property name="bottom_attach">1</property>
+                             <property name="y_options">fill</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label11">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot;&gt;Fill&lt;/span&gt;</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">True</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="type">label_item</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="tab_expand">False</property>
+             <property name="tab_fill">True</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkLabel" id="label2">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">Object defaults</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0.5</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="type">tab</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">True</property>
+         <property name="fill">True</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
diff --git a/data/glade/print-custom-widget.glade b/data/glade/print-custom-widget.glade
new file mode 100644 (file)
index 0000000..f5063ab
--- /dev/null
@@ -0,0 +1,287 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="window1">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">window1</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkVBox" id="print_custom_widget_vbox">
+      <property name="border_width">12</property>
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">12</property>
+
+      <child>
+       <widget class="GtkVBox" id="vbox3">
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">0</property>
+
+         <child>
+           <widget class="GtkFrame" id="simple_frame">
+             <property name="visible">True</property>
+             <property name="label_xalign">0</property>
+             <property name="label_yalign">0.5</property>
+             <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+             <child>
+               <widget class="GtkAlignment" id="alignment1">
+                 <property name="visible">True</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xscale">1</property>
+                 <property name="yscale">1</property>
+                 <property name="top_padding">0</property>
+                 <property name="bottom_padding">0</property>
+                 <property name="left_padding">12</property>
+                 <property name="right_padding">0</property>
+
+                 <child>
+                   <widget class="GtkVBox" id="copies_vbox">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">0</property>
+
+                     <child>
+                       <placeholder/>
+                     </child>
+                   </widget>
+                 </child>
+               </widget>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label2">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">&lt;b&gt;Print control (Simple)&lt;/b&gt;</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">True</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">label_item</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">True</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkFrame" id="merge_frame">
+             <property name="visible">True</property>
+             <property name="label_xalign">0</property>
+             <property name="label_yalign">0.5</property>
+             <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+             <child>
+               <widget class="GtkAlignment" id="alignment2">
+                 <property name="visible">True</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xscale">1</property>
+                 <property name="yscale">1</property>
+                 <property name="top_padding">0</property>
+                 <property name="bottom_padding">0</property>
+                 <property name="left_padding">12</property>
+                 <property name="right_padding">0</property>
+
+                 <child>
+                   <widget class="GtkVBox" id="prmerge_vbox">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">0</property>
+
+                     <child>
+                       <placeholder/>
+                     </child>
+                   </widget>
+                 </child>
+               </widget>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label3">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">&lt;b&gt;Print control (Merge)&lt;/b&gt;</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">True</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="type">label_item</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">True</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">False</property>
+         <property name="fill">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkFrame" id="frame3">
+         <property name="visible">True</property>
+         <property name="label_xalign">0</property>
+         <property name="label_yalign">0.5</property>
+         <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+         <child>
+           <widget class="GtkAlignment" id="alignment3">
+             <property name="visible">True</property>
+             <property name="xalign">0.5</property>
+             <property name="yalign">0.5</property>
+             <property name="xscale">1</property>
+             <property name="yscale">1</property>
+             <property name="top_padding">0</property>
+             <property name="bottom_padding">0</property>
+             <property name="left_padding">12</property>
+             <property name="right_padding">0</property>
+
+             <child>
+               <widget class="GtkVBox" id="vbox2">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">0</property>
+
+                 <child>
+                   <widget class="GtkCheckButton" id="outline_check">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label" translatable="yes">print outlines (to test printer alignment)</property>
+                     <property name="use_underline">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                     <property name="active">False</property>
+                     <property name="inconsistent">False</property>
+                     <property name="draw_indicator">True</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkCheckButton" id="reverse_check">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label" translatable="yes">print in reverse (i.e. a mirror image)</property>
+                     <property name="use_underline">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                     <property name="active">False</property>
+                     <property name="inconsistent">False</property>
+                     <property name="draw_indicator">True</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkCheckButton" id="crop_marks_check">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="label" translatable="yes">print crop marks</property>
+                     <property name="use_underline">True</property>
+                     <property name="relief">GTK_RELIEF_NORMAL</property>
+                     <property name="focus_on_click">True</property>
+                     <property name="active">False</property>
+                     <property name="inconsistent">False</property>
+                     <property name="draw_indicator">True</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+             </child>
+           </widget>
+         </child>
+
+         <child>
+           <widget class="GtkLabel" id="label4">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">&lt;b&gt;Options&lt;/b&gt;</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">True</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0.5</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="type">label_item</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="padding">0</property>
+         <property name="expand">True</property>
+         <property name="fill">True</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
diff --git a/data/glade/property-bar.glade b/data/glade/property-bar.glade
new file mode 100644 (file)
index 0000000..f86d773
--- /dev/null
@@ -0,0 +1,375 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="window1">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">window1</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+
+  <child>
+    <widget class="GtkToolbar" id="property_toolbar">
+      <property name="visible">True</property>
+      <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
+      <property name="toolbar_style">GTK_TOOLBAR_ICONS</property>
+      <property name="tooltips">True</property>
+      <property name="show_arrow">False</property>
+
+      <child>
+       <widget class="GtkToolItem" id="toolitem1">
+         <property name="visible">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+
+         <child>
+           <widget class="GtkEventBox" id="eventbox1">
+             <property name="visible">True</property>
+             <property name="tooltip" translatable="yes">Font family</property>
+             <property name="visible_window">True</property>
+             <property name="above_child">False</property>
+
+             <child>
+               <widget class="GtkComboBox" id="font_family_combo">
+                 <property name="visible">True</property>
+                 <property name="add_tearoffs">False</property>
+                 <property name="focus_on_click">False</property>
+               </widget>
+             </child>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkToolItem" id="toolitem2">
+         <property name="visible">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+
+         <child>
+           <widget class="GtkAlignment" id="alignment1">
+             <property name="visible">True</property>
+             <property name="xalign">0.5</property>
+             <property name="yalign">0.5</property>
+             <property name="xscale">1</property>
+             <property name="yscale">1</property>
+             <property name="top_padding">0</property>
+             <property name="bottom_padding">0</property>
+             <property name="left_padding">6</property>
+             <property name="right_padding">0</property>
+
+             <child>
+               <widget class="GtkSpinButton" id="font_size_spin">
+                 <property name="visible">True</property>
+                 <property name="tooltip" translatable="yes">Font size</property>
+                 <property name="can_focus">True</property>
+                 <property name="climb_rate">1</property>
+                 <property name="digits">0</property>
+                 <property name="numeric">False</property>
+                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                 <property name="snap_to_ticks">False</property>
+                 <property name="wrap">False</property>
+                 <property name="adjustment">1 1 250 1 10 0</property>
+               </widget>
+             </child>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkSeparatorToolItem" id="separatortoolitem1">
+         <property name="visible">True</property>
+         <property name="draw">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkToggleToolButton" id="font_bold_toggle">
+         <property name="visible">True</property>
+         <property name="tooltip" translatable="yes">Bold</property>
+         <property name="label" translatable="yes"></property>
+         <property name="use_underline">True</property>
+         <property name="stock_id">gtk-bold</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+         <property name="active">False</property>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkToggleToolButton" id="font_italic_toggle">
+         <property name="visible">True</property>
+         <property name="tooltip" translatable="yes">Italic</property>
+         <property name="label" translatable="yes"></property>
+         <property name="use_underline">True</property>
+         <property name="stock_id">gtk-italic</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+         <property name="active">False</property>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkSeparatorToolItem" id="separatortoolitem2">
+         <property name="visible">True</property>
+         <property name="draw">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkRadioToolButton" id="text_align_left_radio">
+         <property name="visible">True</property>
+         <property name="tooltip" translatable="yes">Left align</property>
+         <property name="label" translatable="yes"></property>
+         <property name="use_underline">True</property>
+         <property name="stock_id">gtk-justify-left</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+         <property name="active">False</property>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkRadioToolButton" id="text_align_center_radio">
+         <property name="visible">True</property>
+         <property name="tooltip" translatable="yes">Center align</property>
+         <property name="label" translatable="yes"></property>
+         <property name="use_underline">True</property>
+         <property name="stock_id">gtk-justify-center</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+         <property name="active">False</property>
+         <property name="group">text_align_left_radio</property>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkRadioToolButton" id="text_align_right_radio">
+         <property name="visible">True</property>
+         <property name="tooltip" translatable="yes">Right align</property>
+         <property name="label" translatable="yes"></property>
+         <property name="use_underline">True</property>
+         <property name="stock_id">gtk-justify-right</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+         <property name="active">False</property>
+         <property name="group">text_align_left_radio</property>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkSeparatorToolItem" id="separatortoolitem3">
+         <property name="visible">True</property>
+         <property name="draw">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkToolItem" id="toolitem3">
+         <property name="visible">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+
+         <child>
+           <widget class="GtkEventBox" id="eventbox2">
+             <property name="visible">True</property>
+             <property name="tooltip" translatable="yes">Text Color</property>
+             <property name="visible_window">True</property>
+             <property name="above_child">False</property>
+
+             <child>
+               <widget class="Custom" id="text_color_combo">
+                 <property name="visible">True</property>
+                 <property name="tooltip" translatable="yes">Text color</property>
+                 <property name="creation_function">gl_ui_property_bar_construct_color_combo</property>
+                 <property name="int1">0</property>
+                 <property name="int2">0</property>
+                 <property name="last_modification_time">Sun, 01 May 2005 15:21:11 GMT</property>
+               </widget>
+             </child>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkToolItem" id="toolitem4">
+         <property name="visible">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+
+         <child>
+           <widget class="GtkEventBox" id="eventbox3">
+             <property name="visible">True</property>
+             <property name="tooltip" translatable="yes">Fill color</property>
+             <property name="visible_window">True</property>
+             <property name="above_child">False</property>
+
+             <child>
+               <widget class="Custom" id="fill_color_combo">
+                 <property name="visible">True</property>
+                 <property name="tooltip" translatable="yes">Fill color</property>
+                 <property name="creation_function">gl_ui_property_bar_construct_color_combo</property>
+                 <property name="int1">1</property>
+                 <property name="int2">0</property>
+                 <property name="last_modification_time">Sun, 01 May 2005 15:21:18 GMT</property>
+               </widget>
+             </child>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkToolItem" id="toolitem5">
+         <property name="visible">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+
+         <child>
+           <widget class="GtkEventBox" id="eventbox4">
+             <property name="visible">True</property>
+             <property name="tooltip" translatable="yes">Line color</property>
+             <property name="visible_window">True</property>
+             <property name="above_child">False</property>
+
+             <child>
+               <widget class="Custom" id="line_color_combo">
+                 <property name="visible">True</property>
+                 <property name="tooltip" translatable="yes">Line color</property>
+                 <property name="creation_function">gl_ui_property_bar_construct_color_combo</property>
+                 <property name="int1">2</property>
+                 <property name="int2">0</property>
+                 <property name="last_modification_time">Sun, 01 May 2005 15:21:24 GMT</property>
+               </widget>
+             </child>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkSeparatorToolItem" id="separatortoolitem4">
+         <property name="visible">True</property>
+         <property name="draw">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkToolItem" id="toolitem6">
+         <property name="visible">True</property>
+         <property name="visible_horizontal">True</property>
+         <property name="visible_vertical">True</property>
+         <property name="is_important">False</property>
+
+         <child>
+           <widget class="GtkSpinButton" id="line_width_spin">
+             <property name="visible">True</property>
+             <property name="tooltip" translatable="yes">Line width</property>
+             <property name="can_focus">True</property>
+             <property name="climb_rate">1</property>
+             <property name="digits">2</property>
+             <property name="numeric">False</property>
+             <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+             <property name="snap_to_ticks">False</property>
+             <property name="wrap">False</property>
+             <property name="adjustment">1 0.25 4 0.25 1 0</property>
+           </widget>
+         </child>
+       </widget>
+       <packing>
+         <property name="expand">False</property>
+         <property name="homogeneous">False</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
diff --git a/data/glade/template-designer.glade b/data/glade/template-designer.glade
new file mode 100644 (file)
index 0000000..22a0be7
--- /dev/null
@@ -0,0 +1,3445 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+<requires lib="gnome"/>
+
+<widget class="GtkWindow" id="window">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">window1</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkNotebook" id="notebook">
+      <property name="border_width">6</property>
+      <property name="visible">True</property>
+      <property name="can_focus">True</property>
+      <property name="show_tabs">True</property>
+      <property name="show_border">True</property>
+      <property name="tab_pos">GTK_POS_TOP</property>
+      <property name="scrollable">False</property>
+      <property name="enable_popup">False</property>
+
+      <child>
+       <widget class="GtkLabel" id="start_page">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">Welcome to the gLabels Template Designer.
+
+This dialog will assist you in the creation of a custom gLabels template.</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label108">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">start_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="name_page">
+         <property name="border_width">18</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">24</property>
+
+         <child>
+           <widget class="GtkLabel" id="label1">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">Please enter the following identifying information about the template stationery.</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkTable" id="table2">
+             <property name="visible">True</property>
+             <property name="n_rows">6</property>
+             <property name="n_columns">2</property>
+             <property name="homogeneous">False</property>
+             <property name="row_spacing">12</property>
+             <property name="column_spacing">12</property>
+
+             <child>
+               <widget class="GtkLabel" id="label72">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Brand/Manufacturer:</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">0</property>
+                 <property name="right_attach">1</property>
+                 <property name="top_attach">0</property>
+                 <property name="bottom_attach">1</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label73">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Part #:</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">0</property>
+                 <property name="right_attach">1</property>
+                 <property name="top_attach">1</property>
+                 <property name="bottom_attach">2</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkHBox" id="hbox34">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkEntry" id="part_num_entry">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="editable">True</property>
+                     <property name="visibility">True</property>
+                     <property name="max_length">0</property>
+                     <property name="text" translatable="yes"></property>
+                     <property name="has_frame">True</property>
+                     <property name="invisible_char">*</property>
+                     <property name="activates_default">False</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label76">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">(e.g., 8163A)</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="left_attach">1</property>
+                 <property name="right_attach">2</property>
+                 <property name="top_attach">1</property>
+                 <property name="bottom_attach">2</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options">fill</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkHBox" id="hbox33">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkEntry" id="brand_entry">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="editable">True</property>
+                     <property name="visibility">True</property>
+                     <property name="max_length">0</property>
+                     <property name="text" translatable="yes"></property>
+                     <property name="has_frame">True</property>
+                     <property name="invisible_char">*</property>
+                     <property name="activates_default">False</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label75">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">(e.g., Avery, Acme, ...)</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="left_attach">1</property>
+                 <property name="right_attach">2</property>
+                 <property name="top_attach">0</property>
+                 <property name="bottom_attach">1</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options">fill</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label74">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Description:</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">0</property>
+                 <property name="right_attach">1</property>
+                 <property name="top_attach">4</property>
+                 <property name="bottom_attach">5</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkEntry" id="description_entry">
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="editable">True</property>
+                 <property name="visibility">True</property>
+                 <property name="max_length">0</property>
+                 <property name="text" translatable="yes"></property>
+                 <property name="has_frame">True</property>
+                 <property name="invisible_char">*</property>
+                 <property name="activates_default">False</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">1</property>
+                 <property name="right_attach">2</property>
+                 <property name="top_attach">4</property>
+                 <property name="bottom_attach">5</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label77">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">(e.g., &quot;Mailing Labels,&quot; &quot;Business Cards,&quot; ...)</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">1</property>
+                 <property name="right_attach">2</property>
+                 <property name="top_attach">5</property>
+                 <property name="bottom_attach">6</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkHBox" id="hbox39">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">6</property>
+
+                 <child>
+                   <widget class="GtkImage" id="name_warning_image">
+                     <property name="visible">True</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="name_warning_label">
+                     <property name="visible">True</property>
+                     <property name="label"></property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">True</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">True</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="left_attach">1</property>
+                 <property name="right_attach">2</property>
+                 <property name="top_attach">2</property>
+                 <property name="bottom_attach">3</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">True</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label109">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">name_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="pg_size_page">
+         <property name="border_width">18</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">24</property>
+
+         <child>
+           <widget class="GtkLabel" id="label43">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">Please select the page size of the template stationery.</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkTable" id="table3">
+             <property name="visible">True</property>
+             <property name="n_rows">3</property>
+             <property name="n_columns">2</property>
+             <property name="homogeneous">False</property>
+             <property name="row_spacing">12</property>
+             <property name="column_spacing">12</property>
+
+             <child>
+               <widget class="GtkLabel" id="label78">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Page size:</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">0</property>
+                 <property name="right_attach">1</property>
+                 <property name="top_attach">0</property>
+                 <property name="bottom_attach">1</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label79">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Width:</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">0</property>
+                 <property name="right_attach">1</property>
+                 <property name="top_attach">1</property>
+                 <property name="bottom_attach">2</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label80">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Height:</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">0</property>
+                 <property name="right_attach">1</property>
+                 <property name="top_attach">2</property>
+                 <property name="bottom_attach">3</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkHBox" id="hbox35">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">0</property>
+
+                 <child>
+                   <widget class="GtkComboBox" id="pg_size_combo">
+                     <property name="visible">True</property>
+                     <property name="add_tearoffs">False</property>
+                     <property name="focus_on_click">True</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <placeholder/>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="left_attach">1</property>
+                 <property name="right_attach">2</property>
+                 <property name="top_attach">0</property>
+                 <property name="bottom_attach">1</property>
+                 <property name="y_options">fill</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkHBox" id="hbox36">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="pg_w_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">1 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="pg_w_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="left_attach">1</property>
+                 <property name="right_attach">2</property>
+                 <property name="top_attach">1</property>
+                 <property name="bottom_attach">2</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options">fill</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkHBox" id="hbox37">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">12</property>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="pg_h_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">1 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="pg_h_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="left_attach">1</property>
+                 <property name="right_attach">2</property>
+                 <property name="top_attach">2</property>
+                 <property name="bottom_attach">3</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options">fill</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label110">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">pg_size_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="shape_page">
+         <property name="border_width">18</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">24</property>
+
+         <child>
+           <widget class="GtkLabel" id="label13">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">Please select the basic shape of the labels or cards.</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkVBox" id="vbox7">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">6</property>
+
+             <child>
+               <widget class="GtkRadioButton" id="shape_rect_radio">
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="label" translatable="yes">Rectangular or square (can have rounded corners)</property>
+                 <property name="use_underline">True</property>
+                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                 <property name="focus_on_click">True</property>
+                 <property name="active">False</property>
+                 <property name="inconsistent">False</property>
+                 <property name="draw_indicator">True</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkRadioButton" id="shape_round_radio">
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="label" translatable="yes">Round</property>
+                 <property name="use_underline">True</property>
+                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                 <property name="focus_on_click">True</property>
+                 <property name="active">False</property>
+                 <property name="inconsistent">False</property>
+                 <property name="draw_indicator">True</property>
+                 <property name="group">shape_rect_radio</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkRadioButton" id="shape_cd_radio">
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="label" translatable="yes">CD/DVD (including credit card CDs)</property>
+                 <property name="use_underline">True</property>
+                 <property name="relief">GTK_RELIEF_NORMAL</property>
+                 <property name="focus_on_click">True</property>
+                 <property name="active">False</property>
+                 <property name="inconsistent">False</property>
+                 <property name="draw_indicator">True</property>
+                 <property name="group">shape_rect_radio</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">True</property>
+             <property name="fill">True</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label111">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">shape_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="rect_size_page">
+         <property name="border_width">18</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">24</property>
+
+         <child>
+           <widget class="GtkLabel" id="label14">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">Please enter the following size parameters of a single label or card in your template.</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkHBox" id="hbox7">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkTable" id="table4">
+                 <property name="visible">True</property>
+                 <property name="n_rows">6</property>
+                 <property name="n_columns">3</property>
+                 <property name="homogeneous">False</property>
+                 <property name="row_spacing">12</property>
+                 <property name="column_spacing">12</property>
+
+                 <child>
+                   <widget class="GtkLabel" id="label83">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">1. Width:</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label84">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">2. Height:</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label85">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">3. Round (radius of corner):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label86">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">4. Horiz. waste (overprint allowed):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="rect_w_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="rect_h_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="rect_r_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="rect_x_waste_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="rect_w_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="rect_h_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="rect_r_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="rect_x_waste_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label101">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">6. Margin</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="rect_margin_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="rect_margin_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="rect_y_waste_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="rect_y_waste_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label107">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">5. Vert. waste (overprint allowed):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkImage" id="rect_image">
+                 <property name="visible">True</property>
+                 <property name="xalign">1</property>
+                 <property name="yalign">0</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label112">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">rect_size_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="round_size_page">
+         <property name="border_width">18</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">24</property>
+
+         <child>
+           <widget class="GtkLabel" id="label23">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">Please enter the following size parameters of a single label in your template.</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkHBox" id="hbox12">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkTable" id="table8">
+                 <property name="visible">True</property>
+                 <property name="n_rows">3</property>
+                 <property name="n_columns">3</property>
+                 <property name="homogeneous">False</property>
+                 <property name="row_spacing">12</property>
+                 <property name="column_spacing">12</property>
+
+                 <child>
+                   <widget class="GtkLabel" id="label91">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">1. Radius:</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label92">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">2. Waste (overprint allowed):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="round_r_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="round_waste_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="round_r_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="round_waste_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label103">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">3. Margin</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="round_margin_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="round_margin_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkImage" id="round_image">
+                 <property name="visible">True</property>
+                 <property name="xalign">1</property>
+                 <property name="yalign">0</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label113">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">round_size_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="cd_size_page">
+         <property name="border_width">18</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">24</property>
+
+         <child>
+           <widget class="GtkLabel" id="label32">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">Please enter the following size parameters of a single label in your template.</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkHBox" id="hbox17">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkTable" id="table7">
+                 <property name="visible">True</property>
+                 <property name="n_rows">6</property>
+                 <property name="n_columns">3</property>
+                 <property name="homogeneous">False</property>
+                 <property name="row_spacing">12</property>
+                 <property name="column_spacing">12</property>
+
+                 <child>
+                   <widget class="GtkLabel" id="label95">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">1. Outer radius:</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label96">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">2. Inner radius:</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label97">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">3. Clipping width:</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label98">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">4. Clipping height:</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label99">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">5. Waste (overprint allowed):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="cd_radius_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="cd_hole_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="cd_w_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="cd_h_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="cd_waste_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="cd_radius_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="cd_hole_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="cd_w_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="cd_h_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="cd_waste_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label105">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">6. Margin</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="cd_margin_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="cd_margin_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkImage" id="cd_image">
+                 <property name="visible">True</property>
+                 <property name="xalign">1</property>
+                 <property name="yalign">0</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label114">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">cd_size_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="nlayouts_page">
+         <property name="border_width">18</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">24</property>
+
+         <child>
+           <widget class="GtkLabel" id="label9">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">How many layouts will your template contain? 
+
+A layout is a set of labels or cards that can be arranged in a simple grid.
+Most templates only need one layout, as in the first example.
+The second example illustrates when two layouts are needed.</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkHBox" id="hbox5">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkVBox" id="vbox4">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">0</property>
+
+                 <child>
+                   <widget class="GtkImage" id="nlayouts_image1">
+                     <property name="visible">True</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">True</property>
+                     <property name="fill">True</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label10">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Templates needing only
+one layout.</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_CENTER</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkVBox" id="vbox5">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">0</property>
+
+                 <child>
+                   <widget class="GtkImage" id="nlayouts_image2">
+                     <property name="visible">True</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">True</property>
+                     <property name="fill">True</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label11">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Templates needing
+two layouts.</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_CENTER</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkHBox" id="hbox6">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">12</property>
+
+             <child>
+               <widget class="GtkLabel" id="label12">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">Number of layouts:</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">0</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkSpinButton" id="nlayouts_spin">
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="climb_rate">0.10000000149</property>
+                 <property name="digits">0</property>
+                 <property name="numeric">False</property>
+                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                 <property name="snap_to_ticks">False</property>
+                 <property name="wrap">False</property>
+                 <property name="adjustment">1 1 2 1 1 0</property>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label115">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">nlayouts_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkVBox" id="layout_page">
+         <property name="border_width">18</property>
+         <property name="visible">True</property>
+         <property name="homogeneous">False</property>
+         <property name="spacing">12</property>
+
+         <child>
+           <widget class="GtkLabel" id="label48">
+             <property name="visible">True</property>
+             <property name="label" translatable="yes">Please enter the following layout information.</property>
+             <property name="use_underline">False</property>
+             <property name="use_markup">False</property>
+             <property name="justify">GTK_JUSTIFY_LEFT</property>
+             <property name="wrap">False</property>
+             <property name="selectable">False</property>
+             <property name="xalign">0</property>
+             <property name="yalign">0.5</property>
+             <property name="xpad">0</property>
+             <property name="ypad">0</property>
+             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+             <property name="width_chars">-1</property>
+             <property name="single_line_mode">False</property>
+             <property name="angle">0</property>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+
+         <child>
+           <widget class="GtkHBox" id="hbox25">
+             <property name="visible">True</property>
+             <property name="homogeneous">False</property>
+             <property name="spacing">18</property>
+
+             <child>
+               <widget class="GtkTable" id="table1">
+                 <property name="visible">True</property>
+                 <property name="n_rows">7</property>
+                 <property name="n_columns">4</property>
+                 <property name="homogeneous">False</property>
+                 <property name="row_spacing">6</property>
+                 <property name="column_spacing">12</property>
+
+                 <child>
+                   <widget class="GtkLabel" id="layout1_head_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Layout #1</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="layout2_head_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Layout #2</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">0</property>
+                     <property name="bottom_attach">1</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label62">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Number across (nx):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label63">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Number down (ny):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label64">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Distance from left edge (x0):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label65">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Distance from top edge (y0):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label66">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Horizontal pitch (dx):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="label67">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">Vertical pitch (dy):</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">0</property>
+                     <property name="right_attach">1</property>
+                     <property name="top_attach">6</property>
+                     <property name="bottom_attach">7</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="layout_x0_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">3</property>
+                     <property name="right_attach">4</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="layout_y0_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">3</property>
+                     <property name="right_attach">4</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="layout_dx_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">3</property>
+                     <property name="right_attach">4</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkLabel" id="layout_dy_units_label">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">inches</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">3</property>
+                     <property name="right_attach">4</property>
+                     <property name="top_attach">6</property>
+                     <property name="bottom_attach">7</property>
+                     <property name="x_options">fill</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout1_nx_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">1 1 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout1_ny_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">1 1 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout2_nx_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">1 1 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">1</property>
+                     <property name="bottom_attach">2</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout2_ny_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">1 1 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">2</property>
+                     <property name="bottom_attach">3</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout1_x0_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout2_x0_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">3</property>
+                     <property name="bottom_attach">4</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout1_y0_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout2_y0_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">4</property>
+                     <property name="bottom_attach">5</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout1_dx_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout2_dx_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">5</property>
+                     <property name="bottom_attach">6</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout1_dy_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">1</property>
+                     <property name="right_attach">2</property>
+                     <property name="top_attach">6</property>
+                     <property name="bottom_attach">7</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkSpinButton" id="layout2_dy_spin">
+                     <property name="visible">True</property>
+                     <property name="can_focus">True</property>
+                     <property name="climb_rate">0.00999999977648</property>
+                     <property name="digits">0</property>
+                     <property name="numeric">False</property>
+                     <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                     <property name="snap_to_ticks">False</property>
+                     <property name="wrap">False</property>
+                     <property name="adjustment">0 0 100 1 10 0</property>
+                   </widget>
+                   <packing>
+                     <property name="left_attach">2</property>
+                     <property name="right_attach">3</property>
+                     <property name="top_attach">6</property>
+                     <property name="bottom_attach">7</property>
+                     <property name="y_options"></property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">False</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkHBox" id="hbox38">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">0</property>
+
+                 <child>
+                   <widget class="GtkLabel" id="label100">
+                     <property name="visible">True</property>
+                     <property name="label">  </property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">False</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">True</property>
+                     <property name="fill">True</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkVBox" id="vbox15">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">6</property>
+
+                     <child>
+                       <widget class="Custom" id="layout_mini_preview">
+                         <property name="visible">True</property>
+                         <property name="creation_function">gl_template_designer_construct_mini_preview</property>
+                         <property name="int1">175</property>
+                         <property name="int2">200</property>
+                         <property name="last_modification_time">Mon, 29 Dec 2003 21:27:10 GMT</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkButton" id="layout_test_button">
+                         <property name="border_width">6</property>
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+                         <property name="label" translatable="yes">Print test sheet</property>
+                         <property name="use_underline">True</property>
+                         <property name="relief">GTK_RELIEF_NORMAL</property>
+                         <property name="focus_on_click">True</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">True</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
+           </widget>
+           <packing>
+             <property name="padding">0</property>
+             <property name="expand">False</property>
+             <property name="fill">False</property>
+           </packing>
+         </child>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label116">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">layout_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="finish_page">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">Congratulations!
+
+You have completed the gLabels Template Designer.
+If you wish to accept and save your design, click &quot;Apply.&quot;
+
+Otherwise, you may click &quot;Cancel&quot; to abandon your design
+or &quot;Back&quot; to continue editing this design.</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="tab_expand">False</property>
+         <property name="tab_fill">True</property>
+       </packing>
+      </child>
+
+      <child>
+       <widget class="GtkLabel" id="label117">
+         <property name="visible">True</property>
+         <property name="label" translatable="yes">finish_page</property>
+         <property name="use_underline">False</property>
+         <property name="use_markup">False</property>
+         <property name="justify">GTK_JUSTIFY_LEFT</property>
+         <property name="wrap">False</property>
+         <property name="selectable">False</property>
+         <property name="xalign">0.5</property>
+         <property name="yalign">0.5</property>
+         <property name="xpad">0</property>
+         <property name="ypad">0</property>
+         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+         <property name="width_chars">-1</property>
+         <property name="single_line_mode">False</property>
+         <property name="angle">0</property>
+       </widget>
+       <packing>
+         <property name="type">tab</property>
+       </packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
diff --git a/data/glade/wdgt-media-select.glade b/data/glade/wdgt-media-select.glade
new file mode 100644 (file)
index 0000000..1696bfa
--- /dev/null
@@ -0,0 +1,204 @@
+<?xml version="1.0"?>
+<glade-interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <widget class="GtkWindow" id="window1">
+    <property name="visible">True</property>
+    <property name="title" translatable="yes">window1</property>
+    <child>
+      <widget class="GtkHBox" id="wdgt_media_select_hbox">
+        <property name="visible">True</property>
+        <child>
+          <widget class="GtkNotebook" id="notebook">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="border_width">6</property>
+            <child>
+              <widget class="GtkVBox" id="recent_tab_vbox">
+                <property name="visible">True</property>
+                <child>
+                  <widget class="GtkScrolledWindow" id="scrolledwindow2">
+                    <property name="width_request">480</property>
+                    <property name="height_request">320</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="border_width">12</property>
+                    <property name="hscrollbar_policy">automatic</property>
+                    <property name="vscrollbar_policy">automatic</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <widget class="GtkTreeView" id="recent_treeview">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="headers_visible">False</property>
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkLabel" id="recent_tab_label">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Recent templates</property>
+              </widget>
+              <packing>
+                <property name="tab_fill">False</property>
+                <property name="type">tab</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkVBox" id="search_all_tab_vbox">
+                <property name="visible">True</property>
+                <child>
+                  <widget class="GtkHBox" id="hbox6">
+                    <property name="visible">True</property>
+                    <property name="border_width">12</property>
+                    <property name="spacing">12</property>
+                    <child>
+                      <widget class="GtkHBox" id="hbox9">
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <widget class="GtkLabel" id="label14">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Brand:</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkComboBox" id="brand_combo">
+                            <property name="visible">True</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkHBox" id="hbox7">
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <widget class="GtkLabel" id="label12">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Page size:</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkComboBox" id="page_size_combo">
+                            <property name="visible">True</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkHBox" id="hbox8">
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <widget class="GtkLabel" id="label13">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Category:</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkComboBox" id="category_combo">
+                            <property name="visible">True</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkScrolledWindow" id="scrolledwindow1">
+                    <property name="width_request">480</property>
+                    <property name="height_request">320</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="border_width">12</property>
+                    <property name="hscrollbar_policy">automatic</property>
+                    <property name="vscrollbar_policy">automatic</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <widget class="GtkTreeView" id="search_all_treeview">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="headers_visible">False</property>
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkLabel" id="search_all_tabLlabel">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Search all templates</property>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+                <property name="tab_fill">False</property>
+                <property name="type">tab</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>
diff --git a/data/glade/wdgt-rotate-label.glade b/data/glade/wdgt-rotate-label.glade
new file mode 100644 (file)
index 0000000..aa48b50
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<glade-interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <widget class="GtkWindow" id="window1">
+    <property name="visible">True</property>
+    <property name="title" translatable="yes">window1</property>
+    <child>
+      <widget class="GtkHBox" id="rotate_hbox">
+        <property name="visible">True</property>
+        <property name="border_width">6</property>
+        <property name="spacing">6</property>
+        <child>
+          <widget class="GtkCheckButton" id="rotate_check">
+            <property name="label" translatable="yes">Rotate</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="use_underline">True</property>
+            <property name="draw_indicator">True</property>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkDrawingArea" id="rotate_drawingarea">
+            <property name="visible">True</property>
+          </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>
diff --git a/data/man/Makefile.am b/data/man/Makefile.am
new file mode 100644 (file)
index 0000000..3405190
--- /dev/null
@@ -0,0 +1,6 @@
+## Process this file with automake to produce Makefile.in
+
+man_MANS = glabels.1
+
+EXTRA_DIST = $(man_MANS)
+
diff --git a/data/man/Makefile.in b/data/man/Makefile.in
new file mode 100644 (file)
index 0000000..0cba8c4
--- /dev/null
@@ -0,0 +1,485 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data/man
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = glabels.1
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/man/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu data/man/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list=''; test -n "$(man1dir)" || exit 0; \
+       { for i in $$list; do echo "$$i"; done; \
+       l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+         sed -n '/\.1[a-z]*$$/p'; \
+       } | while read p; do \
+         if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; echo "$$p"; \
+       done | \
+       sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+       sed 'N;N;s,\n, ,g' | { \
+       list=; while read file base inst; do \
+         if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+           echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+           $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+         fi; \
+       done; \
+       for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+       while read files; do \
+         test -z "$$files" || { \
+           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+           $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+       done; }
+
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list=''; test -n "$(man1dir)" || exit 0; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
+       l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+         sed -n '/\.1[a-z]*$$/p'; \
+       } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+       test -z "$$files" || { \
+         echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
+         cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @list='$(MANS)'; if test -n "$$list"; then \
+         list=`for p in $$list; do \
+           if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+           if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+         if test -n "$$list" && \
+           grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+           echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+           grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
+           echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+           echo "       typically \`make maintainer-clean' will remove them" >&2; \
+           exit 1; \
+         else :; fi; \
+       else :; fi
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am uninstall-man uninstall-man1
+
+
+# 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/data/man/glabels.1 b/data/man/glabels.1
new file mode 100644 (file)
index 0000000..489b2a4
--- /dev/null
@@ -0,0 +1,67 @@
+.TH glabels 1 "Jun 28, 2004"
+.SH NAME
+glabels \- Label and business card creation program for GNOME
+.SH SYNOPSIS
+.B glabels
+.RI [OPTIONS]
+.RI [label-filename...]
+.sp
+.B glabels-batch
+.RI [OPTIONS]
+.RI [label-filename...]
+.SH DESCRIPTION
+.B glabels
+is a lightweight program for creating labels and business cards for
+the GNOME desktop environment. It is designed to work with various
+laser/ink-jet peel-off label and business card sheets that you'll find at most
+office supply stores.
+.B glabels
+is pre-configured with templates for many of these products.
+It also provides an interactive template designer for creating new
+templates according to user specifications.
+.PP
+For full documentation see the \fBgLabels\fR online help.
+
+.PP
+.B glabels-batch
+is a command line utility to print labels previously prepared with
+.B glabels.
+.SH OPTIONS
+.TP
+\fB\-?\fR, \fB\-\-help\fR
+Display a summary of available command-line options.
+.TP
+\fB\-\-usage\fR
+Display a short usage summary.
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+Print program version information.
+.PP
+.B Options specific to glabels-batch
+.TP
+\fB\-o\fR \fIfilename\fR, \fB\-\-output\fR=\fIfilename\fR
+Set output filename to \fIfilename\fR. (default="output.ps")
+.TP
+\fB\-s\fR \fIn\fR, \fB\-\-sheets\fR=\fIn\fR
+Set number of sheets to \fIn\fR. (default=1)
+.TP
+\fB\-c\fR \fIn\fR, \fB\-\-copies\fR=\fIn\fR
+Set number of copies to \fIn\fR. (default=1)
+.TP
+\fB\-f\fR \fIn\fR, \fB\-\-first\fR=\fIn\fR
+Set label on first sheet to start printing from to \fIn\fR. (default=1)
+.TP
+\fB\-l\fR, \fB\-\-outline\fR
+Print outlines around labels.  This is useful for testing printer alignment
+or printing proof sheets.
+.TP
+\fB\-r\fR, \fB\-\-reverse\fR
+Print mirror image of labels.  This is useful for clear labels intended to be
+seen from the back through glass.
+
+.SH FILES
+The $HOME/.glabels directory contains all user-defined templates.
+.SH SEE ALSO
+The gLabels homepage at <http://glabels.sourceforge.net/>.
+.SH AUTHOR
+Jim Evins <evins@snaught.com>
diff --git a/data/mime/Makefile.am b/data/mime/Makefile.am
new file mode 100644 (file)
index 0000000..027c102
--- /dev/null
@@ -0,0 +1,53 @@
+## Process this file with automake to produce Makefile.in
+
+keys_in_files=glabels.keys.in
+keys_files = $(keys_in_files:.keys.in=.keys)
+@INTLTOOL_KEYS_RULE@
+
+xml_in_files=glabels.xml.in
+xml_files = $(xml_in_files:.xml.in=.xml)
+@INTLTOOL_XML_RULE@
+
+mimedir = $(datadir)/mime-info
+mime_DATA = $(keys_files) glabels.mime
+
+appdir = $(datadir)/application-registry
+app_DATA = glabels.applications
+
+newmimedir = $(datadir)/mime/packages
+newmime_DATA = $(xml_files)
+
+EXTRA_DIST = \
+       $(keys_in_files)        \
+       $(mime_DATA)            \
+       $(app_DATA)             \
+       $(xml_in_files)         \
+       $(newmime_DATA)
+
+CLEANFILES = $(keys_files) $(xml_files)
+
+
+install-data-hook:
+if ENABLE_UPDATE_MIMEDB
+if HAVE_NEW_MIME
+       $(UPDATE_MIME_DATABASE) "$(DESTDIR)$(datadir)/mime"
+endif
+endif
+if ENABLE_UPDATE_DESKTOPDB
+if HAVE_NEWER_MIME
+       $(UPDATE_DESKTOP_DATABASE) 
+endif
+endif
+
+uninstall-hook:
+if ENABLE_UPDATE_MIMEDB
+if HAVE_NEW_MIME
+       $(UPDATE_MIME_DATABASE) "$(DESTDIR)$(datadir)/mime"
+endif
+endif
+if ENABLE_UPDATE_DESKTOPDB
+if HAVE_NEWER_MIME
+       $(UPDATE_DESKTOP_DATABASE) 
+endif
+endif
+
diff --git a/data/mime/Makefile.in b/data/mime/Makefile.in
new file mode 100644 (file)
index 0000000..8e95bd1
--- /dev/null
@@ -0,0 +1,524 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data/mime
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(appdir)" "$(DESTDIR)$(mimedir)" \
+       "$(DESTDIR)$(newmimedir)"
+DATA = $(app_DATA) $(mime_DATA) $(newmime_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+keys_in_files = glabels.keys.in
+keys_files = $(keys_in_files:.keys.in=.keys)
+xml_in_files = glabels.xml.in
+xml_files = $(xml_in_files:.xml.in=.xml)
+mimedir = $(datadir)/mime-info
+mime_DATA = $(keys_files) glabels.mime
+appdir = $(datadir)/application-registry
+app_DATA = glabels.applications
+newmimedir = $(datadir)/mime/packages
+newmime_DATA = $(xml_files)
+EXTRA_DIST = \
+       $(keys_in_files)        \
+       $(mime_DATA)            \
+       $(app_DATA)             \
+       $(xml_in_files)         \
+       $(newmime_DATA)
+
+CLEANFILES = $(keys_files) $(xml_files)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/mime/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu data/mime/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-appDATA: $(app_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(appdir)" || $(MKDIR_P) "$(DESTDIR)$(appdir)"
+       @list='$(app_DATA)'; test -n "$(appdir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(appdir)" || exit $$?; \
+       done
+
+uninstall-appDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(app_DATA)'; test -n "$(appdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(appdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(appdir)" && rm -f $$files
+install-mimeDATA: $(mime_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(mimedir)" || $(MKDIR_P) "$(DESTDIR)$(mimedir)"
+       @list='$(mime_DATA)'; test -n "$(mimedir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimedir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(mimedir)" || exit $$?; \
+       done
+
+uninstall-mimeDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(mime_DATA)'; test -n "$(mimedir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(mimedir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(mimedir)" && rm -f $$files
+install-newmimeDATA: $(newmime_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(newmimedir)" || $(MKDIR_P) "$(DESTDIR)$(newmimedir)"
+       @list='$(newmime_DATA)'; test -n "$(newmimedir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(newmimedir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(newmimedir)" || exit $$?; \
+       done
+
+uninstall-newmimeDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(newmime_DATA)'; test -n "$(newmimedir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(newmimedir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(newmimedir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(appdir)" "$(DESTDIR)$(mimedir)" "$(DESTDIR)$(newmimedir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-appDATA install-mimeDATA install-newmimeDATA
+       @$(NORMAL_INSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-appDATA uninstall-mimeDATA \
+       uninstall-newmimeDATA
+       @$(NORMAL_INSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: install-am install-data-am install-strip uninstall-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-appDATA install-data install-data-am install-data-hook \
+       install-dvi install-dvi-am install-exec install-exec-am \
+       install-html install-html-am install-info install-info-am \
+       install-man install-mimeDATA install-newmimeDATA install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-appDATA uninstall-hook uninstall-mimeDATA \
+       uninstall-newmimeDATA
+
+@INTLTOOL_KEYS_RULE@
+@INTLTOOL_XML_RULE@
+
+install-data-hook:
+@ENABLE_UPDATE_MIMEDB_TRUE@@HAVE_NEW_MIME_TRUE@        $(UPDATE_MIME_DATABASE) "$(DESTDIR)$(datadir)/mime"
+@ENABLE_UPDATE_DESKTOPDB_TRUE@@HAVE_NEWER_MIME_TRUE@   $(UPDATE_DESKTOP_DATABASE) 
+
+uninstall-hook:
+@ENABLE_UPDATE_MIMEDB_TRUE@@HAVE_NEW_MIME_TRUE@        $(UPDATE_MIME_DATABASE) "$(DESTDIR)$(datadir)/mime"
+@ENABLE_UPDATE_DESKTOPDB_TRUE@@HAVE_NEWER_MIME_TRUE@   $(UPDATE_DESKTOP_DATABASE) 
+
+# 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/data/mime/glabels.applications b/data/mime/glabels.applications
new file mode 100644 (file)
index 0000000..1391018
--- /dev/null
@@ -0,0 +1,9 @@
+glabels
+       command=glabels
+       name=gLabels
+       can_open_multiple_files=true
+       expects_uris=false
+       requires_terminal=false
+       mime_types=application/x-glabels
+       uses_gnomevfs=false
+
diff --git a/data/mime/glabels.keys b/data/mime/glabels.keys
new file mode 100644 (file)
index 0000000..9d76d32
--- /dev/null
@@ -0,0 +1,24 @@
+application/x-glabels:
+       open=glabels %f
+       description=gLabels Project File
+       [ca]description=Fitxer de projecte del gLabels
+       [cs]description=Projektový soubor gLabels
+       [da]description=gLabels' projektfil
+       [de]description=gLabels-Projektdatei
+       [eo]description=Dosiero de Projekto de gLabels
+       [es]description=Archivo de projecto gLabels
+       [fr]description=Fichier de projet gLabels
+       [it]description=File di progetto di gLabels
+       [ja]description=gLabels のプロジェクト・ファイル
+       [ko]description=gLabels 프로젝트 파일
+       [pt]description=Propriedades de ficheiro gLabels
+       [ru]description=Файл проекта gLabels
+       [sl]description=Datoteka projekta gLabels
+       [sv]description=gLabels-projektfil
+       [zh_CN]description=gLabels工程文件
+        icon_filename=glabels-application-x-glabels.png
+        default_action_type=application
+       category=Documents
+        short_list_application_ids_for_novice_user_level=glabels
+        short_list_application_ids_for_intermediate_user_level=glabels
+        short_list_application_ids_for_advanced_user_level=glabels
diff --git a/data/mime/glabels.keys.in b/data/mime/glabels.keys.in
new file mode 100644 (file)
index 0000000..596c96c
--- /dev/null
@@ -0,0 +1,9 @@
+application/x-glabels:
+       open=glabels %f
+       _description=gLabels Project File
+        icon_filename=glabels-application-x-glabels.png
+        default_action_type=application
+       category=Documents
+        short_list_application_ids_for_novice_user_level=glabels
+        short_list_application_ids_for_intermediate_user_level=glabels
+        short_list_application_ids_for_advanced_user_level=glabels
diff --git a/data/mime/glabels.mime b/data/mime/glabels.mime
new file mode 100644 (file)
index 0000000..ab2f8cd
--- /dev/null
@@ -0,0 +1,2 @@
+application/x-glabels
+        ext: glabels
diff --git a/data/mime/glabels.xml b/data/mime/glabels.xml
new file mode 100644 (file)
index 0000000..f09cb35
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+   <mime-type type="application/x-glabels">
+     <comment>gLabels Project File</comment>
+     <comment xml:lang="ca">Fitxer de projecte del gLabels</comment>
+     <comment xml:lang="cs">Projektový soubor gLabels</comment>
+     <comment xml:lang="da">gLabels' projektfil</comment>
+     <comment xml:lang="de">gLabels-Projektdatei</comment>
+     <comment xml:lang="eo">Dosiero de Projekto de gLabels</comment>
+     <comment xml:lang="es">Archivo de projecto gLabels</comment>
+     <comment xml:lang="fr">Fichier de projet gLabels</comment>
+     <comment xml:lang="it">File di progetto di gLabels</comment>
+     <comment xml:lang="ja">gLabels のプロジェクト・ファイル</comment>
+     <comment xml:lang="ko">gLabels 프로젝트 파일</comment>
+     <comment xml:lang="pt">Propriedades de ficheiro gLabels</comment>
+     <comment xml:lang="ru">Файл проекта gLabels</comment>
+     <comment xml:lang="sl">Datoteka projekta gLabels</comment>
+     <comment xml:lang="sv">gLabels-projektfil</comment>
+     <comment xml:lang="zh_CN">gLabels工程文件</comment>
+     <glob pattern="*.glabels"/>
+   </mime-type>
+</mime-info>
\ No newline at end of file
diff --git a/data/mime/glabels.xml.in b/data/mime/glabels.xml.in
new file mode 100644 (file)
index 0000000..70f0e2f
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+   <mime-type type="application/x-glabels">
+     <_comment>gLabels Project File</_comment>
+     <glob pattern="*.glabels"/>
+   </mime-type>
+</mime-info>
+
diff --git a/data/pixmaps/Makefile.am b/data/pixmaps/Makefile.am
new file mode 100644 (file)
index 0000000..4cebb80
--- /dev/null
@@ -0,0 +1,26 @@
+## Process this file with automake to produce Makefile.in
+
+glabels_pixmapsdir = $(datadir)/pixmaps/glabels
+
+glabels_pixmaps_DATA = \
+       glabels-splash.png      \
+       glabels-about-logo.png  \
+       ex-rect-size.png        \
+       ex-round-size.png       \
+       ex-cd-size.png          \
+       ex-1layout.png          \
+       ex-2layouts.png         
+
+glabels_app_icondir = $(datadir)/pixmaps
+
+glabels_app_icon_DATA = \
+       glabels.png
+
+glabels_mime_icondir = $(datadir)/pixmaps
+
+glabels_mime_icon_DATA = \
+       glabels-application-x-glabels.png
+
+EXTRA_DIST = $(glabels_pixmaps_DATA)   \
+            $(glabels_app_icon_DATA)  \
+            $(glabels_mime_icon_DATA)
diff --git a/data/pixmaps/Makefile.in b/data/pixmaps/Makefile.in
new file mode 100644 (file)
index 0000000..5946c1d
--- /dev/null
@@ -0,0 +1,518 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data/pixmaps
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(glabels_app_icondir)" \
+       "$(DESTDIR)$(glabels_mime_icondir)" \
+       "$(DESTDIR)$(glabels_pixmapsdir)"
+DATA = $(glabels_app_icon_DATA) $(glabels_mime_icon_DATA) \
+       $(glabels_pixmaps_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+glabels_pixmapsdir = $(datadir)/pixmaps/glabels
+glabels_pixmaps_DATA = \
+       glabels-splash.png      \
+       glabels-about-logo.png  \
+       ex-rect-size.png        \
+       ex-round-size.png       \
+       ex-cd-size.png          \
+       ex-1layout.png          \
+       ex-2layouts.png         
+
+glabels_app_icondir = $(datadir)/pixmaps
+glabels_app_icon_DATA = \
+       glabels.png
+
+glabels_mime_icondir = $(datadir)/pixmaps
+glabels_mime_icon_DATA = \
+       glabels-application-x-glabels.png
+
+EXTRA_DIST = $(glabels_pixmaps_DATA)   \
+            $(glabels_app_icon_DATA)  \
+            $(glabels_mime_icon_DATA)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/pixmaps/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu data/pixmaps/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-glabels_app_iconDATA: $(glabels_app_icon_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(glabels_app_icondir)" || $(MKDIR_P) "$(DESTDIR)$(glabels_app_icondir)"
+       @list='$(glabels_app_icon_DATA)'; test -n "$(glabels_app_icondir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(glabels_app_icondir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(glabels_app_icondir)" || exit $$?; \
+       done
+
+uninstall-glabels_app_iconDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(glabels_app_icon_DATA)'; test -n "$(glabels_app_icondir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(glabels_app_icondir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(glabels_app_icondir)" && rm -f $$files
+install-glabels_mime_iconDATA: $(glabels_mime_icon_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(glabels_mime_icondir)" || $(MKDIR_P) "$(DESTDIR)$(glabels_mime_icondir)"
+       @list='$(glabels_mime_icon_DATA)'; test -n "$(glabels_mime_icondir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(glabels_mime_icondir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(glabels_mime_icondir)" || exit $$?; \
+       done
+
+uninstall-glabels_mime_iconDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(glabels_mime_icon_DATA)'; test -n "$(glabels_mime_icondir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(glabels_mime_icondir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(glabels_mime_icondir)" && rm -f $$files
+install-glabels_pixmapsDATA: $(glabels_pixmaps_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(glabels_pixmapsdir)" || $(MKDIR_P) "$(DESTDIR)$(glabels_pixmapsdir)"
+       @list='$(glabels_pixmaps_DATA)'; test -n "$(glabels_pixmapsdir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(glabels_pixmapsdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(glabels_pixmapsdir)" || exit $$?; \
+       done
+
+uninstall-glabels_pixmapsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(glabels_pixmaps_DATA)'; test -n "$(glabels_pixmapsdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(glabels_pixmapsdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(glabels_pixmapsdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(glabels_app_icondir)" "$(DESTDIR)$(glabels_mime_icondir)" "$(DESTDIR)$(glabels_pixmapsdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-glabels_app_iconDATA \
+       install-glabels_mime_iconDATA install-glabels_pixmapsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-glabels_app_iconDATA \
+       uninstall-glabels_mime_iconDATA uninstall-glabels_pixmapsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-glabels_app_iconDATA \
+       install-glabels_mime_iconDATA install-glabels_pixmapsDATA \
+       install-html install-html-am install-info install-info-am \
+       install-man install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am uninstall uninstall-am uninstall-glabels_app_iconDATA \
+       uninstall-glabels_mime_iconDATA uninstall-glabels_pixmapsDATA
+
+
+# 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/data/pixmaps/ex-1layout.png b/data/pixmaps/ex-1layout.png
new file mode 100644 (file)
index 0000000..3045c5f
Binary files /dev/null and b/data/pixmaps/ex-1layout.png differ
diff --git a/data/pixmaps/ex-2layouts.png b/data/pixmaps/ex-2layouts.png
new file mode 100644 (file)
index 0000000..1bb5931
Binary files /dev/null and b/data/pixmaps/ex-2layouts.png differ
diff --git a/data/pixmaps/ex-cd-size.png b/data/pixmaps/ex-cd-size.png
new file mode 100644 (file)
index 0000000..68261f0
Binary files /dev/null and b/data/pixmaps/ex-cd-size.png differ
diff --git a/data/pixmaps/ex-rect-size.png b/data/pixmaps/ex-rect-size.png
new file mode 100644 (file)
index 0000000..2710472
Binary files /dev/null and b/data/pixmaps/ex-rect-size.png differ
diff --git a/data/pixmaps/ex-round-size.png b/data/pixmaps/ex-round-size.png
new file mode 100644 (file)
index 0000000..c45d6c3
Binary files /dev/null and b/data/pixmaps/ex-round-size.png differ
diff --git a/data/pixmaps/glabels-about-logo.png b/data/pixmaps/glabels-about-logo.png
new file mode 100644 (file)
index 0000000..9997c67
Binary files /dev/null and b/data/pixmaps/glabels-about-logo.png differ
diff --git a/data/pixmaps/glabels-application-x-glabels.png b/data/pixmaps/glabels-application-x-glabels.png
new file mode 100644 (file)
index 0000000..59c749f
Binary files /dev/null and b/data/pixmaps/glabels-application-x-glabels.png differ
diff --git a/data/pixmaps/glabels-splash.png b/data/pixmaps/glabels-splash.png
new file mode 100644 (file)
index 0000000..713cb8a
Binary files /dev/null and b/data/pixmaps/glabels-splash.png differ
diff --git a/data/pixmaps/glabels.png b/data/pixmaps/glabels.png
new file mode 100644 (file)
index 0000000..afb7ecf
Binary files /dev/null and b/data/pixmaps/glabels.png differ
diff --git a/data/templates/Makefile.am b/data/templates/Makefile.am
new file mode 100644 (file)
index 0000000..4d38e06
--- /dev/null
@@ -0,0 +1,20 @@
+## Process this file with automake to produce Makefile.in
+
+templatesdir = $(datadir)/glabels/templates
+
+templates_DATA = \
+       paper-sizes.xml \
+       categories.xml \
+       avery-iso-templates.xml \
+       avery-other-templates.xml \
+       avery-us-templates.xml \
+       brother-other-templates.xml \
+       dymo-other-templates.xml \
+       misc-iso-templates.xml \
+       misc-other-templates.xml \
+       misc-us-templates.xml \
+       pearl-templates.xml \
+       zweckform-iso-templates.xml
+
+EXTRA_DIST = $(templates_DATA)
+
diff --git a/data/templates/Makefile.in b/data/templates/Makefile.in
new file mode 100644 (file)
index 0000000..c60ec5f
--- /dev/null
@@ -0,0 +1,465 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data/templates
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(templatesdir)"
+DATA = $(templates_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+templatesdir = $(datadir)/glabels/templates
+templates_DATA = \
+       paper-sizes.xml \
+       categories.xml \
+       avery-iso-templates.xml \
+       avery-other-templates.xml \
+       avery-us-templates.xml \
+       brother-other-templates.xml \
+       dymo-other-templates.xml \
+       misc-iso-templates.xml \
+       misc-other-templates.xml \
+       misc-us-templates.xml \
+       pearl-templates.xml \
+       zweckform-iso-templates.xml
+
+EXTRA_DIST = $(templates_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/templates/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu data/templates/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-templatesDATA: $(templates_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(templatesdir)" || $(MKDIR_P) "$(DESTDIR)$(templatesdir)"
+       @list='$(templates_DATA)'; test -n "$(templatesdir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(templatesdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(templatesdir)" || exit $$?; \
+       done
+
+uninstall-templatesDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(templates_DATA)'; test -n "$(templatesdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(templatesdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(templatesdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(templatesdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-templatesDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-templatesDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       install-templatesDATA installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am uninstall-templatesDATA
+
+
+# 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/data/templates/avery-iso-templates.xml b/data/templates/avery-iso-templates.xml
new file mode 100644 (file)
index 0000000..269c926
--- /dev/null
@@ -0,0 +1,316 @@
+<?xml version="1.0"?>
+<Glabels-templates>
+
+
+  <!-- ******************************************************************** -->
+  <!-- Avery A4 products (and look-alikes)                                  -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- Avery L4732 family: Mini Labels                                     -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="L4732" size="A4" _description="Mini Labels">
+    <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Label-rectangle id="0" width="35.6mm" height="16.9mm" round="1.5mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="1mm"/>
+      <Layout nx="5" ny="16" x0="11mm" y0="13mm" dx="38.1mm" dy="16.9mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery L6015 family: CD/DVD Labels, 2 per sheet                      -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="L6015" size="A4" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="165.827pt" hole="58.1102pt" waste="9.07087pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="2" x0="131.811pt" y0="60.6614pt" dx="349.795pt" dy="392.4pt"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 6121 family: Allround labels.                                 -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="6121" size="A4" _description="Allround labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="107.928pt" height="60.12pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="8.496pt"/>
+      <Layout nx="5" ny="13" x0="26.928pt" y0="29.736pt" dx="107.928pt" dy="60.12pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 7160 family: Mailing labels, 63.5 x 38.1 mm, 21 per sheet     -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="7160" size="A4" _description="Mailing labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="181.4" height="108.0" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="7" x0="21.2" y0="43.9" dx="187.2" dy="108.0"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="L7160"/>
+    <Alias brand="Avery" part="J8160"/>
+    <Alias brand="DECAdry" part="DLW-1731"/>
+    <Alias brand="DECAdry" part="OLW-4731"/>
+    <Alias brand="DECAdry" part="OLW-7131"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 7161 family: Mailing labels, 63.5 x 46.6 mm, 18 per sheet     -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="7161" size="A4" _description="Mailing labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="180.2" height="132.6" round="7">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="6" x0="21" y0="23" dx="186.9" dy="132.5"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="L7161"/>
+    <Alias brand="Avery" part="J8161"/>
+  </Template>
+
+  <!-- ================================================================== -->  
+  <!-- Avery 7162 family: Mailing labels, 99.1 x 33.9 mm, 16 per sheet    -->  
+  <!-- ================================================================== -->  
+  <Template brand="Avery" part="7162" size="A4" _description="Mailing labels">  
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="280.9" height="96.1" round="5">  
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="8" x0="11.3" y0="36.8" dx="290.5" dy="96.1"/>  
+    </Label-rectangle>  
+    <Alias brand="Avery" part="L7162"/>  
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 7163 family: Mailing labels, 99.1 x 38.1 mm, 14 per sheet     -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="7163" size="A4" _description="Mailing labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="280.9" height="108" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="7" x0="9.5" y0="43" dx="292" dy="108"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="L7163"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 7164 family: Address labels, 63.50 x 71.98 mm, 12 per sheet   -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="7164" size="A4" _description="Address labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="180" height="204.038" round="8.5">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="4" x0="20.84" y0="10" dx="187.08" dy="204.038"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="J8164"/>
+    <Alias brand="Avery" part="L7164"/>
+    <Alias brand="Biltema" part="23-756"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 7165 family: Address labels                                   -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="7165" size="A4" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="280.8pt" height="191.991pt" round="0pt" waste="0pt">
+      <Markup-margin size="5.66929pt"/>
+      <Layout nx="2" ny="4" x0="13.2378pt" y0="36.9638pt" dx="288.113pt" dy="191.991pt"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="J8165"/>
+    <Alias brand="Avery" part="L7165"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 7169 family: shipping labels, 99.1 x 139.0 mm, 4 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="7169" size="A4" _description="Shipping labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="280.9" height="394.0" round="6">
+      <Markup-margin size="6"/>
+      <Layout nx="2" ny="2" x0="14.2" y0="20.0" dx="287.7" dy="394.0"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="L7169"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 7414 family: Business Cards, 52mm x 90mm, 10 per sheet        -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="7414" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="255.1" height="147.4" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="42.51" y0="52.44" dx="255.1" dy="147.4"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="L7414"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 7664 family: Diskette Labels, 70mm x 71.9 mm, 8 per sheet     -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="7664" size="A4" _description="Diskette Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="70mm" height="71.9mm" round="2.5mm">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="4" x0="17mm" y0="5mm" dx="104.5mm" dy="72mm"/> 
+    </Label-rectangle>
+    <Alias brand="Avery" part="L7664"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery L7676 family: CD/DVD Labels, 2 per sheet                      -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="L7676" size="A4" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="165.827pt" hole="24.9449pt" waste="5.66929pt">
+      <Markup-margin size="5.66929pt"/>
+      <Layout nx="1" ny="2" x0="131.811pt" y0="62.3622pt" dx="342.992pt" dy="388.346pt"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 8414 family: Business Cards, 50.8 x 87.0 mm, 10 per sheet     -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="8414" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="246.6" height="144" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="42" y0="57.890" dx="264" dy="144"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="J8414"/>
+  </Template>
+
+  <!-- =============================================================== -->
+  <!-- Avery J8435: CD Inlets Booklet part                         -->
+  <!-- =============================================================== -->
+  <Template brand="Avery" part="8435A" size="A4" _description="CD Booklet">
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="155mm" height="125mm" round="0">
+      <Markup-margin size="2mm"/>
+      <Markup-line x1="32mm" y1="0mm" x2="32mm" y2="125mm"/>
+      <Layout nx="1" ny="1" x0="27.5mm" y0="22mm" dx="155mm" dy="125mm"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="J8435A"/>
+    <Alias brand="Avery" part="32250A"/>
+    <Alias brand="Zweckform" part="32250A"/>
+    <Alias brand="Zweckform" part="J8435A"/>
+  </Template>
+
+  <!-- =============================================================== -->
+  <!-- Avery J8435: CD Inlets Inlet part                           -->
+  <!-- =============================================================== -->
+  <Template brand="Avery" part="8435B" size="A4" _description="CD Inlet">
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="155mm" height="122mm" round="0">
+      <Markup-margin size="2mm"/>
+      <Markup-line x1="8.5mm" y1="0mm" x2="8.5mm" y2="122mm"/>
+      <Markup-line x1="146.5mm" y1="0mm" x2="146.5mm" y2="122mm"/>
+      <Layout nx="1" ny="1" x0="27.5mm" y0="21mm" dx="155mm" dy="122mm"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="J8435B"/>
+    <Alias brand="Avery" part="32250B"/>
+    <Alias brand="Zweckform" part="32250B"/>
+    <Alias brand="Zweckform" part="J8435B"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 8651 family: Mailing labels, 38.1 x 21.2 mm, 65 per sheet     -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="8651" size="A4" _description="Mini Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="108" height="60.09" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="5" ny="13" x0="13.32" y0="30.90" dx="115.09" dy="60.09"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="L8651"/>
+    <Alias brand="Avery" part="J8651"/>
+    <Alias brand="Avery" part="J8551"/>
+    <Alias brand="Avery" part="L7651"/>
+    <Alias brand="Avery" part="L7551"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 8666 family: Diskette labels (face only), 70 x 52 mm, 10 per  -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="8666" size="A4" _description="Diskette labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="198.4" height="147.4" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="66" y0="53" dx="264" dy="147"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="J8666"/>
+  </Template>
+
+  <!-- =============================================================== -->
+  <!-- Avery J8676A: CD/DVD Labels 2 per sheet                         -->
+  <!-- =============================================================== -->
+  <Template brand="Avery" part="8676" size="A4" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5" hole="17" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="2" x0="130" y0="59.5" dx="0" dy="388"/>        
+    </Label-cd>
+    <Alias brand="Avery" part="J8676"/>
+  </Template>
+
+  <!-- =============================================================== -->
+  <!-- Avery 18036 Mailing Labels, 70mm x 32mm, 27 per sheet           -->
+  <!-- =============================================================== -->
+  <Template brand="Avery" part="18036" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="198" height="91" round="0">
+      <Markup-margin size="10"/>
+      <Layout nx="3" ny="9" x0="0" y0="13" dx="198" dy="91"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- ============================================================ -->
+  <!-- Avery 32015: Business Cards                                  -->
+  <!-- ============================================================ -->
+  <Template brand="Avery" part="32015" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="85mm" height="54mm" round="0mm">
+      <Markup-margin size="5mm"/>
+      <Layout nx="2" ny="4" x0="17mm" y0="31.5mm" dx="91mm" dy="60mm"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="C32015"/>
+    <Alias brand="Zweckform" part="32015"/>
+  </Template>
+
+
+  <!-- ============================================================ -->
+  <!-- Avery 38931 Family: Rectangular Labels                       -->
+  <!-- ============================================================ -->
+  <Template brand="Avery" part="38931" size="A4" description="Rectangular Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="70mm" height="25mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3mm"/>
+      <Layout nx="3" ny="11" x0="0mm" y0="10mm" dx="70mm" dy="25mm"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="DL33"/>
+    <Alias brand="Avery" part="CR33"/>
+  </Template>
+
+
+</Glabels-templates>
+
+
+
+
diff --git a/data/templates/avery-other-templates.xml b/data/templates/avery-other-templates.xml
new file mode 100644 (file)
index 0000000..796657c
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<Glabels-templates xmlns="http://snaught.com/glabels/2.0/">
+
+
+  <!-- ******************************************************************** -->
+  <!-- Avery non-standard size products (not US-Letter/Legal or ISO)        -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- Avery 06141 family: File Folder Labels, 5/8'' x 2_3/4'', 7 per sheet-->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="06141" size="Other" width="207pt" height="351pt"
+            _description="File Folder Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="198pt" height="45pt" round="4.5pt" waste="0pt">
+      <Markup-margin size="4.5pt"/>
+      <Layout nx="1" ny="7" x0="4.5pt" y0="4.5pt" dx="198pt" dy="49.5pt"/>
+    </Label-rectangle>
+  </Template>
+
+
+</Glabels-templates>
diff --git a/data/templates/avery-us-templates.xml b/data/templates/avery-us-templates.xml
new file mode 100644 (file)
index 0000000..2c2bab6
--- /dev/null
@@ -0,0 +1,807 @@
+<?xml version="1.0"?>
+<Glabels-templates>
+
+
+  <!-- ******************************************************************** -->
+  <!-- ******************************************************************** -->
+  <!--                                                                      -->
+  <!-- Avery US-Letter products (and look-alikes)                           -->
+  <!--                                                                      -->
+  <!-- ******************************************************************** -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- Avery 5160 family: Address Labels, 1'' x 2_5/8'', 30 per sheet    x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5160" size="US-Letter" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="2.625in" height="1in" round="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="3" ny="10" x0="0.1875in" y0="0.5in" dx="2.75in" dy="1in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5260"/>
+    <Alias brand="Avery" part="5510"/>
+    <Alias brand="Avery" part="5520"/>
+    <Alias brand="Avery" part="5560"/>
+    <Alias brand="Avery" part="5810"/>
+    <Alias brand="Avery" part="5920"/>
+    <Alias brand="Avery" part="5960"/>
+    <Alias brand="Avery" part="5970"/>
+    <Alias brand="Avery" part="5971"/>
+    <Alias brand="Avery" part="5972"/>
+    <Alias brand="Avery" part="5979"/>
+    <Alias brand="Avery" part="5980"/>
+    <Alias brand="Avery" part="6231"/>
+    <Alias brand="Avery" part="6233"/>
+    <Alias brand="Avery" part="6245"/>
+    <Alias brand="Avery" part="6460"/>
+    <Alias brand="Avery" part="6498"/>
+    <Alias brand="Avery" part="8160"/>
+    <Alias brand="Avery" part="8250"/>
+    <Alias brand="Avery" part="8460"/>
+    <Alias brand="Avery" part="8560"/>
+    <Alias brand="Avery" part="8620"/>
+    <Alias brand="Avery" part="8660"/>
+    <Alias brand="Avery" part="8810"/>
+    <Alias brand="Avery" part="8920"/>
+    <Alias brand="Avery" part="8930"/>
+    <Alias brand="Avery" part="15160"/>
+    <Alias brand="Avery" part="18160"/>
+    <Alias brand="Avery" part="18660"/>
+    <Alias brand="Avery" part="25160"/>
+    <!-- Look alikes -->
+    <Alias brand="Maco" part="ll5805"/>
+    <Alias brand="Worldlabel" part="OL875"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5161 family: Address Labels, 1'' x 4'', 20 per sheet        x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5161" size="US-Letter" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="4in" height="1in" round="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="10" x0="0.15625in" y0="0.5in" dx="4.1875in" dy="1in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5261"/>
+    <Alias brand="Avery" part="5961"/>
+    <Alias brand="Avery" part="8161"/>
+    <Alias brand="Avery" part="8461"/>
+    <Alias brand="Avery" part="18161"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL75"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5162 family: Address Labels, 1_1/3'' x 4'', 14 per sheet    x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5162" size="US-Letter" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="4in" height="1.333333333in" round="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="7"
+              x0="0.15625in" y0="0.833333333in" dx="4.1875in" dy="1.333333333in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5262"/>
+    <Alias brand="Avery" part="5512"/>
+    <Alias brand="Avery" part="5522"/>
+    <Alias brand="Avery" part="5922"/>
+    <Alias brand="Avery" part="5962"/>
+    <Alias brand="Avery" part="8162"/>
+    <Alias brand="Avery" part="8252"/>
+    <Alias brand="Avery" part="8462"/>
+    <Alias brand="Avery" part="8662"/>
+    <Alias brand="Avery" part="8922"/>
+    <Alias brand="Avery" part="8932"/>
+    <Alias brand="Avery" part="15162"/>
+    <Alias brand="Avery" part="18162"/>
+    <Alias brand="Avery" part="18662"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL100"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5305 family: Tent Cards, 2_1/2'' x 8_1/2'', 2 per sheet       -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5305" size="US-Letter" _description="Tent Cards">
+    <Meta category="card"/>
+    <Label-rectangle id="0" width="612pt" height="180pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="27pt"/>
+      <Layout nx="1" ny="2" x0="0pt" y0="216pt" dx="0pt" dy="360pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 6879 family: Address Labels, 1_1/4'' x 3_3/4'', 12 per sheetx -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="6879" size="US-Letter" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="3.75in" height="1.25in" round="0.0625in" waste="5pt">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="6" x0="0.375in" y0="1.125in" dx="4in" dy="1.5in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="8769"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5159 family: Address Labels, 1_1/2'' x 4'', 14 per sheet      -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5159" size="US-Letter" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="4in" height="1.5in" round="0.0625in" waste="0in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="7" x0="0.15625in" y0="0.25in" dx="4.1875in" dy="1.5in"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5163 family: Shipping Labels, 4'' x 2'', 10 per sheet       x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5163" size="US-Letter" _description="Shipping Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="4in" height="2in" round="0.125in">
+      <Markup-margin size="0.125in"/>
+      <Layout nx="2" ny="5" x0="0.1625in" y0="0.5in" dx="4.1875in" dy="2in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5263"/>
+    <Alias brand="Avery" part="5513"/>
+    <Alias brand="Avery" part="5523"/>
+    <Alias brand="Avery" part="5795"/>
+    <Alias brand="Avery" part="5923"/>
+    <Alias brand="Avery" part="5963"/>
+    <Alias brand="Avery" part="5978"/>
+    <Alias brand="Avery" part="8163"/>
+    <Alias brand="Avery" part="8253"/>
+    <Alias brand="Avery" part="8463"/>
+    <Alias brand="Avery" part="8663"/>
+    <Alias brand="Avery" part="8763"/>
+    <Alias brand="Avery" part="8923"/>
+    <Alias brand="Avery" part="15163"/>
+    <Alias brand="Avery" part="18163"/>
+    <Alias brand="Avery" part="18663"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL125"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5164 family: Shipping Labels. 4'' x 3_1/3'', 6 per sheet    x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5164" size="US-Letter" _description="Shipping Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="4in" height="3.333333333in" round="0.125in">
+      <Markup-margin size="0.125in"/>
+      <Layout nx="2" ny="3" x0="0.15625in" y0="0.5in" dx="4.1875in" dy="3.333333333in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5264"/>
+    <Alias brand="Avery" part="5514"/>
+    <Alias brand="Avery" part="5524"/>
+    <Alias brand="Avery" part="6464"/>
+    <Alias brand="Avery" part="6499"/>
+    <Alias brand="Avery" part="8164"/>
+    <Alias brand="Avery" part="8254"/>
+    <Alias brand="Avery" part="8464"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL150"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5168 family:  Shipping Labels 5'' x 3_1/2'', 4 per sheet      -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5168" size="US-Letter" _description="Shipping Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="3.5in" height="5in" round="0.0625in" waste="0in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="2" x0="0.5in" y0="0.5in" dx="4in" dy="5in"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5167 family: Address Labels, 1_3/4'' x 1/2'', 80 per sheet  x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5167" size="US-Letter" _description="Return Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="1.75in" height="0.5in" round="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="4" ny="20" x0="0.28125in" y0="0.5in" dx="2.0625in" dy="0.5in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5267"/>
+    <Alias brand="Avery" part="5667"/>
+    <Alias brand="Avery" part="5927"/>
+    <Alias brand="Avery" part="6467"/>
+    <Alias brand="Avery" part="6504"/>
+    <Alias brand="Avery" part="8167"/>
+    <Alias brand="Avery" part="8567"/>
+    <Alias brand="Avery" part="8667"/>
+    <Alias brand="Avery" part="8927"/>
+    <Alias brand="Avery" part="15167"/>
+    <Alias brand="Avery" part="15267"/>
+    <Alias brand="Avery" part="18167"/>
+    <Alias brand="Avery" part="18667"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL25"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5196 family: Diskette Labels, 2_3/4'' x 2_3/4'', 9 per sheetx -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5196" size="US-Letter" _description="Diskette Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="2.75in" height="2.75in" round="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="3" ny="3" x0="0.125in" y0="0.5in" dx="2.75in" dy="3in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5096"/>
+    <Alias brand="Avery" part="5896"/>
+    <Alias brand="Avery" part="5996"/>
+    <Alias brand="Avery" part="8196"/>
+    <Alias brand="Avery" part="8197"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL225"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5197 family: Mailing Labels                                   -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5197" size="US-Letter" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="4in" height="1.5in" round="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="6" x0="0.1875in" y0="1in" dx="4.125in" dy="1.5in"/>
+    </Label-rectangle>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL250"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5193 family: Round Labels                                     -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5193" size="US-Letter" _description="Round Labels">
+    <Meta category="label"/>
+    <Meta category="round-label"/>
+    <Label-round id="0" radius="0.8125in" waste="0pt">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="4" ny="6" x0="0.4157in" y0="0.549in" dx="2.0145in" dy="1.6554in"/>
+    </Label-round>
+    <Alias brand="Avery" part="5293"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL325"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5194 family: Round Labels, 12 per sheet.                      -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5194" size="US-Letter" _description="Round Labels">
+    <Meta category="label"/>
+    <Meta category="round-label"/>
+    <Label-round id="0" radius="1.25in" waste="0pt">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="3" ny="4" x0="0.21in" y0="0.425in" dx="2.75in" dy="2.515in"/>
+    </Label-round>
+    <Alias brand="Avery" part="5294"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL350"/>
+    <Alias brand="Maco" part="ML-1225"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5195 family: Round Labels                                     -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5195" size="US-Letter" _description="Round Labels">
+    <Meta category="label"/>
+    <Meta category="round-label"/>
+    <Label-round id="0" radius="1.65625in" waste="0pt">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="3" x0="0.6406in" y0="0.4844in" dx="3.9063in" dy="3.3594in"/>
+    </Label-round>
+    <Alias brand="Avery" part="5295"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL375"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5663 family: Mailing Labels                                   -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5663" size="US-Letter" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="4.25in" height="2in" round="0in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="5" x0="0in" y0="0.5in" dx="4.25in" dy="2in"/>
+    </Label-rectangle>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL625"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 6490 family: Diskette Labels, 2_11/16'' x 2'', 15 per sheet x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="6490" size="US-Letter" _description="Diskette Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="2.6875in" height="2in" round="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="3" ny="5" x0="0.125in" y0="0.5in" dx="2.78125in" dy="2in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="6501"/>
+    <Alias brand="Avery" part="6861"/>
+    <Alias brand="Avery" part="8096"/>
+  </Template> 
+
+  <!-- =================================================================== -->
+  <!-- Avery 5366 family: Filing Labels, 2/3'' x 3_7/16'', 30 per sheet  x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5366" size="US-Letter" _description="Filing Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="3.4375in" height="0.666666667in" round="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="15" x0="0.53125in" y0="0.5in" dx="4in" dy="0.666666667in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5066"/>
+    <Alias brand="Avery" part="5166"/>
+    <Alias brand="Avery" part="5266"/>
+    <Alias brand="Avery" part="5268"/>
+    <Alias brand="Avery" part="5368"/>
+    <Alias brand="Avery" part="5378"/>
+    <Alias brand="Avery" part="5666"/>
+    <Alias brand="Avery" part="5766"/>
+    <Alias brand="Avery" part="5866"/>
+    <Alias brand="Avery" part="5966"/>
+    <Alias brand="Avery" part="6368"/>
+    <Alias brand="Avery" part="6466"/>
+    <Alias brand="Avery" part="6468"/>
+    <Alias brand="Avery" part="6500"/>
+    <Alias brand="Avery" part="6505"/>
+    <Alias brand="Avery" part="6865"/>
+    <Alias brand="Avery" part="8066"/>
+    <Alias brand="Avery" part="8166"/>
+    <Alias brand="Avery" part="8366"/>
+    <Alias brand="Avery" part="8478"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL200"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5371 family: Business Cards, 2'' x 3_1/2'', 10 per sheet    x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5371" size="US-Letter" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="3.5in" height="2in" round="0">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="5" x0="0.75in" y0="0.5in" dx="3.5in" dy="2in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5372"/>
+    <Alias brand="Avery" part="5376"/>
+    <Alias brand="Avery" part="5377"/>
+    <Alias brand="Avery" part="5871"/>
+    <Alias brand="Avery" part="5872"/>
+    <Alias brand="Avery" part="5873"/>
+    <Alias brand="Avery" part="5876"/>
+    <Alias brand="Avery" part="5877"/>
+    <Alias brand="Avery" part="5878"/>
+    <Alias brand="Avery" part="5911"/>
+    <Alias brand="Avery" part="6235"/>
+    <Alias brand="Avery" part="8271"/>
+    <Alias brand="Avery" part="8371"/>
+    <Alias brand="Avery" part="8372"/>
+    <Alias brand="Avery" part="8374"/>
+    <Alias brand="Avery" part="8376"/>
+    <Alias brand="Avery" part="8377"/>
+    <Alias brand="Avery" part="8379"/>
+    <Alias brand="Avery" part="8471"/>
+    <Alias brand="Avery" part="8476"/>
+    <Alias brand="Avery" part="8571"/>
+    <Alias brand="Avery" part="8871"/>
+    <Alias brand="Avery" part="8872"/>
+    <Alias brand="Avery" part="8873"/>
+    <Alias brand="Avery" part="8876"/>
+    <Alias brand="Avery" part="8877"/>
+    <Alias brand="Avery" part="8878"/>
+    <Alias brand="Avery" part="8879"/>
+    <Alias brand="Avery" part="25371"/>
+    <Alias brand="Avery" part="26550"/>
+    <Alias brand="Avery" part="26551"/>
+    <Alias brand="Avery" part="27870"/>
+    <Alias brand="Avery" part="27876"/>
+    <Alias brand="Avery" part="27871"/>
+    <Alias brand="Avery" part="27881"/>
+    <Alias brand="Avery" part="27882"/>
+    <Alias brand="Avery" part="28371"/>
+    <Alias brand="Avery" part="28373"/>
+    <Alias brand="Avery" part="28876"/>
+    <Alias brand="Avery" part="28877"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5388 family: Index Cards, 5'' x 3'', 3 per sheet              -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5388" size="US-Letter" _description="Index Cards">
+    <Meta category="card"/>
+    <Label-rectangle id="0" width="5in" height="3in" round="0pt" waste="0pt">
+      <Markup-margin size="0.125in"/>
+      <Layout nx="1" ny="3" x0="1.75in" y0="1in" dx="5in" dy="3in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5386"/>
+    <Alias brand="Avery" part="8388"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5389 family: Post Cards, 6'' x 4'', 2 per sheet               -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5389" size="US-Letter" _description="Post cards">
+    <Meta category="card"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="6in" height="4in" round="0pt" waste="0pt">
+      <Markup-margin size="0.125in"/>
+      <Layout nx="1" ny="2" x0="1.25in" y0="1.25in" dx="6in" dy="4.5in"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 8195 family: Return address labels                            -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="8195" size="US-Letter" _description="Return Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="1.75in" height="0.666in" round="0.063in" x_waste="0in" y_waste="0in">
+      <Markup-margin size="0.125in"/>
+      <Layout nx="4" ny="15" x0="0.297in" y0="0.531in" dx="2.031in" dy="0.666in"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 8373 family: Business Cards, 2'' x 3_1/2'', 8 per sheet     x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="8373" size="US-Letter" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="3.5in" height="2in" round="0" waste="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="4" x0="0.5in" y0="0.75in" dx="4in" dy="2.5in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="3612"/>
+    <Alias brand="Avery" part="5881"/>
+    <Alias brand="Avery" part="28373"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5395 family: Name Badge Labels, 2_1/3'' x 3_3/8'', 8 per sheetx -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5395" size="US-Letter" _description="Name Badge Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="3.375in" height="2.333333333in" round="0.1875in" waste="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="2" ny="4" x0="0.6875in" y0="0.583333333in" dx="3.75in" dy="2.5in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5095"/>
+    <Alias brand="Avery" part="5895"/>
+    <Alias brand="Avery" part="8395"/>
+    <Alias brand="Avery" part="15395"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5824 family: CD/DVD Labels (face only), 2 per sheet         * -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5824" size="US-Letter" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5pt" hole="58.5pt" waste="9pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="2" x0="144pt" y0="36pt" dx="351pt" dy="396pt"/>
+    </Label-cd>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL1200"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5931 family: CD/DVD Labels (face only), 2 per sheet         x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5931-Disc" size="US-Letter"
+         _description="CD/DVD Labels (Disc Labels)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="2.3125in" hole="0.8125in" waste="0.0625in">
+      <Markup-margin size="0.0625in"/>
+      <Markup-line x1="0" y1="2.3125in" x2="1.5in" y2="2.3125in"/>
+      <Markup-line x1="3.125in" y1="2.3125in" x2="4.625in" y2="2.3125in"/>
+      <Markup-line x1="2.3125in" y1="0" x2="2.3125in" y2="1.5in"/>
+      <Markup-line x1="2.3125in" y1="3.125in" x2="2.3125in" y2="4.625in"/>
+      <Layout nx="1" ny="2" x0="1.9375in" y0="0.6875in" dx="0" dy="5in"/>
+    </Label-cd>
+    <Alias brand="Avery" part="5691-Disc"/>
+    <Alias brand="Avery" part="5692-Disc"/>
+    <Alias brand="Avery" part="5694-Disc"/>
+    <Alias brand="Avery" part="5698-Disc"/>
+    <Alias brand="Avery" part="6692-Disc"/>
+    <Alias brand="Avery" part="8536-Disc"/>
+    <Alias brand="Avery" part="8691-Disc"/>
+    <Alias brand="Avery" part="8692-Disc"/>
+    <Alias brand="Avery" part="8694-Disc"/>
+    <Alias brand="Avery" part="8695-Disc"/>
+    <Alias brand="Avery" part="8699-Disc"/>
+    <Alias brand="Avery" part="8831-Disc"/>
+    <Alias brand="Avery" part="8832-Disc"/>
+    <Alias brand="Avery" part="8842-Disc"/>
+    <Alias brand="Avery" part="8844-Disc"/>
+    <Alias brand="Avery" part="8846-Disc"/>
+    <Alias brand="Avery" part="8847-Disc"/>
+    <Alias brand="Avery" part="8931-Disc"/>
+    <Alias brand="Avery" part="8941-Disc"/>
+    <Alias brand="Avery" part="8942-Disc"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL5075"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5931 family: CD/DVD Labels (spine only), 4 per sheet        x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5931-Spine" size="US-Letter" 
+         _description="CD/DVD Labels (Spine Labels)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="0.21875in" height="4.6875in" round="0.0625in" waste="0.0625in">
+      <Layout nx="2" ny="2" x0="0.5in" y0="0.734375in" dx="0.46875in" dy="4.84375in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5691-Spine"/>
+    <Alias brand="Avery" part="5692-Spine"/>
+    <Alias brand="Avery" part="5694-Spine"/>
+    <Alias brand="Avery" part="5698-Spine"/>
+    <Alias brand="Avery" part="6692-Spine"/>
+    <Alias brand="Avery" part="8536-Spine"/>
+    <Alias brand="Avery" part="8691-Spine"/>
+    <Alias brand="Avery" part="8692-Spine"/>
+    <Alias brand="Avery" part="8694-Spine"/>
+    <Alias brand="Avery" part="8695-Spine"/>
+    <Alias brand="Avery" part="8699-Spine"/>
+    <Alias brand="Avery" part="8831-Spine"/>
+    <Alias brand="Avery" part="8832-Spine"/>
+    <Alias brand="Avery" part="8842-Spine"/>
+    <Alias brand="Avery" part="8844-Spine"/>
+    <Alias brand="Avery" part="8846-Spine"/>
+    <Alias brand="Avery" part="8847-Spine"/>
+    <Alias brand="Avery" part="8931-Spine"/>
+    <Alias brand="Avery" part="8941-Spine"/>
+    <Alias brand="Avery" part="8942-Spine"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5997face family: VCR Labels, 1_7/8'' x 3_1/16'', 10 per sheet -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5997-Face" size="US-Letter"
+         _description="Video Tape Face Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="220" height="133" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="80" y0="60.5" dx="236" dy="133"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5199-Face"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL1125"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5997spine family: VCR Labels, 2/3'' x 5_3/4'',15 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5997-Spine" size="US-Letter"
+        _description="Video Tape Spine Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="414" height="48" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="15" x0="99" y0="36" dx="0" dy="48"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="5199-Spine"/>
+    <!-- Look alikes -->
+    <Alias brand="Worldlabel" part="OL1150"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 6570 family: ID Labels.                                       -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="6570" size="US-Letter" _description="ID Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="126pt" height="90pt" round="4.464pt" x_waste="6.768pt" y_waste="0pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="4" ny="8" x0="36pt" y0="36pt" dx="139.536pt" dy="90pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 8165 family: Full-page label, 8_1/2'' x 11'', 1 per sheet   x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="8165" size="US-Letter" _description="Full Sheet Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="8.5in" height="11.in" round="0">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="3114"/>
+    <Alias brand="Avery" part="3121"/>
+    <Alias brand="Avery" part="3123"/>
+    <Alias brand="Avery" part="3131"/>
+    <Alias brand="Avery" part="3132"/>
+    <Alias brand="Avery" part="3133"/>
+    <Alias brand="Avery" part="3141"/>
+    <Alias brand="Avery" part="3142"/>
+    <Alias brand="Avery" part="3145"/>
+    <Alias brand="Avery" part="3245"/>
+    <Alias brand="Avery" part="3246"/>
+    <Alias brand="Avery" part="3247"/>
+    <Alias brand="Avery" part="3255"/>
+    <Alias brand="Avery" part="3267"/>
+    <Alias brand="Avery" part="3270"/>
+    <Alias brand="Avery" part="3271"/>
+    <Alias brand="Avery" part="3272"/>
+    <Alias brand="Avery" part="3275"/>
+    <Alias brand="Avery" part="3276"/>
+    <Alias brand="Avery" part="3277"/>
+    <Alias brand="Avery" part="3614"/>
+    <Alias brand="Avery" part="3625"/>
+    <Alias brand="Avery" part="3641"/>
+    <Alias brand="Avery" part="3651"/>
+    <Alias brand="Avery" part="5165"/>
+    <Alias brand="Avery" part="5177"/>
+    <Alias brand="Avery" part="5182"/>
+    <Alias brand="Avery" part="5265"/>
+    <Alias brand="Avery" part="5277"/>
+    <Alias brand="Avery" part="5282"/>
+    <Alias brand="Avery" part="5884"/>
+    <Alias brand="Avery" part="5975"/>
+    <Alias brand="Avery" part="6465"/>
+    <Alias brand="Avery" part="6503"/>
+    <Alias brand="Avery" part="8255"/>
+    <Alias brand="Avery" part="8314"/>
+    <Alias brand="Avery" part="8324"/>
+    <Alias brand="Avery" part="8384"/>
+    <Alias brand="Avery" part="8465"/>
+    <Alias brand="Avery" part="8665"/>
+    <Alias brand="Avery" part="53205"/>
+    <Alias brand="Avery" part="53211"/>
+    <Alias brand="Avery" part="53230"/>
+    <Alias brand="Avery" part="53240"/>
+    <Alias brand="Avery" part="75287"/>
+    <Alias brand="Avery" part="75299"/>
+    <!-- Look alikes -->
+    <Alias brand="IP Invent It!" part="#00064-3"/>
+    <Alias brand="Worldlabel" part="OL175"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 8960 family: CD/DVD Labels.                                   -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="8960" size="US-Letter" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5pt" hole="14.1732pt" waste="9.07087pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="2" x0="138.898pt" y0="50.1732pt" dx="351.142pt" dy="360pt"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 3274.1 family: Square stickers, 2_1/2'' x 2_1/2, 9 per sheetx  -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="3274.1" size="US-Letter" _description="Square Labels">
+    <Meta category="label"/>
+    <Meta category="square-label"/>
+    <Meta category="rectangle-label"/>
+    <Label-rectangle id="0" width="2.5in" height="2.5in" round="0">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="3" ny="3" x0="0.3125in" y0="1.25in" dx="2.6875in" dy="3in"/>
+    </Label-rectangle>
+    <Alias brand="Avery" part="3111"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 3274.2 family: Small round stickers, 1_1/2'', 20 per sheet  x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="3274.2" size="US-Letter" _description="Small Round Labels">
+    <Meta category="label"/>
+    <Meta category="round-label"/>
+    <Label-round id="0" radius="0.75in">
+      <Markup-margin size="0.0625in"/>
+      <Layout nx="4" ny="5" x0="0.5in" y0="0.75in" dx="2in" dy="2in"/>
+    </Label-round>
+    <Alias brand="Avery" part="3112"/>
+    <Alias brand="Avery" part="8293"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 3274.3 family: Large round stickers, 2_1/2'', 9 per sheet   x -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="3274.3" size="US-Letter" _description="Large Round Labels">
+    <Meta category="label"/>
+    <Meta category="round-label"/>
+    <Label-round id="0" radius="1.25in">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="3" x0="0.3125in" y0="1.25in" dx="2.6875in" dy="3in"/>
+    </Label-round>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Avery 5526 family: Shipping Labels.                                 -->
+  <!-- =================================================================== -->
+  <Template brand="Avery" part="5526" size="US-Letter" _description="Shipping Labels">
+    <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="8.5in" height="5.5in" round="0in" x_waste="0in" y_waste="0in">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="2" x0="0in" y0="0in" dx="0in" dy="5.5in"/>
+    </Label-rectangle>
+    <!-- Look alikes -->
+    <Alias brand="Avery" part="5126"/>
+    <Alias brand="Avery" part="8126"/>
+    <Alias brand="Avery" part="15516"/>
+    <Alias brand="Avery" part="18126"/>
+    <Alias brand="ULine" part="S-5044"/>
+  </Template>
+
+
+  <!-- ******************************************************************** -->
+  <!-- Avery labels in tech builitin 152                                   -->
+  <!-- http://www.avery.com/help/tech_bulletin.jsp?tech_bull_code=152       -->
+  <!-- ******************************************************************** -->
+  <Template brand="Avery" part="LSK-8" size="US-Letter" _description="Divider Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="1.13in" height="0.5in" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="4" ny="20" x0="0.5in" y0="0.5in" dx="2.13in" dy="0.5in"/>
+    </Label-rectangle>
+  </Template>
+  <!-- the LSK labels can be torn in half down the center -->
+  <Template brand="Avery" part="LSK-8.5" size="US-Letter" _description="Divider Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="1" width="1.13in" height="0.5in" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="20" x0="0.5in" y0="0.5in" dx="2.13in" dy="0.5in"/>
+    </Label-rectangle>
+  </Template>
+  <Template brand="Avery" part="LSK-5" size="US-Letter" _description="Divider Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="2" width="1.75in" height="0.5in" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="4" ny="20" x0="0.5in" y0="0.3in" dx="2.05in" dy="0.5in"/>
+    </Label-rectangle>
+  </Template>
+  <!-- the LSK labels can be torn in half down the center -->
+  <Template brand="Avery" part="LSK-5.5" size="US-Letter" _description="Divider Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="3" width="1.75in" height="0.5in" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="20" x0="0.5in" y0="0.3in" dx="2.05in" dy="0.5in"/>
+    </Label-rectangle>
+  </Template>
+  <Template brand="Avery" part="LSK-3" size="US-Letter" _description="Divider Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="4" width="3.13in" height="0.5in" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="20" x0="0.5in" y0="0.5in" dx="4.38in" dy="0.5in"/>
+    </Label-rectangle>
+  </Template>
+  <!-- the LSK labels can be torn in half down the center -->
+  <Template brand="Avery" part="LSK-3.5" size="US-Letter" _description="Divider Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="5" width="3.13in" height="0.5in" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="20" x0="0.5in" y0="0.5in" dx="4.38in" dy="0.5in"/>
+    </Label-rectangle>
+  </Template>
+
+</Glabels-templates>
+
+
+
+
diff --git a/data/templates/brother-other-templates.xml b/data/templates/brother-other-templates.xml
new file mode 100644 (file)
index 0000000..6fb666b
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<Glabels-templates xmlns="http://snaught.com/glabels/2.2/">
+
+  <!--
+   *********************************************************************
+   *********************************************************************
+   Labels for the Brother QL-500/550/650 PC Label Printers
+      
+   These templates work with the Brother Linux Printer CUPS Driver.  It
+   is unknown if these work correctly with the foomatic print driver for
+   these printers.
+      
+   One difference from typical templates is that the template size is
+   not the actual media size - it is the size of the printable area,
+   which is smaller than the media size.  This is because (at least with
+   the Brother driver) coordinates are relative the corner of this area.
+      
+   *********************************************************************
+   *********************************************************************
+  -->
+
+  <Template brand="Brother" part="DK-1201" size="Other" width="25.91mm" height="83.90mm" _description="Standard Address Labels 29mm x 90mm">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="25.91mm" height="83.90mm" round="0" x_waste="0" y_waste="0">
+      <Markup-rect x1="-1.5mm" y1="-3mm" w="29mm" h="90mm" r="1.5mm" />
+      <Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0"/>
+    </Label-rectangle>
+  </Template>
+
+  <Template brand="Brother" part="DK-1202" size="Other" width="58.93mm" height="93.20mm" _description="Shipping Labels 62mm x 100mm">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="58.93mm" height="93.20mm" round="0" x_waste="0" y_waste="0">
+      <Markup-rect x1="-1.5mm" y1="-3mm" w="62mm" h="100mm" r="1.5mm" />
+      <Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0"/>
+    </Label-rectangle>
+  </Template>
+
+  <Template brand="Brother" part="DK-1204" size="Other" width="13.97mm" height="47.92mm" _description="Multi Purpose Labels 17mm x 54mm">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="13.97mm" height="47.92mm" round="0" x_waste="0" y_waste="0">
+      <Markup-rect x1="-1.5mm" y1="-3mm" w="17mm" h="54mm" r="1.5mm" />
+      <Layout nx="1" ny="1" x0="0" y0="0" dx="0" dy="0"/>
+    </Label-rectangle>
+  </Template>
+
+
+</Glabels-templates>
diff --git a/data/templates/categories.xml b/data/templates/categories.xml
new file mode 100644 (file)
index 0000000..cae2d4c
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<Glabels-categories>
+
+  <Category id="label"            _name="Any label"/>
+  <Category id="round-label"      _name="Round labels"/>
+  <Category id="square-label"     _name="Square labels"/>
+  <Category id="rectangle-label"  _name="Rectangular labels"/>
+  <Category id="card"            _name="Any card"/>
+  <Category id="business-card"   _name="Business cards"/>
+  <Category id="media"           _name="CD/DVD or other media"/>
+  <Category id="mail"             _name="Mailing/shipping products"/>
+
+</Glabels-categories>
diff --git a/data/templates/dymo-other-templates.xml b/data/templates/dymo-other-templates.xml
new file mode 100644 (file)
index 0000000..b1518ce
--- /dev/null
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+<Glabels-templates xmlns="http://snaught.com/glabels/2.0/">
+
+
+  <!-- =================================================================== -->
+  <!-- Dymo 99012 Large Address labels.                                    -->
+  <!-- =================================================================== -->
+  <Template brand="Dymo" part="99012" size="Other" width="102.047pt" height="252.283pt" _description="Large Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="102.047pt" height="252.283pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="1" ny="1" x0="0pt" y0="0pt" dx="102.047pt" dy="252.283pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Dymo 99010 Address labels.                                          -->
+  <!-- =================================================================== -->
+  <Template brand="Dymo" part="99010" size="Other" width="81pt" height="252pt" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="81pt" height="252pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="1" ny="1" x0="0pt" y0="0pt" dx="81pt" dy="252pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Dymo 11355 Return Address labels.                                   -->
+  <!-- =================================================================== -->
+  <Template brand="Dymo" part="11355" size="Other" width="54pt" height="144pt" _description="Return Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="54pt" height="144pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="1" ny="1" x0="0pt" y0="0pt" dx="54pt" dy="144pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Dymo 99014 Shipping Address labels.                                 -->
+  <!-- =================================================================== -->
+  <Template brand="Dymo" part="99014" size="Other" width="167pt" height="288pt" _description="Shipping Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="167pt" height="288pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="1" ny="1" x0="0pt" y0="0pt" dx="167pt" dy="288pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Dymo 30327 File Folder labels.                                      -->
+  <!-- =================================================================== -->
+  <Template brand="Dymo" part="30327" size="Other" width="41pt" height="248pt" _description="File Folder">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="41pt" height="248pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="1" ny="1" x0="0pt" y0="0pt" dx="41pt" dy="248pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Dymo 30376 Hanging Folder labels.                                   -->
+  <!-- =================================================================== -->
+  <Template brand="Dymo" part="30376" size="Other" width="41pt" height="144pt" _description="Hanging Folder">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="41pt" height="144pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="1" ny="1" x0="0pt" y0="0pt" dx="41pt" dy="144pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Dymo 30258 3.5" Disk labels.                                        -->
+  <!-- =================================================================== -->
+  <Template brand="Dymo" part="30258" size="Other" width="153pt" height="198pt" _description="3.5in Diskette">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="153pt" height="198pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="1" ny="1" x0="0pt" y0="0pt" dx="153pt" dy="198pt"/>
+    </Label-rectangle>
+  </Template>
+
+</Glabels-templates>
diff --git a/data/templates/misc-iso-templates.xml b/data/templates/misc-iso-templates.xml
new file mode 100644 (file)
index 0000000..f84b0a9
--- /dev/null
@@ -0,0 +1,715 @@
+<?xml version="1.0"?>
+<Glabels-templates>
+
+
+  <!-- ******************************************************************** -->
+  <!-- Misc. A4 products.                                                   -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- Sigel LP 800/LP 801/LP 802: Business Cards, 55.0 x 85.0 mm, 10 per sheet   -->
+  <!-- =================================================================== -->
+  <Template brand="Sigel" part="LP 800" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="85.0mm" height="55.0mm" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="15.0mm" y0="10.0mm" dx="95.0mm" dy="55.0mm"/>
+    </Label-rectangle>
+    <Alias brand="Sigel" part="LP 801"/>
+    <Alias brand="Sigel" part="LP 802"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sigel DP 830/DP 930: Business Cards, 55.0 x 85.0 mm, 10 per sheet   -->
+  <!-- =================================================================== -->
+  <Template brand="Sigel" part="DP 830" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="240.9" height="155.9" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="40" y0="31" dx="269" dy="156"/>
+    </Label-rectangle>
+    <Alias brand="Sigel" part="DP 930"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Ascom A4/24/MKII: Rectangular Labels, 24 per sheet                  -->
+  <!-- =================================================================== -->
+  <Template brand="Ascom" part="A4/24/MKII" size="A4" _description="Rectangular Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="181" height="96" round="10">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="8" x0="19" y0="36" dx="187" dy="96"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Agipa 119488: Business Cards, 50 x 90 mm, 10 per sheet              -->
+  <!-- =================================================================== -->
+  <Template brand="Agipa" part="119488" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="255" height="142" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="43" y0="67" dx="255" dy="142"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Ednet BC: Business Cards, 51 x 89 mm, 10 per sheet                  -->
+  <!-- =================================================================== -->
+  <Template brand="Ednet" part="BC" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="253" height="145" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="40" y0="59" dx="253" dy="145"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Ednet 45021: Inkjet/Laser Labels 70x37mm                            -->
+  <!-- =================================================================== -->
+  <Template brand="Ednet" part="45021" size="A4" _description="Inkjet/Laser Labels 70x37mm">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="198.425pt" height="104.882pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="3" ny="8" x0="0pt" y0="0pt" dx="198.425pt" dy="104.882pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Herma 4620: Mailing Labels - 2 columns, 107 x 37 mm, 16 per sheet   -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4620" size="A4" _description="Mailing Labels-2 columns">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="298" height="105" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="8" x0="0" y0="0" dx="298" dy="105"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Herma 4464: Mailing Labels - 3 columns, 70 x 37.125 mm, 24 per sheet-->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4464" size="A4" _description="Mailing Labels-3 columns">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="199" height="105" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="8" x0="0" y0="0" dx="199" dy="105"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Herma 5079: CD/DVD Labels, 2 per sheet                              -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="5079" size="A4" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="164.409pt" hole="58.1102pt" waste="9pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="2" x0="133.228pt" y0="46.7717pt" dx="346.819pt" dy="419.528pt"/>
+    </Label-cd>
+  </Template>
+
+  <!-- ===================================================================-->
+  <!-- Neato brand CD/DVD Labels (face only), 2 per sheet                 -->
+  <!-- ===================================================================-->
+  <Template brand="Neato" part="A4 CD" size="A4" _description="CD/DVD Labels (face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5" hole="58.5" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="2" x0="125" y0="68.890" dx="0" dy="360"/>        
+    </Label-cd>                                                      
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- DATA BECKER: Business Cards, 50 x 90 mm, 10 per sheet               -->
+  <!-- =================================================================== -->
+  <Template brand="DataBecker" part="BC?" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="255" height="142" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="36" y0="69.890" dx="255" dy="142"/>
+    </Label-rectangle>
+  </Template>
+  <!-- =================================================================== -->
+  <!-- DATA BECKER 0491 Business Cards, 50 x 90 mm, 10 per sheet           -->
+  <!-- =================================================================== -->
+  <Template brand="DataBecker" part="0491" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="90mm" height="50mm" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="12.5mm" y0="15mm" dx="94.55mm" dy="54mm"/>
+    </Label-rectangle>
+  </Template>
+  <!-- =================================================================== -->
+  <!-- DATA BECKER 0526 Address Labels.                                    -->
+  <!-- =================================================================== -->
+  <Template brand="DataBecker" part="0526" size="A4" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="198.425pt" height="102.047pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="3" ny="8" x0="3.93386e-16pt" y0="15.5906pt" dx="198.425pt" dy="102.047pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- DATA BECKER 0562 CD Labels.                                         -->
+  <!-- =================================================================== -->
+  <Template brand="DataBecker" part="0562" size="A4" _description="CD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="58mm" hole="20.6375mm" waste="2mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="2" x0="5mm" y0="5mm" dx="120mm" dy="171mm"/>
+      <Layout nx="1" ny="1" x0="89mm" y0="90mm" dx="120mm" dy="120mm"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- DATA BECKER 0598 Address Labels.                                    -->
+  <!-- =================================================================== -->
+  <Template brand="DataBecker" part="0598" size="A4" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="274.961pt" height="119.906pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="2" ny="6" x0="23.2441pt" y0="65.1968pt" dx="274.961pt" dy="119.906pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Dataline 57125: Business Cards, 54.0 x 86.0 mm, 10 per sheet        -->
+  <!-- =================================================================== -->
+  <Template brand="Dataline" part="57125" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="86.00mm" height="54.00mm" round="0">
+      <Markup-margin size="0mm"/>
+      <Layout nx="2" ny="5" x0="16mm" y0="11mm" dx="91mm" dy="55.625mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Hema Etiketten: 65 x 38 mm, 21 per sheet                            -->
+  <!-- =================================================================== -->
+  <Template brand="Hema" part="Etiketten" size="A4" _description="Rectangular Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="178" height="108" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="7" x0="20" y0="49.890" dx="187" dy="107"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- ====================================================== -->
+  <!-- APLI 02793: Business Cards, 50,8 x 90 mm, 10 per sheet -->
+  <!-- ====================================================== -->
+  <Template brand="APLI" part="02793" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="255.118" height="144" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="42.5197" y0="62.3622" dx="255.118" dy="144"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- APLI 1999:  Mailing Labels, 9,9cm x 6,8cm, 8 per sheet              -->
+  <!-- =================================================================== -->
+  <Template brand="APLI" part="1999" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="281" height="193" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="4" x0="13" y0="21.890" dx="289" dy="194"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- APLI 01293:  General Labels.                                        -->
+  <!-- =================================================================== -->
+  <Template brand="Apli" part="01293" size="A4" _description="General Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="198.425pt" height="94.3937pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="3" ny="8" x0="0pt" y0="43.3701pt" dx="198.425pt" dy="94.3937pt"/>
+    </Label-rectangle>
+  </Template>
+
+
+  <!-- =================================================================== -->
+  <!-- Data Becker Etiketten Paket: Ordnerrucken, 192 x 61,5 mm, 4 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4284" size="A4" _description="Arch File Labels (large)">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="544.252" height="174.331" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="4" x0="25.5118" y0="38.2677" dx="544.252" dy="197.008"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="5095"/>
+    <Alias brand="Herma" part="5096"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Data Becker Etiketten Paket: Ordnerrucken, 192 x 39 mm, 6 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4283" size="A4" _description="Arch File Labels (small)">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="544.252" height="110.551" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="6" x0="25.5118" y0="32.5984" dx="544.252" dy="133.228"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="5090"/>
+    <Alias brand="Herma" part="5091"/>
+  </Template>
+  
+  <!-- =================================================================== -->
+  <!-- Data Becker Etiketten Paket: Video Etiketten, 78,7 x 46,5 mm, 12 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4828" size="A4" _description="Video Labels (face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="223.086" height="131.811" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="6" x0="38.5512" y0="24.9449" dx="295.086" dy="131.811"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="5070"/>
+  </Template>
+  
+  <!-- =================================================================== -->
+  <!-- Data Becker Etiketten Paket: Disketten Etiketten, 70 x 50,8 mm, 10 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="8803" size="A4" _description="Diskette Labels (face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="198.425" height="144" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="60.9448" y0="60.9448" dx="270.425" dy="144"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="8839"/>
+  </Template>
+  
+  <!-- =================================================================== -->
+  <!-- Otto Versand: Allzweck Etiketten, 38 x 21,2 mm, 65 per sheet        -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4606" size="A4" _description="Allround Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="107.716" height="60.0945" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="5" ny="13" x0="26.9291" y0="29.7638" dx="107.716" dy="60.0945"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="4270"/>
+  </Template>
+  
+  <!-- =================================================================== -->
+  <!-- Herma Musteretiketten: Allzweck Etiketten, 48,3 x 16,9 mm           -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4607" size="A4" _description="Allround Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="136.913" height="47.9055" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="4" ny="16" x0="24.0945" y0="39.6853" dx="136.913" dy="47.9055"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="4271"/>
+  </Template>
+  
+  <!-- =================================================================== -->
+  <!-- Herma Musteretiketten: Allzweck Etiketten, 48,3 x 25,4 mm, 44 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4608" size="A4" _description="Allround Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="136.913" height="72" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="4" ny="11" x0="24.0945" y0="24.0945" dx="136.913" dy="72"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="4272"/>
+    <Alias brand="Herma" part="5051"/>
+  </Template>
+  
+  <!-- =================================================================== -->
+  <!-- Herma Musteretiketten: Allzweck Etiketten, 66 x 33,8 mm, 24 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4614" size="A4" _description="Allround Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="187.086" height="95.811" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="8" x0="16.1575" y0="36.8504" dx="187.086" dy="95.811"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="4670"/>
+    <Alias brand="Herma" part="5053"/>
+  </Template>
+  
+  <!-- =================================================================== -->
+  <!-- Herma Musteretiketten: Adress Etiketten, 105 x 42,3 mm, 24 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4625" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="297.638" height="119.905" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="7" x0="0" y0="0" dx="297.638" dy="119.905"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="4674"/>
+    <Alias brand="Herma" part="5057"/>
+  </Template>
+  
+  <!-- =================================================================== -->
+  <!-- Herma Musteretiketten: Ordnerrucken, 192 x 38 mm, 7 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Herma" part="4293" size="A4" _description="Arch File Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="544.252" height="107.716" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="7" x0="25.5118" y0="42.5197" dx="544.252" dy="107.716"/>
+    </Label-rectangle>
+    <Alias brand="Herma" part="5092"/>
+  </Template>
+  
+  <!-- ===================================================================-->
+  <!-- Data Becker CD/DVD Labels (face only), 2 per sheet                 -->
+  <!-- ===================================================================-->
+  <Template brand="DataBecker" part="0335" size="A4" _description="CD/DVD Labels Standard Format (face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="164.409" hole="58.1102" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="2" x0="133.228" y0="46.7716" dx="0" dy="419.527"/>
+    </Label-cd>
+    <Alias brand="DataBecker" part="0368"/>
+  </Template>
+
+  <!-- ===================================================================-->
+  <!-- LeLabel 2001.018 CD/DVD Labels, 1 per sheet                        -->
+  <!-- ===================================================================-->
+  <Template brand="LeLabel" part="2001.018" size="A4" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="168.08" hole="54.69" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="1" x0="128.556" y0="42.52" dx="0" dy="0"/>
+    </Label-cd>
+  </Template>
+
+  <!-- ===================================================================-->
+  <!-- Viking 02204 Etiketten, 21 per sheet                               -->
+  <!-- ===================================================================-->
+  <Template brand="Viking" part="02204" size="A4" _description="Etiketten">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="198" height="120" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="7" x0="0" y0="0" dx="198" dy="120"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- ===================================================================-->
+  <!-- Media Line CD/DVD Labels (face only), 2 per sheet                  -->
+  <!-- ===================================================================-->
+  <Template brand="MediaLine" part="760-50475 A4 CD" size="A4" _description="CD/DVD Labels (face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5" hole="58.5" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="2" x0="133" y0="45" dx="0" dy="422"/>
+    </Label-cd>
+  </Template>
+
+  <!-- ===================================================================-->
+  <!-- Encre.com Business Cards, 10 per sheet                             -->
+  <!-- ===================================================================-->
+  <Template brand="Encre.com" part="BCV10" size="A4" _description="Business Cards">  
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="243.78" height="153.07">  
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="48.19" y0="42.50" dx="255.12" dy="157.32"/>  
+    </Label-rectangle> 
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Celcast IJ37: Fridge magnet (stickers), 52 x 90 mm, 10 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Celcast" part="IJ37" size="A4" _description="Fridge Magnet Stickers">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="255" height="147.5" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="43" y0="52.7" dx="255" dy="147.5"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- CD STOMPER PRO CD Label Refills, (Face Only) ISO Version            -->
+  <!-- =================================================================== -->
+  <Template brand="Stomper" part="PRO A4" size="A4" _description="PRO CD Labels 2-up (face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5" hole="58" waste="10">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="1" x0="34.5" y0="47" dx="0" dy="0"/>
+      <Layout nx="1" ny="1" x0="223" y0="459" dx="0" dy="0"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Pressit CD Labels/                                                  -->
+  <!-- =================================================================== -->
+  <Template brand="Pressit" part="50blank" size="A4" _description="CD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5pt" hole="58.5pt" waste="9pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="1" x0="30.096pt" y0="70.416pt" dx="351pt" dy="351pt"/>
+      <Layout nx="1" ny="1" x0="233.208pt" y0="440.712pt" dx="351pt" dy="351pt"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Ryman P14 Universal labels.                                         -->
+  <!-- =================================================================== -->
+  <Template brand="Ryman" part="P14" size="A4" _description="Universal Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="99.1mm" height="38.1mm" round="0.2mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="7" x0="4.2mm" y0="13.8mm" dx="102mm" dy="38.1mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Ryman Standard CD/DVD Labels.                                       -->
+  <!-- =================================================================== -->
+  <Template brand="Ryman" part="Standard CD/DVD" size="A4" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="165.827pt" hole="58.1102pt" waste="9pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="2" x0="131.811pt" y0="60.6614pt" dx="245.622pt" dy="388.346pt"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Ryman 0215016061 CD/DVD Labels.                                     -->
+  <!-- =================================================================== -->
+  <Template brand="Ryman" part="0215016061" size="A4" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="165.827pt" hole="24.0945pt" waste="8.50394pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="1" ny="2" x0="131.811pt" y0="60.6614pt" dx="348.661pt" dy="388.346pt"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Fellows 04715 CD/DVD Labels (Face only).                            -->
+  <!-- =================================================================== -->
+  <Template brand="Fellows" part="04715" size="A4" _description="CD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5pt" hole="58.5pt" waste="9pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="2" x0="133.2pt" y0="50.4pt" dx="244.276pt" dy="363.6pt"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Staples EU Business Cards Supreme.                                  -->
+  <!-- =================================================================== -->
+  <Template brand="Staples" part="EU BC Supreme" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="240.945pt" height="155.906pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="9.07087pt"/>
+      <Layout nx="1" ny="5" x0="42.5197pt" y0="28.3465pt" dx="240.945pt" dy="155.906pt"/>
+      <Layout nx="1" ny="5" x0="311.811pt" y0="28.3465pt" dx="240.945pt" dy="155.906pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- DECAdry OCC 3342 Business Cards.                                    -->
+  <!-- =================================================================== -->
+  <Template brand="DECAdry" part="OCC 3342" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="240.945pt" height="153.071pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="0pt"/>
+      <Layout nx="2" ny="5" x0="42.5197pt" y0="38.2677pt" dx="269.291pt" dy="153.071pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- DECAdry DLW-1734: Mailing Labels.                                   -->
+  <!-- =================================================================== -->
+  <Template brand="DECAdry" part="DLW-1734" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="99.1mm" height="67.7mm" round="2mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.175mm"/>
+      <Layout nx="2" ny="4" x0="4.65mm" y0="13.1mm" dx="101.5mm" dy="67.7mm"/>
+    </Label-rectangle>
+    <Alias brand="DECAdry" part="OLW-4734"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- DECAdry DLW-1786: Mailing Labels.                                   -->
+  <!-- =================================================================== -->
+  <Template brand="DECAdry" part="DLW-1786" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="105mm" height="39mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.175mm"/>
+      <Layout nx="2" ny="7" x0="0mm" y0="12mm" dx="105mm" dy="39mm"/>
+    </Label-rectangle>
+    <Alias brand="DECAdry" part="OLW-4786"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- DECAdry DLW-1787: Mailing Labels.                                   -->
+  <!-- =================================================================== -->
+  <Template brand="DECAdry" part="DLW-1787" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="70mm" height="35mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="3" ny="8" x0="0mm" y0="8.5mm" dx="70mm" dy="35mm"/>
+    </Label-rectangle>
+    <Alias brand="DECAdry" part="OLW-4787"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Connect KF10647 Mailing Labels..                                    -->
+  <!-- =================================================================== -->
+  <Template brand="Connect" part="KF10647" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="198.425pt" height="104.882pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="3" ny="8" x0="7.86772e-17pt" y0="11.3386pt" dx="198.425pt" dy="104.882pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Poundland 30 Labels.                                                -->
+  <!-- =================================================================== -->
+  <Template brand="Poundland" part="30" size="A4" _description="Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="184.252pt" height="72pt" round="8.50394pt" x_waste="4.25197pt" y_waste="0pt">
+      <Markup-margin size="7.08661pt"/>
+      <Layout nx="3" ny="10" x0="4.25197pt" y0="62.3622pt" dx="201.26pt" dy="72pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sanwa LB-CDRJP.  CD Labels.                                         -->
+  <!-- =================================================================== -->
+  <Template brand="Sanwa" part="LB-CDRJP" size="A4" _description="CD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="167.244pt" hole="34.0pt" waste="9pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="2" x0="29.1969pt" y0="70.8661pt" dx="352.488pt" dy="367.087pt"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Bruna 241301.  Mailing Labels.                                      -->
+  <!-- =================================================================== -->
+  <Template brand="Bruna" part="241301" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="198.425pt" height="102.047pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="3" ny="8" x0="0pt" y0="0pt" dx="198.425pt" dy="102.047pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Geha Z53.  Address Labels.                                         -->
+  <!-- =================================================================== -->
+  <Template brand="Geha" part="Z53" size="A4" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.geha.de/index.php?id=1047&amp;pid=30767"/>
+    <Label-rectangle id="0" width="99.1mm" height="38.1mm" round="0.2mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="7" x0="3mm" y0="15.9mm" dx="101.6mm" dy="38.1mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Staples STAP14 Mailing Labels.                                      -->
+  <!-- =================================================================== -->
+  <Template brand="Staples" part="STAP14" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Label-rectangle id="0" width="99mm" height="38mm" round="2mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3mm"/>
+      <Layout nx="2" ny="7" x0="5mm" y0="15mm" dx="102mm" dy="38mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- ******************************************************************** -->
+  <!-- Misc. A6 products.                                                   -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- EPSON Photo Stickers, 17 x 24 mm, 16 per sheet                      -->
+  <!-- =================================================================== -->
+  <Template brand="Epson" part="S041144" size="A6" _description="EPSON Photo Stickers 16">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="48" height="68" round="7">
+      <Markup-margin size="5"/>
+      <Layout nx="4" ny="4" x0="33" y0="59" dx="59.5" dy="79.5"/>
+    </Label-rectangle>
+  </Template>
+
+
+  <!-- ============================================================ -->
+  <!-- Impact LC33 Family: Rectangular Labels                       -->
+  <!-- ============================================================ -->
+  <Template brand="Impact" part="LC33" size="A4" description="Rectangular Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="70mm" height="25mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3mm"/>
+      <Layout nx="3" ny="11" x0="0mm" y0="10mm" dx="70mm" dy="25mm"/>
+    </Label-rectangle>
+  </Template>
+
+
+  <!-- ******************************************************************** -->
+  <!-- Templates for A4 and A3 media, size 50 x 90 mm                       -->
+  <!-- ******************************************************************** -->
+  
+  <Template brand="Russian" part="A3 5x9" size="A3" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="90mm" height="50mm" round="0">
+      <Markup-margin size="5pt"/>
+      <Layout nx="3" ny="8" x0="14mm" y0="10mm" dx="90mm" dy="50mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <Template brand="Russian" part="A4 5x9" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="50mm" height="90mm" round="0">
+      <Markup-margin size="5pt"/>
+      <Layout nx="4" ny="3" x0="5mm" y0="13mm" dx="50mm" dy="90mm"/>
+    </Label-rectangle>
+  </Template>
+
+
+
+</Glabels-templates>
+
+
+
+
diff --git a/data/templates/misc-other-templates.xml b/data/templates/misc-other-templates.xml
new file mode 100644 (file)
index 0000000..4f57e74
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<Glabels-templates xmlns="http://snaught.com/glabels/2.0/">
+
+
+  <!-- =================================================================== -->
+  <!-- OfficeMax 86112: Multi-Purpose Labels, 2'' x 4'', 3 per sheet       -->
+  <!-- =================================================================== -->
+  <Template brand="OfficeMax" part="86112" size="Other" width="297pt" height="450pt"
+            _description="Multi-Purpose Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="288pt" height="144pt" round="9pt" waste="0pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="3" x0="4.5pt" y0="3.6pt" dx="288pt" dy="148.5pt"/>
+    </Label-rectangle>
+  </Template>
+
+
+
+</Glabels-templates>
diff --git a/data/templates/misc-us-templates.xml b/data/templates/misc-us-templates.xml
new file mode 100644 (file)
index 0000000..7b6a05a
--- /dev/null
@@ -0,0 +1,248 @@
+<?xml version="1.0"?>
+<Glabels-templates>
+
+
+
+  <!-- ******************************************************************** -->
+  <!-- Misc. US-Letter products.                                            -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- Southworth BC: Business Cards, 2'' x 3_1/2'', 10 per sheet          -->
+  <!-- =================================================================== -->
+  <Template brand="Southworth" part="BC" size="US-Letter" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="252" height="144" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="36" y0="36" dx="288" dy="144"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Memorex CD Labels                                                 * -->
+  <!-- =================================================================== -->
+  <Template brand="Memorex" part="CD Labels" size="US-Letter" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5" hole="58.5" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="1" x0="40.5" y0="45" dx="0" dy="0"/>
+      <Layout nx="1" ny="1" x0="238.5" y0="414" dx="0" dy="0"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Neato USCD2lbl.NTT: CD/DVD Labels (face only), 2 per sheet          -->
+  <!-- =================================================================== -->
+  <Template brand="Neato" part="USCD2lbl.NTT" size="US-Letter"
+         _description="CD/DVD Labels (face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5" hole="58.5" waste="9">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="2" x0="139.5" y0="49.5" dx="0" dy="360"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Neato USCD2lbl.NTT: CD/DVD Labels (rectangles), 2 per sheet         -->
+  <!-- =================================================================== -->
+  <Template brand="Neato" part="USCD2lbl Rectangles" size="US-Letter"
+        _description="CD Template Rectangles">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="77.04" height="234.36" round="10">
+      <Markup-margin size="2.016"/>
+      <Layout nx="2" ny="1" x0="51.3" y0="279.72" dx="433.44" dy="0"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Neato CLP-192328/26: HandiCD-R 50MB, 3" x 2_1/8'', 9 per sheet      -->
+  <!-- =================================================================== -->
+  <Template brand="Neato" part="HandiCD-R" size="US-Letter"
+        _description="Business Card CD">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="108" width="171" hole="58" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="3" x0="36.5" y0="54" dx="184.5" dy="234"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Neato 69143: Jewel Case Booklet                                     -->
+  <!-- =================================================================== -->
+  <Template brand="Neato" part="69143" size="US-Letter" _description="Jewel Case Booklet">
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="4.75in" height="9.5in" round="0in" x_waste="0in" y_waste="0in">
+      <Markup-margin size="0.125in"/>
+      <Markup-line x1="0in" y1="4.75in" x2="4.75in" y2="4.75in"/>
+      <Layout nx="1" ny="1" x0="1.875in" y0="0.75in" dx="4.75in" dy="9.5in"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- CD STOMPER PRO CD Label Refills, (Face Only)                      * -->
+  <!-- =================================================================== -->
+  <Template brand="Stomper" part="PRO CD" size="US-Letter"
+         _description="PRO CD Labels 2-up (face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5" hole="58.5" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="1" x0="34" y0="43" dx="0" dy="0"/>
+      <Layout nx="1" ny="1" x0="245" y0="416" dx="0" dy="0"/>
+    </Label-cd>
+  </Template>
+
+  <Template brand="Stomper" part="PRO Zip" size="US-Letter"
+         _description="PRO CD Labels 2-up (Face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="168" height="142" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="2" x0="407" y0="68" dx="0" dy="142"/>
+      <Layout nx="1" ny="2" x0="37" y0="440" dx="0" dy="142"/>
+    </Label-rectangle>
+  </Template>
+
+  <Template brand="Stomper" part="PRO Spine" size="US-Letter"
+         _description="PRO CD Labels 2-up (CD spine only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="288" height="20" round="0">
+      <Markup-margin size="2"/>
+      <Layout nx="2" ny="1" x0="18" y0="385" dx="288" dy="0"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- ===================================================================-->
+  <!-- Meritline Mini CD/DVD Labels (face only), 5 per sheet              -->
+  <!-- ===================================================================-->
+  <Template brand="Meritline" part="Mini-CD" size="US-Letter" _description="Mini-CD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="110.5" hole="57.5" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="2" x0="48.4" y0="47.6" dx="299.5" dy="481.5"/>
+      <Layout nx="1" ny="1" x0="197.3" y0="289.5" dx="0" dy="0"/>
+    </Label-cd>
+  </Template>
+
+  <!-- ===================================================================-->
+  <!-- Neato Slimline CD Jewel Case Insert, 2 per sheet.                  -->
+  <!-- Left margin area is CD spine; ignore other margins.                -->
+  <!-- To write text on spine, use "upside down" template, "rotated",     -->
+  <!-- spine is bottom margin, print label sheet BOTTOM FIRST.            -->
+  <!-- ===================================================================-->
+  <Template brand="Neato" part="Slimline CD Case" size="US-Letter"
+         _description="Slimline CD Case (rightside up)">
+    <Meta category="card"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="394.5" height="342.5" round="0">
+      <Markup-margin size="7.5"/>
+      <Layout nx="1" ny="2" x0="130" y0="41.9" dx="0" dy="363"/>
+    </Label-rectangle>
+  </Template>
+  <Template brand="Neato" part="Slimline CD Case, spine" size="US-Letter"
+         _description="Slimline CD Case (upside down)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="394.5" height="342.5" round="0">
+      <Markup-margin size="7.5"/>
+      <Layout nx="1" ny="2" x0="96.5" y0="41.9" dx="0" dy="363"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Great Gizmos : CD/DVD Labels (face only), 2 per sheet             * -->
+  <!-- =================================================================== -->
+  <Template brand="Great Gizmos" part="CD/DVD" size="US-Letter"
+          _description="CD/DVD Labels (face only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="166.5" hole="58.5" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="2" x0="139.5" y0="42.52" dx="0" dy="374.17"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Imation-SoniX CD/DVD Labels  (Face Only)                          * -->
+  <!-- =================================================================== -->
+  <Template brand="Imation-SoniX" part="No.5112 15954" size="US-Letter"
+         _description="CD/DVD Labels (Face Only)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="167.8" hole="18.5" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="1" x0="40.5" y0="370" dx="0" dy="0"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Netc Label Stock: DLT Labels, (www.netclabels.com), 30 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Netc" part="749303-70001 " size="US-Letter" _description="DLT Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="162" height="59.4" round="0">
+      <Markup-margin size="18"/>
+      <Layout nx="3" ny="10" x0="36" y0="45" dx="189" dy="72"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Tough-Tags TTLW-2016 Microtube labels, 85 per sheet.                -->
+  <!-- =================================================================== -->
+  <Template brand="Tough-Tags" part="TTLW-2016" size="US-Letter" _description="Microtube labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="92.16" height="36" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="5" ny="17" x0="68" y0="4.17" dx="100.8" dy="45.3"/>
+    </Label-rectangle>
+  </Template> 
+
+  <!-- =================================================================== -->
+  <!-- Kingdom L Cassette Labels, 12 per sheet.                            -->
+  <!-- =================================================================== -->
+  <Template brand="Kingdom" part="L" size="US-Letter" _description="Cassette Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="252pt" height="117pt" round="9pt" x_waste="2.376pt" y_waste="2.376pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="2" ny="6" x0="33.12pt" y0="27pt" dx="261pt" dy="126.144pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- OfficeMax OM99060 Mailing Labels.                                   -->
+  <!-- =================================================================== -->
+  <Template brand="OfficeMax" part="OM99060" size="US-Letter" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="203.76pt" height="72pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="12.024pt"/>
+      <Layout nx="3" ny="10" x0="0pt" y0="36pt" dx="203.76pt" dy="72pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Online Labels OL1025 Round Labels.                                  -->
+  <!-- =================================================================== -->
+  <Template brand="Online Labels" part="OL1025" size="US-Letter" _description="Round Labels">
+    <Meta category="label"/>
+    <Meta category="round-label"/>
+    <Label-round id="0" radius="0.5in" waste="0.062in">
+      <Markup-margin size="0.125in"/>
+      <Layout nx="7" ny="9" x0="0.375in" y0="0.5in" dx="1.125in" dy="1.125in"/>
+    </Label-round>
+  </Template>
+
+</Glabels-templates>
+
+
+
+
diff --git a/data/templates/paper-sizes.xml b/data/templates/paper-sizes.xml
new file mode 100644 (file)
index 0000000..17149ae
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<Glabels-paper-sizes>
+
+  <!-- Most popular (at top of list) -->
+  <Paper-size id="US-Letter"    _name="US Letter"    pwg_size="na_letter"    width="8.5in" height="11in"/>
+  <Paper-size id="A4"           _name="A4"           pwg_size="iso_a4"       width="210mm" height="297mm"/>
+
+  <!-- Other US paper sizes -->
+  <Paper-size id="US-Legal"     _name="US Legal"     pwg_size="na_legal"     width="8.5in" height="14in"/>
+  <Paper-size id="US-Executive" _name="US Executive" pwg_size="na_executive" width="7.25in" height="10.5in"/>
+
+  <!-- Other ISO A series sizes -->
+  <Paper-size id="A0"           _name="A0"           pwg_size="iso_a0"       width="841mm" height="1189mm"/>
+  <Paper-size id="A1"           _name="A1"           pwg_size="iso_a1"       width="594mm" height="841mm"/>
+  <Paper-size id="A2"           _name="A2"           pwg_size="iso_a2"       width="420mm" height="594mm"/>
+  <Paper-size id="A3"           _name="A3"           pwg_size="iso_a3"       width="297mm" height="420mm"/>
+  <Paper-size id="A5"           _name="A5"           pwg_size="iso_a5"       width="148mm" height="210mm"/>
+  <Paper-size id="A6"           _name="A6"           pwg_size="iso_a6"       width="105mm" height="148mm"/>
+  <Paper-size id="A7"           _name="A7"           pwg_size="iso_a7"       width="74mm"  height="105mm"/>
+  <Paper-size id="A8"           _name="A8"           pwg_size="iso_a8"       width="52mm"  height="74mm"/>
+  <Paper-size id="A9"           _name="A9"           pwg_size="iso_a9"       width="37mm"  height="52mm"/>
+  <Paper-size id="A10"          _name="A10"          pwg_size="iso_a10"      width="26mm"  height="37mm"/>
+
+  <!-- ISO B series sizes -->
+  <Paper-size id="B0"           _name="B0"           pwg_size="iso_b0"       width="1000mm" height="1414mm"/>
+  <Paper-size id="B1"           _name="B1"           pwg_size="iso_b1"       width="707mm"  height="1000mm"/>
+  <Paper-size id="B2"           _name="B2"           pwg_size="iso_b2"       width="500mm"  height="707mm"/>
+  <Paper-size id="B3"           _name="B3"           pwg_size="iso_b3"       width="353mm"  height="500mm"/>
+  <Paper-size id="B4"           _name="B4"           pwg_size="iso_b4"       width="250mm"  height="353mm"/>
+  <Paper-size id="B5"           _name="B5"           pwg_size="iso_b5"       width="176mm"  height="250mm"/>
+  <Paper-size id="B6"           _name="B6"           pwg_size="iso_b6"       width="125mm"  height="176mm"/>
+  <Paper-size id="B7"           _name="B7"           pwg_size="iso_b7"       width="88mm"   height="125mm"/>
+  <Paper-size id="B8"           _name="B8"           pwg_size="iso_b8"       width="62mm"   height="88mm"/>
+  <Paper-size id="B9"           _name="B9"           pwg_size="iso_b9"       width="44mm"   height="62mm"/>
+  <Paper-size id="B10"          _name="B10"          pwg_size="iso_b10"      width="31mm"   height="44mm"/>
+
+</Glabels-paper-sizes>
diff --git a/data/templates/pearl-templates.xml b/data/templates/pearl-templates.xml
new file mode 100644 (file)
index 0000000..52df93d
--- /dev/null
@@ -0,0 +1,498 @@
+<?xml version="1.0"?>
+<Glabels-templates xmlns="http://snaught.com/glabels/3.0/">
+
+  <!-- ******************************************************************** -->
+  <!-- PEARL products                                                                                                      -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Adress Labels, 70mm x 36mm, 24 per sheet                            -->
+  <!-- =================================================================== -->
+  <Template brand="PEARL" part="PE-8004, PE-8014" size="A4" description="Adress-Etiketten 70x36 mm Universalf&#xFC;r Laser/Inkjet">
+    <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-PE8004-2204.shtml"/>
+    <Label-rectangle id="0" width="70mm" height="36mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="3" ny="8" x0="0mm" y0="4.8mm" dx="70mm" dy="36mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Round labels, d=40mm, 24 per sheet                                                  -->
+  <!-- =================================================================== -->
+  <Template brand="PEARL" part="VM-6085, VM-6585" size="A4" description="Etiketten rund 40 mm f&#xFC;r Laser/Inkjet">
+    <Meta category="label"/>
+    <Meta category="round-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6085-2204.shtml"/>
+    <Label-round id="0" radius="20mm" waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="4" ny="6" x0="16mm" y0="13.5mm" dx="46mm" dy="46mm"/>
+    </Label-round>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Adress Labels, 48.8mm x 25.4mm, 40 per sheet                -->
+  <!-- =================================================================== -->
+  <Template brand="PEARL" part="PE 8008, PE 8018" size="A4" description="Adressetiketten">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-PE8008-2204.shtml"/>
+    <Label-rectangle id="0" width="48.4mm" height="25.4mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="4" ny="10" x0="8mm" y0="21.5mm" dx="48.4mm" dy="25.4mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Adress Labels, 70mm x 36mm, 24 per sheet                            -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="PE-8004, PE-8014" size="A4" description="Adress-Etiketten">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-PE8004-2204.shtml"/>
+    <Label-rectangle id="0" width="70mm" height="36mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="3" ny="8" x0="0mm" y0="4.8mm" dx="70mm" dy="36mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Labels, 210mm x 297mm, 1 per sheet                                          -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="PE-8007, PE-8017" size="A4" description="Etiketten A4">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-PE8007-2204.shtml"/>
+    <Label-rectangle id="0" width="210mm" height="297mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="1" x0="0mm" y0="0mm" dx="210mm" dy="297mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Self-adhesive film, 210mm x 297mm, 1 per sheet              -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="PE-8350, PE-8352" size="A4" description="Klebefolien wetterfest f&#xFC;r Laser">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-PE8350-2010.shtml"/>
+    <Label-rectangle id="0" width="210mm" height="297mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="1" x0="0mm" y0="0mm" dx="210mm" dy="297mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Self-adhesive film, 210mm x 297mm, 1 per sheet              -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="PE-8351, PE-894" size="A4" description="Klebefolien transparent f&#xFC;r Inkjet">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-PE8351-2200.shtml"/>
+    <Label-rectangle id="0" width="210mm" height="297mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="1" x0="0mm" y0="0mm" dx="210mm" dy="297mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Application photos, 45mm x 55mm, 12 per sheet               -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-5040, VM-5540" size="A4" description="Bewerbungsfotos">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM5040-2002.shtml"/>
+    <Label-rectangle id="0" width="45mm" height="55mm" round="0mm" x_waste="5mm" y_waste="5mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="3" ny="4" x0="27mm" y0="22.5mm" dx="55mm" dy="65mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Self-adhesive window film, 210mm x 297mm, 1 per sheet       -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-5081, VM 5581" size="A4" description="Selbstklebende Fensterfolien">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM5081-2200.shtml"/>
+    <Label-rectangle id="0" width="210mm" height="297mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="1" x0="0mm" y0="0mm" dx="210mm" dy="297mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Bottle labels, 100mm x 130mm, 4 per sheet                                           -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-5217, VM-5517" size="A4" description="Flaschenetiketten">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM5217-2200.shtml"/>
+    <Label-rectangle id="0" width="100mm" height="130mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="2" x0="4.5mm" y0="14mm" dx="107mm" dy="130mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Self-adhesive film, 210mm x 297mm, 1 per sheet                      -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-5220, VM-5720" size="A4" description="Klebefolien wetterfest f&#xFC;r Inkjet">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM5220-2200.shtml"/>
+    <Label-rectangle id="0" width="210mm" height="297mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="1" x0="0mm" y0="0mm" dx="210mm" dy="297mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Floppy disk labels, 70mm x 70mm, 12 per sheet                                       -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-5221, VM-5721" size="A4" description="Diskettenaufkleber">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM5221-2204.shtml"/>
+    <Label-rectangle id="0" width="70mm" height="70mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="3" ny="4" x0="0mm" y0="8.5mm" dx="70mm" dy="70mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Address labels, 25.4mm x 16.9mm, 102 per sheet                      -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-6083, VM-6583" size="A4" description="Adressetiketten">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6083-2204.shtml"/>
+    <Label-rectangle id="0" width="25.4mm" height="16.9mm" round="1.5mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="2mm"/>
+      <Layout nx="7" ny="16" x0="9mm" y0="13mm" dx="27.9mm" dy="16.9mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Labels, 105mm x 148 mm, 1 per sheet                                                 -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-6096, VM-6596" size="A6" description="Etiketten A6 f&#xFC;r Laser/Inkjet">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6096-2204.shtml"/>
+    <Label-rectangle id="0" width="105mm" height="148mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="1" x0="0mm" y0="0mm" dx="105mm" dy="148mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Labels, 148mm x 210 mm, 1 per sheet                                                 -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-6097, VM-6597" size="A5" description="Etiketten A5">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6097-2204.shtml"/>
+    <Label-rectangle id="0" width="148mm" height="210mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="1" x0="0mm" y0="0mm" dx="148mm" dy="210mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Photo labels, 45mm x 55mm, 12 per sheet                                     -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-6102, VM-6502" size="A4" description="Fotoetiketten">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6102-2202.shtml"/>
+    <Label-rectangle id="0" width="45mm" height="55mm" round="0mm" x_waste="5mm" y_waste="5mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="3" ny="4" x0="27mm" y0="23.5mm" dx="55mm" dy="65mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Photo labels, 210mm x 297mm, 1 per sheet                                    -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-6206, VM-6706" size="A4" description="Etiketten semigloss Foto f&#xFC;r Inkjet">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6206-2202.shtml"/>
+    <Label-rectangle id="0" width="210mm" height="297mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="1" x0="0mm" y0="0mm" dx="210mm" dy="297mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Address labels, 96.5mm x 42.3mm, 12 per sheet                               -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-6232, VM-6732" size="A4" description="Adressetiketten (STAMPIT) f. Laser/Inkjet">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6232-2201.shtml"/>
+    <Label-rectangle id="0" width="96.5mm" height="42.1mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="2mm"/>
+      <Layout nx="2" ny="6" x0="8.5mm" y0="21mm" dx="96.5mm" dy="42.1mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Address labels, 105mm x 74mm, 8 per sheet                                           -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-6233, VM-6733" size="A4" description="Adressetiketten &#xBB;STAMPIT&#xAB;">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6233-2204.shtml"/>
+    <Label-rectangle id="0" width="105mm" height="74mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="4" x0="0mm" y0="0.5mm" dx="105mm" dy="74mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Address labels, 99.1mm x 57mm, 10 per sheet                                 -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-6234, VM-6734" size="A4" description="Adressetiketten">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6234-2204.shtml"/>
+    <Label-rectangle id="0" width="99.1mm" height="57mm" round="2.5mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="5" x0="5mm" y0="6mm" dx="102.1mm" dy="57mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Self-adhesive abels, 210mm x 297mm, 1 per sheet                     -->
+  <!-- =================================================================== -->
+       <Template brand="PEARL" part="VM-6252, VM-6752" size="A4" description="Etiketten">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6252-2202.shtml"/>
+    <Label-rectangle id="0" width="210mm" height="297mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="1" ny="1" x0="0mm" y0="0mm" dx="0mm" dy="297mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: SD card labels, 20mm x 25mm, 90 per sheet                                           -->
+  <!-- =================================================================== -->
+  <Template brand="PEARL" part="VM-6398" size="A4" description="SD-Etiketten">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6398-2204.shtml"/>
+    <Label-rectangle id="0" width="19.6mm" height="25mm" round="1.2mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="1.5mm"/>
+      <Layout nx="9" ny="10" x0="4.5mm" y0="10mm" dx="22.6mm" dy="28mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- PEARL: Address labels, 105mm x 41mm, 14 per sheet                                  -->
+  <!-- =================================================================== -->
+  <Template brand="PEARL" part="VM-8005, VM-8015" size="A4" description="Adressetiketten">
+       <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-PE8005-2204.shtml"/>
+    <Label-rectangle id="0" width="105mm" height="41mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="7" x0="0mm" y0="5mm" dx="105mm" dy="41mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- ******************************************************************** -->
+  <!-- Sattleford products                                                                                                 -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Business cards, 85mm x 54mm, 10 per sheet                                      -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-5019, VM-5519" size="A4" description="Visitenkarten microperforiert">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Meta product_url="http://www.pearl.de/a-VM5019-2014.shtml"/>
+    <Label-rectangle id="0" width="85mm" height="54.2mm" round="0mm" x_waste="5mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="5" x0="13.5mm" y0="13.5mm" dx="95mm" dy="54.2mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Passport photo labels, 45mm x 54mm, 12 per sheet               -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-5040, VM-5540" size="A4" description="Bewerbungsfotos gl&#xE4;nzend">
+    <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM5040-2002.shtml"/>
+    <Label-rectangle id="0" width="45mm" height="54.5mm" round="0mm" x_waste="5mm" y_waste="5mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="3" ny="4" x0="28mm" y0="24.5mm" dx="55mm" dy="64.5mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Business cards, 86mm x 54mm, 10 per sheet                      -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-5061, VM-5561" size="A4" description="Visitenkarten gestanzt">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Meta product_url="http://www.pearl.de/a-VM5061-2014.shtml"/>
+    <Label-rectangle id="0" width="86mm" height="53.8mm" round="0mm" x_waste="2.5mm" y_waste="1mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="5" x0="16.5mm" y0="10mm" dx="91mm" dy="55.8mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Business cards, 85mm x 54mm, 10 per sheet                      -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-6059, VM-6559" size="A4" description="Visitenkarten gestanzt matt">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Meta product_url="http://www.pearl.de/a-VM6059-2013.shtml"/>
+    <Label-rectangle id="0" width="85mm" height="54mm" round="0mm" x_waste="5mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="5" x0="16mm" y0="14mm" dx="95mm" dy="54mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Business cards, 85mm x 54mm, 10 per sheet                      -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-6066, VM-6566" size="A4" description="Visitenkarten hochgl&#xE4;nzend">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Meta product_url="http://www.pearl.de/a-VM6066-2013.shtml"/>
+    <Label-rectangle id="0" width="85mm" height="54mm" round="0mm" x_waste="5mm" y_waste="0mm">
+      <Markup-margin size="3.175mm"/>
+      <Layout nx="2" ny="5" x0="14mm" y0="13mm" dx="95mm" dy="54mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Name plates, 85mm x 54mm, 10 per sheet                                 -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-6067, VM-6567" size="A4" description="Namensschilder">
+    <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6067-5026.shtml"/>
+    <Label-rectangle id="0" width="85mm" height="54mm" round="0mm" x_waste="5mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="5" x0="15mm" y0="13mm" dx="95mm" dy="54mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Passport photo labels, 45mm x 55mm, 12 per sheet               -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-6102, VM-6502" size="A4" description="Bewerbungsfotos gl&#xE4;nzend">
+    <Meta category="label"/>
+    <Meta category="rectangle-label"/>
+    <Meta product_url="http://www.pearl.de/a-VM6102-2202.shtml"/>
+    <Label-rectangle id="0" width="45mm" height="55mm" round="0mm" x_waste="5mm" y_waste="5mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="3" ny="4" x0="27mm" y0="23.5mm" dx="55mm" dy="65mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Foldable business cards, 180mm x 50mm, 5 per sheet     -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-6200" size="A4" description="Visitenkarten gl&#xE4;nzend beidseitig">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Meta product_url="http://www.pearl.de/a-VM6200-2013.shtml"/>
+    <Label-rectangle id="0" width="180mm" height="50mm" round="3mm" x_waste="0mm" y_waste="2.5mm">
+      <Markup-rect x1="3.2mm" y1="3.2mm" w="83.6mm" h="43.6mm"/>
+         <Markup-rect x1="93.2mm" y1="3.2mm" w="83.6mm" h="43.6mm"/>
+         <Markup-line x1="90mm" y1="0mm" x2="90mm" y2="50mm"/>
+      <Layout nx="1" ny="5" x0="15mm" y0="14mm" dx="180mm" dy="55mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Business cards, 85mm x 54mm, 10 per sheet                      -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-6253, VM-6753" size="A4" description="Visitenkarten gestanzt gl&#xE4;nzend">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Meta product_url="http://www.pearl.de/a-VM6253-2013.shtml"/>
+    <Label-rectangle id="0" width="85mm" height="54mm" round="0mm" x_waste="1mm" y_waste="2.5mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="5" x0="16.5mm" y0="6mm" dx="90mm" dy="55.5mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Foldable business cards, 170mm x 54mm, 5 per sheet     -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-6356, VM-5856" size="A4" description="Faltbare Visitenkarten gl&#xE4;nzend/matt">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Meta product_url="http://www.pearl.de/a-VM6356-2013.shtml"/>
+    <Label-rectangle id="0" width="170mm" height="54mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-rect x1="3.2mm" y1="3.2mm" w="78.6mm" h="47.6mm"/>
+         <Markup-rect x1="88.2mm" y1="3.2mm" w="78.6mm" h="47.6mm"/>
+         <Markup-line x1="85mm" y1="0mm" x2="85mm" y2="54mm"/>
+      <Layout nx="1" ny="5" x0="20mm" y0="14mm" dx="170mm" dy="54mm"/>
+      <Layout nx="1" ny="5" x0="20mm" y0="14mm" dx="170mm" dy="54mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Sattleford: Foldable business cards, 180mm x 50mm, 5 per sheet     -->
+  <!-- =================================================================== -->
+  <Template brand="Sattleford" part="VM-6700" size="A4" description="Faltbare Visitenkarten">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Meta product_url="http://www.pearl.de/a-VM6700-2013.shtml"/>
+    <Label-rectangle id="0" width="180mm" height="50mm" round="0mm" x_waste="0mm" y_waste="2.5mm">
+      <Markup-rect x1="3.2mm" y1="3.2mm" w="83.6mm" h="43.6mm"/>
+         <Markup-rect x1="93.2mm" y1="3.2mm" w="83.6mm" h="43.6mm"/>
+         <Markup-line x1="90mm" y1="0mm" x2="90mm" y2="50mm"/>
+      <Layout nx="1" ny="5" x0="15mm" y0="14mm" dx="180mm" dy="55mm"/>
+      <Layout nx="1" ny="5" x0="15mm" y0="14mm" dx="180mm" dy="55mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- ******************************************************************** -->
+  <!-- Your Design products                                                                                                        -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- Your Design: Membership cards, 85mm x 54.25mm, 8 per sheet                 -->
+  <!-- =================================================================== -->
+  <Template brand="Your Design" part="VM-5112, VM-5612" size="A4" description="Club-Karten">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+       <Meta print="mirrored"/>
+    <Meta product_url="http://www.pearl.de/a-VM5112-2411.shtml"/>
+    <Label-rectangle id="0" width="85mm" height="54.25mm" round="3.5mm" x_waste="7mm" y_waste="7.5mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="4" x0="12mm" y0="21mm" dx="100mm" dy="68.75mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Your Design: Membership cards, 85mm x 54.25mm, 8 per sheet                 -->
+  <!-- =================================================================== -->
+  <Template brand="Your Design" part="VM-6310, VM-6810" size="A4" description="Club-Karten beidseitig">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+       <Meta print="mirrored"/>
+    <Meta product_url="http://www.pearl.de/a-VM6310-2013.shtml"/>
+    <Label-rectangle id="0" width="85mm" height="53.5mm" round="2.5mm" x_waste="7.5mm" y_waste="7.5mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="4" x0="12mm" y0="18mm" dx="100mm" dy="69mm"/>
+      <Layout nx="2" ny="4" x0="12mm" y0="18mm" dx="100mm" dy="69mm"/>
+    </Label-rectangle>
+  </Template>
+</Glabels-templates>
+
+
+
+
diff --git a/data/templates/zweckform-iso-templates.xml b/data/templates/zweckform-iso-templates.xml
new file mode 100644 (file)
index 0000000..fa3c939
--- /dev/null
@@ -0,0 +1,246 @@
+<?xml version="1.0"?>
+<Glabels-templates>
+
+
+  <!-- ******************************************************************** -->
+  <!-- Zweckform A4 products                                                -->
+  <!-- ******************************************************************** -->
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 4761: Lever Arch File Labels, 192 x 61 mm, 4 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="4761" size="A4" _description="Lever Arch File Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="544.25" height="172.9" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="4" x0="25" y0="75" dx="544.25" dy="172.9"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 3477: Adress labels                                       -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="3477" size="A4" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="105mm" height="41mm" round="0mm" x_waste="0mm" y_waste="0mm">
+      <Markup-margin size="3.2mm"/>
+      <Layout nx="2" ny="7" x0="0mm" y0="4.93mm" dx="105mm" dy="41mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 3651: Rectangular Labels, 52 x 29.5 mm, 40 per sheet      -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="3651" size="A4" _description="Rectangular Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="147.4016" height="83.6220" round="0">  
+      <Markup-margin size="5"/>
+      <Layout nx="4" ny="10" x0="2.834" y0="2.834" dx="147.4016" dy="83.6220"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- ====================================================================-->
+  <!-- Zweckform 3654: CD Labels  2 per Template                              -->
+  <!-- ====================================================================-->
+  <Template brand="Zweckform" part="3654" size="A4" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-cd id="0" radius="165.78" hole="58.09" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="2" x0="131.78" y0="58.7998" dx="0" dy="387.97"/>
+    </Label-cd>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 3659: Rectangular Labels, 97 x 42.125 mm, 12 per sheet    -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="3659" size="A4" _description="Mailing Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="274" height="120.5" round="0">  
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="6" x0="22.68" y0="60" dx="274" dy="120.5"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 3669:  Rectangular Labels, 70 x 50.8mm, 15 per sheet      -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="3669" size="A4" _description="QSL-Karten Etiketten 70mm x 50,8mm">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="198.425" height="144" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="5" x0="0" y0="61" dx="198.425" dy="144"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 3688: Ordnerruecken Labels                                -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="3688" size="A4" _description="File Back Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="544.252pt" height="172.913pt" round="0pt" waste="0pt">
+      <Markup-margin size="9.07087pt"/>
+      <Layout nx="1" ny="4" x0="28.3465pt" y0="76.5354pt" dx="544.252pt" dy="172.913pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 4732: Multi-purpose Stick+Lift labels                     -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="4732" size="A4" _description="Multi-purpose Stick+Lift Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="102.047pt" height="48.189pt" round="5.66929pt" waste="0pt">
+      <Markup-margin size="5.66929pt"/>
+      <Layout nx="5" ny="16" x0="31.1811pt" y0="36.8504pt" dx="107.717pt" dy="48.189pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 4746: Video Labels, 147,32 x 20 mm, 13 per sheet          -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="4746" size="A4" _description="Video Labels (back)">
+    <Meta category="label"/>
+    <Meta category="media"/>
+    <Label-rectangle id="0" width="416.6" height="56.6929" round="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="13" x0="88.8377" y0="52.2425" dx="416.6" dy="56.6929"/>
+    </Label-rectangle>
+  </Template>
+  
+  <!-- =================================================================== -->
+  <!-- Zweckform 4780: Allround Labels, 48,5 x 25,4 mm, 40 per sheet       -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="4780" size="A4" _description="Allround Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="137.48" height="72" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="4" ny="10" x0="23" y0="53.8898" dx="137.48" dy="72"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 3474: Address Labels, 70 x 37 mm, 24 per sheet            -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="3474" size="A4" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="70mm" height="37mm" round="0">
+      <Markup-margin size="0"/>
+      <Layout nx="3" ny="8" x0="0" y0="0" dx="70mm" dy="37mm"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 3475: Address Labels, 70 x 30 mm, 24 per sheet            -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="3475" size="A4" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="198.570" height="102.121" round="0">
+      <Markup-margin size="0"/>
+      <Layout nx="3" ny="8" x0="0" y0="12.566" dx="198.570" dy="102.121"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 3490: Rectangular Labels, 70 x 36 mm, 24 per sheet        -->
+  <!-- =================================================================== -->
+   <Template brand="Zweckform" part="3490" size="A4" _description="Rectangular Copier Labels">
+     <Meta category="label"/>
+     <Label-rectangle id="0" width="198.425" height="102.047" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="8" x0="" y0="12.557" dx="198.425" dy="102.047"/>
+     </Label-rectangle>
+   </Template>
+                     
+  <!-- =================================================================== -->
+  <!-- Zweckform 4781: Rectangular Labels, 97 x 42.3 mm, 12 per sheet      -->
+  <!-- =================================================================== -->
+   <Template brand="Zweckform" part="4781" size="A4" _description="Rectangular Copier Labels">
+     <Meta category="label"/>
+     <Label-rectangle id="0" width="274.960" height="119.905" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="6" x0="22.677" y0="61.030" dx="274.960" dy="119.905"/>
+     </Label-rectangle>
+   </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 6091: Correction and Cover, 64.6 x 33.8 mm, 24 per sheet  -->
+  <!-- =================================================================== -->
+   <Template brand="Zweckform" part="6091" size="A4" _description="Correction and Cover-up Labels">
+     <Meta category="label"/>
+     <Label-rectangle id="0" width="183.118" height="95.811" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="3" ny="8" x0="22.961" y0="37.502" dx="183.118" dy="95.881"/>
+     </Label-rectangle>
+   </Template>
+   
+  <!-- =================================================================== -->
+  <!-- Zweckform 6015: CD Labels, 2 per Template                           -->
+  <!-- =================================================================== -->
+   <Template brand="Zweckform" part="6015" size="A4" _description="CD/DVD Labels">
+    <Meta category="label"/>
+    <Meta category="media"/>
+     <Label-cd id="0" radius="165.827" hole="58.110" waste="5">
+      <Markup-margin size="5"/>
+      <Layout nx="1" ny="2" x0="131.811" y0="60.746" dx="0" dy="388.346"/>
+     </Label-cd>
+   </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 6021: Allround Labels                                     -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="6021" size="A4" _description="Allround Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="130.392pt" height="47.9055pt" round="0pt" waste="0pt">
+      <Markup-margin size="5pt"/>
+      <Layout nx="4" ny="16" x0="24.0945pt" y0="39.6853pt" dx="136.913pt" dy="47.9055pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 32010: Business Cards, 54.0 x 85.0 mm, 10 per sheet       -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="32010" size="A4" _description="Business Cards">
+    <Meta category="card"/>
+    <Meta category="business-card"/>
+    <Label-rectangle id="0" width="240.94" height="153.07" round="0">
+      <Markup-margin size="5"/>
+      <Layout nx="2" ny="5" x0="40" y0="40" dx="269" dy="153"/>
+    </Label-rectangle>
+    <Alias brand="DECAdry" part="SCW-2090"/>
+    <Alias brand="DECAdry" part="OCB-3327"/>
+    <Alias brand="DECAdry" part="OCC-3342"/>
+    <Alias brand="DECAdry" part="DAW-327"/>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 4760: File Labels, 192 x 38 mm, 7 per sheet               -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="4760" size="A4" _description="File Back Labels">
+    <Meta category="label"/>
+    <Label-rectangle id="0" width="544.252pt" height="107.717pt" round="5.66929pt" waste="0pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="1" ny="7" x0="25.5118pt" y0="43.7386pt" dx="544.252pt" dy="107.717pt"/>
+    </Label-rectangle>
+  </Template>
+
+  <!-- =================================================================== -->
+  <!-- Zweckform 3348: Adress Labels.                                      -->
+  <!-- =================================================================== -->
+  <Template brand="Zweckform" part="3348" size="A4" _description="Address Labels">
+    <Meta category="label"/>
+    <Meta category="mail"/>
+    <Label-rectangle id="0" width="189.921pt" height="107.717pt" round="0pt" x_waste="0pt" y_waste="0pt">
+      <Markup-margin size="9pt"/>
+      <Layout nx="3" ny="7" x0="5.66929pt" y0="56.6929pt" dx="198.425pt" dy="107.717pt"/>
+    </Label-rectangle>
+  </Template>
+
+</Glabels-templates>
+
+
+
+
diff --git a/depcomp b/depcomp
new file mode 100755 (executable)
index 0000000..df8eea7
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,630 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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, see <http://www.gnu.org/licenses/>.
+
+# 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.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+   # This is just like msvisualcpp but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u="sed s,\\\\\\\\,/,g"
+   depmode=msvisualcpp
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> "$depfile"
+    echo >> "$depfile"
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[     ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${
+              s/^ *//
+              s/ \\*$//
+              s/$/:/
+              p
+            }' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::     \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644 (file)
index 0000000..0cb4945
--- /dev/null
@@ -0,0 +1,3 @@
+## Process this file with automake to produce Makefile.in.
+
+SUBDIRS = libglabels
diff --git a/docs/Makefile.in b/docs/Makefile.in
new file mode 100644 (file)
index 0000000..341a3da
--- /dev/null
@@ -0,0 +1,604 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = docs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = libglabels
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu docs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# 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.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+       install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       ctags ctags-recursive distclean distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am
+
+
+# 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/docs/libglabels/Makefile.am b/docs/libglabels/Makefile.am
new file mode 100644 (file)
index 0000000..28e56fd
--- /dev/null
@@ -0,0 +1,69 @@
+## Process this file with automake to produce Makefile.in
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE=libglabels
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR=../../libglabels
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS=
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" 
+SCAN_OPTIONS=
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS=--sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS=
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB=
+CFILE_GLOB=
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES=libglabels-private.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES=
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files=
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+INCLUDES=
+GTKDOC_LIBS=
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST += 
diff --git a/docs/libglabels/Makefile.in b/docs/libglabels/Makefile.in
new file mode 100644 (file)
index 0000000..c95b075
--- /dev/null
@@ -0,0 +1,655 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/gtk-doc.make
+subdir = docs/libglabels
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE = libglabels
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR = ../../libglabels
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS = 
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" 
+SCAN_OPTIONS = 
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = --sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = 
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB = 
+CFILE_GLOB = 
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES = libglabels-private.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES = 
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files = 
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+INCLUDES = 
+GTKDOC_LIBS = 
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = sh -c
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST = $(content_files) $(HTML_IMAGES) $(DOC_MAIN_SGML_FILE) \
+       $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+DOC_STAMPS = scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+          $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES = \
+       $(DOC_MODULE).args       \
+       $(DOC_MODULE).hierarchy  \
+       $(DOC_MODULE).interfaces \
+       $(DOC_MODULE).prerequisites \
+       $(DOC_MODULE).signals
+
+REPORT_FILES = \
+       $(DOC_MODULE)-undocumented.txt \
+       $(DOC_MODULE)-undeclared.txt \
+       $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/libglabels/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu docs/libglabels/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+       maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+       clean-libtool clean-local dist-hook distclean \
+       distclean-generic distclean-libtool distclean-local distdir \
+       dvi dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-data-local install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic \
+       maintainer-clean-local mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-local
+
+
+@ENABLE_GTK_DOC_TRUE@all-local: html-build.stamp
+@ENABLE_GTK_DOC_FALSE@all-local:
+
+docs: html-build.stamp
+
+$(REPORT_FILES): sgml-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+       @echo 'gtk-doc: Scanning header files'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && \
+         gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+       if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+           CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+       else \
+           cd $(srcdir) ; \
+           for i in $(SCANOBJ_FILES) ; do \
+               test -f $$i || touch $$i ; \
+           done \
+       fi
+       touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+       @true
+
+#### templates ####
+
+tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+       @echo 'gtk-doc: Rebuilding template files'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+       touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+       @true
+
+tmpl/*.sgml:
+       @true
+
+#### xml ####
+
+sgml-build.stamp: tmpl.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
+       @echo 'gtk-doc: Building XML'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && \
+       gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS)
+       touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+       @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+       @echo 'gtk-doc: Building HTML'
+       @-chmod -R u+w $(srcdir)
+       rm -rf $(srcdir)/html
+       mkdir $(srcdir)/html
+       mkhtml_options=""; \
+       gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
+       if test "$(?)" = "0"; then \
+         mkhtml_options=--path="$(srcdir)"; \
+       fi
+       cd $(srcdir)/html && gtkdoc-mkhtml $(mkhtml_options) $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+       test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+       @echo 'gtk-doc: Fixing cross-references'
+       cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+       touch html-build.stamp
+
+##############
+
+clean-local:
+       rm -f *~ *.bak
+       rm -rf .libs
+
+distclean-local:
+       cd $(srcdir) && \
+         rm -rf xml $(REPORT_FILES) \
+                $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+maintainer-clean-local: clean
+       cd $(srcdir) && rm -rf xml html
+
+install-data-local:
+       installfiles=`echo $(srcdir)/html/*`; \
+       if test "$$installfiles" = '$(srcdir)/html/*'; \
+       then echo '-- Nothing to install' ; \
+       else \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+         else \
+           installdir="$(DESTDIR)$(TARGET_DIR)"; \
+         fi; \
+         $(mkinstalldirs) $${installdir} ; \
+         for i in $$installfiles; do \
+           echo '-- Installing '$$i ; \
+           $(INSTALL_DATA) $$i $${installdir}; \
+         done; \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+             $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+           mv -f $${installdir}/$(DOC_MODULE).devhelp \
+             $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp; \
+         fi; \
+         ! which gtkdoc-rebase >/dev/null 2>&1 || \
+           gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir} ; \
+       fi
+
+uninstall-local:
+       if test -n "$(DOC_MODULE_VERSION)"; then \
+         installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+       else \
+         installdir="$(DESTDIR)$(TARGET_DIR)"; \
+       fi; \
+       rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@ @false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+       mkdir $(distdir)/tmpl
+       mkdir $(distdir)/xml
+       mkdir $(distdir)/html
+       -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+       -cp $(srcdir)/xml/*.xml $(distdir)/xml
+       cp $(srcdir)/html/* $(distdir)/html
+       -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+       -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+       cd $(distdir) && rm -f $(DISTCLEANFILES)
+       ! which gtkdoc-rebase >/dev/null 2>&1 || \
+         gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
+
+# 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/docs/libglabels/html/ch01.html b/docs/libglabels/html/ch01.html
new file mode 100644 (file)
index 0000000..ace3432
--- /dev/null
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Basic LibGlabels Usage</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="index.html" title="LibGlabels Reference Manual">
+<link rel="prev" href="index.html" title="LibGlabels Reference Manual">
+<link rel="next" href="libglabels-db.html" title="Database">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-db.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" title="Basic LibGlabels Usage">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id2726253"></a>Basic LibGlabels Usage</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="libglabels-db.html">Database</a></span><span class="refpurpose"> — Database of pre-defined templates</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-template.html">The lglTemplate Structure</a></span><span class="refpurpose"> — How templates are represented in memory</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-paper.html">The lglPaper Structure</a></span><span class="refpurpose"> — Paper size definitions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-category.html">The lglCategory Structure</a></span><span class="refpurpose"> — Template category definitions</span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/ch02.html b/docs/libglabels/html/ch02.html
new file mode 100644 (file)
index 0000000..bfe8fb9
--- /dev/null
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Working Directly With LibGlabels XML</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="index.html" title="LibGlabels Reference Manual">
+<link rel="prev" href="libglabels-category.html" title="The lglCategory Structure">
+<link rel="next" href="libglabels-xml-paper.html" title="XML Paper Functions">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="libglabels-category.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-xml-paper.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" title="Working Directly With LibGlabels XML">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id2736967"></a>Working Directly With LibGlabels XML</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="libglabels-xml-paper.html">XML Paper Functions</a></span><span class="refpurpose"> — Functions to parse glabels XML paper definition files</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-xml-category.html">XML Category Functions</a></span><span class="refpurpose"> — Functions to parse glabels XML category definition files</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-xml-template.html">XML Template Functions</a></span><span class="refpurpose"> — Functions to create and parse glabels XML template nodes and files</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-xml.html">XML Helper Functions</a></span><span class="refpurpose"> — Functions to help format and parse glabels XML properties</span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/ch03.html b/docs/libglabels/html/ch03.html
new file mode 100644 (file)
index 0000000..9705f9f
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Miscellaneous</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="index.html" title="LibGlabels Reference Manual">
+<link rel="prev" href="libglabels-xml.html" title="XML Helper Functions">
+<link rel="next" href="libglabels-enums.html" title="Enumerations">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="libglabels-xml.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-enums.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" title="Miscellaneous">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id2703107"></a>Miscellaneous</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="libglabels-enums.html">Enumerations</a></span><span class="refpurpose"> — Common enumerations used by libglabels</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-str.html">String Utility Functions</a></span><span class="refpurpose"> — String utility functions provided by libglabels</span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/home.png b/docs/libglabels/html/home.png
new file mode 100644 (file)
index 0000000..1700361
Binary files /dev/null and b/docs/libglabels/html/home.png differ
diff --git a/docs/libglabels/html/index.html b/docs/libglabels/html/index.html
new file mode 100644 (file)
index 0000000..2670d9f
--- /dev/null
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LibGlabels Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="next" href="ch01.html" title="Basic LibGlabels Usage">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book" title="LibGlabels Reference Manual">
+<div class="titlepage">
+<div><div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">LibGlabels Reference Manual</p></th></tr></table></div></div>
+<hr>
+</div>
+<div class="toc"><dl>
+<dt><span class="chapter"><a href="ch01.html">Basic LibGlabels Usage</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="libglabels-db.html">Database</a></span><span class="refpurpose"> — Database of pre-defined templates</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-template.html">The lglTemplate Structure</a></span><span class="refpurpose"> — How templates are represented in memory</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-paper.html">The lglPaper Structure</a></span><span class="refpurpose"> — Paper size definitions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-category.html">The lglCategory Structure</a></span><span class="refpurpose"> — Template category definitions</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="ch02.html">Working Directly With LibGlabels XML</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="libglabels-xml-paper.html">XML Paper Functions</a></span><span class="refpurpose"> — Functions to parse glabels XML paper definition files</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-xml-category.html">XML Category Functions</a></span><span class="refpurpose"> — Functions to parse glabels XML category definition files</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-xml-template.html">XML Template Functions</a></span><span class="refpurpose"> — Functions to create and parse glabels XML template nodes and files</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-xml.html">XML Helper Functions</a></span><span class="refpurpose"> — Functions to help format and parse glabels XML properties</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="ch03.html">Miscellaneous</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="libglabels-enums.html">Enumerations</a></span><span class="refpurpose"> — Common enumerations used by libglabels</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libglabels-str.html">String Utility Functions</a></span><span class="refpurpose"> — String utility functions provided by libglabels</span>
+</dt>
+</dl></dd>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/index.sgml b/docs/libglabels/html/index.sgml
new file mode 100644 (file)
index 0000000..98deb56
--- /dev/null
@@ -0,0 +1,162 @@
+<ANCHOR id="libglabels-db" href="libglabels/libglabels-db.html">
+<ANCHOR id="libglabels-db.synopsis" href="libglabels/libglabels-db.html#libglabels-db.synopsis">
+<ANCHOR id="libglabels-db.description" href="libglabels/libglabels-db.html#libglabels-db.description">
+<ANCHOR id="libglabels-db.details" href="libglabels/libglabels-db.html#libglabels-db.details">
+<ANCHOR id="lglDbRegStatus" href="libglabels/libglabels-db.html#lglDbRegStatus">
+<ANCHOR id="lgl-db-init" href="libglabels/libglabels-db.html#lgl-db-init">
+<ANCHOR id="lgl-db-get-paper-id-list" href="libglabels/libglabels-db.html#lgl-db-get-paper-id-list">
+<ANCHOR id="lgl-db-free-paper-id-list" href="libglabels/libglabels-db.html#lgl-db-free-paper-id-list">
+<ANCHOR id="lgl-db-get-paper-name-list" href="libglabels/libglabels-db.html#lgl-db-get-paper-name-list">
+<ANCHOR id="lgl-db-free-paper-name-list" href="libglabels/libglabels-db.html#lgl-db-free-paper-name-list">
+<ANCHOR id="lgl-db-lookup-paper-from-id" href="libglabels/libglabels-db.html#lgl-db-lookup-paper-from-id">
+<ANCHOR id="lgl-db-lookup-paper-from-name" href="libglabels/libglabels-db.html#lgl-db-lookup-paper-from-name">
+<ANCHOR id="lgl-db-lookup-paper-id-from-name" href="libglabels/libglabels-db.html#lgl-db-lookup-paper-id-from-name">
+<ANCHOR id="lgl-db-lookup-paper-name-from-id" href="libglabels/libglabels-db.html#lgl-db-lookup-paper-name-from-id">
+<ANCHOR id="lgl-db-is-paper-id-known" href="libglabels/libglabels-db.html#lgl-db-is-paper-id-known">
+<ANCHOR id="lgl-db-is-paper-id-other" href="libglabels/libglabels-db.html#lgl-db-is-paper-id-other">
+<ANCHOR id="lgl-db-get-category-id-list" href="libglabels/libglabels-db.html#lgl-db-get-category-id-list">
+<ANCHOR id="lgl-db-free-category-id-list" href="libglabels/libglabels-db.html#lgl-db-free-category-id-list">
+<ANCHOR id="lgl-db-get-category-name-list" href="libglabels/libglabels-db.html#lgl-db-get-category-name-list">
+<ANCHOR id="lgl-db-free-category-name-list" href="libglabels/libglabels-db.html#lgl-db-free-category-name-list">
+<ANCHOR id="lgl-db-lookup-category-from-id" href="libglabels/libglabels-db.html#lgl-db-lookup-category-from-id">
+<ANCHOR id="lgl-db-lookup-category-from-name" href="libglabels/libglabels-db.html#lgl-db-lookup-category-from-name">
+<ANCHOR id="lgl-db-lookup-category-id-from-name" href="libglabels/libglabels-db.html#lgl-db-lookup-category-id-from-name">
+<ANCHOR id="lgl-db-lookup-category-name-from-id" href="libglabels/libglabels-db.html#lgl-db-lookup-category-name-from-id">
+<ANCHOR id="lgl-db-is-category-id-known" href="libglabels/libglabels-db.html#lgl-db-is-category-id-known">
+<ANCHOR id="lgl-db-get-brand-list" href="libglabels/libglabels-db.html#lgl-db-get-brand-list">
+<ANCHOR id="lgl-db-free-brand-list" href="libglabels/libglabels-db.html#lgl-db-free-brand-list">
+<ANCHOR id="lgl-db-register-template" href="libglabels/libglabels-db.html#lgl-db-register-template">
+<ANCHOR id="lgl-db-does-template-exist" href="libglabels/libglabels-db.html#lgl-db-does-template-exist">
+<ANCHOR id="lgl-db-does-template-name-exist" href="libglabels/libglabels-db.html#lgl-db-does-template-name-exist">
+<ANCHOR id="lgl-db-get-template-name-list-unique" href="libglabels/libglabels-db.html#lgl-db-get-template-name-list-unique">
+<ANCHOR id="lgl-db-get-template-name-list-all" href="libglabels/libglabels-db.html#lgl-db-get-template-name-list-all">
+<ANCHOR id="lgl-db-free-template-name-list" href="libglabels/libglabels-db.html#lgl-db-free-template-name-list">
+<ANCHOR id="lgl-db-lookup-template-from-name" href="libglabels/libglabels-db.html#lgl-db-lookup-template-from-name">
+<ANCHOR id="lgl-db-print-known-papers" href="libglabels/libglabels-db.html#lgl-db-print-known-papers">
+<ANCHOR id="lgl-db-print-known-categories" href="libglabels/libglabels-db.html#lgl-db-print-known-categories">
+<ANCHOR id="lgl-db-print-known-templates" href="libglabels/libglabels-db.html#lgl-db-print-known-templates">
+<ANCHOR id="lgl-db-print-aliases" href="libglabels/libglabels-db.html#lgl-db-print-aliases">
+<ANCHOR id="libglabels-template" href="libglabels/libglabels-template.html">
+<ANCHOR id="libglabels-template.synopsis" href="libglabels/libglabels-template.html#libglabels-template.synopsis">
+<ANCHOR id="libglabels-template.description" href="libglabels/libglabels-template.html#libglabels-template.description">
+<ANCHOR id="libglabels-template.details" href="libglabels/libglabels-template.html#libglabels-template.details">
+<ANCHOR id="lglTemplate" href="libglabels/libglabels-template.html#lglTemplate">
+<ANCHOR id="lglTemplateAlias" href="libglabels/libglabels-template.html#lglTemplateAlias">
+<ANCHOR id="lglTemplateFrameShape" href="libglabels/libglabels-template.html#lglTemplateFrameShape">
+<ANCHOR id="lglTemplateFrame" href="libglabels/libglabels-template.html#lglTemplateFrame">
+<ANCHOR id="lglTemplateFrameAll" href="libglabels/libglabels-template.html#lglTemplateFrameAll">
+<ANCHOR id="lglTemplateFrameRect" href="libglabels/libglabels-template.html#lglTemplateFrameRect">
+<ANCHOR id="lglTemplateFrameRound" href="libglabels/libglabels-template.html#lglTemplateFrameRound">
+<ANCHOR id="lglTemplateFrameCD" href="libglabels/libglabels-template.html#lglTemplateFrameCD">
+<ANCHOR id="lglTemplateLayout" href="libglabels/libglabels-template.html#lglTemplateLayout">
+<ANCHOR id="lglTemplateMarkupType" href="libglabels/libglabels-template.html#lglTemplateMarkupType">
+<ANCHOR id="lglTemplateMarkup" href="libglabels/libglabels-template.html#lglTemplateMarkup">
+<ANCHOR id="lglTemplateMarkupMargin" href="libglabels/libglabels-template.html#lglTemplateMarkupMargin">
+<ANCHOR id="lglTemplateMarkupLine" href="libglabels/libglabels-template.html#lglTemplateMarkupLine">
+<ANCHOR id="lglTemplateMarkupCircle" href="libglabels/libglabels-template.html#lglTemplateMarkupCircle">
+<ANCHOR id="lglTemplateMarkupRect" href="libglabels/libglabels-template.html#lglTemplateMarkupRect">
+<ANCHOR id="lglTemplateOrigin" href="libglabels/libglabels-template.html#lglTemplateOrigin">
+<ANCHOR id="lgl-template-new" href="libglabels/libglabels-template.html#lgl-template-new">
+<ANCHOR id="lgl-template-dup" href="libglabels/libglabels-template.html#lgl-template-dup">
+<ANCHOR id="lgl-template-free" href="libglabels/libglabels-template.html#lgl-template-free">
+<ANCHOR id="lgl-template-add-category" href="libglabels/libglabels-template.html#lgl-template-add-category">
+<ANCHOR id="lgl-template-add-frame" href="libglabels/libglabels-template.html#lgl-template-add-frame">
+<ANCHOR id="lgl-template-add-alias" href="libglabels/libglabels-template.html#lgl-template-add-alias">
+<ANCHOR id="lgl-template-get-name" href="libglabels/libglabels-template.html#lgl-template-get-name">
+<ANCHOR id="lgl-template-do-templates-match" href="libglabels/libglabels-template.html#lgl-template-do-templates-match">
+<ANCHOR id="lgl-template-does-brand-match" href="libglabels/libglabels-template.html#lgl-template-does-brand-match">
+<ANCHOR id="lgl-template-does-page-size-match" href="libglabels/libglabels-template.html#lgl-template-does-page-size-match">
+<ANCHOR id="lgl-template-does-category-match" href="libglabels/libglabels-template.html#lgl-template-does-category-match">
+<ANCHOR id="lgl-template-alias-new" href="libglabels/libglabels-template.html#lgl-template-alias-new">
+<ANCHOR id="lgl-template-alias-dup" href="libglabels/libglabels-template.html#lgl-template-alias-dup">
+<ANCHOR id="lgl-template-alias-free" href="libglabels/libglabels-template.html#lgl-template-alias-free">
+<ANCHOR id="lgl-template-frame-rect-new" href="libglabels/libglabels-template.html#lgl-template-frame-rect-new">
+<ANCHOR id="lgl-template-frame-round-new" href="libglabels/libglabels-template.html#lgl-template-frame-round-new">
+<ANCHOR id="lgl-template-frame-cd-new" href="libglabels/libglabels-template.html#lgl-template-frame-cd-new">
+<ANCHOR id="lgl-template-frame-dup" href="libglabels/libglabels-template.html#lgl-template-frame-dup">
+<ANCHOR id="lgl-template-frame-free" href="libglabels/libglabels-template.html#lgl-template-frame-free">
+<ANCHOR id="lgl-template-frame-add-layout" href="libglabels/libglabels-template.html#lgl-template-frame-add-layout">
+<ANCHOR id="lgl-template-frame-add-markup" href="libglabels/libglabels-template.html#lgl-template-frame-add-markup">
+<ANCHOR id="lgl-template-frame-get-size" href="libglabels/libglabels-template.html#lgl-template-frame-get-size">
+<ANCHOR id="lgl-template-frame-get-n-labels" href="libglabels/libglabels-template.html#lgl-template-frame-get-n-labels">
+<ANCHOR id="lgl-template-frame-get-origins" href="libglabels/libglabels-template.html#lgl-template-frame-get-origins">
+<ANCHOR id="lgl-template-layout-new" href="libglabels/libglabels-template.html#lgl-template-layout-new">
+<ANCHOR id="lgl-template-layout-dup" href="libglabels/libglabels-template.html#lgl-template-layout-dup">
+<ANCHOR id="lgl-template-layout-free" href="libglabels/libglabels-template.html#lgl-template-layout-free">
+<ANCHOR id="lgl-template-markup-margin-new" href="libglabels/libglabels-template.html#lgl-template-markup-margin-new">
+<ANCHOR id="lgl-template-markup-line-new" href="libglabels/libglabels-template.html#lgl-template-markup-line-new">
+<ANCHOR id="lgl-template-markup-circle-new" href="libglabels/libglabels-template.html#lgl-template-markup-circle-new">
+<ANCHOR id="lgl-template-markup-rect-new" href="libglabels/libglabels-template.html#lgl-template-markup-rect-new">
+<ANCHOR id="lgl-template-markup-dup" href="libglabels/libglabels-template.html#lgl-template-markup-dup">
+<ANCHOR id="lgl-template-markup-free" href="libglabels/libglabels-template.html#lgl-template-markup-free">
+<ANCHOR id="libglabels-paper" href="libglabels/libglabels-paper.html">
+<ANCHOR id="libglabels-paper.synopsis" href="libglabels/libglabels-paper.html#libglabels-paper.synopsis">
+<ANCHOR id="libglabels-paper.description" href="libglabels/libglabels-paper.html#libglabels-paper.description">
+<ANCHOR id="libglabels-paper.details" href="libglabels/libglabels-paper.html#libglabels-paper.details">
+<ANCHOR id="lglPaper" href="libglabels/libglabels-paper.html#lglPaper">
+<ANCHOR id="lgl-paper-new" href="libglabels/libglabels-paper.html#lgl-paper-new">
+<ANCHOR id="lgl-paper-dup" href="libglabels/libglabels-paper.html#lgl-paper-dup">
+<ANCHOR id="lgl-paper-free" href="libglabels/libglabels-paper.html#lgl-paper-free">
+<ANCHOR id="libglabels-category" href="libglabels/libglabels-category.html">
+<ANCHOR id="libglabels-category.synopsis" href="libglabels/libglabels-category.html#libglabels-category.synopsis">
+<ANCHOR id="libglabels-category.description" href="libglabels/libglabels-category.html#libglabels-category.description">
+<ANCHOR id="libglabels-category.details" href="libglabels/libglabels-category.html#libglabels-category.details">
+<ANCHOR id="lglCategory" href="libglabels/libglabels-category.html#lglCategory">
+<ANCHOR id="lgl-category-new" href="libglabels/libglabels-category.html#lgl-category-new">
+<ANCHOR id="lgl-category-dup" href="libglabels/libglabels-category.html#lgl-category-dup">
+<ANCHOR id="lgl-category-free" href="libglabels/libglabels-category.html#lgl-category-free">
+<ANCHOR id="libglabels-xml-paper" href="libglabels/libglabels-xml-paper.html">
+<ANCHOR id="libglabels-xml-paper.synopsis" href="libglabels/libglabels-xml-paper.html#libglabels-xml-paper.synopsis">
+<ANCHOR id="libglabels-xml-paper.description" href="libglabels/libglabels-xml-paper.html#libglabels-xml-paper.description">
+<ANCHOR id="libglabels-xml-paper.details" href="libglabels/libglabels-xml-paper.html#libglabels-xml-paper.details">
+<ANCHOR id="lgl-xml-paper-read-papers-from-file" href="libglabels/libglabels-xml-paper.html#lgl-xml-paper-read-papers-from-file">
+<ANCHOR id="lgl-xml-paper-parse-papers-doc" href="libglabels/libglabels-xml-paper.html#lgl-xml-paper-parse-papers-doc">
+<ANCHOR id="lgl-xml-paper-parse-paper-node" href="libglabels/libglabels-xml-paper.html#lgl-xml-paper-parse-paper-node">
+<ANCHOR id="libglabels-xml-category" href="libglabels/libglabels-xml-category.html">
+<ANCHOR id="libglabels-xml-category.synopsis" href="libglabels/libglabels-xml-category.html#libglabels-xml-category.synopsis">
+<ANCHOR id="libglabels-xml-category.description" href="libglabels/libglabels-xml-category.html#libglabels-xml-category.description">
+<ANCHOR id="libglabels-xml-category.details" href="libglabels/libglabels-xml-category.html#libglabels-xml-category.details">
+<ANCHOR id="lgl-xml-category-read-categories-from-file" href="libglabels/libglabels-xml-category.html#lgl-xml-category-read-categories-from-file">
+<ANCHOR id="lgl-xml-category-parse-categories-doc" href="libglabels/libglabels-xml-category.html#lgl-xml-category-parse-categories-doc">
+<ANCHOR id="lgl-xml-category-parse-category-node" href="libglabels/libglabels-xml-category.html#lgl-xml-category-parse-category-node">
+<ANCHOR id="libglabels-xml-template" href="libglabels/libglabels-xml-template.html">
+<ANCHOR id="libglabels-xml-template.synopsis" href="libglabels/libglabels-xml-template.html#libglabels-xml-template.synopsis">
+<ANCHOR id="libglabels-xml-template.description" href="libglabels/libglabels-xml-template.html#libglabels-xml-template.description">
+<ANCHOR id="libglabels-xml-template.details" href="libglabels/libglabels-xml-template.html#libglabels-xml-template.details">
+<ANCHOR id="lgl-xml-template-read-templates-from-file" href="libglabels/libglabels-xml-template.html#lgl-xml-template-read-templates-from-file">
+<ANCHOR id="lgl-xml-template-parse-templates-doc" href="libglabels/libglabels-xml-template.html#lgl-xml-template-parse-templates-doc">
+<ANCHOR id="lgl-xml-template-parse-template-node" href="libglabels/libglabels-xml-template.html#lgl-xml-template-parse-template-node">
+<ANCHOR id="lgl-xml-template-write-templates-to-file" href="libglabels/libglabels-xml-template.html#lgl-xml-template-write-templates-to-file">
+<ANCHOR id="lgl-xml-template-write-template-to-file" href="libglabels/libglabels-xml-template.html#lgl-xml-template-write-template-to-file">
+<ANCHOR id="lgl-xml-template-create-template-node" href="libglabels/libglabels-xml-template.html#lgl-xml-template-create-template-node">
+<ANCHOR id="libglabels-xml" href="libglabels/libglabels-xml.html">
+<ANCHOR id="libglabels-xml.synopsis" href="libglabels/libglabels-xml.html#libglabels-xml.synopsis">
+<ANCHOR id="libglabels-xml.description" href="libglabels/libglabels-xml.html#libglabels-xml.description">
+<ANCHOR id="libglabels-xml.details" href="libglabels/libglabels-xml.html#libglabels-xml.details">
+<ANCHOR id="LGL-XML-NAME-SPACE--CAPS" href="libglabels/libglabels-xml.html#LGL-XML-NAME-SPACE--CAPS">
+<ANCHOR id="lgl-xml-get-prop-string" href="libglabels/libglabels-xml.html#lgl-xml-get-prop-string">
+<ANCHOR id="lgl-xml-get-prop-i18n-string" href="libglabels/libglabels-xml.html#lgl-xml-get-prop-i18n-string">
+<ANCHOR id="lgl-xml-get-prop-double" href="libglabels/libglabels-xml.html#lgl-xml-get-prop-double">
+<ANCHOR id="lgl-xml-get-prop-boolean" href="libglabels/libglabels-xml.html#lgl-xml-get-prop-boolean">
+<ANCHOR id="lgl-xml-get-prop-int" href="libglabels/libglabels-xml.html#lgl-xml-get-prop-int">
+<ANCHOR id="lgl-xml-get-prop-uint" href="libglabels/libglabels-xml.html#lgl-xml-get-prop-uint">
+<ANCHOR id="lgl-xml-get-prop-length" href="libglabels/libglabels-xml.html#lgl-xml-get-prop-length">
+<ANCHOR id="lgl-xml-set-prop-string" href="libglabels/libglabels-xml.html#lgl-xml-set-prop-string">
+<ANCHOR id="lgl-xml-set-prop-double" href="libglabels/libglabels-xml.html#lgl-xml-set-prop-double">
+<ANCHOR id="lgl-xml-set-prop-boolean" href="libglabels/libglabels-xml.html#lgl-xml-set-prop-boolean">
+<ANCHOR id="lgl-xml-set-prop-int" href="libglabels/libglabels-xml.html#lgl-xml-set-prop-int">
+<ANCHOR id="lgl-xml-set-prop-uint-hex" href="libglabels/libglabels-xml.html#lgl-xml-set-prop-uint-hex">
+<ANCHOR id="lgl-xml-set-prop-length" href="libglabels/libglabels-xml.html#lgl-xml-set-prop-length">
+<ANCHOR id="lgl-xml-is-node" href="libglabels/libglabels-xml.html#lgl-xml-is-node">
+<ANCHOR id="lgl-xml-get-node-content" href="libglabels/libglabels-xml.html#lgl-xml-get-node-content">
+<ANCHOR id="lgl-xml-set-default-units" href="libglabels/libglabels-xml.html#lgl-xml-set-default-units">
+<ANCHOR id="libglabels-enums" href="libglabels/libglabels-enums.html">
+<ANCHOR id="libglabels-enums.synopsis" href="libglabels/libglabels-enums.html#libglabels-enums.synopsis">
+<ANCHOR id="libglabels-enums.description" href="libglabels/libglabels-enums.html#libglabels-enums.description">
+<ANCHOR id="libglabels-enums.details" href="libglabels/libglabels-enums.html#libglabels-enums.details">
+<ANCHOR id="lglUnitsType" href="libglabels/libglabels-enums.html#lglUnitsType">
+<ANCHOR id="libglabels-str" href="libglabels/libglabels-str.html">
+<ANCHOR id="libglabels-str.synopsis" href="libglabels/libglabels-str.html#libglabels-str.synopsis">
+<ANCHOR id="libglabels-str.description" href="libglabels/libglabels-str.html#libglabels-str.description">
+<ANCHOR id="libglabels-str.details" href="libglabels/libglabels-str.html#libglabels-str.details">
+<ANCHOR id="lgl-str-utf8-casecmp" href="libglabels/libglabels-str.html#lgl-str-utf8-casecmp">
diff --git a/docs/libglabels/html/left.png b/docs/libglabels/html/left.png
new file mode 100644 (file)
index 0000000..2d05b3d
Binary files /dev/null and b/docs/libglabels/html/left.png differ
diff --git a/docs/libglabels/html/libglabels-category.html b/docs/libglabels/html/libglabels-category.html
new file mode 100644 (file)
index 0000000..3725ff5
--- /dev/null
@@ -0,0 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>The lglCategory Structure</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="prev" href="libglabels-paper.html" title="The lglPaper Structure">
+<link rel="next" href="ch02.html" title="Working Directly With LibGlabels XML">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libglabels-paper.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="ch02.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-category.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-category.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="The lglCategory Structure">
+<a name="libglabels-category"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-category.top_of_page"></a>The lglCategory Structure</span></h2>
+<p>The lglCategory Structure — Template category definitions</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-category.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/category.h&gt;
+
+                    <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a>;
+<a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       <a class="link" href="libglabels-category.html#lgl-category-new" title="lgl_category_new ()">lgl_category_new</a>                    (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);
+<a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       <a class="link" href="libglabels-category.html#lgl-category-dup" title="lgl_category_dup ()">lgl_category_dup</a>                    (const <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *orig);
+void                <a class="link" href="libglabels-category.html#lgl-category-free" title="lgl_category_free ()">lgl_category_free</a>                   (<a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *category);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-category.description"></a><h2>Description</h2>
+<p>
+This section describes a structure for representing a category of stationary and related
+functions.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-category.details"></a><h2>Details</h2>
+<div class="refsect2" title="lglCategory">
+<a name="lglCategory"></a><h3>lglCategory</h3>
+<pre class="programlisting">typedef struct {
+       gchar               *id;     /* Unique ID of category */
+       gchar               *name;   /* Localized name of category */
+} lglCategory;
+</pre>
+<p>
+This structure defines a category.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>id</code></em>;</span></p></td>
+<td>Category ID.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>name</code></em>;</span></p></td>
+<td>Localized category name.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_category_new ()">
+<a name="lgl-category-new"></a><h3>lgl_category_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       lgl_category_new                    (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);</pre>
+<p>
+Allocates and constructs a new <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>     Id of category definition. (E.g. label, card, etc.)  Should be
+         unique.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>   Localized name of category.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to a newly allocated <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_category_dup ()">
+<a name="lgl-category-dup"></a><h3>lgl_category_dup ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       lgl_category_dup                    (const <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *orig);</pre>
+<p>
+Duplicates an existing <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig</code></em> :</span></p></td>
+<td>  <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure to be duplicated.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to a newly allocated <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_category_free ()">
+<a name="lgl-category-free"></a><h3>lgl_category_free ()</h3>
+<pre class="programlisting">void                lgl_category_free                   (<a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *category);</pre>
+<p>
+Free all memory associated with an existing <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>category</code></em> :</span></p></td>
+<td>  pointer to <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure to be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels-db.html b/docs/libglabels/html/libglabels-db.html
new file mode 100644 (file)
index 0000000..e221080
--- /dev/null
@@ -0,0 +1,1073 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Database</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="prev" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="next" href="libglabels-template.html" title="The lglTemplate Structure">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-template.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-db.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-db.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="Database">
+<a name="libglabels-db"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-db.top_of_page"></a>Database</span></h2>
+<p>Database — Database of pre-defined templates</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-db.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/db.h&gt;
+
+enum                <a class="link" href="libglabels-db.html#lglDbRegStatus" title="enum lglDbRegStatus">lglDbRegStatus</a>;
+
+void                <a class="link" href="libglabels-db.html#lgl-db-init" title="lgl_db_init ()">lgl_db_init</a>                         (void);
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-db.html#lgl-db-get-paper-id-list" title="lgl_db_get_paper_id_list ()">lgl_db_get_paper_id_list</a>            (void);
+void                <a class="link" href="libglabels-db.html#lgl-db-free-paper-id-list" title="lgl_db_free_paper_id_list ()">lgl_db_free_paper_id_list</a>           (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *ids);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-db.html#lgl-db-get-paper-name-list" title="lgl_db_get_paper_name_list ()">lgl_db_get_paper_name_list</a>          (void);
+void                <a class="link" href="libglabels-db.html#lgl-db-free-paper-name-list" title="lgl_db_free_paper_name_list ()">lgl_db_free_paper_name_list</a>         (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *names);
+<a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          <a class="link" href="libglabels-db.html#lgl-db-lookup-paper-from-id" title="lgl_db_lookup_paper_from_id ()">lgl_db_lookup_paper_from_id</a>         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);
+<a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          <a class="link" href="libglabels-db.html#lgl-db-lookup-paper-from-name" title="lgl_db_lookup_paper_from_name ()">lgl_db_lookup_paper_from_name</a>       (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             <a class="link" href="libglabels-db.html#lgl-db-lookup-paper-id-from-name" title="lgl_db_lookup_paper_id_from_name ()">lgl_db_lookup_paper_id_from_name</a>    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             <a class="link" href="libglabels-db.html#lgl-db-lookup-paper-name-from-id" title="lgl_db_lookup_paper_name_from_id ()">lgl_db_lookup_paper_name_from_id</a>    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-db.html#lgl-db-is-paper-id-known" title="lgl_db_is_paper_id_known ()">lgl_db_is_paper_id_known</a>            (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-db.html#lgl-db-is-paper-id-other" title="lgl_db_is_paper_id_other ()">lgl_db_is_paper_id_other</a>            (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-db.html#lgl-db-get-category-id-list" title="lgl_db_get_category_id_list ()">lgl_db_get_category_id_list</a>         (void);
+void                <a class="link" href="libglabels-db.html#lgl-db-free-category-id-list" title="lgl_db_free_category_id_list ()">lgl_db_free_category_id_list</a>        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *ids);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-db.html#lgl-db-get-category-name-list" title="lgl_db_get_category_name_list ()">lgl_db_get_category_name_list</a>       (void);
+void                <a class="link" href="libglabels-db.html#lgl-db-free-category-name-list" title="lgl_db_free_category_name_list ()">lgl_db_free_category_name_list</a>      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *names);
+<a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       <a class="link" href="libglabels-db.html#lgl-db-lookup-category-from-id" title="lgl_db_lookup_category_from_id ()">lgl_db_lookup_category_from_id</a>      (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);
+<a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       <a class="link" href="libglabels-db.html#lgl-db-lookup-category-from-name" title="lgl_db_lookup_category_from_name ()">lgl_db_lookup_category_from_name</a>    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             <a class="link" href="libglabels-db.html#lgl-db-lookup-category-id-from-name" title="lgl_db_lookup_category_id_from_name ()">lgl_db_lookup_category_id_from_name</a> (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             <a class="link" href="libglabels-db.html#lgl-db-lookup-category-name-from-id" title="lgl_db_lookup_category_name_from_id ()">lgl_db_lookup_category_name_from_id</a> (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-db.html#lgl-db-is-category-id-known" title="lgl_db_is_category_id_known ()">lgl_db_is_category_id_known</a>         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-db.html#lgl-db-get-brand-list" title="lgl_db_get_brand_list ()">lgl_db_get_brand_list</a>               (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);
+void                <a class="link" href="libglabels-db.html#lgl-db-free-brand-list" title="lgl_db_free_brand_list ()">lgl_db_free_brand_list</a>              (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *brands);
+
+<a class="link" href="libglabels-db.html#lglDbRegStatus" title="enum lglDbRegStatus">lglDbRegStatus</a>      <a class="link" href="libglabels-db.html#lgl-db-register-template" title="lgl_db_register_template ()">lgl_db_register_template</a>            (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-db.html#lgl-db-does-template-exist" title="lgl_db_does_template_exist ()">lgl_db_does_template_exist</a>          (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *part);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-db.html#lgl-db-does-template-name-exist" title="lgl_db_does_template_name_exist ()">lgl_db_does_template_name_exist</a>     (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-db.html#lgl-db-get-template-name-list-unique" title="lgl_db_get_template_name_list_unique ()">lgl_db_get_template_name_list_unique</a>
+                                                        (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-db.html#lgl-db-get-template-name-list-all" title="lgl_db_get_template_name_list_all ()">lgl_db_get_template_name_list_all</a>   (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);
+void                <a class="link" href="libglabels-db.html#lgl-db-free-template-name-list" title="lgl_db_free_template_name_list ()">lgl_db_free_template_name_list</a>      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *names);
+<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *       <a class="link" href="libglabels-db.html#lgl-db-lookup-template-from-name" title="lgl_db_lookup_template_from_name ()">lgl_db_lookup_template_from_name</a>    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);
+
+void                <a class="link" href="libglabels-db.html#lgl-db-print-known-papers" title="lgl_db_print_known_papers ()">lgl_db_print_known_papers</a>           (void);
+void                <a class="link" href="libglabels-db.html#lgl-db-print-known-categories" title="lgl_db_print_known_categories ()">lgl_db_print_known_categories</a>       (void);
+void                <a class="link" href="libglabels-db.html#lgl-db-print-known-templates" title="lgl_db_print_known_templates ()">lgl_db_print_known_templates</a>        (void);
+void                <a class="link" href="libglabels-db.html#lgl-db-print-aliases" title="lgl_db_print_aliases ()">lgl_db_print_aliases</a>                (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-db.description"></a><h2>Description</h2>
+<p>
+This section describes a set of functions to locate and add templates and related information in
+the LibGlabels template database.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-db.details"></a><h2>Details</h2>
+<div class="refsect2" title="enum lglDbRegStatus">
+<a name="lglDbRegStatus"></a><h3>enum lglDbRegStatus</h3>
+<pre class="programlisting">typedef enum
+{
+        LGL_DB_REG_OK                =  0,
+        LGL_DB_REG_BAD_PAPER_ID      = -1,
+        LGL_DB_REG_BRAND_PART_EXISTS = -2,
+        LGL_DB_REG_FILE_WRITE_ERROR  = -3
+} lglDbRegStatus;
+</pre>
+<p>
+This enumeration defines a set of possible return values for <a class="link" href="libglabels-db.html#lgl-db-register-template" title="lgl_db_register_template ()"><code class="function">lgl_db_register_template()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="LGL-DB-REG-OK--CAPS"></a><span class="term"><code class="literal">LGL_DB_REG_OK</code></span></p></td>
+<td>Registration successful.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-DB-REG-BAD-PAPER-ID--CAPS"></a><span class="term"><code class="literal">LGL_DB_REG_BAD_PAPER_ID</code></span></p></td>
+<td> Registration failed because paper id is unknown.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-DB-REG-BRAND-PART-EXISTS--CAPS"></a><span class="term"><code class="literal">LGL_DB_REG_BRAND_PART_EXISTS</code></span></p></td>
+<td>Registration failed because template with same brand and part name/number already exists.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-DB-REG-FILE-WRITE-ERROR--CAPS"></a><span class="term"><code class="literal">LGL_DB_REG_FILE_WRITE_ERROR</code></span></p></td>
+<td>Registration failed because an error while writing to disk.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_init ()">
+<a name="lgl-db-init"></a><h3>lgl_db_init ()</h3>
+<pre class="programlisting">void                lgl_db_init                         (void);</pre>
+<p>
+Initialize all libglabels subsystems.  It is not necessary for an application to call
+<a class="link" href="libglabels-db.html#lgl-db-init" title="lgl_db_init ()"><code class="function">lgl_db_init()</code></a>, because libglabels will initialize on demand.  An application programmer may
+choose to call <a class="link" href="libglabels-db.html#lgl-db-init" title="lgl_db_init ()"><code class="function">lgl_db_init()</code></a> at startup to minimize the impact of the first libglabels call
+on GUI response time.
+</p>
+<p>
+This function initializes its paper definitions, category definitions, and its template
+database.. It will search both system and user template directories to locate
+this data.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_get_paper_id_list ()">
+<a name="lgl-db-get-paper-id-list"></a><h3>lgl_db_get_paper_id_list ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_db_get_paper_id_list            (void);</pre>
+<p>
+Get a list of all paper ids known to libglabels.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of paper ids.
+
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_free_paper_id_list ()">
+<a name="lgl-db-free-paper-id-list"></a><h3>lgl_db_free_paper_id_list ()</h3>
+<pre class="programlisting">void                lgl_db_free_paper_id_list           (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *ids);</pre>
+<p>
+Free up all storage associated with an id list obtained with
+<a class="link" href="libglabels-db.html#lgl-db-get-paper-id-list" title="lgl_db_get_paper_id_list ()"><code class="function">lgl_db_get_paper_id_list()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>ids</code></em> :</span></p></td>
+<td> List of id strings to be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_get_paper_name_list ()">
+<a name="lgl-db-get-paper-name-list"></a><h3>lgl_db_get_paper_name_list ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_db_get_paper_name_list          (void);</pre>
+<p>
+Get a list of all localized paper names known to libglabels.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of localized paper names.
+
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_free_paper_name_list ()">
+<a name="lgl-db-free-paper-name-list"></a><h3>lgl_db_free_paper_name_list ()</h3>
+<pre class="programlisting">void                lgl_db_free_paper_name_list         (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *names);</pre>
+<p>
+Free up all storage associated with a name list obtained with
+<a class="link" href="libglabels-db.html#lgl-db-get-paper-name-list" title="lgl_db_get_paper_name_list ()"><code class="function">lgl_db_get_paper_name_list()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>names</code></em> :</span></p></td>
+<td> List of localized paper name strings to be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_lookup_paper_from_id ()">
+<a name="lgl-db-lookup-paper-from-id"></a><h3>lgl_db_lookup_paper_from_id ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          lgl_db_lookup_paper_from_id         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);</pre>
+<p>
+Lookup paper definition from id string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td> paper id string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_lookup_paper_from_name ()">
+<a name="lgl-db-lookup-paper-from-name"></a><h3>lgl_db_lookup_paper_from_name ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          lgl_db_lookup_paper_from_name       (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);</pre>
+<p>
+Lookup paper definition from localized paper name string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td> localized paper name string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_lookup_paper_id_from_name ()">
+<a name="lgl-db-lookup-paper-id-from-name"></a><h3>lgl_db_lookup_paper_id_from_name ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             lgl_db_lookup_paper_id_from_name    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);</pre>
+<p>
+Lookup paper name string from localized paper name string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td> localized paper name stringp
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated id string.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_lookup_paper_name_from_id ()">
+<a name="lgl-db-lookup-paper-name-from-id"></a><h3>lgl_db_lookup_paper_name_from_id ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             lgl_db_lookup_paper_name_from_id    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);</pre>
+<p>
+Lookup localized paper name string from paper id string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td> paper id string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated localized paper name string.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_is_paper_id_known ()">
+<a name="lgl-db-is-paper-id-known"></a><h3>lgl_db_is_paper_id_known ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_db_is_paper_id_known            (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);</pre>
+<p>
+Determine if given paper id is known to libglabels.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td> paper id to test
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> TRUE if id is known, otherwise FALSE.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_is_paper_id_other ()">
+<a name="lgl-db-is-paper-id-other"></a><h3>lgl_db_is_paper_id_other ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_db_is_paper_id_other            (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);</pre>
+<p>
+Determine if given paper id is the special id "Other."</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td> paper id to test
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> TRUE if id is "Other", otherwise FALSE.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_get_category_id_list ()">
+<a name="lgl-db-get-category-id-list"></a><h3>lgl_db_get_category_id_list ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_db_get_category_id_list         (void);</pre>
+<p>
+Get a list of all category ids known to libglabels.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of category ids.
+
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_free_category_id_list ()">
+<a name="lgl-db-free-category-id-list"></a><h3>lgl_db_free_category_id_list ()</h3>
+<pre class="programlisting">void                lgl_db_free_category_id_list        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *ids);</pre>
+<p>
+Free up all storage associated with an id list obtained with
+<a class="link" href="libglabels-db.html#lgl-db-get-category-id-list" title="lgl_db_get_category_id_list ()"><code class="function">lgl_db_get_category_id_list()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>ids</code></em> :</span></p></td>
+<td> List of id strings to be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_get_category_name_list ()">
+<a name="lgl-db-get-category-name-list"></a><h3>lgl_db_get_category_name_list ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_db_get_category_name_list       (void);</pre>
+<p>
+Get a list of all localized category names known to libglabels.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of localized category names.
+
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_free_category_name_list ()">
+<a name="lgl-db-free-category-name-list"></a><h3>lgl_db_free_category_name_list ()</h3>
+<pre class="programlisting">void                lgl_db_free_category_name_list      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *names);</pre>
+<p>
+Free up all storage associated with a name list obtained with
+<a class="link" href="libglabels-db.html#lgl-db-get-category-name-list" title="lgl_db_get_category_name_list ()"><code class="function">lgl_db_get_category_name_list()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>names</code></em> :</span></p></td>
+<td> List of localized category name strings to be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_lookup_category_from_id ()">
+<a name="lgl-db-lookup-category-from-id"></a><h3>lgl_db_lookup_category_from_id ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       lgl_db_lookup_category_from_id      (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);</pre>
+<p>
+Lookup category definition from id string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td> category id string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_lookup_category_from_name ()">
+<a name="lgl-db-lookup-category-from-name"></a><h3>lgl_db_lookup_category_from_name ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       lgl_db_lookup_category_from_name    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);</pre>
+<p>
+Lookup category definition from localized category name string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td> localized category name string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_lookup_category_id_from_name ()">
+<a name="lgl-db-lookup-category-id-from-name"></a><h3>lgl_db_lookup_category_id_from_name ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             lgl_db_lookup_category_id_from_name (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);</pre>
+<p>
+Lookup category name string from localized category name string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td> localized category name stringp
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated id string.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_lookup_category_name_from_id ()">
+<a name="lgl-db-lookup-category-name-from-id"></a><h3>lgl_db_lookup_category_name_from_id ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             lgl_db_lookup_category_name_from_id (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);</pre>
+<p>
+Lookup localized category name string from category id string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td> category id string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated localized category name string.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_is_category_id_known ()">
+<a name="lgl-db-is-category-id-known"></a><h3>lgl_db_is_category_id_known ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_db_is_category_id_known         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id);</pre>
+<p>
+Determine if given category id is known to libglabels.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td> category id to test
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> TRUE if id is known, otherwise FALSE.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_get_brand_list ()">
+<a name="lgl-db-get-brand-list"></a><h3>lgl_db_get_brand_list ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_db_get_brand_list               (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);</pre>
+<p>
+Get a list of all valid brands of templates in the template database.
+Results can be filtered by page size and/or template category.  A list of valid page
+sizes can be obtained using <a class="link" href="libglabels-db.html#lgl-db-get-paper-id-list" title="lgl_db_get_paper_id_list ()"><code class="function">lgl_db_get_paper_id_list()</code></a>.  A list of valid template
+categories can be obtained using <a class="link" href="libglabels-db.html#lgl-db-get-category-id-list" title="lgl_db_get_category_id_list ()"><code class="function">lgl_db_get_category_id_list()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>paper_id</code></em> :</span></p></td>
+<td> If non NULL, limit results to given page size.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>category_id</code></em> :</span></p></td>
+<td> If non NULL, limit results to given template category.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of brands
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_free_brand_list ()">
+<a name="lgl-db-free-brand-list"></a><h3>lgl_db_free_brand_list ()</h3>
+<pre class="programlisting">void                lgl_db_free_brand_list              (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *brands);</pre>
+<p>
+Free up all storage associated with a list of template names obtained with
+<a class="link" href="libglabels-db.html#lgl-db-get-brand-list" title="lgl_db_get_brand_list ()"><code class="function">lgl_db_get_brand_list()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>brands</code></em> :</span></p></td>
+<td> List of template brand strings to be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_register_template ()">
+<a name="lgl-db-register-template"></a><h3>lgl_db_register_template ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-db.html#lglDbRegStatus" title="enum lglDbRegStatus">lglDbRegStatus</a>      lgl_db_register_template            (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template);</pre>
+<p>
+Register a template.  This function adds a template to the template database.
+The template will be stored in an individual XML file in the user template directory.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>  Pointer to a template structure to add to database.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Status of registration attempt (<a class="link" href="libglabels-db.html#lglDbRegStatus" title="enum lglDbRegStatus"><span class="type">lglDbRegStatus</span></a>)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_does_template_exist ()">
+<a name="lgl-db-does-template-exist"></a><h3>lgl_db_does_template_exist ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_db_does_template_exist          (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *part);</pre>
+<p>
+This function tests whether a template with the given brand and part name/number exists.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>brand</code></em> :</span></p></td>
+<td> Brand name.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>part</code></em> :</span></p></td>
+<td>  Part name/number.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  TRUE if such a template exists in the database.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_does_template_name_exist ()">
+<a name="lgl-db-does-template-name-exist"></a><h3>lgl_db_does_template_name_exist ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_db_does_template_name_exist     (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);</pre>
+<p>
+This function test whether a template with the given name exists.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td> name string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> TRUE if such a template exists in the database.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_get_template_name_list_unique ()">
+<a name="lgl-db-get-template-name-list-unique"></a><h3>lgl_db_get_template_name_list_unique ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_db_get_template_name_list_unique
+                                                        (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);</pre>
+<p>
+Get a list of valid names of unique templates in the template database.  Results
+can be filtered by page size and/or template category.  A list of valid page sizes
+can be obtained using <a class="link" href="libglabels-db.html#lgl-db-get-paper-id-list" title="lgl_db_get_paper_id_list ()"><code class="function">lgl_db_get_paper_id_list()</code></a>.  A list of valid template categories
+can be obtained using <a class="link" href="libglabels-db.html#lgl-db-get-category-id-list" title="lgl_db_get_category_id_list ()"><code class="function">lgl_db_get_category_id_list()</code></a>.
+</p>
+<p>
+This function differs from <a class="link" href="libglabels-db.html#lgl-db-get-template-name-list-all" title="lgl_db_get_template_name_list_all ()"><code class="function">lgl_db_get_template_name_list_all()</code></a>, because it does not
+return multiple names for the same template.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>brand</code></em> :</span></p></td>
+<td>     If non NULL, limit results to given brand
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>paper_id</code></em> :</span></p></td>
+<td> If non NULL, limit results to given page size.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>category_id</code></em> :</span></p></td>
+<td> If non NULL, limit results to given template category.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of template names.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_get_template_name_list_all ()">
+<a name="lgl-db-get-template-name-list-all"></a><h3>lgl_db_get_template_name_list_all ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_db_get_template_name_list_all   (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);</pre>
+<p>
+Get a list of all valid names and aliases of templates in the template database.
+Results can be filtered by page size and/or template category.  A list of valid page
+sizes can be obtained using <a class="link" href="libglabels-db.html#lgl-db-get-paper-id-list" title="lgl_db_get_paper_id_list ()"><code class="function">lgl_db_get_paper_id_list()</code></a>.  A list of valid template
+categories can be obtained using <a class="link" href="libglabels-db.html#lgl-db-get-category-id-list" title="lgl_db_get_category_id_list ()"><code class="function">lgl_db_get_category_id_list()</code></a>.
+</p>
+<p>
+This function differs from <a class="link" href="libglabels-db.html#lgl-db-get-template-name-list-unique" title="lgl_db_get_template_name_list_unique ()"><code class="function">lgl_db_get_template_name_list_unique()</code></a>, because it will
+return multiple names for the same template.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>brand</code></em> :</span></p></td>
+<td>     If non NULL, limit results to given brand
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>paper_id</code></em> :</span></p></td>
+<td> If non NULL, limit results to given page size.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>category_id</code></em> :</span></p></td>
+<td> If non NULL, limit results to given template category.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of template names and aliases.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_free_template_name_list ()">
+<a name="lgl-db-free-template-name-list"></a><h3>lgl_db_free_template_name_list ()</h3>
+<pre class="programlisting">void                lgl_db_free_template_name_list      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *names);</pre>
+<p>
+Free up all storage associated with a list of template names obtained with
+<a class="link" href="libglabels-db.html#lgl-db-get-template-name-list-all" title="lgl_db_get_template_name_list_all ()"><code class="function">lgl_db_get_template_name_list_all()</code></a> or <a class="link" href="libglabels-db.html#lgl-db-get-template-name-list-unique" title="lgl_db_get_template_name_list_unique ()"><code class="function">lgl_db_get_template_name_list_unique()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>names</code></em> :</span></p></td>
+<td> List of template name strings to be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_lookup_template_from_name ()">
+<a name="lgl-db-lookup-template-from-name"></a><h3>lgl_db_lookup_template_from_name ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *       lgl_db_lookup_template_from_name    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);</pre>
+<p>
+Lookup template in template database from name string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td> name string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_print_known_papers ()">
+<a name="lgl-db-print-known-papers"></a><h3>lgl_db_print_known_papers ()</h3>
+<pre class="programlisting">void                lgl_db_print_known_papers           (void);</pre>
+<p>
+For debugging purposes: print a list of all paper definitions known to
+libglabels.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_print_known_categories ()">
+<a name="lgl-db-print-known-categories"></a><h3>lgl_db_print_known_categories ()</h3>
+<pre class="programlisting">void                lgl_db_print_known_categories       (void);</pre>
+<p>
+For debugging purposes: print a list of all category definitions known to
+libglabels.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_print_known_templates ()">
+<a name="lgl-db-print-known-templates"></a><h3>lgl_db_print_known_templates ()</h3>
+<pre class="programlisting">void                lgl_db_print_known_templates        (void);</pre>
+<p>
+Print all known templates (for debugging purposes).</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="lgl_db_print_aliases ()">
+<a name="lgl-db-print-aliases"></a><h3>lgl_db_print_aliases ()</h3>
+<pre class="programlisting">void                lgl_db_print_aliases                (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template);</pre>
+<p>
+Print all aliases of a template (for debugging purposes).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td> template
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels-enums.html b/docs/libglabels/html/libglabels-enums.html
new file mode 100644 (file)
index 0000000..d2f3862
--- /dev/null
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Enumerations</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch03.html" title="Miscellaneous">
+<link rel="prev" href="ch03.html" title="Miscellaneous">
+<link rel="next" href="libglabels-str.html" title="String Utility Functions">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch03.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-str.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-enums.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-enums.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="Enumerations">
+<a name="libglabels-enums"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-enums.top_of_page"></a>Enumerations</span></h2>
+<p>Enumerations — Common enumerations used by libglabels</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-enums.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/enums.h&gt;
+
+enum                <a class="link" href="libglabels-enums.html#lglUnitsType" title="enum lglUnitsType">lglUnitsType</a>;
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-enums.description"></a><h2>Description</h2>
+<p>
+This section defines enumerations used to interact with libglabels.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-enums.details"></a><h2>Details</h2>
+<div class="refsect2" title="enum lglUnitsType">
+<a name="lglUnitsType"></a><h3>enum lglUnitsType</h3>
+<pre class="programlisting">typedef enum {
+       LGL_UNITS_POINT, /* encoded as "pt" */
+       LGL_UNITS_INCH,  /* encoded as "in" */
+       LGL_UNITS_MM,    /* encoded as "mm" */
+       LGL_UNITS_CM,    /* encoded as "cm" */
+       LGL_UNITS_PICA,  /* encoded as "pc" */
+
+       LGL_UNITS_FIRST = LGL_UNITS_POINT,
+       LGL_UNITS_LAST  = LGL_UNITS_PICA,
+} lglUnitsType;
+</pre>
+<p>
+This enumeration defines a set of units of distance supported by the libglabels XML distance
+attributes.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="LGL-UNITS-POINT--CAPS"></a><span class="term"><code class="literal">LGL_UNITS_POINT</code></span></p></td>
+<td>Points.  Encoded as "pt" in XML distance attributes.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-UNITS-INCH--CAPS"></a><span class="term"><code class="literal">LGL_UNITS_INCH</code></span></p></td>
+<td>Inches.  Encoded as "in" in XML distance attributes.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-UNITS-MM--CAPS"></a><span class="term"><code class="literal">LGL_UNITS_MM</code></span></p></td>
+<td>Millmeters.  Encoded as "mm" in XML distance attributes.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-UNITS-CM--CAPS"></a><span class="term"><code class="literal">LGL_UNITS_CM</code></span></p></td>
+<td>Centimeters.  Encoded as "cm" in XML distance attributes.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-UNITS-PICA--CAPS"></a><span class="term"><code class="literal">LGL_UNITS_PICA</code></span></p></td>
+<td>Picas.  Encoded as "pc" in XML distance attributes.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-UNITS-FIRST--CAPS"></a><span class="term"><code class="literal">LGL_UNITS_FIRST</code></span></p></td>
+<td>First enumeration.  Used for generic iteration through supported units..
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-UNITS-LAST--CAPS"></a><span class="term"><code class="literal">LGL_UNITS_LAST</code></span></p></td>
+<td>Last enumeration.  Used for generic iteration through supported units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels-paper.html b/docs/libglabels/html/libglabels-paper.html
new file mode 100644 (file)
index 0000000..54f9255
--- /dev/null
@@ -0,0 +1,238 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>The lglPaper Structure</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="prev" href="libglabels-template.html" title="The lglTemplate Structure">
+<link rel="next" href="libglabels-category.html" title="The lglCategory Structure">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libglabels-template.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-category.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-paper.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-paper.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="The lglPaper Structure">
+<a name="libglabels-paper"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-paper.top_of_page"></a>The lglPaper Structure</span></h2>
+<p>The lglPaper Structure — Paper size definitions</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-paper.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/paper.h&gt;
+
+                    <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a>;
+<a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          <a class="link" href="libglabels-paper.html#lgl-paper-new" title="lgl_paper_new ()">lgl_paper_new</a>                       (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> width,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> height,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *pwg_size);
+<a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          <a class="link" href="libglabels-paper.html#lgl-paper-dup" title="lgl_paper_dup ()">lgl_paper_dup</a>                       (const <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *orig);
+void                <a class="link" href="libglabels-paper.html#lgl-paper-free" title="lgl_paper_free ()">lgl_paper_free</a>                      (<a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *paper);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-paper.description"></a><h2>Description</h2>
+<p>
+This section describes a structure for representing a paper size definition
+and related functions.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-paper.details"></a><h2>Details</h2>
+<div class="refsect2" title="lglPaper">
+<a name="lglPaper"></a><h3>lglPaper</h3>
+<pre class="programlisting">typedef struct {
+       gchar               *id;       /* Unique ID of paper definition */
+       gchar               *name;     /* Localized name of paper */
+       gdouble              width;    /* Width (in points) */
+       gdouble              height;   /* Height (in points) */
+       gchar               *pwg_size; /* PWG 5101.1-2002 size name */
+} lglPaper;
+</pre>
+<p>
+This structure defines a paper (page) size.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>id</code></em>;</span></p></td>
+<td>Paper size ID.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>name</code></em>;</span></p></td>
+<td>Localized paper size name.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>width</code></em>;</span></p></td>
+<td>Width of paper in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>height</code></em>;</span></p></td>
+<td>Height of paper in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>pwg_size</code></em>;</span></p></td>
+<td>PWG 5101.1-2002 size name.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_paper_new ()">
+<a name="lgl-paper-new"></a><h3>lgl_paper_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          lgl_paper_new                       (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> width,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> height,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *pwg_size);</pre>
+<p>
+Allocates and constructs a new <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>       Id of paper definition. (E.g. US-Letter, A4, etc.)  Should be
+           unique.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>     Localized name of paper.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>width</code></em> :</span></p></td>
+<td>    Width of paper in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>height</code></em> :</span></p></td>
+<td>   Height of paper in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pwg_size</code></em> :</span></p></td>
+<td> PWG 5101.1-2002 size name.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to a newly allocated <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_paper_dup ()">
+<a name="lgl-paper-dup"></a><h3>lgl_paper_dup ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          lgl_paper_dup                       (const <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *orig);</pre>
+<p>
+Duplicates an existing <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig</code></em> :</span></p></td>
+<td>  <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure to be duplicated.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to a newly allocated <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_paper_free ()">
+<a name="lgl-paper-free"></a><h3>lgl_paper_free ()</h3>
+<pre class="programlisting">void                lgl_paper_free                      (<a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *paper);</pre>
+<p>
+Free all memory associated with an existing <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>paper</code></em> :</span></p></td>
+<td>  pointer to <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure to be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels-str.html b/docs/libglabels/html/libglabels-str.html
new file mode 100644 (file)
index 0000000..12af9dc
--- /dev/null
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>String Utility Functions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch03.html" title="Miscellaneous">
+<link rel="prev" href="libglabels-enums.html" title="Enumerations">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libglabels-enums.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch03.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td> </td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-str.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-str.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="String Utility Functions">
+<a name="libglabels-str"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-str.top_of_page"></a>String Utility Functions</span></h2>
+<p>String Utility Functions — String utility functions provided by libglabels</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-str.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/str.h&gt;
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                <a class="link" href="libglabels-str.html#lgl-str-utf8-casecmp" title="lgl_str_utf8_casecmp ()">lgl_str_utf8_casecmp</a>                (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *s1,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *s2);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-str.description"></a><h2>Description</h2>
+<p>
+This section defines string utility functions used by libglabels and of
+possible use to a user of libglabels.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-str.details"></a><h2>Details</h2>
+<div class="refsect2" title="lgl_str_utf8_casecmp ()">
+<a name="lgl-str-utf8-casecmp"></a><h3>lgl_str_utf8_casecmp ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                lgl_str_utf8_casecmp                (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *s1,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *s2);</pre>
+<p>
+Compare two UTF-8 strings, ignoring the case of characters.
+</p>
+<p>
+This function should be used only on strings that are known to be encoded
+in UTF-8 or a compatible UTF-8 subset.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>s1</code></em> :</span></p></td>
+<td> string to compare with s2.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>s2</code></em> :</span></p></td>
+<td> string to compare with s1.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> 0 if the strings match, a negative value if s1 &lt; s2,
+         or a positive value if s1 &gt; s2.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels-template.html b/docs/libglabels/html/libglabels-template.html
new file mode 100644 (file)
index 0000000..3f01933
--- /dev/null
@@ -0,0 +1,2229 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>The lglTemplate Structure</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="prev" href="libglabels-db.html" title="Database">
+<link rel="next" href="libglabels-paper.html" title="The lglPaper Structure">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libglabels-db.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-paper.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-template.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-template.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="The lglTemplate Structure">
+<a name="libglabels-template"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-template.top_of_page"></a>The lglTemplate Structure</span></h2>
+<p>The lglTemplate Structure — How templates are represented in memory</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-template.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/template.h&gt;
+
+                    <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a>;
+
+                    <a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a>;
+
+enum                <a class="link" href="libglabels-template.html#lglTemplateFrameShape" title="enum lglTemplateFrameShape">lglTemplateFrameShape</a>;
+union               <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a>;
+                    <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll">lglTemplateFrameAll</a>;
+                    <a class="link" href="libglabels-template.html#lglTemplateFrameRect" title="lglTemplateFrameRect">lglTemplateFrameRect</a>;
+                    <a class="link" href="libglabels-template.html#lglTemplateFrameRound" title="lglTemplateFrameRound">lglTemplateFrameRound</a>;
+                    <a class="link" href="libglabels-template.html#lglTemplateFrameCD" title="lglTemplateFrameCD">lglTemplateFrameCD</a>;
+
+                    <a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a>;
+
+enum                <a class="link" href="libglabels-template.html#lglTemplateMarkupType" title="enum lglTemplateMarkupType">lglTemplateMarkupType</a>;
+union               <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a>;
+                    <a class="link" href="libglabels-template.html#lglTemplateMarkupMargin" title="lglTemplateMarkupMargin">lglTemplateMarkupMargin</a>;
+                    <a class="link" href="libglabels-template.html#lglTemplateMarkupLine" title="lglTemplateMarkupLine">lglTemplateMarkupLine</a>;
+                    <a class="link" href="libglabels-template.html#lglTemplateMarkupCircle" title="lglTemplateMarkupCircle">lglTemplateMarkupCircle</a>;
+                    <a class="link" href="libglabels-template.html#lglTemplateMarkupRect" title="lglTemplateMarkupRect">lglTemplateMarkupRect</a>;
+
+                    <a class="link" href="libglabels-template.html#lglTemplateOrigin" title="lglTemplateOrigin">lglTemplateOrigin</a>;
+
+<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *       <a class="link" href="libglabels-template.html#lgl-template-new" title="lgl_template_new ()">lgl_template_new</a>                    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *part,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *description,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> page_width,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> page_height);
+<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *       <a class="link" href="libglabels-template.html#lgl-template-dup" title="lgl_template_dup ()">lgl_template_dup</a>                    (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *orig_template);
+void                <a class="link" href="libglabels-template.html#lgl-template-free" title="lgl_template_free ()">lgl_template_free</a>                   (<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template);
+void                <a class="link" href="libglabels-template.html#lgl-template-add-category" title="lgl_template_add_category ()">lgl_template_add_category</a>           (<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);
+void                <a class="link" href="libglabels-template.html#lgl-template-add-frame" title="lgl_template_add_frame ()">lgl_template_add_frame</a>              (<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame);
+void                <a class="link" href="libglabels-template.html#lgl-template-add-alias" title="lgl_template_add_alias ()">lgl_template_add_alias</a>              (<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         <a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *alias);
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             <a class="link" href="libglabels-template.html#lgl-template-get-name" title="lgl_template_get_name ()">lgl_template_get_name</a>               (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-template.html#lgl-template-do-templates-match" title="lgl_template_do_templates_match ()">lgl_template_do_templates_match</a>     (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template1,
+                                                         const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template2);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-template.html#lgl-template-does-brand-match" title="lgl_template_does_brand_match ()">lgl_template_does_brand_match</a>       (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-template.html#lgl-template-does-page-size-match" title="lgl_template_does_page_size_match ()">lgl_template_does_page_size_match</a>   (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-template.html#lgl-template-does-category-match" title="lgl_template_does_category_match ()">lgl_template_does_category_match</a>    (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);
+
+<a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *  <a class="link" href="libglabels-template.html#lgl-template-alias-new" title="lgl_template_alias_new ()">lgl_template_alias_new</a>              (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *part);
+<a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *  <a class="link" href="libglabels-template.html#lgl-template-alias-dup" title="lgl_template_alias_dup ()">lgl_template_alias_dup</a>              (const <a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *orig_alias);
+void                <a class="link" href="libglabels-template.html#lgl-template-alias-free" title="lgl_template_alias_free ()">lgl_template_alias_free</a>             (<a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *alias);
+
+<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *  <a class="link" href="libglabels-template.html#lgl-template-frame-rect-new" title="lgl_template_frame_rect_new ()">lgl_template_frame_rect_new</a>         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> w,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> h,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x_waste,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y_waste);
+<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *  <a class="link" href="libglabels-template.html#lgl-template-frame-round-new" title="lgl_template_frame_round_new ()">lgl_template_frame_round_new</a>        (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> waste);
+<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *  <a class="link" href="libglabels-template.html#lgl-template-frame-cd-new" title="lgl_template_frame_cd_new ()">lgl_template_frame_cd_new</a>           (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r2,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> w,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> h,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> waste);
+<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *  <a class="link" href="libglabels-template.html#lgl-template-frame-dup" title="lgl_template_frame_dup ()">lgl_template_frame_dup</a>              (const <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *orig_frame);
+void                <a class="link" href="libglabels-template.html#lgl-template-frame-free" title="lgl_template_frame_free ()">lgl_template_frame_free</a>             (<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame);
+void                <a class="link" href="libglabels-template.html#lgl-template-frame-add-layout" title="lgl_template_frame_add_layout ()">lgl_template_frame_add_layout</a>       (<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame,
+                                                         <a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> *layout);
+void                <a class="link" href="libglabels-template.html#lgl-template-frame-add-markup" title="lgl_template_frame_add_markup ()">lgl_template_frame_add_markup</a>       (<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame,
+                                                         <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> *markup);
+
+void                <a class="link" href="libglabels-template.html#lgl-template-frame-get-size" title="lgl_template_frame_get_size ()">lgl_template_frame_get_size</a>         (const <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> *w,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> *h);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                <a class="link" href="libglabels-template.html#lgl-template-frame-get-n-labels" title="lgl_template_frame_get_n_labels ()">lgl_template_frame_get_n_labels</a>     (const <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame);
+<a class="link" href="libglabels-template.html#lglTemplateOrigin" title="lglTemplateOrigin">lglTemplateOrigin</a> * <a class="link" href="libglabels-template.html#lgl-template-frame-get-origins" title="lgl_template_frame_get_origins ()">lgl_template_frame_get_origins</a>      (const <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame);
+
+<a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> * <a class="link" href="libglabels-template.html#lgl-template-layout-new" title="lgl_template_layout_new ()">lgl_template_layout_new</a>             (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> nx,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> ny,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x0,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y0,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> dx,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> dy);
+<a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> * <a class="link" href="libglabels-template.html#lgl-template-layout-dup" title="lgl_template_layout_dup ()">lgl_template_layout_dup</a>             (const <a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> *orig_layout);
+void                <a class="link" href="libglabels-template.html#lgl-template-layout-free" title="lgl_template_layout_free ()">lgl_template_layout_free</a>            (<a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> *layout);
+
+<a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * <a class="link" href="libglabels-template.html#lgl-template-markup-margin-new" title="lgl_template_markup_margin_new ()">lgl_template_markup_margin_new</a>      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> size);
+<a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * <a class="link" href="libglabels-template.html#lgl-template-markup-line-new" title="lgl_template_markup_line_new ()">lgl_template_markup_line_new</a>        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x2,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y2);
+<a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * <a class="link" href="libglabels-template.html#lgl-template-markup-circle-new" title="lgl_template_markup_circle_new ()">lgl_template_markup_circle_new</a>      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x0,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y0,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r);
+<a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * <a class="link" href="libglabels-template.html#lgl-template-markup-rect-new" title="lgl_template_markup_rect_new ()">lgl_template_markup_rect_new</a>        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> w,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> h,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r);
+<a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * <a class="link" href="libglabels-template.html#lgl-template-markup-dup" title="lgl_template_markup_dup ()">lgl_template_markup_dup</a>             (const <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> *orig_markup);
+void                <a class="link" href="libglabels-template.html#lgl-template-markup-free" title="lgl_template_markup_free ()">lgl_template_markup_free</a>            (<a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> *markup);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-template.description"></a><h2>Description</h2>
+<p>
+This section describes a set of structures that represent a template in memory.  It also
+describes functions to help create and interpret these structures.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-template.details"></a><h2>Details</h2>
+<div class="refsect2" title="lglTemplate">
+<a name="lglTemplate"></a><h3>lglTemplate</h3>
+<pre class="programlisting">typedef struct {
+       gchar               *brand;
+        gchar               *part;
+       gchar               *description;
+       gchar               *paper_id;
+       gdouble              page_width;
+       gdouble              page_height;
+
+       /* List of (lglTemplateAlias *) aliase structures. */
+       GList               *aliases;
+
+        /* List of (gchar *) category ids. */
+       GList               *category_ids;
+
+       /* List of (lglTemplateFrame *) label frame structures.
+        * Currently glabels only supports a single label frame per
+        * template. */
+       GList               *frames;
+} lglTemplate;
+</pre>
+<p>
+This is the main structure of a libglabels template.  A template represents a single sheet
+of peel-off labels or cards.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>brand</code></em>;</span></p></td>
+<td>Brand name of label or card.  E.g. "Avery."
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>part</code></em>;</span></p></td>
+<td>Part name or number of label or card.  E.g. "8160."
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>description</code></em>;</span></p></td>
+<td>A description of the template.  E.g. "Mailing labels."
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>paper_id</code></em>;</span></p></td>
+<td>A paper ID.  E.g. "A4" or "US-Letter."
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>page_width</code></em>;</span></p></td>
+<td>Page width in points.  Used only if paper_id is "Other."
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>page_height</code></em>;</span></p></td>
+<td>Page height in points.  Used only if paper_id is "Other."
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>aliases</code></em>;</span></p></td>
+<td>A list of alternate names for this template.  Often a single template can be used for
+multiple products.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>category_ids</code></em>;</span></p></td>
+<td>A list of category IDs that this template belongs to.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>frames</code></em>;</span></p></td>
+<td>A list of (<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame"><span class="type">lglTemplateFrame</span></a> *) structures.  GLabels currently only supports one frame
+per template -- future versions may support multiple frames per template.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateAlias">
+<a name="lglTemplateAlias"></a><h3>lglTemplateAlias</h3>
+<pre class="programlisting">typedef struct {
+       gchar               *brand;
+        gchar               *part;
+} lglTemplateAlias;
+</pre>
+<p>
+This structure defines an alias for the parent template structure.  An alias is used for
+different products that can use the same template.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>brand</code></em>;</span></p></td>
+<td>Brand name of label or card.  E.g. "Avery."
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>part</code></em>;</span></p></td>
+<td>Part name or number of label or card.  E.g. "8160."
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="enum lglTemplateFrameShape">
+<a name="lglTemplateFrameShape"></a><h3>enum lglTemplateFrameShape</h3>
+<pre class="programlisting">typedef enum {
+       LGL_TEMPLATE_FRAME_SHAPE_RECT,
+       LGL_TEMPLATE_FRAME_SHAPE_ROUND,
+       LGL_TEMPLATE_FRAME_SHAPE_CD,
+} lglTemplateFrameShape;
+</pre>
+<p>
+This enumeration defines frame types that are supported by libglabels
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="LGL-TEMPLATE-FRAME-SHAPE-RECT--CAPS"></a><span class="term"><code class="literal">LGL_TEMPLATE_FRAME_SHAPE_RECT</code></span></p></td>
+<td>A rectangular frame.  (May have rounded corners.)
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-TEMPLATE-FRAME-SHAPE-ROUND--CAPS"></a><span class="term"><code class="literal">LGL_TEMPLATE_FRAME_SHAPE_ROUND</code></span></p></td>
+<td>A round frame.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-TEMPLATE-FRAME-SHAPE-CD--CAPS"></a><span class="term"><code class="literal">LGL_TEMPLATE_FRAME_SHAPE_CD</code></span></p></td>
+<td>A CD or DVD frame.  (Includes credit-card style CDs.)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="union lglTemplateFrame">
+<a name="lglTemplateFrame"></a><h3>union lglTemplateFrame</h3>
+<pre class="programlisting">union lglTemplateFrame{
+
+       lglTemplateFrameShape shape;
+
+       lglTemplateFrameAll   all;
+       lglTemplateFrameRect  rect;
+       lglTemplateFrameRound round;
+       lglTemplateFrameCD    cd;
+};
+</pre>
+<p>
+A union of all possible frame structures.  The type of structure is indicated by the shape
+member, which overlays the first field of all other member structures.
+</p>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateFrameAll">
+<a name="lglTemplateFrameAll"></a><h3>lglTemplateFrameAll</h3>
+<pre class="programlisting">typedef struct {
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+} lglTemplateFrameAll;
+</pre>
+<p>
+This structure is composed of a set of fields common to all frame structures.  All frame types
+can be cast to this structure.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="libglabels-template.html#lglTemplateFrameShape" title="enum lglTemplateFrameShape">lglTemplateFrameShape</a> <em class="structfield"><code>shape</code></em>;</span></p></td>
+<td>The shape of the frame.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>id</code></em>;</span></p></td>
+<td>Reserved for future use.  Should always be zero.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>layouts</code></em>;</span></p></td>
+<td>A list of (<a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout"><span class="type">lglTemplateLayout</span></a> *) structures.  Typically a frame will have a single
+layout, representing a simple grid of labels or cards.  If the layout of labels or cards is
+more complex, multiple (<a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout"><span class="type">lglTemplateLayout</span></a> *) structures may be needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>markups</code></em>;</span></p></td>
+<td>A list of (<a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup"><span class="type">lglTemplateMarkup</span></a> *) structures, which represent non-printing markup lines.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateFrameRect">
+<a name="lglTemplateFrameRect"></a><h3>lglTemplateFrameRect</h3>
+<pre class="programlisting">typedef struct {
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;    /* Always LGL_TEMPLATE_FRAME_SHAPE_RECT. */
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+
+        gdouble               w;        /* Width */
+        gdouble               h;        /* Height */
+        gdouble               r;        /* Corner radius */
+        gdouble               x_waste;  /* Amount of horiz overprint allowed. */
+        gdouble               y_waste;  /* Amount of vert overprint allowed. */
+} lglTemplateFrameRect;
+</pre>
+<p>
+This structure defines the frame for a rectangular label or card.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="libglabels-template.html#lglTemplateFrameShape" title="enum lglTemplateFrameShape">lglTemplateFrameShape</a> <em class="structfield"><code>shape</code></em>;</span></p></td>
+<td>Common field.  Always <a class="link" href="libglabels-template.html#LGL-TEMPLATE-FRAME-SHAPE-RECT--CAPS"><span class="type">LGL_TEMPLATE_FRAME_SHAPE_RECT</span></a> for <a class="link" href="libglabels-template.html#lglTemplateFrameRect" title="lglTemplateFrameRect"><span class="type">lglTemplateFrameRect</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>id</code></em>;</span></p></td>
+<td>Common field.  See <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll"><span class="type">lglTemplateFrameAll</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>layouts</code></em>;</span></p></td>
+<td> Common field.  See <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll"><span class="type">lglTemplateFrameAll</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>markups</code></em>;</span></p></td>
+<td> Common field.  See <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll"><span class="type">lglTemplateFrameAll</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>w</code></em>;</span></p></td>
+<td>Width of label or card in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>h</code></em>;</span></p></td>
+<td>Height of label or card in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>r</code></em>;</span></p></td>
+<td>Radius of corners in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>x_waste</code></em>;</span></p></td>
+<td>Amount of horizontal over-print to allow in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>y_waste</code></em>;</span></p></td>
+<td>Amount of vertical over-print to allow in points.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateFrameRound">
+<a name="lglTemplateFrameRound"></a><h3>lglTemplateFrameRound</h3>
+<pre class="programlisting">typedef struct {
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;    /* Always LGL_TEMPLATE_FRAME_SHAPE_ROUND. */
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+
+        gdouble               r;      /* Radius */
+        gdouble               waste;  /* Amount of overprint allowed. */
+} lglTemplateFrameRound;
+</pre>
+<p>
+This structure defines the frame for a round label or card.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="libglabels-template.html#lglTemplateFrameShape" title="enum lglTemplateFrameShape">lglTemplateFrameShape</a> <em class="structfield"><code>shape</code></em>;</span></p></td>
+<td>Common field.  Always <a class="link" href="libglabels-template.html#LGL-TEMPLATE-FRAME-SHAPE-ROUND--CAPS"><span class="type">LGL_TEMPLATE_FRAME_SHAPE_ROUND</span></a> for <a class="link" href="libglabels-template.html#lglTemplateFrameRound" title="lglTemplateFrameRound"><span class="type">lglTemplateFrameRound</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>id</code></em>;</span></p></td>
+<td>Common field.  See <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll"><span class="type">lglTemplateFrameAll</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>layouts</code></em>;</span></p></td>
+<td>Common field.  See <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll"><span class="type">lglTemplateFrameAll</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>markups</code></em>;</span></p></td>
+<td>Common field.  See <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll"><span class="type">lglTemplateFrameAll</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>r</code></em>;</span></p></td>
+<td>Radius of label or card in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>waste</code></em>;</span></p></td>
+<td>Amount of over-print to allow in points.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateFrameCD">
+<a name="lglTemplateFrameCD"></a><h3>lglTemplateFrameCD</h3>
+<pre class="programlisting">typedef struct {
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;    /* Always LGL_TEMPLATE_FRAME_SHAPE_CD. */
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+
+        gdouble               r1;     /* Outer radius */
+        gdouble               r2;     /* Inner radius (hole) */
+        gdouble               w;      /* Clip width, business card CDs */
+        gdouble               h;      /* Clip height, business card CDs */
+        gdouble               waste;  /* Amount of overprint allowed. */
+} lglTemplateFrameCD;
+</pre>
+<p>
+This structure defines the frame for a CD or DVD label.  This structure also supports
+credit-card CD labels.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="libglabels-template.html#lglTemplateFrameShape" title="enum lglTemplateFrameShape">lglTemplateFrameShape</a> <em class="structfield"><code>shape</code></em>;</span></p></td>
+<td>Common field.  Always <a class="link" href="libglabels-template.html#LGL-TEMPLATE-FRAME-SHAPE-CD--CAPS"><span class="type">LGL_TEMPLATE_FRAME_SHAPE_CD</span></a> for <a class="link" href="libglabels-template.html#lglTemplateFrameCD" title="lglTemplateFrameCD"><span class="type">lglTemplateFrameCD</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>id</code></em>;</span></p></td>
+<td>Common field.  See <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll"><span class="type">lglTemplateFrameAll</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>layouts</code></em>;</span></p></td>
+<td>Common field.  See <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll"><span class="type">lglTemplateFrameAll</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *<em class="structfield"><code>markups</code></em>;</span></p></td>
+<td>Common field.  See <a class="link" href="libglabels-template.html#lglTemplateFrameAll" title="lglTemplateFrameAll"><span class="type">lglTemplateFrameAll</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>r1</code></em>;</span></p></td>
+<td>Outer radius of label in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>r2</code></em>;</span></p></td>
+<td>Radius of center hole in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>w</code></em>;</span></p></td>
+<td>Clip width in points.  Used for credit-card CD labels.  This field is ignored if zero.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>h</code></em>;</span></p></td>
+<td>Clip height in points.  Used for credit-card CD labels.  This field is ignored if zero.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>waste</code></em>;</span></p></td>
+<td>Amount of over-print to allow in points.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateLayout">
+<a name="lglTemplateLayout"></a><h3>lglTemplateLayout</h3>
+<pre class="programlisting">typedef struct {
+       gint                  nx;  /* Number of labels across */
+       gint                  ny;  /* Number of labels up and down */
+
+       gdouble               x0;  /* Left of grid from left edge of paper */
+       gdouble               y0;  /* Top of grid from top edge of paper */
+
+       gdouble               dx;  /* Horizontal pitch of grid */
+       gdouble               dy;  /* Vertical pitch of grid */
+} lglTemplateLayout;
+</pre>
+<p>
+This structure defines a simple grid layout of labels or cards.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> <em class="structfield"><code>nx</code></em>;</span></p></td>
+<td>Number of labels or cards across in the grid (horizontal).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> <em class="structfield"><code>ny</code></em>;</span></p></td>
+<td>Number of labels or cards down in the grid (vertical).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>x0</code></em>;</span></p></td>
+<td>Distance (in points) from the left edge of page to the left edge of the left column of
+cards or labels in the layout.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>y0</code></em>;</span></p></td>
+<td>Distance (in points) from the top edge of page to the top edge of the top row of
+cards or labels in the layout.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>dx</code></em>;</span></p></td>
+<td>Horizontal pitch of grid in points.  This is the distance from left edge to left edge
+(not the gap between labels or cards).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>dy</code></em>;</span></p></td>
+<td>Vertical pitch of grid in points.  This is the distance from top edge to top edge
+(not the gap between labels or cards).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="enum lglTemplateMarkupType">
+<a name="lglTemplateMarkupType"></a><h3>enum lglTemplateMarkupType</h3>
+<pre class="programlisting">typedef enum {
+       LGL_TEMPLATE_MARKUP_MARGIN,
+       LGL_TEMPLATE_MARKUP_LINE,
+       LGL_TEMPLATE_MARKUP_CIRCLE,
+       LGL_TEMPLATE_MARKUP_RECT,
+} lglTemplateMarkupType;
+</pre>
+<p>
+This enumeration defines markup types that are supported by libglabels
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="LGL-TEMPLATE-MARKUP-MARGIN--CAPS"></a><span class="term"><code class="literal">LGL_TEMPLATE_MARKUP_MARGIN</code></span></p></td>
+<td>A margin line around perimeter of label or card.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-TEMPLATE-MARKUP-LINE--CAPS"></a><span class="term"><code class="literal">LGL_TEMPLATE_MARKUP_LINE</code></span></p></td>
+<td>A simple line segment.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-TEMPLATE-MARKUP-CIRCLE--CAPS"></a><span class="term"><code class="literal">LGL_TEMPLATE_MARKUP_CIRCLE</code></span></p></td>
+<td>A circle.
+</td>
+</tr>
+<tr>
+<td><p><a name="LGL-TEMPLATE-MARKUP-RECT--CAPS"></a><span class="term"><code class="literal">LGL_TEMPLATE_MARKUP_RECT</code></span></p></td>
+<td>A rectangle.  Possibly with rounded corners.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="union lglTemplateMarkup">
+<a name="lglTemplateMarkup"></a><h3>union lglTemplateMarkup</h3>
+<pre class="programlisting">union lglTemplateMarkup {
+
+       lglTemplateMarkupType   type;
+
+       lglTemplateMarkupMargin margin;
+       lglTemplateMarkupLine   line;
+       lglTemplateMarkupCircle circle;
+       lglTemplateMarkupRect   rect;
+};
+</pre>
+<p>
+A union of all possible markup structures.  The type of structure is indicated by the type
+member, which overlays the first field of all other member structures.
+</p>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateMarkupMargin">
+<a name="lglTemplateMarkupMargin"></a><h3>lglTemplateMarkupMargin</h3>
+<pre class="programlisting">typedef struct {
+       lglTemplateMarkupType  type;  /* Always LGL_TEMPLATE_MARKUP_MARGIN */
+
+        gdouble                size;  /* Margin size */
+} lglTemplateMarkupMargin;
+</pre>
+<p>
+This structure defines a simple margin markup around the perimeter of a label or card.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="libglabels-template.html#lglTemplateMarkupType" title="enum lglTemplateMarkupType">lglTemplateMarkupType</a> <em class="structfield"><code>type</code></em>;</span></p></td>
+<td>Common field.  Always <a class="link" href="libglabels-template.html#LGL-TEMPLATE-MARKUP-MARGIN--CAPS"><span class="type">LGL_TEMPLATE_MARKUP_MARGIN</span></a> for <a class="link" href="libglabels-template.html#lglTemplateMarkupMargin" title="lglTemplateMarkupMargin"><span class="type">lglTemplateMarkupMargin</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>size</code></em>;</span></p></td>
+<td>Distance of margin from edge of label or card.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateMarkupLine">
+<a name="lglTemplateMarkupLine"></a><h3>lglTemplateMarkupLine</h3>
+<pre class="programlisting">typedef struct {
+       lglTemplateMarkupType  type;   /* Always LGL_TEMPLATE_MARKUP_LINE */
+
+        gdouble                x1, y1; /* 1st endpoint */
+        gdouble                x2, y2; /* 2nd endpoint */
+} lglTemplateMarkupLine;
+</pre>
+<p>
+This structure defines a simple line segment markup.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="libglabels-template.html#lglTemplateMarkupType" title="enum lglTemplateMarkupType">lglTemplateMarkupType</a> <em class="structfield"><code>type</code></em>;</span></p></td>
+<td>Common field.  Always <a class="link" href="libglabels-template.html#LGL-TEMPLATE-MARKUP-LINE--CAPS"><span class="type">LGL_TEMPLATE_MARKUP_LINE</span></a> for <a class="link" href="libglabels-template.html#lglTemplateMarkupLine" title="lglTemplateMarkupLine"><span class="type">lglTemplateMarkupLine</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>x1</code></em>;</span></p></td>
+<td>Distance (in points) of first endpoint from left edge of label or card.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>y1</code></em>;</span></p></td>
+<td>Distance (in points) of first endpoint from top edge of label or card.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>x2</code></em>;</span></p></td>
+<td>Distance (in points) of second endpoint from left edge of label or card.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>y2</code></em>;</span></p></td>
+<td>Distance (in points) of second endpoint from top edge of label or card.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateMarkupCircle">
+<a name="lglTemplateMarkupCircle"></a><h3>lglTemplateMarkupCircle</h3>
+<pre class="programlisting">typedef struct {
+       lglTemplateMarkupType  type;   /* Always LGL_TEMPLATE_MARKUP_CIRCLE */
+
+        gdouble                x0, y0; /* Center of circle */
+        gdouble                r;      /* Radius of circle */
+} lglTemplateMarkupCircle;
+</pre>
+<p>
+This structure defines a simple circle markup.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="libglabels-template.html#lglTemplateMarkupType" title="enum lglTemplateMarkupType">lglTemplateMarkupType</a> <em class="structfield"><code>type</code></em>;</span></p></td>
+<td>Common field.  Always <a class="link" href="libglabels-template.html#LGL-TEMPLATE-MARKUP-CIRCLE--CAPS"><span class="type">LGL_TEMPLATE_MARKUP_CIRCLE</span></a> for <a class="link" href="libglabels-template.html#lglTemplateMarkupCircle" title="lglTemplateMarkupCircle"><span class="type">lglTemplateMarkupCircle</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>x0</code></em>;</span></p></td>
+<td>Distance (in points) of vertex from left edge of label or card.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>y0</code></em>;</span></p></td>
+<td>Distance (in points) of vertex from top edge of label or card.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>r</code></em>;</span></p></td>
+<td>Radius of circle in points.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateMarkupRect">
+<a name="lglTemplateMarkupRect"></a><h3>lglTemplateMarkupRect</h3>
+<pre class="programlisting">typedef struct {
+       lglTemplateMarkupType  type;   /* Always LGL_TEMPLATE_MARKUP_RECT */
+
+        gdouble                x1, y1; /* Upper left corner */
+        gdouble                w, h;   /* Width and height. */
+        gdouble                r;      /* Radius of corners. */
+} lglTemplateMarkupRect;
+</pre>
+<p>
+This structure defines a simple rectangle markup.  The rectangle can have rounded corners.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="libglabels-template.html#lglTemplateMarkupType" title="enum lglTemplateMarkupType">lglTemplateMarkupType</a> <em class="structfield"><code>type</code></em>;</span></p></td>
+<td>Common field.  Always <a class="link" href="libglabels-template.html#LGL-TEMPLATE-MARKUP-RECT--CAPS"><span class="type">LGL_TEMPLATE_MARKUP_RECT</span></a> for <a class="link" href="libglabels-template.html#lglTemplateMarkupRect" title="lglTemplateMarkupRect"><span class="type">lglTemplateMarkupRect</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>x1</code></em>;</span></p></td>
+<td>Distance (in points) of left edge of markup from left edge of label or card.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>y1</code></em>;</span></p></td>
+<td>Distance (in points) of top edge of markup from top edge of label or card.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>w</code></em>;</span></p></td>
+<td>Width of rectangle in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>h</code></em>;</span></p></td>
+<td>Height of rectangle in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>r</code></em>;</span></p></td>
+<td>Radius of corners in points.  Should be zero for sharp corners.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lglTemplateOrigin">
+<a name="lglTemplateOrigin"></a><h3>lglTemplateOrigin</h3>
+<pre class="programlisting">typedef struct {
+       gdouble               x, y; /* Label origin relative to upper 
+                                    * upper left hand corner of paper */
+} lglTemplateOrigin;
+</pre>
+<p>
+This structure represents the cartesian coordinates of the origin of a label or card on the page.
+The orign is the upper left corner of the extent of the label or card.  These coordinates are
+relative to the upper left corner of the page.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>x</code></em>;</span></p></td>
+<td>Distance in points from top edge of page.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> <em class="structfield"><code>y</code></em>;</span></p></td>
+<td>Distance in points from left edge of page.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_new ()">
+<a name="lgl-template-new"></a><h3>lgl_template_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *       lgl_template_new                    (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *part,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *description,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> page_width,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> page_height);</pre>
+<p>
+Create a new template structure, with the given top-level attributes.  The
+created template will have no initial aliases, categories, or frames
+associated with it.  See <a class="link" href="libglabels-template.html#lgl-template-add-alias" title="lgl_template_add_alias ()"><code class="function">lgl_template_add_alias()</code></a>, <a class="link" href="libglabels-template.html#lgl-template-add-category" title="lgl_template_add_category ()"><code class="function">lgl_template_add_category()</code></a>,
+and <a class="link" href="libglabels-template.html#lgl-template-add-frame" title="lgl_template_add_frame ()"><code class="function">lgl_template_add_frame()</code></a> to add these.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>brand</code></em> :</span></p></td>
+<td>        Template brand
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>part</code></em> :</span></p></td>
+<td>         Template part name/number
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>description</code></em> :</span></p></td>
+<td>  Template descriptions
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>paper_id</code></em> :</span></p></td>
+<td>     Page size id
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>page_width</code></em> :</span></p></td>
+<td>   Page width in points, set to zero unless paper_id="Other"
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>page_height</code></em> :</span></p></td>
+<td>  Page height in points, set to zero unless paper_id="Other"
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_dup ()">
+<a name="lgl-template-dup"></a><h3>lgl_template_dup ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *       lgl_template_dup                    (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *orig_template);</pre>
+<p>
+This function duplicates a template structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig_template</code></em> :</span></p></td>
+<td> Template to duplicate.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  a newly allocated <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_free ()">
+<a name="lgl-template-free"></a><h3>lgl_template_free ()</h3>
+<pre class="programlisting">void                lgl_template_free                   (<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template);</pre>
+<p>
+This function frees all memory associated with given template structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td> Template to free.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_add_category ()">
+<a name="lgl-template-add-category"></a><h3>lgl_template_add_category ()</h3>
+<pre class="programlisting">void                lgl_template_add_category           (<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);</pre>
+<p>
+This function adds the given category ID to a templates category list.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>     Pointer to template structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>category_id</code></em> :</span></p></td>
+<td>  Category ID string
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_add_frame ()">
+<a name="lgl-template-add-frame"></a><h3>lgl_template_add_frame ()</h3>
+<pre class="programlisting">void                lgl_template_add_frame              (<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame);</pre>
+<p>
+This function adds the given frame structure to the template.  Once added,
+the frame structure belongs to the given template; do not attempt to free
+it.
+</p>
+<p>
+Note: Currently glabels only supports a single frame per template.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>  Pointer to template structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frame</code></em> :</span></p></td>
+<td>     Pointer to frame structure
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_add_alias ()">
+<a name="lgl-template-add-alias"></a><h3>lgl_template_add_alias ()</h3>
+<pre class="programlisting">void                lgl_template_add_alias              (<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         <a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *alias);</pre>
+<p>
+This function adds the given alias to a templates list of aliases.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>  Pointer to template structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>alias</code></em> :</span></p></td>
+<td>     Alias string
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_get_name ()">
+<a name="lgl-template-get-name"></a><h3>lgl_template_get_name ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             lgl_template_get_name               (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template);</pre>
+<p>
+This function returns the name of the given template.  The name is the concetenation
+of the brand and part name/number.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>  Pointer to template structure to test
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  A pointer to a newly allocated name string.  Should be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_do_templates_match ()">
+<a name="lgl-template-do-templates-match"></a><h3>lgl_template_do_templates_match ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_template_do_templates_match     (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template1,
+                                                         const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template2);</pre>
+<p>
+This function tests if the given templates match.  This is a simple test that only tests
+the brand and part name/number. It does not test if they are actually identical.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template1</code></em> :</span></p></td>
+<td>  Pointer to 1st template structure to test
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template2</code></em> :</span></p></td>
+<td>  Pointer to 2nd template structure to test
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  TRUE if the two template matche.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_does_brand_match ()">
+<a name="lgl-template-does-brand-match"></a><h3>lgl_template_does_brand_match ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_template_does_brand_match       (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand);</pre>
+<p>
+This function tests if the brand of the template matches the given brand.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>  Pointer to template structure to test
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>brand</code></em> :</span></p></td>
+<td>     Brand string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  TRUE if the template matches the given brand.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_does_page_size_match ()">
+<a name="lgl-template-does-page-size-match"></a><h3>lgl_template_does_page_size_match ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_template_does_page_size_match   (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *paper_id);</pre>
+<p>
+This function tests if the page size of the template matches the given ID.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>  Pointer to template structure to test
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>paper_id</code></em> :</span></p></td>
+<td>  Page size ID string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  TRUE if the template matches the given page size ID.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_does_category_match ()">
+<a name="lgl-template-does-category-match"></a><h3>lgl_template_does_category_match ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_template_does_category_match    (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *category_id);</pre>
+<p>
+This function tests if the given template belongs to the given category ID.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>     Pointer to template structure to test
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>category_id</code></em> :</span></p></td>
+<td>  Category ID string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  TRUE if the template matches the given category ID.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_alias_new ()">
+<a name="lgl-template-alias-new"></a><h3>lgl_template_alias_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *  lgl_template_alias_new              (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *brand,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *part);</pre>
+<p>
+Create a new template alias structure, with the given brand and part number.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>brand</code></em> :</span></p></td>
+<td>        Alias brand
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>part</code></em> :</span></p></td>
+<td>         Alias part name/number
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> pointer to a newly allocated <a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias"><span class="type">lglTemplateAlias</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_alias_dup ()">
+<a name="lgl-template-alias-dup"></a><h3>lgl_template_alias_dup ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *  lgl_template_alias_dup              (const <a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *orig_alias);</pre>
+<p>
+This function duplicates a template alias structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig_alias</code></em> :</span></p></td>
+<td> Alias to duplicate.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  a newly allocated <a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias"><span class="type">lglTemplateAlias</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_alias_free ()">
+<a name="lgl-template-alias-free"></a><h3>lgl_template_alias_free ()</h3>
+<pre class="programlisting">void                lgl_template_alias_free             (<a class="link" href="libglabels-template.html#lglTemplateAlias" title="lglTemplateAlias">lglTemplateAlias</a> *alias);</pre>
+<p>
+This function frees all memory associated with given template alias structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>alias</code></em> :</span></p></td>
+<td> Alias to free.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_rect_new ()">
+<a name="lgl-template-frame-rect-new"></a><h3>lgl_template_frame_rect_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *  lgl_template_frame_rect_new         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> w,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> h,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x_waste,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y_waste);</pre>
+<p>
+This function creates a new template frame for a rectangular label or card.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>      ID of frame.  (This should currently always be "0").
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>w</code></em> :</span></p></td>
+<td>       width of frame in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>h</code></em> :</span></p></td>
+<td>       height of frame in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>r</code></em> :</span></p></td>
+<td>       radius of rounded corners in points.  (Should be 0 for square corners.)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x_waste</code></em> :</span></p></td>
+<td> Amount of overprint to allow in the horizontal direction.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y_waste</code></em> :</span></p></td>
+<td> Amount of overprint to allow in the vertical direction.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Pointer to newly allocated <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame"><span class="type">lglTemplateFrame</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_round_new ()">
+<a name="lgl-template-frame-round-new"></a><h3>lgl_template_frame_round_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *  lgl_template_frame_round_new        (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> waste);</pre>
+<p>
+This function creates a new template frame for a round label.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>      ID of frame.  (This should currently always be "0").
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>r</code></em> :</span></p></td>
+<td>       radius of label in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>waste</code></em> :</span></p></td>
+<td>   Amount of overprint to allow.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Pointer to newly allocated <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame"><span class="type">lglTemplateFrame</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_cd_new ()">
+<a name="lgl-template-frame-cd-new"></a><h3>lgl_template_frame_cd_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *  lgl_template_frame_cd_new           (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r2,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> w,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> h,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> waste);</pre>
+<p>
+This function creates a new template frame for a CD/DVD label.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>      ID of frame.  (This should currently always be "0").
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>r1</code></em> :</span></p></td>
+<td>      outer radius of label in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>r2</code></em> :</span></p></td>
+<td>      radius of center hole in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>w</code></em> :</span></p></td>
+<td>       clip width of frame in points for business card CDs.  Should be 0 for no clipping.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>h</code></em> :</span></p></td>
+<td>       clip height of frame in points for business card CDs.  Should be 0 for no clipping.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>waste</code></em> :</span></p></td>
+<td>   Amount of overprint to allow.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Pointer to newly allocated <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame"><span class="type">lglTemplateFrame</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_dup ()">
+<a name="lgl-template-frame-dup"></a><h3>lgl_template_frame_dup ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *  lgl_template_frame_dup              (const <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *orig_frame);</pre>
+<p>
+This function duplicates a template frame structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig_frame</code></em> :</span></p></td>
+<td> Frame to duplicate.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  a newly allocated <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame"><span class="type">lglTemplateFrame</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_free ()">
+<a name="lgl-template-frame-free"></a><h3>lgl_template_frame_free ()</h3>
+<pre class="programlisting">void                lgl_template_frame_free             (<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame);</pre>
+<p>
+This function frees all memory associated with given template frame structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>frame</code></em> :</span></p></td>
+<td> Frame to free.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_add_layout ()">
+<a name="lgl-template-frame-add-layout"></a><h3>lgl_template_frame_add_layout ()</h3>
+<pre class="programlisting">void                lgl_template_frame_add_layout       (<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame,
+                                                         <a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> *layout);</pre>
+<p>
+This function adds a layout structure to the given template frame.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frame</code></em> :</span></p></td>
+<td>  Pointer to template frame to add layout to.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> Pointer to layout structure to add to frame.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_add_markup ()">
+<a name="lgl-template-frame-add-markup"></a><h3>lgl_template_frame_add_markup ()</h3>
+<pre class="programlisting">void                lgl_template_frame_add_markup       (<a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame,
+                                                         <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> *markup);</pre>
+<p>
+This function adds a markup structure to the given template frame.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frame</code></em> :</span></p></td>
+<td>  Pointer to template frame to add markup to.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>markup</code></em> :</span></p></td>
+<td> Pointer to markup structure to add to frame.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_get_size ()">
+<a name="lgl-template-frame-get-size"></a><h3>lgl_template_frame_get_size ()</h3>
+<pre class="programlisting">void                lgl_template_frame_get_size         (const <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> *w,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> *h);</pre>
+<p>
+Get size (width and height) of given <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame"><span class="type">lglTemplateFrame</span></a> in points.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frame</code></em> :</span></p></td>
+<td> <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame"><span class="type">lglTemplateFrame</span></a> structure to query
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>w</code></em> :</span></p></td>
+<td> pointer to location to receive width of frame
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>h</code></em> :</span></p></td>
+<td> pointer to location to receive height of frame
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_get_n_labels ()">
+<a name="lgl-template-frame-get-n-labels"></a><h3>lgl_template_frame_get_n_labels ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                lgl_template_frame_get_n_labels     (const <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame);</pre>
+<p>
+Get total number of labels per sheet corresponding to the given frame.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frame</code></em> :</span></p></td>
+<td> <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame"><span class="type">lglTemplateFrame</span></a> structure to query
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> number of labels per sheet.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_frame_get_origins ()">
+<a name="lgl-template-frame-get-origins"></a><h3>lgl_template_frame_get_origins ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateOrigin" title="lglTemplateOrigin">lglTemplateOrigin</a> * lgl_template_frame_get_origins      (const <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame">lglTemplateFrame</a> *frame);</pre>
+<p>
+Get an array of label origins for the given frame.  These origins represent the
+upper left hand corner of each label on a page corresponding to the given frame.
+The origins will be ordered geometrically left to right and then top to bottom.
+The array should be freed using <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frame</code></em> :</span></p></td>
+<td> <a class="link" href="libglabels-template.html#lglTemplateFrame" title="union lglTemplateFrame"><span class="type">lglTemplateFrame</span></a> structure to query
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> A newly allocated array of <a class="link" href="libglabels-template.html#lglTemplateOrigin" title="lglTemplateOrigin"><span class="type">lglTemplateOrigin</span></a> structures.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_layout_new ()">
+<a name="lgl-template-layout-new"></a><h3>lgl_template_layout_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> * lgl_template_layout_new             (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> nx,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> ny,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x0,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y0,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> dx,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> dy);</pre>
+<p>
+This function creates a new layout structure with the given parameters.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nx</code></em> :</span></p></td>
+<td>  Number of labels across.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ny</code></em> :</span></p></td>
+<td>  Number of labels down.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x0</code></em> :</span></p></td>
+<td>  X coordinate of the top-left corner of the top-left label in the layout in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y0</code></em> :</span></p></td>
+<td>  Y coordinate of the top-left corner of the top-left label in the layout in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dx</code></em> :</span></p></td>
+<td>  Horizontal pitch in points.  This is the distance from left-edge to left-edge.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dy</code></em> :</span></p></td>
+<td>  Vertical pitch in points.  This is the distance from top-edge to top-edge.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly allocated <a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout"><span class="type">lglTemplateLayout</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_layout_dup ()">
+<a name="lgl-template-layout-dup"></a><h3>lgl_template_layout_dup ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> * lgl_template_layout_dup             (const <a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> *orig_layout);</pre>
+<p>
+This function duplicates a template layout structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig_layout</code></em> :</span></p></td>
+<td> Layout to duplicate.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  a newly allocated <a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout"><span class="type">lglTemplateLayout</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_layout_free ()">
+<a name="lgl-template-layout-free"></a><h3>lgl_template_layout_free ()</h3>
+<pre class="programlisting">void                lgl_template_layout_free            (<a class="link" href="libglabels-template.html#lglTemplateLayout" title="lglTemplateLayout">lglTemplateLayout</a> *layout);</pre>
+<p>
+This function frees all memory associated with given template layout structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> Layout to free.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_markup_margin_new ()">
+<a name="lgl-template-markup-margin-new"></a><h3>lgl_template_markup_margin_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * lgl_template_markup_margin_new      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> size);</pre>
+<p>
+This function creates a new margin markup structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td> margin size in points.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly allocated <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup"><span class="type">lglTemplateMarkup</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_markup_line_new ()">
+<a name="lgl-template-markup-line-new"></a><h3>lgl_template_markup_line_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * lgl_template_markup_line_new        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x2,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y2);</pre>
+<p>
+This function creates a new line markup structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x1</code></em> :</span></p></td>
+<td> x coordinate of first endpoint.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y1</code></em> :</span></p></td>
+<td> y coordinate of first endpoint.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x2</code></em> :</span></p></td>
+<td> x coordinate of second endpoint.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y2</code></em> :</span></p></td>
+<td> y coordinate of second endpoint.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly allocated <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup"><span class="type">lglTemplateMarkup</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_markup_circle_new ()">
+<a name="lgl-template-markup-circle-new"></a><h3>lgl_template_markup_circle_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * lgl_template_markup_circle_new      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x0,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y0,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r);</pre>
+<p>
+This function creates a new circle markup structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x0</code></em> :</span></p></td>
+<td> x coordinate of center of circle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y0</code></em> :</span></p></td>
+<td> y coordinate of center of circle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>r</code></em> :</span></p></td>
+<td>  radius of circle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly allocated <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup"><span class="type">lglTemplateMarkup</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_markup_rect_new ()">
+<a name="lgl-template-markup-rect-new"></a><h3>lgl_template_markup_rect_new ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * lgl_template_markup_rect_new        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> x1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> y1,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> w,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> h,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> r);</pre>
+<p>
+This function creates a new rectangle markup structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x1</code></em> :</span></p></td>
+<td> x coordinate of top-left corner of rectangle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y1</code></em> :</span></p></td>
+<td> y coordinate of top-left corner of rectangle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>w</code></em> :</span></p></td>
+<td>  width of rectangle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>h</code></em> :</span></p></td>
+<td>  height of rectangle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>r</code></em> :</span></p></td>
+<td>  radius of rounded corner.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly allocated <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup"><span class="type">lglTemplateMarkup</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_markup_dup ()">
+<a name="lgl-template-markup-dup"></a><h3>lgl_template_markup_dup ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> * lgl_template_markup_dup             (const <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> *orig_markup);</pre>
+<p>
+This function duplicates a template markup structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig_markup</code></em> :</span></p></td>
+<td> Markup to duplicate.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  a newly allocated <a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup"><span class="type">lglTemplateMarkup</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_template_markup_free ()">
+<a name="lgl-template-markup-free"></a><h3>lgl_template_markup_free ()</h3>
+<pre class="programlisting">void                lgl_template_markup_free            (<a class="link" href="libglabels-template.html#lglTemplateMarkup" title="union lglTemplateMarkup">lglTemplateMarkup</a> *markup);</pre>
+<p>
+This function frees all memory associated with given template markup structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>markup</code></em> :</span></p></td>
+<td> Markup to free.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels-xml-category.html b/docs/libglabels/html/libglabels-xml-category.html
new file mode 100644 (file)
index 0000000..42a1e53
--- /dev/null
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>XML Category Functions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="prev" href="libglabels-xml-paper.html" title="XML Paper Functions">
+<link rel="next" href="libglabels-xml-template.html" title="XML Template Functions">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libglabels-xml-paper.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-xml-template.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-xml-category.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-xml-category.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="XML Category Functions">
+<a name="libglabels-xml-category"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-xml-category.top_of_page"></a>XML Category Functions</span></h2>
+<p>XML Category Functions — Functions to parse glabels XML category definition files</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-xml-category.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/xml-category.h&gt;
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-xml-category.html#lgl-xml-category-read-categories-from-file" title="lgl_xml_category_read_categories_from_file ()">lgl_xml_category_read_categories_from_file</a>
+                                                        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-xml-category.html#lgl-xml-category-parse-categories-doc" title="lgl_xml_category_parse_categories_doc ()">lgl_xml_category_parse_categories_doc</a>
+                                                        (xmlDocPtr categories_doc);
+<a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       <a class="link" href="libglabels-xml-category.html#lgl-xml-category-parse-category-node" title="lgl_xml_category_parse_category_node ()">lgl_xml_category_parse_category_node</a>
+                                                        (xmlNodePtr category_node);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-xml-category.description"></a><h2>Description</h2>
+<p>
+This section describes a number of functions for parsing glabels
+XML category definition files.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-xml-category.details"></a><h2>Details</h2>
+<div class="refsect2" title="lgl_xml_category_read_categories_from_file ()">
+<a name="lgl-xml-category-read-categories-from-file"></a><h3>lgl_xml_category_read_categories_from_file ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_xml_category_read_categories_from_file
+                                                        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);</pre>
+<p>
+Read category definitions from a file.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>utf8_filename</code></em> :</span></p></td>
+<td>       Filename of categories file (name encoded as UTF-8)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structures.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_category_parse_categories_doc ()">
+<a name="lgl-xml-category-parse-categories-doc"></a><h3>lgl_xml_category_parse_categories_doc ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_xml_category_parse_categories_doc
+                                                        (xmlDocPtr categories_doc);</pre>
+<p>
+Read category definitions from a libxml <span class="type">xmlDocPtr</span> tree.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>categories_doc</code></em> :</span></p></td>
+<td>  libxml <span class="type">xmlDocPtr</span> tree, representing a categories
+definition file.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structures.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_category_parse_category_node ()">
+<a name="lgl-xml-category-parse-category-node"></a><h3>lgl_xml_category_parse_category_node ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-category.html#lglCategory" title="lglCategory">lglCategory</a> *       lgl_xml_category_parse_category_node
+                                                        (xmlNodePtr category_node);</pre>
+<p>
+Read a single category definition from a libxml <span class="type">xmlNodePtr</span> node.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>category_node</code></em> :</span></p></td>
+<td>  libxml <span class="type">xmlNodePtr</span> category node from a <span class="type">xmlDocPtr</span> tree.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to a newly created <a class="link" href="libglabels-category.html#lglCategory" title="lglCategory"><span class="type">lglCategory</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels-xml-paper.html b/docs/libglabels/html/libglabels-xml-paper.html
new file mode 100644 (file)
index 0000000..e368aea
--- /dev/null
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>XML Paper Functions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="prev" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="next" href="libglabels-xml-category.html" title="XML Category Functions">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch02.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-xml-category.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-xml-paper.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-xml-paper.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="XML Paper Functions">
+<a name="libglabels-xml-paper"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-xml-paper.top_of_page"></a>XML Paper Functions</span></h2>
+<p>XML Paper Functions — Functions to parse glabels XML paper definition files</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-xml-paper.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/xml-paper.h&gt;
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-xml-paper.html#lgl-xml-paper-read-papers-from-file" title="lgl_xml_paper_read_papers_from_file ()">lgl_xml_paper_read_papers_from_file</a> (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-xml-paper.html#lgl-xml-paper-parse-papers-doc" title="lgl_xml_paper_parse_papers_doc ()">lgl_xml_paper_parse_papers_doc</a>      (xmlDocPtr papers_doc);
+<a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          <a class="link" href="libglabels-xml-paper.html#lgl-xml-paper-parse-paper-node" title="lgl_xml_paper_parse_paper_node ()">lgl_xml_paper_parse_paper_node</a>      (xmlNodePtr paper_node);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-xml-paper.description"></a><h2>Description</h2>
+<p>
+This section describes a number of functions for parsing glabels
+XML paper definition files.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-xml-paper.details"></a><h2>Details</h2>
+<div class="refsect2" title="lgl_xml_paper_read_papers_from_file ()">
+<a name="lgl-xml-paper-read-papers-from-file"></a><h3>lgl_xml_paper_read_papers_from_file ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_xml_paper_read_papers_from_file (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);</pre>
+<p>
+Read paper definitions from a file.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>utf8_filename</code></em> :</span></p></td>
+<td>       Filename of papers file (name encoded as UTF-8)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structures.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_paper_parse_papers_doc ()">
+<a name="lgl-xml-paper-parse-papers-doc"></a><h3>lgl_xml_paper_parse_papers_doc ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_xml_paper_parse_papers_doc      (xmlDocPtr papers_doc);</pre>
+<p>
+Read paper definitions from a libxml <span class="type">xmlDocPtr</span> tree.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>papers_doc</code></em> :</span></p></td>
+<td>  libxml <span class="type">xmlDocPtr</span> tree, representing a papers definition file.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structures.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_paper_parse_paper_node ()">
+<a name="lgl-xml-paper-parse-paper-node"></a><h3>lgl_xml_paper_parse_paper_node ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper">lglPaper</a> *          lgl_xml_paper_parse_paper_node      (xmlNodePtr paper_node);</pre>
+<p>
+Read a single paper definition from a libxml <span class="type">xmlNodePtr</span> node.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>paper_node</code></em> :</span></p></td>
+<td>  libxml <span class="type">xmlNodePtr</span> paper node from a <span class="type">xmlDocPtr</span> tree.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to a newly created <a class="link" href="libglabels-paper.html#lglPaper" title="lglPaper"><span class="type">lglPaper</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels-xml-template.html b/docs/libglabels/html/libglabels-xml-template.html
new file mode 100644 (file)
index 0000000..732d430
--- /dev/null
@@ -0,0 +1,286 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>XML Template Functions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="prev" href="libglabels-xml-category.html" title="XML Category Functions">
+<link rel="next" href="libglabels-xml.html" title="XML Helper Functions">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libglabels-xml-category.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="libglabels-xml.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-xml-template.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-xml-template.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="XML Template Functions">
+<a name="libglabels-xml-template"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-xml-template.top_of_page"></a>XML Template Functions</span></h2>
+<p>XML Template Functions — Functions to create and parse glabels XML template nodes and files</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-xml-template.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/xml-templates.h&gt;
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-xml-template.html#lgl-xml-template-read-templates-from-file" title="lgl_xml_template_read_templates_from_file ()">lgl_xml_template_read_templates_from_file</a>
+                                                        (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="libglabels-xml-template.html#lgl-xml-template-parse-templates-doc" title="lgl_xml_template_parse_templates_doc ()">lgl_xml_template_parse_templates_doc</a>
+                                                        (const xmlDocPtr templates_doc);
+<a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *       <a class="link" href="libglabels-xml-template.html#lgl-xml-template-parse-template-node" title="lgl_xml_template_parse_template_node ()">lgl_xml_template_parse_template_node</a>
+                                                        (const xmlNodePtr template_node);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                <a class="link" href="libglabels-xml-template.html#lgl-xml-template-write-templates-to-file" title="lgl_xml_template_write_templates_to_file ()">lgl_xml_template_write_templates_to_file</a>
+                                                        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *templates,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                <a class="link" href="libglabels-xml-template.html#lgl-xml-template-write-template-to-file" title="lgl_xml_template_write_template_to_file ()">lgl_xml_template_write_template_to_file</a>
+                                                        (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);
+void                <a class="link" href="libglabels-xml-template.html#lgl-xml-template-create-template-node" title="lgl_xml_template_create_template_node ()">lgl_xml_template_create_template_node</a>
+                                                        (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         xmlNodePtr root,
+                                                         const xmlNsPtr ns);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-xml-template.description"></a><h2>Description</h2>
+<p>
+This section describes a number of functions for creating and parsing
+glabels XML template nodes and files.  Template nodes are used in both
+template files and document files.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-xml-template.details"></a><h2>Details</h2>
+<div class="refsect2" title="lgl_xml_template_read_templates_from_file ()">
+<a name="lgl-xml-template-read-templates-from-file"></a><h3>lgl_xml_template_read_templates_from_file ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_xml_template_read_templates_from_file
+                                                        (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);</pre>
+<p>
+Read glabels templates from template file.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>utf8_filename</code></em> :</span></p></td>
+<td>       Filename of papers file (name encoded as UTF-8)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structures.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_template_parse_templates_doc ()">
+<a name="lgl-xml-template-parse-templates-doc"></a><h3>lgl_xml_template_parse_templates_doc ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             lgl_xml_template_parse_templates_doc
+                                                        (const xmlDocPtr templates_doc);</pre>
+<p>
+Read glabels templates from a libxml <span class="type">xmlDocPtr</span> tree.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>templates_doc</code></em> :</span></p></td>
+<td>  libxml <span class="type">xmlDocPtr</span> tree, representing template file.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structures.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_template_parse_template_node ()">
+<a name="lgl-xml-template-parse-template-node"></a><h3>lgl_xml_template_parse_template_node ()</h3>
+<pre class="programlisting"><a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *       lgl_xml_template_parse_template_node
+                                                        (const xmlNodePtr template_node);</pre>
+<p>
+Read a single glabels template from a libxml <span class="type">xmlNodePtr</span> node.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template_node</code></em> :</span></p></td>
+<td>  libxml <span class="type">xmlNodePtr</span> template node from a <span class="type">xmlDocPtr</span> tree.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to a newly created <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structure.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_template_write_templates_to_file ()">
+<a name="lgl-xml-template-write-templates-to-file"></a><h3>lgl_xml_template_write_templates_to_file ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                lgl_xml_template_write_templates_to_file
+                                                        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *templates,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);</pre>
+<p>
+Write a list of <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structures to a glabels XML template file.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>templates</code></em> :</span></p></td>
+<td>      List of <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structures
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>utf8_filename</code></em> :</span></p></td>
+<td>  Filename of templates file (name encoded as UTF-8)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the number of bytes written or -1 in case of failure
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_template_write_template_to_file ()">
+<a name="lgl-xml-template-write-template-to-file"></a><h3>lgl_xml_template_write_template_to_file ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                lgl_xml_template_write_template_to_file
+                                                        (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *utf8_filename);</pre>
+<p>
+Write a single <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structures to a glabels XML template file.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>       <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structure to be written
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>utf8_filename</code></em> :</span></p></td>
+<td>  Filename of templates file (name encoded as UTF-8)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the number of bytes written or -1 in case of failure
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_template_create_template_node ()">
+<a name="lgl-xml-template-create-template-node"></a><h3>lgl_xml_template_create_template_node ()</h3>
+<pre class="programlisting">void                lgl_xml_template_create_template_node
+                                                        (const <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate">lglTemplate</a> *template,
+                                                         xmlNodePtr root,
+                                                         const xmlNsPtr ns);</pre>
+<p>
+Add a single <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> child node to given <span class="type">xmlNodePtr</span>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>template</code></em> :</span></p></td>
+<td>       <a class="link" href="libglabels-template.html#lglTemplate" title="lglTemplate"><span class="type">lglTemplate</span></a> structure to be written
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>root</code></em> :</span></p></td>
+<td>           parent node to receive new child node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ns</code></em> :</span></p></td>
+<td>             a libxml <span class="type">xmlNsPtr</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels-xml.html b/docs/libglabels/html/libglabels-xml.html
new file mode 100644 (file)
index 0000000..02347b9
--- /dev/null
@@ -0,0 +1,801 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>XML Helper Functions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="LibGlabels Reference Manual">
+<link rel="up" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="prev" href="libglabels-xml-template.html" title="XML Template Functions">
+<link rel="next" href="ch03.html" title="Miscellaneous">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="ch01.html" title="Basic LibGlabels Usage">
+<link rel="chapter" href="ch02.html" title="Working Directly With LibGlabels XML">
+<link rel="chapter" href="ch03.html" title="Miscellaneous">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libglabels-xml-template.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">LibGlabels Reference Manual</th>
+<td><a accesskey="n" href="ch03.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libglabels-xml.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#libglabels-xml.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="XML Helper Functions">
+<a name="libglabels-xml"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libglabels-xml.top_of_page"></a>XML Helper Functions</span></h2>
+<p>XML Helper Functions — Functions to help format and parse glabels XML properties</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libglabels-xml.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+
+#include &lt;libglabels/xml.h&gt;
+
+#define             <a class="link" href="libglabels-xml.html#LGL-XML-NAME-SPACE--CAPS" title="LGL_XML_NAME_SPACE">LGL_XML_NAME_SPACE</a>
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             <a class="link" href="libglabels-xml.html#lgl-xml-get-prop-string" title="lgl_xml_get_prop_string ()">lgl_xml_get_prop_string</a>             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *default_val);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             <a class="link" href="libglabels-xml.html#lgl-xml-get-prop-i18n-string" title="lgl_xml_get_prop_i18n_string ()">lgl_xml_get_prop_i18n_string</a>        (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *default_val);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a>             <a class="link" href="libglabels-xml.html#lgl-xml-get-prop-double" title="lgl_xml_get_prop_double ()">lgl_xml_get_prop_double</a>             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> default_val);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-xml.html#lgl-xml-get-prop-boolean" title="lgl_xml_get_prop_boolean ()">lgl_xml_get_prop_boolean</a>            (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> default_val);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                <a class="link" href="libglabels-xml.html#lgl-xml-get-prop-int" title="lgl_xml_get_prop_int ()">lgl_xml_get_prop_int</a>                (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> default_val);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               <a class="link" href="libglabels-xml.html#lgl-xml-get-prop-uint" title="lgl_xml_get_prop_uint ()">lgl_xml_get_prop_uint</a>               (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> default_val);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a>             <a class="link" href="libglabels-xml.html#lgl-xml-get-prop-length" title="lgl_xml_get_prop_length ()">lgl_xml_get_prop_length</a>             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> default_val);
+
+void                <a class="link" href="libglabels-xml.html#lgl-xml-set-prop-string" title="lgl_xml_set_prop_string ()">lgl_xml_set_prop_string</a>             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *val);
+void                <a class="link" href="libglabels-xml.html#lgl-xml-set-prop-double" title="lgl_xml_set_prop_double ()">lgl_xml_set_prop_double</a>             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> val);
+void                <a class="link" href="libglabels-xml.html#lgl-xml-set-prop-boolean" title="lgl_xml_set_prop_boolean ()">lgl_xml_set_prop_boolean</a>            (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> val);
+void                <a class="link" href="libglabels-xml.html#lgl-xml-set-prop-int" title="lgl_xml_set_prop_int ()">lgl_xml_set_prop_int</a>                (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> val);
+void                <a class="link" href="libglabels-xml.html#lgl-xml-set-prop-uint-hex" title="lgl_xml_set_prop_uint_hex ()">lgl_xml_set_prop_uint_hex</a>           (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> val);
+void                <a class="link" href="libglabels-xml.html#lgl-xml-set-prop-length" title="lgl_xml_set_prop_length ()">lgl_xml_set_prop_length</a>             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> val);
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="libglabels-xml.html#lgl-xml-is-node" title="lgl_xml_is_node ()">lgl_xml_is_node</a>                     (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             <a class="link" href="libglabels-xml.html#lgl-xml-get-node-content" title="lgl_xml_get_node_content ()">lgl_xml_get_node_content</a>            (xmlNodePtr node);
+
+void                <a class="link" href="libglabels-xml.html#lgl-xml-set-default-units" title="lgl_xml_set_default_units ()">lgl_xml_set_default_units</a>           (<a class="link" href="libglabels-enums.html#lglUnitsType" title="enum lglUnitsType">lglUnitsType</a> units);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libglabels-xml.description"></a><h2>Description</h2>
+<p>
+This section describes a number of "helper" functions for formatting and
+parsing various types of properties for tags in glabels XML file formats.
+</p>
+<p>
+These functions are basically wrappers to functions from libxml2.
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libglabels-xml.details"></a><h2>Details</h2>
+<div class="refsect2" title="LGL_XML_NAME_SPACE">
+<a name="LGL-XML-NAME-SPACE--CAPS"></a><h3>LGL_XML_NAME_SPACE</h3>
+<pre class="programlisting">#define LGL_XML_NAME_SPACE "http://snaught.com/glabels/2.2/"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_get_prop_string ()">
+<a name="lgl-xml-get-prop-string"></a><h3>lgl_xml_get_prop_string ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             lgl_xml_get_prop_string             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *default_val);</pre>
+<p>
+Return value of property as a string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>default_val</code></em> :</span></p></td>
+<td> a default value to return if property not found
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the property as a pointer to a gchar string.  This string should
+         be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_get_prop_i18n_string ()">
+<a name="lgl-xml-get-prop-i18n-string"></a><h3>lgl_xml_get_prop_i18n_string ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             lgl_xml_get_prop_i18n_string        (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *default_val);</pre>
+<p>
+Return value of a translatable property as a string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>default_val</code></em> :</span></p></td>
+<td> a default value to return if property not found
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the property as a pointer to a gchar string.  This string should
+         be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_get_prop_double ()">
+<a name="lgl-xml-get-prop-double"></a><h3>lgl_xml_get_prop_double ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a>             lgl_xml_get_prop_double             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> default_val);</pre>
+<p>
+Return value of property as a double.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>default_val</code></em> :</span></p></td>
+<td> a default value to return if property not found
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the property as a double.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_get_prop_boolean ()">
+<a name="lgl-xml-get-prop-boolean"></a><h3>lgl_xml_get_prop_boolean ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_xml_get_prop_boolean            (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> default_val);</pre>
+<p>
+Return value of property as a boolean.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>default_val</code></em> :</span></p></td>
+<td> a default value to return if property not found
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the property as a boolean.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_get_prop_int ()">
+<a name="lgl-xml-get-prop-int"></a><h3>lgl_xml_get_prop_int ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                lgl_xml_get_prop_int                (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> default_val);</pre>
+<p>
+Return value of property as an integer.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>default_val</code></em> :</span></p></td>
+<td> a default value to return if property not found
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the property as an integer.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_get_prop_uint ()">
+<a name="lgl-xml-get-prop-uint"></a><h3>lgl_xml_get_prop_uint ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               lgl_xml_get_prop_uint               (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> default_val);</pre>
+<p>
+Return value of property (usually formatted in hex) as an unsigned integer.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>default_val</code></em> :</span></p></td>
+<td> a default value to return if property not found
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the property as an unsigned integer.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_get_prop_length ()">
+<a name="lgl-xml-get-prop-length"></a><h3>lgl_xml_get_prop_length ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a>             lgl_xml_get_prop_length             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> default_val);</pre>
+<p>
+Return value of a length property as a double, converting to internal
+units (points).  The property is expected to be formatted as a number
+followed by a units string.  If there is no units string, the length
+is assumed to be in points.  Valid units strings are "pt" for points,
+"in" for inches, "mm" for millimeters, "cm" for centimeters, and
+"pc" for picas.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>default_val</code></em> :</span></p></td>
+<td> a default value to return if property not found
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the length in points.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_set_prop_string ()">
+<a name="lgl-xml-set-prop-string"></a><h3>lgl_xml_set_prop_string ()</h3>
+<pre class="programlisting">void                lgl_xml_set_prop_string             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *val);</pre>
+<p>
+Set a property from a string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>val</code></em> :</span></p></td>
+<td>         the value to set
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_set_prop_double ()">
+<a name="lgl-xml-set-prop-double"></a><h3>lgl_xml_set_prop_double ()</h3>
+<pre class="programlisting">void                lgl_xml_set_prop_double             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> val);</pre>
+<p>
+Set a property from a double.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>val</code></em> :</span></p></td>
+<td>         the value to set
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_set_prop_boolean ()">
+<a name="lgl-xml-set-prop-boolean"></a><h3>lgl_xml_set_prop_boolean ()</h3>
+<pre class="programlisting">void                lgl_xml_set_prop_boolean            (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> val);</pre>
+<p>
+Set a property from a boolean.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>val</code></em> :</span></p></td>
+<td>         the value to set
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_set_prop_int ()">
+<a name="lgl-xml-set-prop-int"></a><h3>lgl_xml_set_prop_int ()</h3>
+<pre class="programlisting">void                lgl_xml_set_prop_int                (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> val);</pre>
+<p>
+Set a property from an integer.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>val</code></em> :</span></p></td>
+<td>         the value to set
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_set_prop_uint_hex ()">
+<a name="lgl-xml-set-prop-uint-hex"></a><h3>lgl_xml_set_prop_uint_hex ()</h3>
+<pre class="programlisting">void                lgl_xml_set_prop_uint_hex           (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> val);</pre>
+<p>
+Set a property from an unsigned integer and format in hex.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>val</code></em> :</span></p></td>
+<td>         the value to set
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_set_prop_length ()">
+<a name="lgl-xml-set-prop-length"></a><h3>lgl_xml_set_prop_length ()</h3>
+<pre class="programlisting">void                lgl_xml_set_prop_length             (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *property,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"
+>gdouble</a> val);</pre>
+<p>
+Set a property from a length, performing any necessary conversion.
+Length properties are formatted as a number followed by a units string.
+The units of the formatted property is determined by the most recent call to
+<a class="link" href="libglabels-xml.html#lgl-xml-set-default-units" title="lgl_xml_set_default_units ()"><code class="function">lgl_xml_set_default_units()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property</code></em> :</span></p></td>
+<td>    the property name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>val</code></em> :</span></p></td>
+<td>         the length to set in internal units (points)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_is_node ()">
+<a name="lgl-xml-is-node"></a><h3>lgl_xml_is_node ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            lgl_xml_is_node                     (xmlNodePtr node,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);</pre>
+<p>
+Test if a node name matches given name.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>    the node name
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> TRUE if the name of the node matches.  Otherwise FALSE.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_get_node_content ()">
+<a name="lgl-xml-get-node-content"></a><h3>lgl_xml_get_node_content ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             lgl_xml_get_node_content            (xmlNodePtr node);</pre>
+<p>
+Get the content of a node.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node</code></em> :</span></p></td>
+<td>        the libxml2 <span class="type">xmlNodePtr</span> of the node
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the property as a pointer to a gchar string.  This string should
+         be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="lgl_xml_set_default_units ()">
+<a name="lgl-xml-set-default-units"></a><h3>lgl_xml_set_default_units ()</h3>
+<pre class="programlisting">void                lgl_xml_set_default_units           (<a class="link" href="libglabels-enums.html#lglUnitsType" title="enum lglUnitsType">lglUnitsType</a> units);</pre>
+<p>
+Set the default units when formatting lengths.  See
+<a class="link" href="libglabels-xml.html#lgl-xml-set-prop-length" title="lgl_xml_set_prop_length ()"><code class="function">lgl_xml_set_prop_length()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>units</code></em> :</span></p></td>
+<td>       default units selection (<a class="link" href="libglabels-enums.html#lglUnitsType" title="enum lglUnitsType"><span class="type">lglUnitsType</span></a>)
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/libglabels/html/libglabels.devhelp b/docs/libglabels/html/libglabels.devhelp
new file mode 100644 (file)
index 0000000..dd43881
--- /dev/null
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="LibGlabels Reference Manual" link="index.html" author="" name="libglabels">
+  <chapters>
+    <sub name="Basic LibGlabels Usage" link="ch01.html">
+      <sub name="Database" link="libglabels-db.html"/>
+      <sub name="The lglTemplate Structure" link="libglabels-template.html"/>
+      <sub name="The lglPaper Structure" link="libglabels-paper.html"/>
+      <sub name="The lglCategory Structure" link="libglabels-category.html"/>
+    </sub>
+    <sub name="Working Directly With LibGlabels XML" link="ch02.html">
+      <sub name="XML Paper Functions" link="libglabels-xml-paper.html"/>
+      <sub name="XML Category Functions" link="libglabels-xml-category.html"/>
+      <sub name="XML Template Functions" link="libglabels-xml-template.html"/>
+      <sub name="XML Helper Functions" link="libglabels-xml.html"/>
+    </sub>
+    <sub name="Miscellaneous" link="ch03.html">
+      <sub name="Enumerations" link="libglabels-enums.html"/>
+      <sub name="String Utility Functions" link="libglabels-str.html"/>
+    </sub>
+  </chapters>
+  <functions>
+    <function name="enum lglDbRegStatus" link="libglabels-db.html#lglDbRegStatus"/>
+    <function name="lgl_db_init ()" link="libglabels-db.html#lgl-db-init"/>
+    <function name="lgl_db_get_paper_id_list ()" link="libglabels-db.html#lgl-db-get-paper-id-list"/>
+    <function name="lgl_db_free_paper_id_list ()" link="libglabels-db.html#lgl-db-free-paper-id-list"/>
+    <function name="lgl_db_get_paper_name_list ()" link="libglabels-db.html#lgl-db-get-paper-name-list"/>
+    <function name="lgl_db_free_paper_name_list ()" link="libglabels-db.html#lgl-db-free-paper-name-list"/>
+    <function name="lgl_db_lookup_paper_from_id ()" link="libglabels-db.html#lgl-db-lookup-paper-from-id"/>
+    <function name="lgl_db_lookup_paper_from_name ()" link="libglabels-db.html#lgl-db-lookup-paper-from-name"/>
+    <function name="lgl_db_lookup_paper_id_from_name ()" link="libglabels-db.html#lgl-db-lookup-paper-id-from-name"/>
+    <function name="lgl_db_lookup_paper_name_from_id ()" link="libglabels-db.html#lgl-db-lookup-paper-name-from-id"/>
+    <function name="lgl_db_is_paper_id_known ()" link="libglabels-db.html#lgl-db-is-paper-id-known"/>
+    <function name="lgl_db_is_paper_id_other ()" link="libglabels-db.html#lgl-db-is-paper-id-other"/>
+    <function name="lgl_db_get_category_id_list ()" link="libglabels-db.html#lgl-db-get-category-id-list"/>
+    <function name="lgl_db_free_category_id_list ()" link="libglabels-db.html#lgl-db-free-category-id-list"/>
+    <function name="lgl_db_get_category_name_list ()" link="libglabels-db.html#lgl-db-get-category-name-list"/>
+    <function name="lgl_db_free_category_name_list ()" link="libglabels-db.html#lgl-db-free-category-name-list"/>
+    <function name="lgl_db_lookup_category_from_id ()" link="libglabels-db.html#lgl-db-lookup-category-from-id"/>
+    <function name="lgl_db_lookup_category_from_name ()" link="libglabels-db.html#lgl-db-lookup-category-from-name"/>
+    <function name="lgl_db_lookup_category_id_from_name ()" link="libglabels-db.html#lgl-db-lookup-category-id-from-name"/>
+    <function name="lgl_db_lookup_category_name_from_id ()" link="libglabels-db.html#lgl-db-lookup-category-name-from-id"/>
+    <function name="lgl_db_is_category_id_known ()" link="libglabels-db.html#lgl-db-is-category-id-known"/>
+    <function name="lgl_db_get_brand_list ()" link="libglabels-db.html#lgl-db-get-brand-list"/>
+    <function name="lgl_db_free_brand_list ()" link="libglabels-db.html#lgl-db-free-brand-list"/>
+    <function name="lgl_db_register_template ()" link="libglabels-db.html#lgl-db-register-template"/>
+    <function name="lgl_db_does_template_exist ()" link="libglabels-db.html#lgl-db-does-template-exist"/>
+    <function name="lgl_db_does_template_name_exist ()" link="libglabels-db.html#lgl-db-does-template-name-exist"/>
+    <function name="lgl_db_get_template_name_list_unique ()" link="libglabels-db.html#lgl-db-get-template-name-list-unique"/>
+    <function name="lgl_db_get_template_name_list_all ()" link="libglabels-db.html#lgl-db-get-template-name-list-all"/>
+    <function name="lgl_db_free_template_name_list ()" link="libglabels-db.html#lgl-db-free-template-name-list"/>
+    <function name="lgl_db_lookup_template_from_name ()" link="libglabels-db.html#lgl-db-lookup-template-from-name"/>
+    <function name="lgl_db_print_known_papers ()" link="libglabels-db.html#lgl-db-print-known-papers"/>
+    <function name="lgl_db_print_known_categories ()" link="libglabels-db.html#lgl-db-print-known-categories"/>
+    <function name="lgl_db_print_known_templates ()" link="libglabels-db.html#lgl-db-print-known-templates"/>
+    <function name="lgl_db_print_aliases ()" link="libglabels-db.html#lgl-db-print-aliases"/>
+    <function name="lglTemplate" link="libglabels-template.html#lglTemplate"/>
+    <function name="lglTemplateAlias" link="libglabels-template.html#lglTemplateAlias"/>
+    <function name="enum lglTemplateFrameShape" link="libglabels-template.html#lglTemplateFrameShape"/>
+    <function name="union lglTemplateFrame" link="libglabels-template.html#lglTemplateFrame"/>
+    <function name="lglTemplateFrameAll" link="libglabels-template.html#lglTemplateFrameAll"/>
+    <function name="lglTemplateFrameRect" link="libglabels-template.html#lglTemplateFrameRect"/>
+    <function name="lglTemplateFrameRound" link="libglabels-template.html#lglTemplateFrameRound"/>
+    <function name="lglTemplateFrameCD" link="libglabels-template.html#lglTemplateFrameCD"/>
+    <function name="lglTemplateLayout" link="libglabels-template.html#lglTemplateLayout"/>
+    <function name="enum lglTemplateMarkupType" link="libglabels-template.html#lglTemplateMarkupType"/>
+    <function name="union lglTemplateMarkup" link="libglabels-template.html#lglTemplateMarkup"/>
+    <function name="lglTemplateMarkupMargin" link="libglabels-template.html#lglTemplateMarkupMargin"/>
+    <function name="lglTemplateMarkupLine" link="libglabels-template.html#lglTemplateMarkupLine"/>
+    <function name="lglTemplateMarkupCircle" link="libglabels-template.html#lglTemplateMarkupCircle"/>
+    <function name="lglTemplateMarkupRect" link="libglabels-template.html#lglTemplateMarkupRect"/>
+    <function name="lglTemplateOrigin" link="libglabels-template.html#lglTemplateOrigin"/>
+    <function name="lgl_template_new ()" link="libglabels-template.html#lgl-template-new"/>
+    <function name="lgl_template_dup ()" link="libglabels-template.html#lgl-template-dup"/>
+    <function name="lgl_template_free ()" link="libglabels-template.html#lgl-template-free"/>
+    <function name="lgl_template_add_category ()" link="libglabels-template.html#lgl-template-add-category"/>
+    <function name="lgl_template_add_frame ()" link="libglabels-template.html#lgl-template-add-frame"/>
+    <function name="lgl_template_add_alias ()" link="libglabels-template.html#lgl-template-add-alias"/>
+    <function name="lgl_template_get_name ()" link="libglabels-template.html#lgl-template-get-name"/>
+    <function name="lgl_template_do_templates_match ()" link="libglabels-template.html#lgl-template-do-templates-match"/>
+    <function name="lgl_template_does_brand_match ()" link="libglabels-template.html#lgl-template-does-brand-match"/>
+    <function name="lgl_template_does_page_size_match ()" link="libglabels-template.html#lgl-template-does-page-size-match"/>
+    <function name="lgl_template_does_category_match ()" link="libglabels-template.html#lgl-template-does-category-match"/>
+    <function name="lgl_template_alias_new ()" link="libglabels-template.html#lgl-template-alias-new"/>
+    <function name="lgl_template_alias_dup ()" link="libglabels-template.html#lgl-template-alias-dup"/>
+    <function name="lgl_template_alias_free ()" link="libglabels-template.html#lgl-template-alias-free"/>
+    <function name="lgl_template_frame_rect_new ()" link="libglabels-template.html#lgl-template-frame-rect-new"/>
+    <function name="lgl_template_frame_round_new ()" link="libglabels-template.html#lgl-template-frame-round-new"/>
+    <function name="lgl_template_frame_cd_new ()" link="libglabels-template.html#lgl-template-frame-cd-new"/>
+    <function name="lgl_template_frame_dup ()" link="libglabels-template.html#lgl-template-frame-dup"/>
+    <function name="lgl_template_frame_free ()" link="libglabels-template.html#lgl-template-frame-free"/>
+    <function name="lgl_template_frame_add_layout ()" link="libglabels-template.html#lgl-template-frame-add-layout"/>
+    <function name="lgl_template_frame_add_markup ()" link="libglabels-template.html#lgl-template-frame-add-markup"/>
+    <function name="lgl_template_frame_get_size ()" link="libglabels-template.html#lgl-template-frame-get-size"/>
+    <function name="lgl_template_frame_get_n_labels ()" link="libglabels-template.html#lgl-template-frame-get-n-labels"/>
+    <function name="lgl_template_frame_get_origins ()" link="libglabels-template.html#lgl-template-frame-get-origins"/>
+    <function name="lgl_template_layout_new ()" link="libglabels-template.html#lgl-template-layout-new"/>
+    <function name="lgl_template_layout_dup ()" link="libglabels-template.html#lgl-template-layout-dup"/>
+    <function name="lgl_template_layout_free ()" link="libglabels-template.html#lgl-template-layout-free"/>
+    <function name="lgl_template_markup_margin_new ()" link="libglabels-template.html#lgl-template-markup-margin-new"/>
+    <function name="lgl_template_markup_line_new ()" link="libglabels-template.html#lgl-template-markup-line-new"/>
+    <function name="lgl_template_markup_circle_new ()" link="libglabels-template.html#lgl-template-markup-circle-new"/>
+    <function name="lgl_template_markup_rect_new ()" link="libglabels-template.html#lgl-template-markup-rect-new"/>
+    <function name="lgl_template_markup_dup ()" link="libglabels-template.html#lgl-template-markup-dup"/>
+    <function name="lgl_template_markup_free ()" link="libglabels-template.html#lgl-template-markup-free"/>
+    <function name="lglPaper" link="libglabels-paper.html#lglPaper"/>
+    <function name="lgl_paper_new ()" link="libglabels-paper.html#lgl-paper-new"/>
+    <function name="lgl_paper_dup ()" link="libglabels-paper.html#lgl-paper-dup"/>
+    <function name="lgl_paper_free ()" link="libglabels-paper.html#lgl-paper-free"/>
+    <function name="lglCategory" link="libglabels-category.html#lglCategory"/>
+    <function name="lgl_category_new ()" link="libglabels-category.html#lgl-category-new"/>
+    <function name="lgl_category_dup ()" link="libglabels-category.html#lgl-category-dup"/>
+    <function name="lgl_category_free ()" link="libglabels-category.html#lgl-category-free"/>
+    <function name="lgl_xml_paper_read_papers_from_file ()" link="libglabels-xml-paper.html#lgl-xml-paper-read-papers-from-file"/>
+    <function name="lgl_xml_paper_parse_papers_doc ()" link="libglabels-xml-paper.html#lgl-xml-paper-parse-papers-doc"/>
+    <function name="lgl_xml_paper_parse_paper_node ()" link="libglabels-xml-paper.html#lgl-xml-paper-parse-paper-node"/>
+    <function name="lgl_xml_category_read_categories_from_file ()" link="libglabels-xml-category.html#lgl-xml-category-read-categories-from-file"/>
+    <function name="lgl_xml_category_parse_categories_doc ()" link="libglabels-xml-category.html#lgl-xml-category-parse-categories-doc"/>
+    <function name="lgl_xml_category_parse_category_node ()" link="libglabels-xml-category.html#lgl-xml-category-parse-category-node"/>
+    <function name="lgl_xml_template_read_templates_from_file ()" link="libglabels-xml-template.html#lgl-xml-template-read-templates-from-file"/>
+    <function name="lgl_xml_template_parse_templates_doc ()" link="libglabels-xml-template.html#lgl-xml-template-parse-templates-doc"/>
+    <function name="lgl_xml_template_parse_template_node ()" link="libglabels-xml-template.html#lgl-xml-template-parse-template-node"/>
+    <function name="lgl_xml_template_write_templates_to_file ()" link="libglabels-xml-template.html#lgl-xml-template-write-templates-to-file"/>
+    <function name="lgl_xml_template_write_template_to_file ()" link="libglabels-xml-template.html#lgl-xml-template-write-template-to-file"/>
+    <function name="lgl_xml_template_create_template_node ()" link="libglabels-xml-template.html#lgl-xml-template-create-template-node"/>
+    <function name="LGL_XML_NAME_SPACE" link="libglabels-xml.html#LGL-XML-NAME-SPACE--CAPS"/>
+    <function name="lgl_xml_get_prop_string ()" link="libglabels-xml.html#lgl-xml-get-prop-string"/>
+    <function name="lgl_xml_get_prop_i18n_string ()" link="libglabels-xml.html#lgl-xml-get-prop-i18n-string"/>
+    <function name="lgl_xml_get_prop_double ()" link="libglabels-xml.html#lgl-xml-get-prop-double"/>
+    <function name="lgl_xml_get_prop_boolean ()" link="libglabels-xml.html#lgl-xml-get-prop-boolean"/>
+    <function name="lgl_xml_get_prop_int ()" link="libglabels-xml.html#lgl-xml-get-prop-int"/>
+    <function name="lgl_xml_get_prop_uint ()" link="libglabels-xml.html#lgl-xml-get-prop-uint"/>
+    <function name="lgl_xml_get_prop_length ()" link="libglabels-xml.html#lgl-xml-get-prop-length"/>
+    <function name="lgl_xml_set_prop_string ()" link="libglabels-xml.html#lgl-xml-set-prop-string"/>
+    <function name="lgl_xml_set_prop_double ()" link="libglabels-xml.html#lgl-xml-set-prop-double"/>
+    <function name="lgl_xml_set_prop_boolean ()" link="libglabels-xml.html#lgl-xml-set-prop-boolean"/>
+    <function name="lgl_xml_set_prop_int ()" link="libglabels-xml.html#lgl-xml-set-prop-int"/>
+    <function name="lgl_xml_set_prop_uint_hex ()" link="libglabels-xml.html#lgl-xml-set-prop-uint-hex"/>
+    <function name="lgl_xml_set_prop_length ()" link="libglabels-xml.html#lgl-xml-set-prop-length"/>
+    <function name="lgl_xml_is_node ()" link="libglabels-xml.html#lgl-xml-is-node"/>
+    <function name="lgl_xml_get_node_content ()" link="libglabels-xml.html#lgl-xml-get-node-content"/>
+    <function name="lgl_xml_set_default_units ()" link="libglabels-xml.html#lgl-xml-set-default-units"/>
+    <function name="enum lglUnitsType" link="libglabels-enums.html#lglUnitsType"/>
+    <function name="lgl_str_utf8_casecmp ()" link="libglabels-str.html#lgl-str-utf8-casecmp"/>
+  </functions>
+</book>
diff --git a/docs/libglabels/html/libglabels.devhelp2 b/docs/libglabels/html/libglabels.devhelp2
new file mode 100644 (file)
index 0000000..1e9cf7d
--- /dev/null
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="LibGlabels Reference Manual" link="index.html" author="" name="libglabels" version="2" language="c">
+  <chapters>
+    <sub name="Basic LibGlabels Usage" link="ch01.html">
+      <sub name="Database" link="libglabels-db.html"/>
+      <sub name="The lglTemplate Structure" link="libglabels-template.html"/>
+      <sub name="The lglPaper Structure" link="libglabels-paper.html"/>
+      <sub name="The lglCategory Structure" link="libglabels-category.html"/>
+    </sub>
+    <sub name="Working Directly With LibGlabels XML" link="ch02.html">
+      <sub name="XML Paper Functions" link="libglabels-xml-paper.html"/>
+      <sub name="XML Category Functions" link="libglabels-xml-category.html"/>
+      <sub name="XML Template Functions" link="libglabels-xml-template.html"/>
+      <sub name="XML Helper Functions" link="libglabels-xml.html"/>
+    </sub>
+    <sub name="Miscellaneous" link="ch03.html">
+      <sub name="Enumerations" link="libglabels-enums.html"/>
+      <sub name="String Utility Functions" link="libglabels-str.html"/>
+    </sub>
+  </chapters>
+  <functions>
+    <keyword type="enum" name="enum lglDbRegStatus" link="libglabels-db.html#lglDbRegStatus"/>
+    <keyword type="function" name="lgl_db_init ()" link="libglabels-db.html#lgl-db-init"/>
+    <keyword type="function" name="lgl_db_get_paper_id_list ()" link="libglabels-db.html#lgl-db-get-paper-id-list"/>
+    <keyword type="function" name="lgl_db_free_paper_id_list ()" link="libglabels-db.html#lgl-db-free-paper-id-list"/>
+    <keyword type="function" name="lgl_db_get_paper_name_list ()" link="libglabels-db.html#lgl-db-get-paper-name-list"/>
+    <keyword type="function" name="lgl_db_free_paper_name_list ()" link="libglabels-db.html#lgl-db-free-paper-name-list"/>
+    <keyword type="function" name="lgl_db_lookup_paper_from_id ()" link="libglabels-db.html#lgl-db-lookup-paper-from-id"/>
+    <keyword type="function" name="lgl_db_lookup_paper_from_name ()" link="libglabels-db.html#lgl-db-lookup-paper-from-name"/>
+    <keyword type="function" name="lgl_db_lookup_paper_id_from_name ()" link="libglabels-db.html#lgl-db-lookup-paper-id-from-name"/>
+    <keyword type="function" name="lgl_db_lookup_paper_name_from_id ()" link="libglabels-db.html#lgl-db-lookup-paper-name-from-id"/>
+    <keyword type="function" name="lgl_db_is_paper_id_known ()" link="libglabels-db.html#lgl-db-is-paper-id-known"/>
+    <keyword type="function" name="lgl_db_is_paper_id_other ()" link="libglabels-db.html#lgl-db-is-paper-id-other"/>
+    <keyword type="function" name="lgl_db_get_category_id_list ()" link="libglabels-db.html#lgl-db-get-category-id-list"/>
+    <keyword type="function" name="lgl_db_free_category_id_list ()" link="libglabels-db.html#lgl-db-free-category-id-list"/>
+    <keyword type="function" name="lgl_db_get_category_name_list ()" link="libglabels-db.html#lgl-db-get-category-name-list"/>
+    <keyword type="function" name="lgl_db_free_category_name_list ()" link="libglabels-db.html#lgl-db-free-category-name-list"/>
+    <keyword type="function" name="lgl_db_lookup_category_from_id ()" link="libglabels-db.html#lgl-db-lookup-category-from-id"/>
+    <keyword type="function" name="lgl_db_lookup_category_from_name ()" link="libglabels-db.html#lgl-db-lookup-category-from-name"/>
+    <keyword type="function" name="lgl_db_lookup_category_id_from_name ()" link="libglabels-db.html#lgl-db-lookup-category-id-from-name"/>
+    <keyword type="function" name="lgl_db_lookup_category_name_from_id ()" link="libglabels-db.html#lgl-db-lookup-category-name-from-id"/>
+    <keyword type="function" name="lgl_db_is_category_id_known ()" link="libglabels-db.html#lgl-db-is-category-id-known"/>
+    <keyword type="function" name="lgl_db_get_brand_list ()" link="libglabels-db.html#lgl-db-get-brand-list"/>
+    <keyword type="function" name="lgl_db_free_brand_list ()" link="libglabels-db.html#lgl-db-free-brand-list"/>
+    <keyword type="function" name="lgl_db_register_template ()" link="libglabels-db.html#lgl-db-register-template"/>
+    <keyword type="function" name="lgl_db_does_template_exist ()" link="libglabels-db.html#lgl-db-does-template-exist"/>
+    <keyword type="function" name="lgl_db_does_template_name_exist ()" link="libglabels-db.html#lgl-db-does-template-name-exist"/>
+    <keyword type="function" name="lgl_db_get_template_name_list_unique ()" link="libglabels-db.html#lgl-db-get-template-name-list-unique"/>
+    <keyword type="function" name="lgl_db_get_template_name_list_all ()" link="libglabels-db.html#lgl-db-get-template-name-list-all"/>
+    <keyword type="function" name="lgl_db_free_template_name_list ()" link="libglabels-db.html#lgl-db-free-template-name-list"/>
+    <keyword type="function" name="lgl_db_lookup_template_from_name ()" link="libglabels-db.html#lgl-db-lookup-template-from-name"/>
+    <keyword type="function" name="lgl_db_print_known_papers ()" link="libglabels-db.html#lgl-db-print-known-papers"/>
+    <keyword type="function" name="lgl_db_print_known_categories ()" link="libglabels-db.html#lgl-db-print-known-categories"/>
+    <keyword type="function" name="lgl_db_print_known_templates ()" link="libglabels-db.html#lgl-db-print-known-templates"/>
+    <keyword type="function" name="lgl_db_print_aliases ()" link="libglabels-db.html#lgl-db-print-aliases"/>
+    <keyword type="struct" name="lglTemplate" link="libglabels-template.html#lglTemplate"/>
+    <keyword type="struct" name="lglTemplateAlias" link="libglabels-template.html#lglTemplateAlias"/>
+    <keyword type="enum" name="enum lglTemplateFrameShape" link="libglabels-template.html#lglTemplateFrameShape"/>
+    <keyword type="union" name="union lglTemplateFrame" link="libglabels-template.html#lglTemplateFrame"/>
+    <keyword type="struct" name="lglTemplateFrameAll" link="libglabels-template.html#lglTemplateFrameAll"/>
+    <keyword type="struct" name="lglTemplateFrameRect" link="libglabels-template.html#lglTemplateFrameRect"/>
+    <keyword type="struct" name="lglTemplateFrameRound" link="libglabels-template.html#lglTemplateFrameRound"/>
+    <keyword type="struct" name="lglTemplateFrameCD" link="libglabels-template.html#lglTemplateFrameCD"/>
+    <keyword type="struct" name="lglTemplateLayout" link="libglabels-template.html#lglTemplateLayout"/>
+    <keyword type="enum" name="enum lglTemplateMarkupType" link="libglabels-template.html#lglTemplateMarkupType"/>
+    <keyword type="union" name="union lglTemplateMarkup" link="libglabels-template.html#lglTemplateMarkup"/>
+    <keyword type="struct" name="lglTemplateMarkupMargin" link="libglabels-template.html#lglTemplateMarkupMargin"/>
+    <keyword type="struct" name="lglTemplateMarkupLine" link="libglabels-template.html#lglTemplateMarkupLine"/>
+    <keyword type="struct" name="lglTemplateMarkupCircle" link="libglabels-template.html#lglTemplateMarkupCircle"/>
+    <keyword type="struct" name="lglTemplateMarkupRect" link="libglabels-template.html#lglTemplateMarkupRect"/>
+    <keyword type="struct" name="lglTemplateOrigin" link="libglabels-template.html#lglTemplateOrigin"/>
+    <keyword type="function" name="lgl_template_new ()" link="libglabels-template.html#lgl-template-new"/>
+    <keyword type="function" name="lgl_template_dup ()" link="libglabels-template.html#lgl-template-dup"/>
+    <keyword type="function" name="lgl_template_free ()" link="libglabels-template.html#lgl-template-free"/>
+    <keyword type="function" name="lgl_template_add_category ()" link="libglabels-template.html#lgl-template-add-category"/>
+    <keyword type="function" name="lgl_template_add_frame ()" link="libglabels-template.html#lgl-template-add-frame"/>
+    <keyword type="function" name="lgl_template_add_alias ()" link="libglabels-template.html#lgl-template-add-alias"/>
+    <keyword type="function" name="lgl_template_get_name ()" link="libglabels-template.html#lgl-template-get-name"/>
+    <keyword type="function" name="lgl_template_do_templates_match ()" link="libglabels-template.html#lgl-template-do-templates-match"/>
+    <keyword type="function" name="lgl_template_does_brand_match ()" link="libglabels-template.html#lgl-template-does-brand-match"/>
+    <keyword type="function" name="lgl_template_does_page_size_match ()" link="libglabels-template.html#lgl-template-does-page-size-match"/>
+    <keyword type="function" name="lgl_template_does_category_match ()" link="libglabels-template.html#lgl-template-does-category-match"/>
+    <keyword type="function" name="lgl_template_alias_new ()" link="libglabels-template.html#lgl-template-alias-new"/>
+    <keyword type="function" name="lgl_template_alias_dup ()" link="libglabels-template.html#lgl-template-alias-dup"/>
+    <keyword type="function" name="lgl_template_alias_free ()" link="libglabels-template.html#lgl-template-alias-free"/>
+    <keyword type="function" name="lgl_template_frame_rect_new ()" link="libglabels-template.html#lgl-template-frame-rect-new"/>
+    <keyword type="function" name="lgl_template_frame_round_new ()" link="libglabels-template.html#lgl-template-frame-round-new"/>
+    <keyword type="function" name="lgl_template_frame_cd_new ()" link="libglabels-template.html#lgl-template-frame-cd-new"/>
+    <keyword type="function" name="lgl_template_frame_dup ()" link="libglabels-template.html#lgl-template-frame-dup"/>
+    <keyword type="function" name="lgl_template_frame_free ()" link="libglabels-template.html#lgl-template-frame-free"/>
+    <keyword type="function" name="lgl_template_frame_add_layout ()" link="libglabels-template.html#lgl-template-frame-add-layout"/>
+    <keyword type="function" name="lgl_template_frame_add_markup ()" link="libglabels-template.html#lgl-template-frame-add-markup"/>
+    <keyword type="function" name="lgl_template_frame_get_size ()" link="libglabels-template.html#lgl-template-frame-get-size"/>
+    <keyword type="function" name="lgl_template_frame_get_n_labels ()" link="libglabels-template.html#lgl-template-frame-get-n-labels"/>
+    <keyword type="function" name="lgl_template_frame_get_origins ()" link="libglabels-template.html#lgl-template-frame-get-origins"/>
+    <keyword type="function" name="lgl_template_layout_new ()" link="libglabels-template.html#lgl-template-layout-new"/>
+    <keyword type="function" name="lgl_template_layout_dup ()" link="libglabels-template.html#lgl-template-layout-dup"/>
+    <keyword type="function" name="lgl_template_layout_free ()" link="libglabels-template.html#lgl-template-layout-free"/>
+    <keyword type="function" name="lgl_template_markup_margin_new ()" link="libglabels-template.html#lgl-template-markup-margin-new"/>
+    <keyword type="function" name="lgl_template_markup_line_new ()" link="libglabels-template.html#lgl-template-markup-line-new"/>
+    <keyword type="function" name="lgl_template_markup_circle_new ()" link="libglabels-template.html#lgl-template-markup-circle-new"/>
+    <keyword type="function" name="lgl_template_markup_rect_new ()" link="libglabels-template.html#lgl-template-markup-rect-new"/>
+    <keyword type="function" name="lgl_template_markup_dup ()" link="libglabels-template.html#lgl-template-markup-dup"/>
+    <keyword type="function" name="lgl_template_markup_free ()" link="libglabels-template.html#lgl-template-markup-free"/>
+    <keyword type="struct" name="lglPaper" link="libglabels-paper.html#lglPaper"/>
+    <keyword type="function" name="lgl_paper_new ()" link="libglabels-paper.html#lgl-paper-new"/>
+    <keyword type="function" name="lgl_paper_dup ()" link="libglabels-paper.html#lgl-paper-dup"/>
+    <keyword type="function" name="lgl_paper_free ()" link="libglabels-paper.html#lgl-paper-free"/>
+    <keyword type="struct" name="lglCategory" link="libglabels-category.html#lglCategory"/>
+    <keyword type="function" name="lgl_category_new ()" link="libglabels-category.html#lgl-category-new"/>
+    <keyword type="function" name="lgl_category_dup ()" link="libglabels-category.html#lgl-category-dup"/>
+    <keyword type="function" name="lgl_category_free ()" link="libglabels-category.html#lgl-category-free"/>
+    <keyword type="function" name="lgl_xml_paper_read_papers_from_file ()" link="libglabels-xml-paper.html#lgl-xml-paper-read-papers-from-file"/>
+    <keyword type="function" name="lgl_xml_paper_parse_papers_doc ()" link="libglabels-xml-paper.html#lgl-xml-paper-parse-papers-doc"/>
+    <keyword type="function" name="lgl_xml_paper_parse_paper_node ()" link="libglabels-xml-paper.html#lgl-xml-paper-parse-paper-node"/>
+    <keyword type="function" name="lgl_xml_category_read_categories_from_file ()" link="libglabels-xml-category.html#lgl-xml-category-read-categories-from-file"/>
+    <keyword type="function" name="lgl_xml_category_parse_categories_doc ()" link="libglabels-xml-category.html#lgl-xml-category-parse-categories-doc"/>
+    <keyword type="function" name="lgl_xml_category_parse_category_node ()" link="libglabels-xml-category.html#lgl-xml-category-parse-category-node"/>
+    <keyword type="function" name="lgl_xml_template_read_templates_from_file ()" link="libglabels-xml-template.html#lgl-xml-template-read-templates-from-file"/>
+    <keyword type="function" name="lgl_xml_template_parse_templates_doc ()" link="libglabels-xml-template.html#lgl-xml-template-parse-templates-doc"/>
+    <keyword type="function" name="lgl_xml_template_parse_template_node ()" link="libglabels-xml-template.html#lgl-xml-template-parse-template-node"/>
+    <keyword type="function" name="lgl_xml_template_write_templates_to_file ()" link="libglabels-xml-template.html#lgl-xml-template-write-templates-to-file"/>
+    <keyword type="function" name="lgl_xml_template_write_template_to_file ()" link="libglabels-xml-template.html#lgl-xml-template-write-template-to-file"/>
+    <keyword type="function" name="lgl_xml_template_create_template_node ()" link="libglabels-xml-template.html#lgl-xml-template-create-template-node"/>
+    <keyword type="macro" name="LGL_XML_NAME_SPACE" link="libglabels-xml.html#LGL-XML-NAME-SPACE--CAPS"/>
+    <keyword type="function" name="lgl_xml_get_prop_string ()" link="libglabels-xml.html#lgl-xml-get-prop-string"/>
+    <keyword type="function" name="lgl_xml_get_prop_i18n_string ()" link="libglabels-xml.html#lgl-xml-get-prop-i18n-string"/>
+    <keyword type="function" name="lgl_xml_get_prop_double ()" link="libglabels-xml.html#lgl-xml-get-prop-double"/>
+    <keyword type="function" name="lgl_xml_get_prop_boolean ()" link="libglabels-xml.html#lgl-xml-get-prop-boolean"/>
+    <keyword type="function" name="lgl_xml_get_prop_int ()" link="libglabels-xml.html#lgl-xml-get-prop-int"/>
+    <keyword type="function" name="lgl_xml_get_prop_uint ()" link="libglabels-xml.html#lgl-xml-get-prop-uint"/>
+    <keyword type="function" name="lgl_xml_get_prop_length ()" link="libglabels-xml.html#lgl-xml-get-prop-length"/>
+    <keyword type="function" name="lgl_xml_set_prop_string ()" link="libglabels-xml.html#lgl-xml-set-prop-string"/>
+    <keyword type="function" name="lgl_xml_set_prop_double ()" link="libglabels-xml.html#lgl-xml-set-prop-double"/>
+    <keyword type="function" name="lgl_xml_set_prop_boolean ()" link="libglabels-xml.html#lgl-xml-set-prop-boolean"/>
+    <keyword type="function" name="lgl_xml_set_prop_int ()" link="libglabels-xml.html#lgl-xml-set-prop-int"/>
+    <keyword type="function" name="lgl_xml_set_prop_uint_hex ()" link="libglabels-xml.html#lgl-xml-set-prop-uint-hex"/>
+    <keyword type="function" name="lgl_xml_set_prop_length ()" link="libglabels-xml.html#lgl-xml-set-prop-length"/>
+    <keyword type="function" name="lgl_xml_is_node ()" link="libglabels-xml.html#lgl-xml-is-node"/>
+    <keyword type="function" name="lgl_xml_get_node_content ()" link="libglabels-xml.html#lgl-xml-get-node-content"/>
+    <keyword type="function" name="lgl_xml_set_default_units ()" link="libglabels-xml.html#lgl-xml-set-default-units"/>
+    <keyword type="enum" name="enum lglUnitsType" link="libglabels-enums.html#lglUnitsType"/>
+    <keyword type="function" name="lgl_str_utf8_casecmp ()" link="libglabels-str.html#lgl-str-utf8-casecmp"/>
+    <keyword type="constant" name="LGL_DB_REG_OK" link="libglabels-db.html#LGL-DB-REG-OK--CAPS"/>
+    <keyword type="constant" name="LGL_DB_REG_BAD_PAPER_ID" link="libglabels-db.html#LGL-DB-REG-BAD-PAPER-ID--CAPS"/>
+    <keyword type="constant" name="LGL_DB_REG_BRAND_PART_EXISTS" link="libglabels-db.html#LGL-DB-REG-BRAND-PART-EXISTS--CAPS"/>
+    <keyword type="constant" name="LGL_DB_REG_FILE_WRITE_ERROR" link="libglabels-db.html#LGL-DB-REG-FILE-WRITE-ERROR--CAPS"/>
+    <keyword type="constant" name="LGL_TEMPLATE_FRAME_SHAPE_RECT" link="libglabels-template.html#LGL-TEMPLATE-FRAME-SHAPE-RECT--CAPS"/>
+    <keyword type="constant" name="LGL_TEMPLATE_FRAME_SHAPE_ROUND" link="libglabels-template.html#LGL-TEMPLATE-FRAME-SHAPE-ROUND--CAPS"/>
+    <keyword type="constant" name="LGL_TEMPLATE_FRAME_SHAPE_CD" link="libglabels-template.html#LGL-TEMPLATE-FRAME-SHAPE-CD--CAPS"/>
+    <keyword type="constant" name="LGL_TEMPLATE_MARKUP_MARGIN" link="libglabels-template.html#LGL-TEMPLATE-MARKUP-MARGIN--CAPS"/>
+    <keyword type="constant" name="LGL_TEMPLATE_MARKUP_LINE" link="libglabels-template.html#LGL-TEMPLATE-MARKUP-LINE--CAPS"/>
+    <keyword type="constant" name="LGL_TEMPLATE_MARKUP_CIRCLE" link="libglabels-template.html#LGL-TEMPLATE-MARKUP-CIRCLE--CAPS"/>
+    <keyword type="constant" name="LGL_TEMPLATE_MARKUP_RECT" link="libglabels-template.html#LGL-TEMPLATE-MARKUP-RECT--CAPS"/>
+    <keyword type="constant" name="LGL_UNITS_POINT" link="libglabels-enums.html#LGL-UNITS-POINT--CAPS"/>
+    <keyword type="constant" name="LGL_UNITS_INCH" link="libglabels-enums.html#LGL-UNITS-INCH--CAPS"/>
+    <keyword type="constant" name="LGL_UNITS_MM" link="libglabels-enums.html#LGL-UNITS-MM--CAPS"/>
+    <keyword type="constant" name="LGL_UNITS_CM" link="libglabels-enums.html#LGL-UNITS-CM--CAPS"/>
+    <keyword type="constant" name="LGL_UNITS_PICA" link="libglabels-enums.html#LGL-UNITS-PICA--CAPS"/>
+    <keyword type="constant" name="LGL_UNITS_FIRST" link="libglabels-enums.html#LGL-UNITS-FIRST--CAPS"/>
+    <keyword type="constant" name="LGL_UNITS_LAST" link="libglabels-enums.html#LGL-UNITS-LAST--CAPS"/>
+  </functions>
+</book>
diff --git a/docs/libglabels/html/right.png b/docs/libglabels/html/right.png
new file mode 100644 (file)
index 0000000..92832e3
Binary files /dev/null and b/docs/libglabels/html/right.png differ
diff --git a/docs/libglabels/html/style.css b/docs/libglabels/html/style.css
new file mode 100644 (file)
index 0000000..bb44c28
--- /dev/null
@@ -0,0 +1,167 @@
+.synopsis, .classsynopsis
+{
+  background: #eeeeee;
+  border: solid 1px #aaaaaa;
+  padding: 0.5em;
+}
+.programlisting
+{
+  background: #eeeeff;
+  border: solid 1px #aaaaff;
+  padding: 0.5em;
+}
+.variablelist
+{
+  padding: 4px;
+  margin-left: 3em;
+}
+.variablelist td:first-child
+{
+  vertical-align: top;
+}
+
+/* this is needed so that the local anchors are displayed below the naviagtion */
+@media screen {
+  sup a.footnote
+  {
+    position: relative;
+    top: 0em ! important;
+  }
+  div.refnamediv a[name], div.refsect1 a[name]
+  {
+    position: relative;
+    top: -4.5em;
+  }
+  table.navigation#top
+  {
+    background: #ffeeee;
+    border: solid 1px #ffaaaa;
+    margin-top: 0;
+    margin-bottom: 0;
+    position: fixed;
+    top: 0;
+    left: 0;
+    height: 2em;
+    z-index: 1;
+  }
+  .navigation a
+  {
+    color: #770000;
+  }
+  .navigation a:visited
+  {
+    color: #550000;
+  }
+  td.shortcuts
+  {
+    color: #770000;
+    font-size: 80%;
+    white-space: nowrap;
+  }
+  div.refentry, div.chapter, div.reference, div.part, div.book, div.glossary, div.sect1, div.appendix, div.preface
+  {
+    position: relative;
+    top: 3em;
+    z-index: 0;
+  }
+  div.glossary, div.index
+  {
+    position: relative;
+    top: 2em;
+    z-index: 0;
+  }
+  div.refnamediv
+  {
+    margin-top: 2em;
+  }
+  body
+  {
+    padding-bottom: 20em;
+  }
+}
+@media print {
+  table.navigation {
+    visibility: collapse;
+    display: none;
+  }
+  div.titlepage table.navigation {
+    visibility: visible;
+    display: table;
+    background: #ffeeee;
+    border: solid 1px #ffaaaa;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 2em;
+  }
+}
+
+.navigation .title
+{
+  font-size: 200%;
+}
+
+
+div.gallery-float
+{
+  float: left;
+  padding: 10px;
+}
+div.gallery-float img
+{
+  border-style: none;
+}
+div.gallery-spacer
+{
+  clear: both;
+}
+a
+{
+  text-decoration: none;
+}
+a:hover
+{
+  text-decoration: underline;
+  color: #FF0000;
+}
+
+div.table table
+{
+  border-collapse: collapse;
+  border-spacing: 0px;
+  border-style: solid;
+  border-color: #777777;
+  border-width: 1px;
+}
+
+div.table table td, div.table table th
+{
+  border-style: solid;
+  border-color: #777777;
+  border-width: 1px;
+  padding: 3px;
+  vertical-align: top;
+}
+
+div.table table th
+{
+  background-color: #eeeeee;
+}
+
+hr
+{
+  color: #777777;
+  background: #777777;
+  border: 0;
+  height: 1px;
+  clear: both;
+}
+
+.footer
+{
+  padding-top: 3.5em;
+  color: #777777;
+  text-align: center;
+  font-size: 80%;
+}
diff --git a/docs/libglabels/html/up.png b/docs/libglabels/html/up.png
new file mode 100644 (file)
index 0000000..85b3e2a
Binary files /dev/null and b/docs/libglabels/html/up.png differ
diff --git a/docs/libglabels/libglabels-docs.sgml b/docs/libglabels/libglabels-docs.sgml
new file mode 100644 (file)
index 0000000..a4b5b38
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+
+  <bookinfo>
+    <title>LibGlabels Reference Manual</title>
+  </bookinfo>
+
+  <chapter>
+    <title>Basic LibGlabels Usage</title>
+    <xi:include href="xml/db.xml"/>
+    <xi:include href="xml/template.xml"/>
+    <xi:include href="xml/paper.xml"/>
+    <xi:include href="xml/category.xml"/>
+  </chapter>
+
+  <chapter>
+    <title>Working Directly With LibGlabels XML</title>
+    <xi:include href="xml/xml-paper.xml"/>
+    <xi:include href="xml/xml-category.xml"/>
+    <xi:include href="xml/xml-template.xml"/>
+    <xi:include href="xml/xml.xml"/>
+  </chapter>
+
+  <chapter>
+    <title>Miscellaneous</title>
+    <xi:include href="xml/enums.xml"/>
+    <xi:include href="xml/str.xml"/>
+  </chapter>
+
+</book>
diff --git a/docs/libglabels/libglabels-overrides.txt b/docs/libglabels/libglabels-overrides.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/docs/libglabels/libglabels-sections.txt b/docs/libglabels/libglabels-sections.txt
new file mode 100644 (file)
index 0000000..658d109
--- /dev/null
@@ -0,0 +1,194 @@
+<SECTION>
+<FILE>db</FILE>
+<INCLUDE>libglabels/db.h</INCLUDE>
+lglDbRegStatus
+<SUBSECTION Init Functions>
+lgl_db_init
+<SUBSECTION Paper Functions>
+lgl_db_get_paper_id_list
+lgl_db_free_paper_id_list
+lgl_db_get_paper_name_list
+lgl_db_free_paper_name_list
+lgl_db_lookup_paper_from_id
+lgl_db_lookup_paper_from_name
+lgl_db_lookup_paper_id_from_name
+lgl_db_lookup_paper_name_from_id
+lgl_db_is_paper_id_known
+lgl_db_is_paper_id_other
+<SUBSECTION Category Functions>
+lgl_db_get_category_id_list
+lgl_db_free_category_id_list
+lgl_db_get_category_name_list
+lgl_db_free_category_name_list
+lgl_db_lookup_category_from_id
+lgl_db_lookup_category_from_name
+lgl_db_lookup_category_id_from_name
+lgl_db_lookup_category_name_from_id
+lgl_db_is_category_id_known
+<SUBSECTION Brand Functions>
+lgl_db_get_brand_list
+lgl_db_free_brand_list
+<SUBSECTION Template Functions>
+lgl_db_register_template
+lgl_db_does_template_exist
+lgl_db_does_template_name_exist
+lgl_db_get_template_name_list_unique
+lgl_db_get_template_name_list_all
+lgl_db_free_template_name_list
+lgl_db_lookup_template_from_name
+<SUBSECTION Debugging Functions>
+lgl_db_print_known_papers
+lgl_db_print_known_categories
+lgl_db_print_known_templates
+lgl_db_print_aliases
+</SECTION>
+
+<SECTION>
+<FILE>template</FILE>
+<INCLUDE>libglabels/template.h</INCLUDE>
+lglTemplate
+<SUBSECTION Alias Structure>
+lglTemplateAlias
+<SUBSECTION Frame Structure>
+lglTemplateFrameShape
+lglTemplateFrame
+lglTemplateFrameAll
+lglTemplateFrameRect
+lglTemplateFrameRound
+lglTemplateFrameCD
+<SUBSECTION Layout Structure>
+lglTemplateLayout
+<SUBSECTION Markup Structure>
+lglTemplateMarkupType
+lglTemplateMarkup
+lglTemplateMarkupMargin
+lglTemplateMarkupLine
+lglTemplateMarkupCircle
+lglTemplateMarkupRect
+<SUBSECTION Origin Structure>
+lglTemplateOrigin
+<SUBSECTION Template Functions>
+lgl_template_new
+lgl_template_dup
+lgl_template_free
+lgl_template_add_category
+lgl_template_add_frame
+lgl_template_add_alias
+<SUBSECTION Template Query Functions>
+lgl_template_get_name
+lgl_template_do_templates_match
+lgl_template_does_brand_match
+lgl_template_does_page_size_match
+lgl_template_does_category_match
+<SUBSECTION Alias Functions>
+lgl_template_alias_new
+lgl_template_alias_dup
+lgl_template_alias_free
+<SUBSECTION Frame Functions>
+lgl_template_frame_rect_new
+lgl_template_frame_round_new
+lgl_template_frame_cd_new
+lgl_template_frame_dup
+lgl_template_frame_free
+lgl_template_frame_add_layout
+lgl_template_frame_add_markup
+<SUBSECTION Frame Frame Query Functions>
+lgl_template_frame_get_size
+lgl_template_frame_get_n_labels
+lgl_template_frame_get_origins
+<SUBSECTION Layout Functions>
+lgl_template_layout_new
+lgl_template_layout_dup
+lgl_template_layout_free
+<SUBSECTION Markup Functions>
+lgl_template_markup_margin_new
+lgl_template_markup_line_new
+lgl_template_markup_circle_new
+lgl_template_markup_rect_new
+lgl_template_markup_dup
+lgl_template_markup_free
+</SECTION>
+
+<SECTION>
+<FILE>paper</FILE>
+<INCLUDE>libglabels/paper.h</INCLUDE>
+lglPaper
+lgl_paper_new
+lgl_paper_dup
+lgl_paper_free
+</SECTION>
+
+<SECTION>
+<FILE>category</FILE>
+<INCLUDE>libglabels/category.h</INCLUDE>
+lglCategory
+lgl_category_new
+lgl_category_dup
+lgl_category_free
+</SECTION>
+
+<SECTION>
+<FILE>xml-paper</FILE>
+<INCLUDE>libglabels/xml-paper.h</INCLUDE>
+lgl_xml_paper_read_papers_from_file
+lgl_xml_paper_parse_papers_doc
+lgl_xml_paper_parse_paper_node
+</SECTION>
+
+<SECTION>
+<FILE>xml-category</FILE>
+<INCLUDE>libglabels/xml-category.h</INCLUDE>
+lgl_xml_category_read_categories_from_file
+lgl_xml_category_parse_categories_doc
+lgl_xml_category_parse_category_node
+</SECTION>
+
+<SECTION>
+<FILE>xml-template</FILE>
+<INCLUDE>libglabels/xml-templates.h</INCLUDE>
+lgl_xml_template_read_templates_from_file
+lgl_xml_template_parse_templates_doc
+lgl_xml_template_parse_template_node
+lgl_xml_template_write_templates_to_file
+lgl_xml_template_write_template_to_file
+lgl_xml_template_create_template_node
+</SECTION>
+
+<SECTION>
+<FILE>xml</FILE>
+<INCLUDE>libglabels/xml.h</INCLUDE>
+LGL_XML_NAME_SPACE
+<SUBSECTION Get Property Functions>
+lgl_xml_get_prop_string
+lgl_xml_get_prop_i18n_string
+lgl_xml_get_prop_double
+lgl_xml_get_prop_boolean
+lgl_xml_get_prop_int
+lgl_xml_get_prop_uint
+lgl_xml_get_prop_length
+<SUBSECTION Set Property Functions>
+lgl_xml_set_prop_string
+lgl_xml_set_prop_double
+lgl_xml_set_prop_boolean
+lgl_xml_set_prop_int
+lgl_xml_set_prop_uint_hex
+lgl_xml_set_prop_length
+<SUBSECTION Misc Functions>
+lgl_xml_is_node
+lgl_xml_get_node_content
+<SUBSECTION Configuration Functions>
+lgl_xml_set_default_units
+</SECTION>
+
+<SECTION>
+<FILE>enums</FILE>
+<INCLUDE>libglabels/enums.h</INCLUDE>
+lglUnitsType
+</SECTION>
+
+<SECTION>
+<FILE>str</FILE>
+<INCLUDE>libglabels/str.h</INCLUDE>
+lgl_str_utf8_casecmp
+</SECTION>
+
diff --git a/docs/libglabels/libglabels.types b/docs/libglabels/libglabels.types
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/docs/libglabels/tmpl/category.sgml b/docs/libglabels/tmpl/category.sgml
new file mode 100644 (file)
index 0000000..2143fd1
--- /dev/null
@@ -0,0 +1,55 @@
+<!-- ##### SECTION Title ##### -->
+The lglCategory Structure
+
+<!-- ##### SECTION Short_Description ##### -->
+Template category definitions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a structure for representing a category of stationary and related
+functions.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT lglCategory ##### -->
+<para>
+This structure defines a category.
+</para>
+
+@id: Category ID.
+@name: Localized category name.
+
+<!-- ##### FUNCTION lgl_category_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_category_dup ##### -->
+<para>
+
+</para>
+
+@orig: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_category_free ##### -->
+<para>
+
+</para>
+
+@category: 
+
+
diff --git a/docs/libglabels/tmpl/db.sgml b/docs/libglabels/tmpl/db.sgml
new file mode 100644 (file)
index 0000000..3d5d2de
--- /dev/null
@@ -0,0 +1,314 @@
+<!-- ##### SECTION Title ##### -->
+Database
+
+<!-- ##### SECTION Short_Description ##### -->
+Database of pre-defined templates
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a set of functions to locate and add templates and related information in
+the LibGlabels template database.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM lglDbRegStatus ##### -->
+<para>
+This enumeration defines a set of possible return values for lgl_db_register_template().
+</para>
+
+@LGL_DB_REG_OK: Registration successful.
+@LGL_DB_REG_BAD_PAPER_ID:  Registration failed because paper id is unknown.
+@LGL_DB_REG_BRAND_PART_EXISTS: Registration failed because template with same brand and part name/number already exists.
+@LGL_DB_REG_FILE_WRITE_ERROR: Registration failed because an error while writing to disk.
+
+<!-- ##### FUNCTION lgl_db_init ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION lgl_db_get_paper_id_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_free_paper_id_list ##### -->
+<para>
+
+</para>
+
+@ids: 
+
+
+<!-- ##### FUNCTION lgl_db_get_paper_name_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_free_paper_name_list ##### -->
+<para>
+
+</para>
+
+@names: 
+
+
+<!-- ##### FUNCTION lgl_db_lookup_paper_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_lookup_paper_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_lookup_paper_id_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_lookup_paper_name_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_is_paper_id_known ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_is_paper_id_other ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_get_category_id_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_free_category_id_list ##### -->
+<para>
+
+</para>
+
+@ids: 
+
+
+<!-- ##### FUNCTION lgl_db_get_category_name_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_free_category_name_list ##### -->
+<para>
+
+</para>
+
+@names: 
+
+
+<!-- ##### FUNCTION lgl_db_lookup_category_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_lookup_category_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_lookup_category_id_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_lookup_category_name_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_is_category_id_known ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_get_brand_list ##### -->
+<para>
+
+</para>
+
+@paper_id: 
+@category_id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_free_brand_list ##### -->
+<para>
+
+</para>
+
+@brands: 
+
+
+<!-- ##### FUNCTION lgl_db_register_template ##### -->
+<para>
+
+</para>
+
+@template: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_does_template_exist ##### -->
+<para>
+
+</para>
+
+@brand: 
+@part: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_does_template_name_exist ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_get_template_name_list_unique ##### -->
+<para>
+
+</para>
+
+@brand: 
+@paper_id: 
+@category_id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_get_template_name_list_all ##### -->
+<para>
+
+</para>
+
+@brand: 
+@paper_id: 
+@category_id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_free_template_name_list ##### -->
+<para>
+
+</para>
+
+@names: 
+
+
+<!-- ##### FUNCTION lgl_db_lookup_template_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_db_print_known_papers ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION lgl_db_print_known_categories ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION lgl_db_print_known_templates ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION lgl_db_print_aliases ##### -->
+<para>
+
+</para>
+
+@template: 
+
+
diff --git a/docs/libglabels/tmpl/enums.sgml b/docs/libglabels/tmpl/enums.sgml
new file mode 100644 (file)
index 0000000..b74f00d
--- /dev/null
@@ -0,0 +1,33 @@
+<!-- ##### SECTION Title ##### -->
+Enumerations
+
+<!-- ##### SECTION Short_Description ##### -->
+Common enumerations used by libglabels
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section defines enumerations used to interact with libglabels.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM lglUnitsType ##### -->
+<para>
+This enumeration defines a set of units of distance supported by the libglabels XML distance
+attributes.
+</para>
+
+@LGL_UNITS_POINT: Points.  Encoded as "pt" in XML distance attributes.
+@LGL_UNITS_INCH: Inches.  Encoded as "in" in XML distance attributes.
+@LGL_UNITS_MM: Millmeters.  Encoded as "mm" in XML distance attributes.
+@LGL_UNITS_CM: Centimeters.  Encoded as "cm" in XML distance attributes.
+@LGL_UNITS_PICA: Picas.  Encoded as "pc" in XML distance attributes.
+@LGL_UNITS_FIRST: First enumeration.  Used for generic iteration through supported units..
+@LGL_UNITS_LAST: Last enumeration.  Used for generic iteration through supported units.
+
diff --git a/docs/libglabels/tmpl/libglabels-unused.sgml b/docs/libglabels/tmpl/libglabels-unused.sgml
new file mode 100644 (file)
index 0000000..dc089b4
--- /dev/null
@@ -0,0 +1,1519 @@
+<!-- ##### SECTION ./tmpl/init.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/init.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/init.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/init.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/init.sgml:Title ##### -->
+init
+
+
+<!-- ##### SECTION ./tmpl/libglabels.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/libglabels.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/libglabels.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/libglabels.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/libglabels.sgml:Title ##### -->
+libglabels
+
+
+<!-- ##### SECTION ./tmpl/template-construction.sgml:Long_Description ##### -->
+<para>
+This section describes a set of functions for constructing new template structures.
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template-construction.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template-construction.sgml:Short_Description ##### -->
+Functions to help create new templates
+
+
+<!-- ##### SECTION ./tmpl/template-construction.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/template-construction.sgml:Title ##### -->
+Construction Functions
+
+
+<!-- ##### SECTION ./tmpl/template-db.sgml:Long_Description ##### -->
+<para>
+This section describes a set of functions to locate pre-defined templates and add templates
+to the LibGlabels template database.
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template-db.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template-db.sgml:Short_Description ##### -->
+Database of pre-defined templates
+
+
+<!-- ##### SECTION ./tmpl/template-db.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/template-db.sgml:Title ##### -->
+Database
+
+
+<!-- ##### SECTION ./tmpl/template-misc.sgml:Long_Description ##### -->
+<para>
+This section describes miscellaneous template functions.
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template-misc.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template-misc.sgml:Short_Description ##### -->
+Miscellaneous template functions
+
+
+<!-- ##### SECTION ./tmpl/template-misc.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/template-misc.sgml:Title ##### -->
+Miscellaneous Functions
+
+
+<!-- ##### SECTION ./tmpl/template2.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template2.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template2.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/template2.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/template2.sgml:Title ##### -->
+template2
+
+
+<!-- ##### SECTION ./tmpl/template3.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template3.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/template3.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/template3.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/template3.sgml:Title ##### -->
+template3
+
+
+<!-- ##### MACRO GL_XML_NAME_SPACE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT glCategory ##### -->
+<para>
+
+</para>
+
+@id: 
+@name: 
+
+<!-- ##### STRUCT glPaper ##### -->
+<para>
+
+</para>
+
+@id: 
+@name: 
+@width: 
+@height: 
+
+<!-- ##### STRUCT glTemplate ##### -->
+<para>
+
+</para>
+
+@name: 
+@description: 
+@page_size: 
+@page_width: 
+@page_height: 
+@categories: 
+@frames: 
+@aliases: 
+
+<!-- ##### UNION glTemplateFrame ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT glTemplateFrameAll ##### -->
+<para>
+
+</para>
+
+@shape: 
+@id: 
+@layouts: 
+@markups: 
+
+<!-- ##### STRUCT glTemplateFrameCD ##### -->
+<para>
+
+</para>
+
+@shape: 
+@id: 
+@layouts: 
+@markups: 
+@r1: 
+@r2: 
+@w: 
+@h: 
+@waste: 
+
+<!-- ##### STRUCT glTemplateFrameRect ##### -->
+<para>
+
+</para>
+
+@shape: 
+@id: 
+@layouts: 
+@markups: 
+@w: 
+@h: 
+@r: 
+@x_waste: 
+@y_waste: 
+
+<!-- ##### STRUCT glTemplateFrameRound ##### -->
+<para>
+
+</para>
+
+@shape: 
+@id: 
+@layouts: 
+@markups: 
+@r: 
+@waste: 
+
+<!-- ##### ENUM glTemplateFrameShape ##### -->
+<para>
+
+</para>
+
+@GL_TEMPLATE_FRAME_SHAPE_RECT: 
+@GL_TEMPLATE_FRAME_SHAPE_ROUND: 
+@GL_TEMPLATE_FRAME_SHAPE_CD: 
+
+<!-- ##### ENUM glTemplateLabelShape ##### -->
+<para>
+
+</para>
+
+@GL_TEMPLATE_SHAPE_RECT: 
+@GL_TEMPLATE_SHAPE_ROUND: 
+@GL_TEMPLATE_SHAPE_CD: 
+
+<!-- ##### STRUCT glTemplateLabelType ##### -->
+<para>
+
+</para>
+
+@id: 
+@layouts: 
+@markups: 
+@shape: 
+
+<!-- ##### STRUCT glTemplateLayout ##### -->
+<para>
+
+</para>
+
+@nx: 
+@ny: 
+@x0: 
+@y0: 
+@dx: 
+@dy: 
+
+<!-- ##### UNION glTemplateMarkup ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT glTemplateMarkupCircle ##### -->
+<para>
+
+</para>
+
+@type: 
+@x0: 
+@y0: 
+@r: 
+
+<!-- ##### STRUCT glTemplateMarkupLine ##### -->
+<para>
+
+</para>
+
+@type: 
+@x1: 
+@y1: 
+@x2: 
+@y2: 
+
+<!-- ##### STRUCT glTemplateMarkupMargin ##### -->
+<para>
+
+</para>
+
+@type: 
+@size: 
+
+<!-- ##### STRUCT glTemplateMarkupRect ##### -->
+<para>
+
+</para>
+
+@type: 
+@x1: 
+@y1: 
+@w: 
+@h: 
+@r: 
+
+<!-- ##### ENUM glTemplateMarkupType ##### -->
+<para>
+
+</para>
+
+@GL_TEMPLATE_MARKUP_MARGIN: 
+@GL_TEMPLATE_MARKUP_LINE: 
+@GL_TEMPLATE_MARKUP_CIRCLE: 
+@GL_TEMPLATE_MARKUP_RECT: 
+
+<!-- ##### STRUCT glTemplateOrigin ##### -->
+<para>
+
+</para>
+
+@x: 
+@y: 
+
+<!-- ##### ENUM glUnitsType ##### -->
+<para>
+Enumerations for the units of length supported by libglabels.  Internally
+all lengths are in points.  Externally libglabels supports points ("pt"),
+inches ("in"), millimeters ("mm"), centimeters ("cm"), and picas ("pc").
+These units are identical to the absolute length units supported in
+the CSS2 Specification (Section 4.3.2).
+</para>
+
+@GL_UNITS_POINT: 
+@GL_UNITS_INCH: 
+@GL_UNITS_MM: 
+@GL_UNITS_CM: 
+@GL_UNITS_PICA: 
+@GL_UNITS_FIRST: 
+@GL_UNITS_LAST: 
+
+<!-- ##### FUNCTION gl_category_dup ##### -->
+<para>
+
+</para>
+
+@orig: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_category_free ##### -->
+<para>
+
+</para>
+
+@category: 
+
+<!-- ##### FUNCTION gl_category_free_name_list ##### -->
+<para>
+
+</para>
+
+@names: 
+
+<!-- ##### FUNCTION gl_category_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_category_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_category_get_name_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION gl_category_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gl_category_lookup_id_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_category_lookup_name_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_category_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_dup ##### -->
+<para>
+
+</para>
+
+@orig: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_free ##### -->
+<para>
+
+</para>
+
+@paper: 
+
+<!-- ##### FUNCTION gl_paper_free_id_list ##### -->
+<para>
+
+</para>
+
+@ids: 
+
+<!-- ##### FUNCTION gl_paper_free_name_list ##### -->
+<para>
+
+</para>
+
+@names: 
+
+<!-- ##### FUNCTION gl_paper_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_get_id_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_get_name_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gl_paper_is_id_known ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_is_id_other ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_lookup_id_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_lookup_name_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@name: 
+@width: 
+@height: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_paper_print_known_papers ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gl_template_add_alias ##### -->
+<para>
+
+</para>
+
+@template: 
+@alias: 
+
+<!-- ##### FUNCTION gl_template_add_category ##### -->
+<para>
+
+</para>
+
+@template: 
+@category: 
+
+<!-- ##### FUNCTION gl_template_add_frame ##### -->
+<para>
+
+</para>
+
+@template: 
+@frame: 
+
+<!-- ##### FUNCTION gl_template_add_label_type ##### -->
+<para>
+
+</para>
+
+@template: 
+@label_type: 
+
+<!-- ##### FUNCTION gl_template_add_layout ##### -->
+<para>
+
+</para>
+
+@frame: 
+@layout: 
+
+<!-- ##### FUNCTION gl_template_add_markup ##### -->
+<para>
+
+</para>
+
+@frame: 
+@markup: 
+
+<!-- ##### FUNCTION gl_template_cd_label_type_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@r1: 
+@r2: 
+@w: 
+@h: 
+@waste: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_does_category_match ##### -->
+<para>
+
+</para>
+
+@template: 
+@category: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_does_page_size_match ##### -->
+<para>
+
+</para>
+
+@template: 
+@page_size: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_dup ##### -->
+<para>
+
+</para>
+
+@orig: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_frame_cd_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@r1: 
+@r2: 
+@w: 
+@h: 
+@waste: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_frame_dup ##### -->
+<para>
+
+</para>
+
+@orig_frame: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_frame_free ##### -->
+<para>
+
+</para>
+
+@frame: 
+
+<!-- ##### FUNCTION gl_template_frame_get_n_labels ##### -->
+<para>
+
+</para>
+
+@frame: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_frame_get_origins ##### -->
+<para>
+
+</para>
+
+@frame: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_frame_get_size ##### -->
+<para>
+
+</para>
+
+@frame: 
+@w: 
+@h: 
+
+<!-- ##### FUNCTION gl_template_frame_rect_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@w: 
+@h: 
+@r: 
+@x_waste: 
+@y_waste: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_frame_round_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@r: 
+@waste: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_free ##### -->
+<para>
+
+</para>
+
+@template: 
+
+<!-- ##### FUNCTION gl_template_free_name_list ##### -->
+<para>
+
+</para>
+
+@names: 
+
+<!-- ##### FUNCTION gl_template_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_get_first_frame ##### -->
+<para>
+
+</para>
+
+@template: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_get_first_label_type ##### -->
+<para>
+
+</para>
+
+@template: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_get_label_size ##### -->
+<para>
+
+</para>
+
+@label_type: 
+@w: 
+@h: 
+
+<!-- ##### FUNCTION gl_template_get_n_labels ##### -->
+<para>
+
+</para>
+
+@label_type: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_get_name_list ##### -->
+<para>
+
+</para>
+
+@page_size: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_get_name_list_all ##### -->
+<para>
+
+</para>
+
+@page_size: 
+@category: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_get_name_list_unique ##### -->
+<para>
+
+</para>
+
+@page_size: 
+@category: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_get_name_with_desc ##### -->
+<para>
+
+</para>
+
+@template: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_get_origins ##### -->
+<para>
+
+</para>
+
+@label_type: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gl_template_label_type_dup ##### -->
+<para>
+
+</para>
+
+@orig_ltype: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_label_type_free ##### -->
+<para>
+
+</para>
+
+@ltype: 
+
+<!-- ##### FUNCTION gl_template_layout_dup ##### -->
+<para>
+
+</para>
+
+@orig_layout: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_layout_free ##### -->
+<para>
+
+</para>
+
+@layout: 
+
+<!-- ##### FUNCTION gl_template_layout_new ##### -->
+<para>
+
+</para>
+
+@nx: 
+@ny: 
+@x0: 
+@y0: 
+@dx: 
+@dy: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_markup_circle_new ##### -->
+<para>
+
+</para>
+
+@x0: 
+@y0: 
+@r: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_markup_dup ##### -->
+<para>
+
+</para>
+
+@orig_markup: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_markup_free ##### -->
+<para>
+
+</para>
+
+@markup: 
+
+<!-- ##### FUNCTION gl_template_markup_line_new ##### -->
+<para>
+
+</para>
+
+@x1: 
+@y1: 
+@x2: 
+@y2: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_markup_margin_new ##### -->
+<para>
+
+</para>
+
+@size: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_markup_rect_new ##### -->
+<para>
+
+</para>
+
+@x1: 
+@y1: 
+@w: 
+@h: 
+@r: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@description: 
+@page_size: 
+@page_width: 
+@page_height: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_print_aliases ##### -->
+<para>
+
+</para>
+
+@template: 
+
+<!-- ##### FUNCTION gl_template_print_known_templates ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gl_template_rect_label_type_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@w: 
+@h: 
+@r: 
+@x_waste: 
+@y_waste: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_template_register ##### -->
+<para>
+
+</para>
+
+@template: 
+
+<!-- ##### FUNCTION gl_template_round_label_type_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@r: 
+@waste: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_category_parse_categories_doc ##### -->
+<para>
+
+</para>
+
+@categories_doc: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_category_parse_category_node ##### -->
+<para>
+
+</para>
+
+@category_node: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_category_read_categories_from_file ##### -->
+<para>
+
+</para>
+
+@utf8_filename: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_get_node_content ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_get_prop_boolean ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_get_prop_double ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_get_prop_i18n_string ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_get_prop_int ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_get_prop_length ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_get_prop_string ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_get_prop_uint ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_is_node ##### -->
+<para>
+
+</para>
+
+@node: 
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_paper_parse_paper_node ##### -->
+<para>
+
+</para>
+
+@paper_node: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_paper_parse_papers_doc ##### -->
+<para>
+
+</para>
+
+@papers_doc: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_paper_read_papers_from_file ##### -->
+<para>
+
+</para>
+
+@utf8_filename: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_set_default_units ##### -->
+<para>
+
+</para>
+
+@units: 
+
+<!-- ##### FUNCTION gl_xml_set_prop_boolean ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+<!-- ##### FUNCTION gl_xml_set_prop_double ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+<!-- ##### FUNCTION gl_xml_set_prop_int ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+<!-- ##### FUNCTION gl_xml_set_prop_length ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+<!-- ##### FUNCTION gl_xml_set_prop_string ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+<!-- ##### FUNCTION gl_xml_set_prop_uint_hex ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+<!-- ##### FUNCTION gl_xml_template_create_template_node ##### -->
+<para>
+
+</para>
+
+@template: 
+@root: 
+@ns: 
+
+<!-- ##### FUNCTION gl_xml_template_create_templates_doc ##### -->
+<para>
+
+</para>
+
+@templates: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_template_parse_template_node ##### -->
+<para>
+
+</para>
+
+@template_node: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_template_parse_templates_doc ##### -->
+<para>
+
+</para>
+
+@templates_doc: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_template_read_templates_from_file ##### -->
+<para>
+
+</para>
+
+@utf8_filename: 
+@Returns: 
+
+<!-- ##### FUNCTION gl_xml_template_write_template_to_file ##### -->
+<para>
+
+</para>
+
+@template: 
+@utf8_filename: 
+
+<!-- ##### FUNCTION gl_xml_template_write_templates_to_file ##### -->
+<para>
+
+</para>
+
+@templates: 
+@utf8_filename: 
+
+<!-- ##### FUNCTION lgl_category_free_id_list ##### -->
+<para>
+
+</para>
+
+@ids: 
+
+<!-- ##### FUNCTION lgl_category_free_name_list ##### -->
+<para>
+
+</para>
+
+@names: 
+
+<!-- ##### FUNCTION lgl_category_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_category_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_category_get_id_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION lgl_category_get_name_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION lgl_category_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION lgl_category_lookup_id_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_category_lookup_name_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION lgl_paper_free_id_list ##### -->
+<para>
+
+</para>
+
+@ids: 
+
+<!-- ##### FUNCTION lgl_paper_free_name_list ##### -->
+<para>
+
+</para>
+
+@names: 
+
+<!-- ##### FUNCTION lgl_paper_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_paper_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_paper_get_id_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION lgl_paper_get_name_list ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION lgl_paper_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION lgl_paper_is_id_known ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_paper_is_id_other ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_paper_lookup_id_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_paper_lookup_name_from_id ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_paper_print_known_papers ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION lgl_template_add_layout ##### -->
+<para>
+
+</para>
+
+@frame: 
+@layout: 
+
+<!-- ##### FUNCTION lgl_template_add_markup ##### -->
+<para>
+
+</para>
+
+@frame: 
+@markup: 
+
+<!-- ##### FUNCTION lgl_template_free_brand_list ##### -->
+<para>
+
+</para>
+
+@brands: 
+
+<!-- ##### FUNCTION lgl_template_free_name_list ##### -->
+<para>
+
+</para>
+
+@names: 
+
+<!-- ##### FUNCTION lgl_template_from_name ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_template_get_brand_list ##### -->
+<para>
+
+</para>
+
+@page_size: 
+@category: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_template_get_first_frame ##### -->
+<para>
+
+</para>
+
+@template: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_template_get_name_list_all ##### -->
+<para>
+
+</para>
+
+@brand: 
+@page_size: 
+@category: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_template_get_name_list_unique ##### -->
+<para>
+
+</para>
+
+@brand: 
+@page_size: 
+@category: 
+@Returns: 
+
+<!-- ##### FUNCTION lgl_template_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION lgl_template_print_aliases ##### -->
+<para>
+
+</para>
+
+@template: 
+
+<!-- ##### FUNCTION lgl_template_print_known_templates ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION lgl_template_register ##### -->
+<para>
+
+</para>
+
+@template: 
+
+<!-- ##### FUNCTION lgl_xml_template_create_templates_doc ##### -->
+<para>
+
+</para>
+
+@templates: 
+@Returns: 
+
diff --git a/docs/libglabels/tmpl/libglabels.sgml b/docs/libglabels/tmpl/libglabels.sgml
new file mode 100644 (file)
index 0000000..0552a20
--- /dev/null
@@ -0,0 +1,19 @@
+<!-- ##### SECTION Title ##### -->
+libglabels
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
diff --git a/docs/libglabels/tmpl/paper.sgml b/docs/libglabels/tmpl/paper.sgml
new file mode 100644 (file)
index 0000000..dc69d74
--- /dev/null
@@ -0,0 +1,61 @@
+<!-- ##### SECTION Title ##### -->
+The lglPaper Structure
+
+<!-- ##### SECTION Short_Description ##### -->
+Paper size definitions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a structure for representing a paper size definition
+and related functions.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT lglPaper ##### -->
+<para>
+This structure defines a paper (page) size.
+</para>
+
+@id: Paper size ID.
+@name: Localized paper size name.
+@width: Width of paper in points.
+@height: Height of paper in points.
+@pwg_size: PWG 5101.1-2002 size name.
+
+<!-- ##### FUNCTION lgl_paper_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@name: 
+@width: 
+@height: 
+@pwg_size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_paper_dup ##### -->
+<para>
+
+</para>
+
+@orig: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_paper_free ##### -->
+<para>
+
+</para>
+
+@paper: 
+
+
diff --git a/docs/libglabels/tmpl/str.sgml b/docs/libglabels/tmpl/str.sgml
new file mode 100644 (file)
index 0000000..53cbd3b
--- /dev/null
@@ -0,0 +1,30 @@
+<!-- ##### SECTION Title ##### -->
+String Utility Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+String utility functions provided by libglabels
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section defines string utility functions used by libglabels and of
+possible use to a user of libglabels.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION lgl_str_utf8_casecmp ##### -->
+<para>
+
+</para>
+
+@s1: 
+@s2: 
+@Returns: 
+
+
diff --git a/docs/libglabels/tmpl/template.sgml b/docs/libglabels/tmpl/template.sgml
new file mode 100644 (file)
index 0000000..e7a5887
--- /dev/null
@@ -0,0 +1,532 @@
+<!-- ##### SECTION Title ##### -->
+The lglTemplate Structure
+
+<!-- ##### SECTION Short_Description ##### -->
+How templates are represented in memory
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a set of structures that represent a template in memory.  It also
+describes functions to help create and interpret these structures.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT lglTemplate ##### -->
+<para>
+This is the main structure of a libglabels template.  A template represents a single sheet
+of peel-off labels or cards.
+</para>
+
+@brand: Brand name of label or card.  E.g. "Avery."
+@part: Part name or number of label or card.  E.g. "8160."
+@description: A description of the template.  E.g. "Mailing labels."
+@paper_id: A paper ID.  E.g. "A4" or "US-Letter."
+@page_width: Page width in points.  Used only if paper_id is "Other."
+@page_height: Page height in points.  Used only if paper_id is "Other."
+@aliases: A list of alternate names for this template.  Often a single template can be used for
+multiple products.
+@category_ids: A list of category IDs that this template belongs to.
+@frames: A list of (#lglTemplateFrame *) structures.  GLabels currently only supports one frame
+per template -- future versions may support multiple frames per template.
+
+<!-- ##### STRUCT lglTemplateAlias ##### -->
+<para>
+This structure defines an alias for the parent template structure.  An alias is used for
+different products that can use the same template.
+</para>
+
+@brand: Brand name of label or card.  E.g. "Avery."
+@part: Part name or number of label or card.  E.g. "8160."
+
+<!-- ##### ENUM lglTemplateFrameShape ##### -->
+<para>
+This enumeration defines frame types that are supported by libglabels
+</para>
+
+@LGL_TEMPLATE_FRAME_SHAPE_RECT: A rectangular frame.  (May have rounded corners.)
+@LGL_TEMPLATE_FRAME_SHAPE_ROUND: A round frame.
+@LGL_TEMPLATE_FRAME_SHAPE_CD: A CD or DVD frame.  (Includes credit-card style CDs.)
+
+<!-- ##### UNION lglTemplateFrame ##### -->
+<para>
+A union of all possible frame structures.  The type of structure is indicated by the shape
+member, which overlays the first field of all other member structures.
+</para>
+
+
+<!-- ##### STRUCT lglTemplateFrameAll ##### -->
+<para>
+This structure is composed of a set of fields common to all frame structures.  All frame types
+can be cast to this structure.
+</para>
+
+@shape: The shape of the frame.
+@id: Reserved for future use.  Should always be zero.
+@layouts: A list of (#lglTemplateLayout *) structures.  Typically a frame will have a single
+layout, representing a simple grid of labels or cards.  If the layout of labels or cards is
+more complex, multiple (#lglTemplateLayout *) structures may be needed.
+@markups: A list of (#lglTemplateMarkup *) structures, which represent non-printing markup lines.
+
+<!-- ##### STRUCT lglTemplateFrameRect ##### -->
+<para>
+This structure defines the frame for a rectangular label or card.
+</para>
+
+@shape: Common field.  Always #LGL_TEMPLATE_FRAME_SHAPE_RECT for #lglTemplateFrameRect.
+@id: Common field.  See #lglTemplateFrameAll.
+@layouts:  Common field.  See #lglTemplateFrameAll.
+@markups:  Common field.  See #lglTemplateFrameAll.
+@w: Width of label or card in points.
+@h: Height of label or card in points.
+@r: Radius of corners in points.
+@x_waste: Amount of horizontal over-print to allow in points.
+@y_waste: Amount of vertical over-print to allow in points.
+
+<!-- ##### STRUCT lglTemplateFrameRound ##### -->
+<para>
+This structure defines the frame for a round label or card.
+</para>
+
+@shape: Common field.  Always #LGL_TEMPLATE_FRAME_SHAPE_ROUND for #lglTemplateFrameRound.
+@id: Common field.  See #lglTemplateFrameAll.
+@layouts: Common field.  See #lglTemplateFrameAll.
+@markups: Common field.  See #lglTemplateFrameAll.
+@r: Radius of label or card in points.
+@waste: Amount of over-print to allow in points.
+
+<!-- ##### STRUCT lglTemplateFrameCD ##### -->
+<para>
+This structure defines the frame for a CD or DVD label.  This structure also supports
+credit-card CD labels.
+</para>
+
+@shape: Common field.  Always #LGL_TEMPLATE_FRAME_SHAPE_CD for #lglTemplateFrameCD.
+@id: Common field.  See #lglTemplateFrameAll.
+@layouts: Common field.  See #lglTemplateFrameAll.
+@markups: Common field.  See #lglTemplateFrameAll.
+@r1: Outer radius of label in points.
+@r2: Radius of center hole in points.
+@w: Clip width in points.  Used for credit-card CD labels.  This field is ignored if zero.
+@h: Clip height in points.  Used for credit-card CD labels.  This field is ignored if zero.
+@waste: Amount of over-print to allow in points.
+
+<!-- ##### STRUCT lglTemplateLayout ##### -->
+<para>
+This structure defines a simple grid layout of labels or cards.
+</para>
+
+@nx: Number of labels or cards across in the grid (horizontal).
+@ny: Number of labels or cards down in the grid (vertical).
+@x0: Distance (in points) from the left edge of page to the left edge of the left column of
+cards or labels in the layout.
+@y0: Distance (in points) from the top edge of page to the top edge of the top row of
+cards or labels in the layout.
+@dx: Horizontal pitch of grid in points.  This is the distance from left edge to left edge
+(not the gap between labels or cards).
+@dy: Vertical pitch of grid in points.  This is the distance from top edge to top edge
+(not the gap between labels or cards).
+
+<!-- ##### ENUM lglTemplateMarkupType ##### -->
+<para>
+This enumeration defines markup types that are supported by libglabels
+</para>
+
+@LGL_TEMPLATE_MARKUP_MARGIN: A margin line around perimeter of label or card.
+@LGL_TEMPLATE_MARKUP_LINE: A simple line segment.
+@LGL_TEMPLATE_MARKUP_CIRCLE: A circle.
+@LGL_TEMPLATE_MARKUP_RECT: A rectangle.  Possibly with rounded corners.
+
+<!-- ##### UNION lglTemplateMarkup ##### -->
+<para>
+A union of all possible markup structures.  The type of structure is indicated by the type
+member, which overlays the first field of all other member structures.
+</para>
+
+
+<!-- ##### STRUCT lglTemplateMarkupMargin ##### -->
+<para>
+This structure defines a simple margin markup around the perimeter of a label or card.
+</para>
+
+@type: Common field.  Always #LGL_TEMPLATE_MARKUP_MARGIN for #lglTemplateMarkupMargin.
+@size: Distance of margin from edge of label or card.
+
+<!-- ##### STRUCT lglTemplateMarkupLine ##### -->
+<para>
+This structure defines a simple line segment markup.
+</para>
+
+@type: Common field.  Always #LGL_TEMPLATE_MARKUP_LINE for #lglTemplateMarkupLine.
+@x1: Distance (in points) of first endpoint from left edge of label or card.
+@y1: Distance (in points) of first endpoint from top edge of label or card.
+@x2: Distance (in points) of second endpoint from left edge of label or card.
+@y2: Distance (in points) of second endpoint from top edge of label or card.
+
+<!-- ##### STRUCT lglTemplateMarkupCircle ##### -->
+<para>
+This structure defines a simple circle markup.
+</para>
+
+@type: Common field.  Always #LGL_TEMPLATE_MARKUP_CIRCLE for #lglTemplateMarkupCircle.
+@x0: Distance (in points) of vertex from left edge of label or card.
+@y0: Distance (in points) of vertex from top edge of label or card.
+@r: Radius of circle in points.
+
+<!-- ##### STRUCT lglTemplateMarkupRect ##### -->
+<para>
+This structure defines a simple rectangle markup.  The rectangle can have rounded corners.
+</para>
+
+@type: Common field.  Always #LGL_TEMPLATE_MARKUP_RECT for #lglTemplateMarkupRect.
+@x1: Distance (in points) of left edge of markup from left edge of label or card.
+@y1: Distance (in points) of top edge of markup from top edge of label or card.
+@w: Width of rectangle in points.
+@h: Height of rectangle in points.
+@r: Radius of corners in points.  Should be zero for sharp corners.
+
+<!-- ##### STRUCT lglTemplateOrigin ##### -->
+<para>
+This structure represents the cartesian coordinates of the origin of a label or card on the page.
+The orign is the upper left corner of the extent of the label or card.  These coordinates are
+relative to the upper left corner of the page.
+</para>
+
+@x: Distance in points from top edge of page.
+@y: Distance in points from left edge of page.
+
+<!-- ##### FUNCTION lgl_template_new ##### -->
+<para>
+
+</para>
+
+@brand: 
+@part: 
+@description: 
+@paper_id: 
+@page_width: 
+@page_height: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_dup ##### -->
+<para>
+
+</para>
+
+@orig_template: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_free ##### -->
+<para>
+
+</para>
+
+@template: 
+
+
+<!-- ##### FUNCTION lgl_template_add_category ##### -->
+<para>
+
+</para>
+
+@template: 
+@category_id: 
+
+
+<!-- ##### FUNCTION lgl_template_add_frame ##### -->
+<para>
+
+</para>
+
+@template: 
+@frame: 
+
+
+<!-- ##### FUNCTION lgl_template_add_alias ##### -->
+<para>
+
+</para>
+
+@template: 
+@alias: 
+
+
+<!-- ##### FUNCTION lgl_template_get_name ##### -->
+<para>
+
+</para>
+
+@template: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_do_templates_match ##### -->
+<para>
+
+</para>
+
+@template1: 
+@template2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_does_brand_match ##### -->
+<para>
+
+</para>
+
+@template: 
+@brand: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_does_page_size_match ##### -->
+<para>
+
+</para>
+
+@template: 
+@paper_id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_does_category_match ##### -->
+<para>
+
+</para>
+
+@template: 
+@category_id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_alias_new ##### -->
+<para>
+
+</para>
+
+@brand: 
+@part: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_alias_dup ##### -->
+<para>
+
+</para>
+
+@orig_alias: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_alias_free ##### -->
+<para>
+
+</para>
+
+@alias: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_rect_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@w: 
+@h: 
+@r: 
+@x_waste: 
+@y_waste: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_round_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@r: 
+@waste: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_cd_new ##### -->
+<para>
+
+</para>
+
+@id: 
+@r1: 
+@r2: 
+@w: 
+@h: 
+@waste: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_dup ##### -->
+<para>
+
+</para>
+
+@orig_frame: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_free ##### -->
+<para>
+
+</para>
+
+@frame: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_add_layout ##### -->
+<para>
+
+</para>
+
+@frame: 
+@layout: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_add_markup ##### -->
+<para>
+
+</para>
+
+@frame: 
+@markup: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_get_size ##### -->
+<para>
+
+</para>
+
+@frame: 
+@w: 
+@h: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_get_n_labels ##### -->
+<para>
+
+</para>
+
+@frame: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_frame_get_origins ##### -->
+<para>
+
+</para>
+
+@frame: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_layout_new ##### -->
+<para>
+
+</para>
+
+@nx: 
+@ny: 
+@x0: 
+@y0: 
+@dx: 
+@dy: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_layout_dup ##### -->
+<para>
+
+</para>
+
+@orig_layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_layout_free ##### -->
+<para>
+
+</para>
+
+@layout: 
+
+
+<!-- ##### FUNCTION lgl_template_markup_margin_new ##### -->
+<para>
+
+</para>
+
+@size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_markup_line_new ##### -->
+<para>
+
+</para>
+
+@x1: 
+@y1: 
+@x2: 
+@y2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_markup_circle_new ##### -->
+<para>
+
+</para>
+
+@x0: 
+@y0: 
+@r: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_markup_rect_new ##### -->
+<para>
+
+</para>
+
+@x1: 
+@y1: 
+@w: 
+@h: 
+@r: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_markup_dup ##### -->
+<para>
+
+</para>
+
+@orig_markup: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_template_markup_free ##### -->
+<para>
+
+</para>
+
+@markup: 
+
+
diff --git a/docs/libglabels/tmpl/xml-category.sgml b/docs/libglabels/tmpl/xml-category.sgml
new file mode 100644 (file)
index 0000000..f22b59e
--- /dev/null
@@ -0,0 +1,47 @@
+<!-- ##### SECTION Title ##### -->
+XML Category Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+Functions to parse glabels XML category definition files
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a number of functions for parsing glabels
+XML category definition files.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION lgl_xml_category_read_categories_from_file ##### -->
+<para>
+
+</para>
+
+@utf8_filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_category_parse_categories_doc ##### -->
+<para>
+
+</para>
+
+@categories_doc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_category_parse_category_node ##### -->
+<para>
+
+</para>
+
+@category_node: 
+@Returns: 
+
+
diff --git a/docs/libglabels/tmpl/xml-paper.sgml b/docs/libglabels/tmpl/xml-paper.sgml
new file mode 100644 (file)
index 0000000..0909d2c
--- /dev/null
@@ -0,0 +1,47 @@
+<!-- ##### SECTION Title ##### -->
+XML Paper Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+Functions to parse glabels XML paper definition files
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a number of functions for parsing glabels
+XML paper definition files.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION lgl_xml_paper_read_papers_from_file ##### -->
+<para>
+
+</para>
+
+@utf8_filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_paper_parse_papers_doc ##### -->
+<para>
+
+</para>
+
+@papers_doc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_paper_parse_paper_node ##### -->
+<para>
+
+</para>
+
+@paper_node: 
+@Returns: 
+
+
diff --git a/docs/libglabels/tmpl/xml-template.sgml b/docs/libglabels/tmpl/xml-template.sgml
new file mode 100644 (file)
index 0000000..071a08a
--- /dev/null
@@ -0,0 +1,78 @@
+<!-- ##### SECTION Title ##### -->
+XML Template Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+Functions to create and parse glabels XML template nodes and files
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a number of functions for creating and parsing
+glabels XML template nodes and files.  Template nodes are used in both
+template files and document files.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION lgl_xml_template_read_templates_from_file ##### -->
+<para>
+
+</para>
+
+@utf8_filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_template_parse_templates_doc ##### -->
+<para>
+
+</para>
+
+@templates_doc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_template_parse_template_node ##### -->
+<para>
+
+</para>
+
+@template_node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_template_write_templates_to_file ##### -->
+<para>
+
+</para>
+
+@templates: 
+@utf8_filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_template_write_template_to_file ##### -->
+<para>
+
+</para>
+
+@template: 
+@utf8_filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_template_create_template_node ##### -->
+<para>
+
+</para>
+
+@template: 
+@root: 
+@ns: 
+
+
diff --git a/docs/libglabels/tmpl/xml.sgml b/docs/libglabels/tmpl/xml.sgml
new file mode 100644 (file)
index 0000000..e080337
--- /dev/null
@@ -0,0 +1,194 @@
+<!-- ##### SECTION Title ##### -->
+XML Helper Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+Functions to help format and parse glabels XML properties
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a number of "helper" functions for formatting and
+parsing various types of properties for tags in glabels XML file formats.
+</para>
+<para>
+These functions are basically wrappers to functions from libxml2.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO LGL_XML_NAME_SPACE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION lgl_xml_get_prop_string ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_get_prop_i18n_string ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_get_prop_double ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_get_prop_boolean ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_get_prop_int ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_get_prop_uint ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_get_prop_length ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@default_val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_set_prop_string ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+
+<!-- ##### FUNCTION lgl_xml_set_prop_double ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+
+<!-- ##### FUNCTION lgl_xml_set_prop_boolean ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+
+<!-- ##### FUNCTION lgl_xml_set_prop_int ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+
+<!-- ##### FUNCTION lgl_xml_set_prop_uint_hex ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+
+<!-- ##### FUNCTION lgl_xml_set_prop_length ##### -->
+<para>
+
+</para>
+
+@node: 
+@property: 
+@val: 
+
+
+<!-- ##### FUNCTION lgl_xml_is_node ##### -->
+<para>
+
+</para>
+
+@node: 
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_get_node_content ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lgl_xml_set_default_units ##### -->
+<para>
+
+</para>
+
+@units: 
+
+
diff --git a/docs/libglabels/xml/api-index-deprecated.xml b/docs/libglabels/xml/api-index-deprecated.xml
new file mode 100644 (file)
index 0000000..3041b73
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE indexdiv PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<indexdiv>
+</indexdiv>
diff --git a/docs/libglabels/xml/api-index-full.xml b/docs/libglabels/xml/api-index-full.xml
new file mode 100644 (file)
index 0000000..23d767e
--- /dev/null
@@ -0,0 +1,130 @@
+<?xml version="1.0"?>
+<!DOCTYPE indexdiv PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<indexdiv>
+<indexdiv><title>L</title>
+<indexentry><primaryie linkends="lglCategory"><link linkend="lglCategory">lglCategory</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglDbRegStatus"><link linkend="lglDbRegStatus">lglDbRegStatus</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglPaper"><link linkend="lglPaper">lglPaper</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplate"><link linkend="lglTemplate">lglTemplate</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateAlias"><link linkend="lglTemplateAlias">lglTemplateAlias</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateFrame"><link linkend="lglTemplateFrame">lglTemplateFrame</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateFrameAll"><link linkend="lglTemplateFrameAll">lglTemplateFrameAll</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateFrameCD"><link linkend="lglTemplateFrameCD">lglTemplateFrameCD</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateFrameRect"><link linkend="lglTemplateFrameRect">lglTemplateFrameRect</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateFrameRound"><link linkend="lglTemplateFrameRound">lglTemplateFrameRound</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateFrameShape"><link linkend="lglTemplateFrameShape">lglTemplateFrameShape</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateLayout"><link linkend="lglTemplateLayout">lglTemplateLayout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateMarkup"><link linkend="lglTemplateMarkup">lglTemplateMarkup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateMarkupCircle"><link linkend="lglTemplateMarkupCircle">lglTemplateMarkupCircle</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateMarkupLine"><link linkend="lglTemplateMarkupLine">lglTemplateMarkupLine</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateMarkupMargin"><link linkend="lglTemplateMarkupMargin">lglTemplateMarkupMargin</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateMarkupRect"><link linkend="lglTemplateMarkupRect">lglTemplateMarkupRect</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateMarkupType"><link linkend="lglTemplateMarkupType">lglTemplateMarkupType</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglTemplateOrigin"><link linkend="lglTemplateOrigin">lglTemplateOrigin</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lglUnitsType"><link linkend="lglUnitsType">lglUnitsType</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-category-dup"><link linkend="lgl-category-dup">lgl_category_dup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-category-free"><link linkend="lgl-category-free">lgl_category_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-category-new"><link linkend="lgl-category-new">lgl_category_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-does-template-exist"><link linkend="lgl-db-does-template-exist">lgl_db_does_template_exist</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-does-template-name-exist"><link linkend="lgl-db-does-template-name-exist">lgl_db_does_template_name_exist</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-free-brand-list"><link linkend="lgl-db-free-brand-list">lgl_db_free_brand_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-free-category-id-list"><link linkend="lgl-db-free-category-id-list">lgl_db_free_category_id_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-free-category-name-list"><link linkend="lgl-db-free-category-name-list">lgl_db_free_category_name_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-free-paper-id-list"><link linkend="lgl-db-free-paper-id-list">lgl_db_free_paper_id_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-free-paper-name-list"><link linkend="lgl-db-free-paper-name-list">lgl_db_free_paper_name_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-free-template-name-list"><link linkend="lgl-db-free-template-name-list">lgl_db_free_template_name_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-get-brand-list"><link linkend="lgl-db-get-brand-list">lgl_db_get_brand_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-get-category-id-list"><link linkend="lgl-db-get-category-id-list">lgl_db_get_category_id_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-get-category-name-list"><link linkend="lgl-db-get-category-name-list">lgl_db_get_category_name_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-get-paper-id-list"><link linkend="lgl-db-get-paper-id-list">lgl_db_get_paper_id_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-get-paper-name-list"><link linkend="lgl-db-get-paper-name-list">lgl_db_get_paper_name_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-get-template-name-list-all"><link linkend="lgl-db-get-template-name-list-all">lgl_db_get_template_name_list_all</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-get-template-name-list-unique"><link linkend="lgl-db-get-template-name-list-unique">lgl_db_get_template_name_list_unique</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-init"><link linkend="lgl-db-init">lgl_db_init</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-is-category-id-known"><link linkend="lgl-db-is-category-id-known">lgl_db_is_category_id_known</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-is-paper-id-known"><link linkend="lgl-db-is-paper-id-known">lgl_db_is_paper_id_known</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-is-paper-id-other"><link linkend="lgl-db-is-paper-id-other">lgl_db_is_paper_id_other</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-lookup-category-from-id"><link linkend="lgl-db-lookup-category-from-id">lgl_db_lookup_category_from_id</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-lookup-category-from-name"><link linkend="lgl-db-lookup-category-from-name">lgl_db_lookup_category_from_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-lookup-category-id-from-name"><link linkend="lgl-db-lookup-category-id-from-name">lgl_db_lookup_category_id_from_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-lookup-category-name-from-id"><link linkend="lgl-db-lookup-category-name-from-id">lgl_db_lookup_category_name_from_id</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-lookup-paper-from-id"><link linkend="lgl-db-lookup-paper-from-id">lgl_db_lookup_paper_from_id</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-lookup-paper-from-name"><link linkend="lgl-db-lookup-paper-from-name">lgl_db_lookup_paper_from_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-lookup-paper-id-from-name"><link linkend="lgl-db-lookup-paper-id-from-name">lgl_db_lookup_paper_id_from_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-lookup-paper-name-from-id"><link linkend="lgl-db-lookup-paper-name-from-id">lgl_db_lookup_paper_name_from_id</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-lookup-template-from-name"><link linkend="lgl-db-lookup-template-from-name">lgl_db_lookup_template_from_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-print-aliases"><link linkend="lgl-db-print-aliases">lgl_db_print_aliases</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-print-known-categories"><link linkend="lgl-db-print-known-categories">lgl_db_print_known_categories</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-print-known-papers"><link linkend="lgl-db-print-known-papers">lgl_db_print_known_papers</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-print-known-templates"><link linkend="lgl-db-print-known-templates">lgl_db_print_known_templates</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-db-register-template"><link linkend="lgl-db-register-template">lgl_db_register_template</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-paper-dup"><link linkend="lgl-paper-dup">lgl_paper_dup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-paper-free"><link linkend="lgl-paper-free">lgl_paper_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-paper-new"><link linkend="lgl-paper-new">lgl_paper_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-str-utf8-casecmp"><link linkend="lgl-str-utf8-casecmp">lgl_str_utf8_casecmp</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-add-alias"><link linkend="lgl-template-add-alias">lgl_template_add_alias</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-add-category"><link linkend="lgl-template-add-category">lgl_template_add_category</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-add-frame"><link linkend="lgl-template-add-frame">lgl_template_add_frame</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-alias-dup"><link linkend="lgl-template-alias-dup">lgl_template_alias_dup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-alias-free"><link linkend="lgl-template-alias-free">lgl_template_alias_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-alias-new"><link linkend="lgl-template-alias-new">lgl_template_alias_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-does-brand-match"><link linkend="lgl-template-does-brand-match">lgl_template_does_brand_match</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-does-category-match"><link linkend="lgl-template-does-category-match">lgl_template_does_category_match</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-does-page-size-match"><link linkend="lgl-template-does-page-size-match">lgl_template_does_page_size_match</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-do-templates-match"><link linkend="lgl-template-do-templates-match">lgl_template_do_templates_match</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-dup"><link linkend="lgl-template-dup">lgl_template_dup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-add-layout"><link linkend="lgl-template-frame-add-layout">lgl_template_frame_add_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-add-markup"><link linkend="lgl-template-frame-add-markup">lgl_template_frame_add_markup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-cd-new"><link linkend="lgl-template-frame-cd-new">lgl_template_frame_cd_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-dup"><link linkend="lgl-template-frame-dup">lgl_template_frame_dup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-free"><link linkend="lgl-template-frame-free">lgl_template_frame_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-get-n-labels"><link linkend="lgl-template-frame-get-n-labels">lgl_template_frame_get_n_labels</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-get-origins"><link linkend="lgl-template-frame-get-origins">lgl_template_frame_get_origins</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-get-size"><link linkend="lgl-template-frame-get-size">lgl_template_frame_get_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-rect-new"><link linkend="lgl-template-frame-rect-new">lgl_template_frame_rect_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-frame-round-new"><link linkend="lgl-template-frame-round-new">lgl_template_frame_round_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-free"><link linkend="lgl-template-free">lgl_template_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-get-name"><link linkend="lgl-template-get-name">lgl_template_get_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-layout-dup"><link linkend="lgl-template-layout-dup">lgl_template_layout_dup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-layout-free"><link linkend="lgl-template-layout-free">lgl_template_layout_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-layout-new"><link linkend="lgl-template-layout-new">lgl_template_layout_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-markup-circle-new"><link linkend="lgl-template-markup-circle-new">lgl_template_markup_circle_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-markup-dup"><link linkend="lgl-template-markup-dup">lgl_template_markup_dup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-markup-free"><link linkend="lgl-template-markup-free">lgl_template_markup_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-markup-line-new"><link linkend="lgl-template-markup-line-new">lgl_template_markup_line_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-markup-margin-new"><link linkend="lgl-template-markup-margin-new">lgl_template_markup_margin_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-markup-rect-new"><link linkend="lgl-template-markup-rect-new">lgl_template_markup_rect_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-template-new"><link linkend="lgl-template-new">lgl_template_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-category-parse-categories-doc"><link linkend="lgl-xml-category-parse-categories-doc">lgl_xml_category_parse_categories_doc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-category-parse-category-node"><link linkend="lgl-xml-category-parse-category-node">lgl_xml_category_parse_category_node</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-category-read-categories-from-file"><link linkend="lgl-xml-category-read-categories-from-file">lgl_xml_category_read_categories_from_file</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-get-node-content"><link linkend="lgl-xml-get-node-content">lgl_xml_get_node_content</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-get-prop-boolean"><link linkend="lgl-xml-get-prop-boolean">lgl_xml_get_prop_boolean</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-get-prop-double"><link linkend="lgl-xml-get-prop-double">lgl_xml_get_prop_double</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-get-prop-i18n-string"><link linkend="lgl-xml-get-prop-i18n-string">lgl_xml_get_prop_i18n_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-get-prop-int"><link linkend="lgl-xml-get-prop-int">lgl_xml_get_prop_int</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-get-prop-length"><link linkend="lgl-xml-get-prop-length">lgl_xml_get_prop_length</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-get-prop-string"><link linkend="lgl-xml-get-prop-string">lgl_xml_get_prop_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-get-prop-uint"><link linkend="lgl-xml-get-prop-uint">lgl_xml_get_prop_uint</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-is-node"><link linkend="lgl-xml-is-node">lgl_xml_is_node</link></primaryie></indexentry>
+<indexentry><primaryie linkends="LGL-XML-NAME-SPACE--CAPS"><link linkend="LGL-XML-NAME-SPACE--CAPS">LGL_XML_NAME_SPACE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-paper-parse-papers-doc"><link linkend="lgl-xml-paper-parse-papers-doc">lgl_xml_paper_parse_papers_doc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-paper-parse-paper-node"><link linkend="lgl-xml-paper-parse-paper-node">lgl_xml_paper_parse_paper_node</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-paper-read-papers-from-file"><link linkend="lgl-xml-paper-read-papers-from-file">lgl_xml_paper_read_papers_from_file</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-set-default-units"><link linkend="lgl-xml-set-default-units">lgl_xml_set_default_units</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-set-prop-boolean"><link linkend="lgl-xml-set-prop-boolean">lgl_xml_set_prop_boolean</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-set-prop-double"><link linkend="lgl-xml-set-prop-double">lgl_xml_set_prop_double</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-set-prop-int"><link linkend="lgl-xml-set-prop-int">lgl_xml_set_prop_int</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-set-prop-length"><link linkend="lgl-xml-set-prop-length">lgl_xml_set_prop_length</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-set-prop-string"><link linkend="lgl-xml-set-prop-string">lgl_xml_set_prop_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-set-prop-uint-hex"><link linkend="lgl-xml-set-prop-uint-hex">lgl_xml_set_prop_uint_hex</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-template-create-template-node"><link linkend="lgl-xml-template-create-template-node">lgl_xml_template_create_template_node</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-template-parse-templates-doc"><link linkend="lgl-xml-template-parse-templates-doc">lgl_xml_template_parse_templates_doc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-template-parse-template-node"><link linkend="lgl-xml-template-parse-template-node">lgl_xml_template_parse_template_node</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-template-read-templates-from-file"><link linkend="lgl-xml-template-read-templates-from-file">lgl_xml_template_read_templates_from_file</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-template-write-templates-to-file"><link linkend="lgl-xml-template-write-templates-to-file">lgl_xml_template_write_templates_to_file</link></primaryie></indexentry>
+<indexentry><primaryie linkends="lgl-xml-template-write-template-to-file"><link linkend="lgl-xml-template-write-template-to-file">lgl_xml_template_write_template_to_file</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/libglabels/xml/category.xml b/docs/libglabels/xml/category.xml
new file mode 100644 (file)
index 0000000..0ec3249
--- /dev/null
@@ -0,0 +1,121 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-category">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-category.top_of_page">The lglCategory Structure</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>The lglCategory Structure</refname>
+<refpurpose>Template category definitions</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-category.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/category.h&gt;
+
+                    <link linkend="lglCategory">lglCategory</link>;
+<link linkend="lglCategory">lglCategory</link> *       <link linkend="lgl-category-new">lgl_category_new</link>                    (<link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gchar">gchar</link> *name);
+<link linkend="lglCategory">lglCategory</link> *       <link linkend="lgl-category-dup">lgl_category_dup</link>                    (const <link linkend="lglCategory">lglCategory</link> *orig);
+<link linkend="void">void</link>                <link linkend="lgl-category-free">lgl_category_free</link>                   (<link linkend="lglCategory">lglCategory</link> *category);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-category.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section describes a structure for representing a category of stationary and related
+functions.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-category.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="lglCategory" role="struct">
+<title>lglCategory</title>
+<indexterm zone="lglCategory"><primary sortas="lglCategory">lglCategory</primary></indexterm><programlisting>typedef struct {
+       gchar               *id;     /* Unique ID of category */
+       gchar               *name;   /* Localized name of category */
+} lglCategory;
+</programlisting>
+<para>
+This structure defines a category.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>id</structfield>;</term>
+<listitem><simpara>Category ID.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>name</structfield>;</term>
+<listitem><simpara>Localized category name.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-category-new" role="function">
+<title>lgl_category_new ()</title>
+<indexterm zone="lgl-category-new"><primary sortas="lgl_category_new">lgl_category_new</primary></indexterm><programlisting><link linkend="lglCategory">lglCategory</link> *       lgl_category_new                    (<link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Allocates and constructs a new <link linkend="lglCategory"><type>lglCategory</type></link> structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara>     Id of category definition. (E.g. label, card, etc.)  Should be
+         unique.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara>   Localized name of category.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to a newly allocated <link linkend="lglCategory"><type>lglCategory</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-category-dup" role="function">
+<title>lgl_category_dup ()</title>
+<indexterm zone="lgl-category-dup"><primary sortas="lgl_category_dup">lgl_category_dup</primary></indexterm><programlisting><link linkend="lglCategory">lglCategory</link> *       lgl_category_dup                    (const <link linkend="lglCategory">lglCategory</link> *orig);</programlisting>
+<para>
+Duplicates an existing <link linkend="lglCategory"><type>lglCategory</type></link> structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig</parameter>&#160;:</term>
+<listitem><simpara>  <link linkend="lglCategory"><type>lglCategory</type></link> structure to be duplicated.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to a newly allocated <link linkend="lglCategory"><type>lglCategory</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-category-free" role="function">
+<title>lgl_category_free ()</title>
+<indexterm zone="lgl-category-free"><primary sortas="lgl_category_free">lgl_category_free</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_category_free                   (<link linkend="lglCategory">lglCategory</link> *category);</programlisting>
+<para>
+Free all memory associated with an existing <link linkend="lglCategory"><type>lglCategory</type></link> structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>category</parameter>&#160;:</term>
+<listitem><simpara>  pointer to <link linkend="lglCategory"><type>lglCategory</type></link> structure to be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/libglabels/xml/db.xml b/docs/libglabels/xml/db.xml
new file mode 100644 (file)
index 0000000..eff5a29
--- /dev/null
@@ -0,0 +1,587 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-db">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-db.top_of_page">Database</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Database</refname>
+<refpurpose>Database of pre-defined templates</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-db.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/db.h&gt;
+
+enum                <link linkend="lglDbRegStatus">lglDbRegStatus</link>;
+
+<link linkend="void">void</link>                <link linkend="lgl-db-init">lgl_db_init</link>                         (void);
+
+<link linkend="GList">GList</link> *             <link linkend="lgl-db-get-paper-id-list">lgl_db_get_paper_id_list</link>            (void);
+<link linkend="void">void</link>                <link linkend="lgl-db-free-paper-id-list">lgl_db_free_paper_id_list</link>           (<link linkend="GList">GList</link> *ids);
+<link linkend="GList">GList</link> *             <link linkend="lgl-db-get-paper-name-list">lgl_db_get_paper_name_list</link>          (void);
+<link linkend="void">void</link>                <link linkend="lgl-db-free-paper-name-list">lgl_db_free_paper_name_list</link>         (<link linkend="GList">GList</link> *names);
+<link linkend="lglPaper">lglPaper</link> *          <link linkend="lgl-db-lookup-paper-from-id">lgl_db_lookup_paper_from_id</link>         (const <link linkend="gchar">gchar</link> *id);
+<link linkend="lglPaper">lglPaper</link> *          <link linkend="lgl-db-lookup-paper-from-name">lgl_db_lookup_paper_from_name</link>       (const <link linkend="gchar">gchar</link> *name);
+<link linkend="gchar">gchar</link> *             <link linkend="lgl-db-lookup-paper-id-from-name">lgl_db_lookup_paper_id_from_name</link>    (const <link linkend="gchar">gchar</link> *name);
+<link linkend="gchar">gchar</link> *             <link linkend="lgl-db-lookup-paper-name-from-id">lgl_db_lookup_paper_name_from_id</link>    (const <link linkend="gchar">gchar</link> *id);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-db-is-paper-id-known">lgl_db_is_paper_id_known</link>            (const <link linkend="gchar">gchar</link> *id);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-db-is-paper-id-other">lgl_db_is_paper_id_other</link>            (const <link linkend="gchar">gchar</link> *id);
+
+<link linkend="GList">GList</link> *             <link linkend="lgl-db-get-category-id-list">lgl_db_get_category_id_list</link>         (void);
+<link linkend="void">void</link>                <link linkend="lgl-db-free-category-id-list">lgl_db_free_category_id_list</link>        (<link linkend="GList">GList</link> *ids);
+<link linkend="GList">GList</link> *             <link linkend="lgl-db-get-category-name-list">lgl_db_get_category_name_list</link>       (void);
+<link linkend="void">void</link>                <link linkend="lgl-db-free-category-name-list">lgl_db_free_category_name_list</link>      (<link linkend="GList">GList</link> *names);
+<link linkend="lglCategory">lglCategory</link> *       <link linkend="lgl-db-lookup-category-from-id">lgl_db_lookup_category_from_id</link>      (const <link linkend="gchar">gchar</link> *id);
+<link linkend="lglCategory">lglCategory</link> *       <link linkend="lgl-db-lookup-category-from-name">lgl_db_lookup_category_from_name</link>    (const <link linkend="gchar">gchar</link> *name);
+<link linkend="gchar">gchar</link> *             <link linkend="lgl-db-lookup-category-id-from-name">lgl_db_lookup_category_id_from_name</link> (const <link linkend="gchar">gchar</link> *name);
+<link linkend="gchar">gchar</link> *             <link linkend="lgl-db-lookup-category-name-from-id">lgl_db_lookup_category_name_from_id</link> (const <link linkend="gchar">gchar</link> *id);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-db-is-category-id-known">lgl_db_is_category_id_known</link>         (const <link linkend="gchar">gchar</link> *id);
+
+<link linkend="GList">GList</link> *             <link linkend="lgl-db-get-brand-list">lgl_db_get_brand_list</link>               (const <link linkend="gchar">gchar</link> *paper_id,
+                                                         const <link linkend="gchar">gchar</link> *category_id);
+<link linkend="void">void</link>                <link linkend="lgl-db-free-brand-list">lgl_db_free_brand_list</link>              (<link linkend="GList">GList</link> *brands);
+
+<link linkend="lglDbRegStatus">lglDbRegStatus</link>      <link linkend="lgl-db-register-template">lgl_db_register_template</link>            (const <link linkend="lglTemplate">lglTemplate</link> *template);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-db-does-template-exist">lgl_db_does_template_exist</link>          (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *part);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-db-does-template-name-exist">lgl_db_does_template_name_exist</link>     (const <link linkend="gchar">gchar</link> *name);
+<link linkend="GList">GList</link> *             <link linkend="lgl-db-get-template-name-list-unique">lgl_db_get_template_name_list_unique</link>
+                                                        (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *paper_id,
+                                                         const <link linkend="gchar">gchar</link> *category_id);
+<link linkend="GList">GList</link> *             <link linkend="lgl-db-get-template-name-list-all">lgl_db_get_template_name_list_all</link>   (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *paper_id,
+                                                         const <link linkend="gchar">gchar</link> *category_id);
+<link linkend="void">void</link>                <link linkend="lgl-db-free-template-name-list">lgl_db_free_template_name_list</link>      (<link linkend="GList">GList</link> *names);
+<link linkend="lglTemplate">lglTemplate</link> *       <link linkend="lgl-db-lookup-template-from-name">lgl_db_lookup_template_from_name</link>    (const <link linkend="gchar">gchar</link> *name);
+
+<link linkend="void">void</link>                <link linkend="lgl-db-print-known-papers">lgl_db_print_known_papers</link>           (void);
+<link linkend="void">void</link>                <link linkend="lgl-db-print-known-categories">lgl_db_print_known_categories</link>       (void);
+<link linkend="void">void</link>                <link linkend="lgl-db-print-known-templates">lgl_db_print_known_templates</link>        (void);
+<link linkend="void">void</link>                <link linkend="lgl-db-print-aliases">lgl_db_print_aliases</link>                (const <link linkend="lglTemplate">lglTemplate</link> *template);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-db.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section describes a set of functions to locate and add templates and related information in
+the LibGlabels template database.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-db.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="lglDbRegStatus" role="enum">
+<title>enum lglDbRegStatus</title>
+<indexterm zone="lglDbRegStatus"><primary sortas="lglDbRegStatus">lglDbRegStatus</primary></indexterm><programlisting>typedef enum
+{
+        LGL_DB_REG_OK                =  0,
+        LGL_DB_REG_BAD_PAPER_ID      = -1,
+        LGL_DB_REG_BRAND_PART_EXISTS = -2,
+        LGL_DB_REG_FILE_WRITE_ERROR  = -3
+} lglDbRegStatus;
+</programlisting>
+<para>
+This enumeration defines a set of possible return values for <link linkend="lgl-db-register-template"><function>lgl_db_register_template()</function></link>.
+</para><variablelist role="enum">
+<varlistentry id="LGL-DB-REG-OK--CAPS" role="constant">
+<term><literal>LGL_DB_REG_OK</literal></term>
+<listitem><simpara>Registration successful.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-DB-REG-BAD-PAPER-ID--CAPS" role="constant">
+<term><literal>LGL_DB_REG_BAD_PAPER_ID</literal></term>
+<listitem><simpara> Registration failed because paper id is unknown.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-DB-REG-BRAND-PART-EXISTS--CAPS" role="constant">
+<term><literal>LGL_DB_REG_BRAND_PART_EXISTS</literal></term>
+<listitem><simpara>Registration failed because template with same brand and part name/number already exists.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-DB-REG-FILE-WRITE-ERROR--CAPS" role="constant">
+<term><literal>LGL_DB_REG_FILE_WRITE_ERROR</literal></term>
+<listitem><simpara>Registration failed because an error while writing to disk.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-init" role="function">
+<title>lgl_db_init ()</title>
+<indexterm zone="lgl-db-init"><primary sortas="lgl_db_init">lgl_db_init</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_init                         (void);</programlisting>
+<para>
+Initialize all libglabels subsystems.  It is not necessary for an application to call
+<link linkend="lgl-db-init"><function>lgl_db_init()</function></link>, because libglabels will initialize on demand.  An application programmer may
+choose to call <link linkend="lgl-db-init"><function>lgl_db_init()</function></link> at startup to minimize the impact of the first libglabels call
+on GUI response time.
+</para>
+<para>
+This function initializes its paper definitions, category definitions, and its template
+database.. It will search both system and user template directories to locate
+this data.</para>
+<para>
+</para></refsect2>
+<refsect2 id="lgl-db-get-paper-id-list" role="function">
+<title>lgl_db_get_paper_id_list ()</title>
+<indexterm zone="lgl-db-get-paper-id-list"><primary sortas="lgl_db_get_paper_id_list">lgl_db_get_paper_id_list</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_db_get_paper_id_list            (void);</programlisting>
+<para>
+Get a list of all paper ids known to libglabels.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of paper ids.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-free-paper-id-list" role="function">
+<title>lgl_db_free_paper_id_list ()</title>
+<indexterm zone="lgl-db-free-paper-id-list"><primary sortas="lgl_db_free_paper_id_list">lgl_db_free_paper_id_list</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_free_paper_id_list           (<link linkend="GList">GList</link> *ids);</programlisting>
+<para>
+Free up all storage associated with an id list obtained with
+<link linkend="lgl-db-get-paper-id-list"><function>lgl_db_get_paper_id_list()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ids</parameter>&#160;:</term>
+<listitem><simpara> List of id strings to be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-get-paper-name-list" role="function">
+<title>lgl_db_get_paper_name_list ()</title>
+<indexterm zone="lgl-db-get-paper-name-list"><primary sortas="lgl_db_get_paper_name_list">lgl_db_get_paper_name_list</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_db_get_paper_name_list          (void);</programlisting>
+<para>
+Get a list of all localized paper names known to libglabels.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of localized paper names.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-free-paper-name-list" role="function">
+<title>lgl_db_free_paper_name_list ()</title>
+<indexterm zone="lgl-db-free-paper-name-list"><primary sortas="lgl_db_free_paper_name_list">lgl_db_free_paper_name_list</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_free_paper_name_list         (<link linkend="GList">GList</link> *names);</programlisting>
+<para>
+Free up all storage associated with a name list obtained with
+<link linkend="lgl-db-get-paper-name-list"><function>lgl_db_get_paper_name_list()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>names</parameter>&#160;:</term>
+<listitem><simpara> List of localized paper name strings to be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-lookup-paper-from-id" role="function">
+<title>lgl_db_lookup_paper_from_id ()</title>
+<indexterm zone="lgl-db-lookup-paper-from-id"><primary sortas="lgl_db_lookup_paper_from_id">lgl_db_lookup_paper_from_id</primary></indexterm><programlisting><link linkend="lglPaper">lglPaper</link> *          lgl_db_lookup_paper_from_id         (const <link linkend="gchar">gchar</link> *id);</programlisting>
+<para>
+Lookup paper definition from id string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara> paper id string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated <link linkend="lglPaper"><type>lglPaper</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-lookup-paper-from-name" role="function">
+<title>lgl_db_lookup_paper_from_name ()</title>
+<indexterm zone="lgl-db-lookup-paper-from-name"><primary sortas="lgl_db_lookup_paper_from_name">lgl_db_lookup_paper_from_name</primary></indexterm><programlisting><link linkend="lglPaper">lglPaper</link> *          lgl_db_lookup_paper_from_name       (const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Lookup paper definition from localized paper name string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara> localized paper name string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated <link linkend="lglPaper"><type>lglPaper</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-lookup-paper-id-from-name" role="function">
+<title>lgl_db_lookup_paper_id_from_name ()</title>
+<indexterm zone="lgl-db-lookup-paper-id-from-name"><primary sortas="lgl_db_lookup_paper_id_from_name">lgl_db_lookup_paper_id_from_name</primary></indexterm><programlisting><link linkend="gchar">gchar</link> *             lgl_db_lookup_paper_id_from_name    (const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Lookup paper name string from localized paper name string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara> localized paper name stringp
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated id string.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-lookup-paper-name-from-id" role="function">
+<title>lgl_db_lookup_paper_name_from_id ()</title>
+<indexterm zone="lgl-db-lookup-paper-name-from-id"><primary sortas="lgl_db_lookup_paper_name_from_id">lgl_db_lookup_paper_name_from_id</primary></indexterm><programlisting><link linkend="gchar">gchar</link> *             lgl_db_lookup_paper_name_from_id    (const <link linkend="gchar">gchar</link> *id);</programlisting>
+<para>
+Lookup localized paper name string from paper id string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara> paper id string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated localized paper name string.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-is-paper-id-known" role="function">
+<title>lgl_db_is_paper_id_known ()</title>
+<indexterm zone="lgl-db-is-paper-id-known"><primary sortas="lgl_db_is_paper_id_known">lgl_db_is_paper_id_known</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_db_is_paper_id_known            (const <link linkend="gchar">gchar</link> *id);</programlisting>
+<para>
+Determine if given paper id is known to libglabels.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara> paper id to test
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> TRUE if id is known, otherwise FALSE.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-is-paper-id-other" role="function">
+<title>lgl_db_is_paper_id_other ()</title>
+<indexterm zone="lgl-db-is-paper-id-other"><primary sortas="lgl_db_is_paper_id_other">lgl_db_is_paper_id_other</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_db_is_paper_id_other            (const <link linkend="gchar">gchar</link> *id);</programlisting>
+<para>
+Determine if given paper id is the special id "Other."</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara> paper id to test
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> TRUE if id is "Other", otherwise FALSE.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-get-category-id-list" role="function">
+<title>lgl_db_get_category_id_list ()</title>
+<indexterm zone="lgl-db-get-category-id-list"><primary sortas="lgl_db_get_category_id_list">lgl_db_get_category_id_list</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_db_get_category_id_list         (void);</programlisting>
+<para>
+Get a list of all category ids known to libglabels.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of category ids.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-free-category-id-list" role="function">
+<title>lgl_db_free_category_id_list ()</title>
+<indexterm zone="lgl-db-free-category-id-list"><primary sortas="lgl_db_free_category_id_list">lgl_db_free_category_id_list</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_free_category_id_list        (<link linkend="GList">GList</link> *ids);</programlisting>
+<para>
+Free up all storage associated with an id list obtained with
+<link linkend="lgl-db-get-category-id-list"><function>lgl_db_get_category_id_list()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ids</parameter>&#160;:</term>
+<listitem><simpara> List of id strings to be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-get-category-name-list" role="function">
+<title>lgl_db_get_category_name_list ()</title>
+<indexterm zone="lgl-db-get-category-name-list"><primary sortas="lgl_db_get_category_name_list">lgl_db_get_category_name_list</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_db_get_category_name_list       (void);</programlisting>
+<para>
+Get a list of all localized category names known to libglabels.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of localized category names.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-free-category-name-list" role="function">
+<title>lgl_db_free_category_name_list ()</title>
+<indexterm zone="lgl-db-free-category-name-list"><primary sortas="lgl_db_free_category_name_list">lgl_db_free_category_name_list</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_free_category_name_list      (<link linkend="GList">GList</link> *names);</programlisting>
+<para>
+Free up all storage associated with a name list obtained with
+<link linkend="lgl-db-get-category-name-list"><function>lgl_db_get_category_name_list()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>names</parameter>&#160;:</term>
+<listitem><simpara> List of localized category name strings to be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-lookup-category-from-id" role="function">
+<title>lgl_db_lookup_category_from_id ()</title>
+<indexterm zone="lgl-db-lookup-category-from-id"><primary sortas="lgl_db_lookup_category_from_id">lgl_db_lookup_category_from_id</primary></indexterm><programlisting><link linkend="lglCategory">lglCategory</link> *       lgl_db_lookup_category_from_id      (const <link linkend="gchar">gchar</link> *id);</programlisting>
+<para>
+Lookup category definition from id string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara> category id string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated <link linkend="lglCategory"><type>lglCategory</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-lookup-category-from-name" role="function">
+<title>lgl_db_lookup_category_from_name ()</title>
+<indexterm zone="lgl-db-lookup-category-from-name"><primary sortas="lgl_db_lookup_category_from_name">lgl_db_lookup_category_from_name</primary></indexterm><programlisting><link linkend="lglCategory">lglCategory</link> *       lgl_db_lookup_category_from_name    (const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Lookup category definition from localized category name string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara> localized category name string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated <link linkend="lglCategory"><type>lglCategory</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-lookup-category-id-from-name" role="function">
+<title>lgl_db_lookup_category_id_from_name ()</title>
+<indexterm zone="lgl-db-lookup-category-id-from-name"><primary sortas="lgl_db_lookup_category_id_from_name">lgl_db_lookup_category_id_from_name</primary></indexterm><programlisting><link linkend="gchar">gchar</link> *             lgl_db_lookup_category_id_from_name (const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Lookup category name string from localized category name string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara> localized category name stringp
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated id string.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-lookup-category-name-from-id" role="function">
+<title>lgl_db_lookup_category_name_from_id ()</title>
+<indexterm zone="lgl-db-lookup-category-name-from-id"><primary sortas="lgl_db_lookup_category_name_from_id">lgl_db_lookup_category_name_from_id</primary></indexterm><programlisting><link linkend="gchar">gchar</link> *             lgl_db_lookup_category_name_from_id (const <link linkend="gchar">gchar</link> *id);</programlisting>
+<para>
+Lookup localized category name string from category id string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara> category id string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated localized category name string.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-is-category-id-known" role="function">
+<title>lgl_db_is_category_id_known ()</title>
+<indexterm zone="lgl-db-is-category-id-known"><primary sortas="lgl_db_is_category_id_known">lgl_db_is_category_id_known</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_db_is_category_id_known         (const <link linkend="gchar">gchar</link> *id);</programlisting>
+<para>
+Determine if given category id is known to libglabels.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara> category id to test
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> TRUE if id is known, otherwise FALSE.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-get-brand-list" role="function">
+<title>lgl_db_get_brand_list ()</title>
+<indexterm zone="lgl-db-get-brand-list"><primary sortas="lgl_db_get_brand_list">lgl_db_get_brand_list</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_db_get_brand_list               (const <link linkend="gchar">gchar</link> *paper_id,
+                                                         const <link linkend="gchar">gchar</link> *category_id);</programlisting>
+<para>
+Get a list of all valid brands of templates in the template database.
+Results can be filtered by page size and/or template category.  A list of valid page
+sizes can be obtained using <link linkend="lgl-db-get-paper-id-list"><function>lgl_db_get_paper_id_list()</function></link>.  A list of valid template
+categories can be obtained using <link linkend="lgl-db-get-category-id-list"><function>lgl_db_get_category_id_list()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>paper_id</parameter>&#160;:</term>
+<listitem><simpara> If non NULL, limit results to given page size.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>category_id</parameter>&#160;:</term>
+<listitem><simpara> If non NULL, limit results to given template category.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of brands
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-free-brand-list" role="function">
+<title>lgl_db_free_brand_list ()</title>
+<indexterm zone="lgl-db-free-brand-list"><primary sortas="lgl_db_free_brand_list">lgl_db_free_brand_list</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_free_brand_list              (<link linkend="GList">GList</link> *brands);</programlisting>
+<para>
+Free up all storage associated with a list of template names obtained with
+<link linkend="lgl-db-get-brand-list"><function>lgl_db_get_brand_list()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>brands</parameter>&#160;:</term>
+<listitem><simpara> List of template brand strings to be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-register-template" role="function">
+<title>lgl_db_register_template ()</title>
+<indexterm zone="lgl-db-register-template"><primary sortas="lgl_db_register_template">lgl_db_register_template</primary></indexterm><programlisting><link linkend="lglDbRegStatus">lglDbRegStatus</link>      lgl_db_register_template            (const <link linkend="lglTemplate">lglTemplate</link> *template);</programlisting>
+<para>
+Register a template.  This function adds a template to the template database.
+The template will be stored in an individual XML file in the user template directory.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to a template structure to add to database.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> Status of registration attempt (<link linkend="lglDbRegStatus"><type>lglDbRegStatus</type></link>)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-does-template-exist" role="function">
+<title>lgl_db_does_template_exist ()</title>
+<indexterm zone="lgl-db-does-template-exist"><primary sortas="lgl_db_does_template_exist">lgl_db_does_template_exist</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_db_does_template_exist          (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *part);</programlisting>
+<para>
+This function tests whether a template with the given brand and part name/number exists.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>brand</parameter>&#160;:</term>
+<listitem><simpara> Brand name.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>part</parameter>&#160;:</term>
+<listitem><simpara>  Part name/number.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  TRUE if such a template exists in the database.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-does-template-name-exist" role="function">
+<title>lgl_db_does_template_name_exist ()</title>
+<indexterm zone="lgl-db-does-template-name-exist"><primary sortas="lgl_db_does_template_name_exist">lgl_db_does_template_name_exist</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_db_does_template_name_exist     (const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+This function test whether a template with the given name exists.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara> name string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> TRUE if such a template exists in the database.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-get-template-name-list-unique" role="function">
+<title>lgl_db_get_template_name_list_unique ()</title>
+<indexterm zone="lgl-db-get-template-name-list-unique"><primary sortas="lgl_db_get_template_name_list_unique">lgl_db_get_template_name_list_unique</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_db_get_template_name_list_unique
+                                                        (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *paper_id,
+                                                         const <link linkend="gchar">gchar</link> *category_id);</programlisting>
+<para>
+Get a list of valid names of unique templates in the template database.  Results
+can be filtered by page size and/or template category.  A list of valid page sizes
+can be obtained using <link linkend="lgl-db-get-paper-id-list"><function>lgl_db_get_paper_id_list()</function></link>.  A list of valid template categories
+can be obtained using <link linkend="lgl-db-get-category-id-list"><function>lgl_db_get_category_id_list()</function></link>.
+</para>
+<para>
+This function differs from <link linkend="lgl-db-get-template-name-list-all"><function>lgl_db_get_template_name_list_all()</function></link>, because it does not
+return multiple names for the same template.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>brand</parameter>&#160;:</term>
+<listitem><simpara>     If non NULL, limit results to given brand
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>paper_id</parameter>&#160;:</term>
+<listitem><simpara> If non NULL, limit results to given page size.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>category_id</parameter>&#160;:</term>
+<listitem><simpara> If non NULL, limit results to given template category.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of template names.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-get-template-name-list-all" role="function">
+<title>lgl_db_get_template_name_list_all ()</title>
+<indexterm zone="lgl-db-get-template-name-list-all"><primary sortas="lgl_db_get_template_name_list_all">lgl_db_get_template_name_list_all</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_db_get_template_name_list_all   (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *paper_id,
+                                                         const <link linkend="gchar">gchar</link> *category_id);</programlisting>
+<para>
+Get a list of all valid names and aliases of templates in the template database.
+Results can be filtered by page size and/or template category.  A list of valid page
+sizes can be obtained using <link linkend="lgl-db-get-paper-id-list"><function>lgl_db_get_paper_id_list()</function></link>.  A list of valid template
+categories can be obtained using <link linkend="lgl-db-get-category-id-list"><function>lgl_db_get_category_id_list()</function></link>.
+</para>
+<para>
+This function differs from <link linkend="lgl-db-get-template-name-list-unique"><function>lgl_db_get_template_name_list_unique()</function></link>, because it will
+return multiple names for the same template.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>brand</parameter>&#160;:</term>
+<listitem><simpara>     If non NULL, limit results to given brand
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>paper_id</parameter>&#160;:</term>
+<listitem><simpara> If non NULL, limit results to given page size.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>category_id</parameter>&#160;:</term>
+<listitem><simpara> If non NULL, limit results to given template category.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of template names and aliases.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-free-template-name-list" role="function">
+<title>lgl_db_free_template_name_list ()</title>
+<indexterm zone="lgl-db-free-template-name-list"><primary sortas="lgl_db_free_template_name_list">lgl_db_free_template_name_list</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_free_template_name_list      (<link linkend="GList">GList</link> *names);</programlisting>
+<para>
+Free up all storage associated with a list of template names obtained with
+<link linkend="lgl-db-get-template-name-list-all"><function>lgl_db_get_template_name_list_all()</function></link> or <link linkend="lgl-db-get-template-name-list-unique"><function>lgl_db_get_template_name_list_unique()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>names</parameter>&#160;:</term>
+<listitem><simpara> List of template name strings to be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-lookup-template-from-name" role="function">
+<title>lgl_db_lookup_template_from_name ()</title>
+<indexterm zone="lgl-db-lookup-template-from-name"><primary sortas="lgl_db_lookup_template_from_name">lgl_db_lookup_template_from_name</primary></indexterm><programlisting><link linkend="lglTemplate">lglTemplate</link> *       lgl_db_lookup_template_from_name    (const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Lookup template in template database from name string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara> name string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated <link linkend="lglTemplate"><type>lglTemplate</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-db-print-known-papers" role="function">
+<title>lgl_db_print_known_papers ()</title>
+<indexterm zone="lgl-db-print-known-papers"><primary sortas="lgl_db_print_known_papers">lgl_db_print_known_papers</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_print_known_papers           (void);</programlisting>
+<para>
+For debugging purposes: print a list of all paper definitions known to
+libglabels.</para>
+<para>
+</para></refsect2>
+<refsect2 id="lgl-db-print-known-categories" role="function">
+<title>lgl_db_print_known_categories ()</title>
+<indexterm zone="lgl-db-print-known-categories"><primary sortas="lgl_db_print_known_categories">lgl_db_print_known_categories</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_print_known_categories       (void);</programlisting>
+<para>
+For debugging purposes: print a list of all category definitions known to
+libglabels.</para>
+<para>
+</para></refsect2>
+<refsect2 id="lgl-db-print-known-templates" role="function">
+<title>lgl_db_print_known_templates ()</title>
+<indexterm zone="lgl-db-print-known-templates"><primary sortas="lgl_db_print_known_templates">lgl_db_print_known_templates</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_print_known_templates        (void);</programlisting>
+<para>
+Print all known templates (for debugging purposes).</para>
+<para>
+</para></refsect2>
+<refsect2 id="lgl-db-print-aliases" role="function">
+<title>lgl_db_print_aliases ()</title>
+<indexterm zone="lgl-db-print-aliases"><primary sortas="lgl_db_print_aliases">lgl_db_print_aliases</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_db_print_aliases                (const <link linkend="lglTemplate">lglTemplate</link> *template);</programlisting>
+<para>
+Print all aliases of a template (for debugging purposes).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara> template
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/libglabels/xml/enums.xml b/docs/libglabels/xml/enums.xml
new file mode 100644 (file)
index 0000000..55a9000
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-enums">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-enums.top_of_page">Enumerations</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Enumerations</refname>
+<refpurpose>Common enumerations used by libglabels</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-enums.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/enums.h&gt;
+
+enum                <link linkend="lglUnitsType">lglUnitsType</link>;
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-enums.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section defines enumerations used to interact with libglabels.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-enums.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="lglUnitsType" role="enum">
+<title>enum lglUnitsType</title>
+<indexterm zone="lglUnitsType"><primary sortas="lglUnitsType">lglUnitsType</primary></indexterm><programlisting>typedef enum {
+       LGL_UNITS_POINT, /* encoded as "pt" */
+       LGL_UNITS_INCH,  /* encoded as "in" */
+       LGL_UNITS_MM,    /* encoded as "mm" */
+       LGL_UNITS_CM,    /* encoded as "cm" */
+       LGL_UNITS_PICA,  /* encoded as "pc" */
+
+       LGL_UNITS_FIRST = LGL_UNITS_POINT,
+       LGL_UNITS_LAST  = LGL_UNITS_PICA,
+} lglUnitsType;
+</programlisting>
+<para>
+This enumeration defines a set of units of distance supported by the libglabels XML distance
+attributes.
+</para><variablelist role="enum">
+<varlistentry id="LGL-UNITS-POINT--CAPS" role="constant">
+<term><literal>LGL_UNITS_POINT</literal></term>
+<listitem><simpara>Points.  Encoded as "pt" in XML distance attributes.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-UNITS-INCH--CAPS" role="constant">
+<term><literal>LGL_UNITS_INCH</literal></term>
+<listitem><simpara>Inches.  Encoded as "in" in XML distance attributes.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-UNITS-MM--CAPS" role="constant">
+<term><literal>LGL_UNITS_MM</literal></term>
+<listitem><simpara>Millmeters.  Encoded as "mm" in XML distance attributes.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-UNITS-CM--CAPS" role="constant">
+<term><literal>LGL_UNITS_CM</literal></term>
+<listitem><simpara>Centimeters.  Encoded as "cm" in XML distance attributes.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-UNITS-PICA--CAPS" role="constant">
+<term><literal>LGL_UNITS_PICA</literal></term>
+<listitem><simpara>Picas.  Encoded as "pc" in XML distance attributes.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-UNITS-FIRST--CAPS" role="constant">
+<term><literal>LGL_UNITS_FIRST</literal></term>
+<listitem><simpara>First enumeration.  Used for generic iteration through supported units..
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-UNITS-LAST--CAPS" role="constant">
+<term><literal>LGL_UNITS_LAST</literal></term>
+<listitem><simpara>Last enumeration.  Used for generic iteration through supported units.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/libglabels/xml/paper.xml b/docs/libglabels/xml/paper.xml
new file mode 100644 (file)
index 0000000..1a1abcf
--- /dev/null
@@ -0,0 +1,154 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-paper">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-paper.top_of_page">The lglPaper Structure</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>The lglPaper Structure</refname>
+<refpurpose>Paper size definitions</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-paper.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/paper.h&gt;
+
+                    <link linkend="lglPaper">lglPaper</link>;
+<link linkend="lglPaper">lglPaper</link> *          <link linkend="lgl-paper-new">lgl_paper_new</link>                       (<link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gchar">gchar</link> *name,
+                                                         <link linkend="gdouble">gdouble</link> width,
+                                                         <link linkend="gdouble">gdouble</link> height,
+                                                         <link linkend="gchar">gchar</link> *pwg_size);
+<link linkend="lglPaper">lglPaper</link> *          <link linkend="lgl-paper-dup">lgl_paper_dup</link>                       (const <link linkend="lglPaper">lglPaper</link> *orig);
+<link linkend="void">void</link>                <link linkend="lgl-paper-free">lgl_paper_free</link>                      (<link linkend="lglPaper">lglPaper</link> *paper);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-paper.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section describes a structure for representing a paper size definition
+and related functions.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-paper.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="lglPaper" role="struct">
+<title>lglPaper</title>
+<indexterm zone="lglPaper"><primary sortas="lglPaper">lglPaper</primary></indexterm><programlisting>typedef struct {
+       gchar               *id;       /* Unique ID of paper definition */
+       gchar               *name;     /* Localized name of paper */
+       gdouble              width;    /* Width (in points) */
+       gdouble              height;   /* Height (in points) */
+       gchar               *pwg_size; /* PWG 5101.1-2002 size name */
+} lglPaper;
+</programlisting>
+<para>
+This structure defines a paper (page) size.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>id</structfield>;</term>
+<listitem><simpara>Paper size ID.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>name</structfield>;</term>
+<listitem><simpara>Localized paper size name.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>width</structfield>;</term>
+<listitem><simpara>Width of paper in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>height</structfield>;</term>
+<listitem><simpara>Height of paper in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>pwg_size</structfield>;</term>
+<listitem><simpara>PWG 5101.1-2002 size name.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-paper-new" role="function">
+<title>lgl_paper_new ()</title>
+<indexterm zone="lgl-paper-new"><primary sortas="lgl_paper_new">lgl_paper_new</primary></indexterm><programlisting><link linkend="lglPaper">lglPaper</link> *          lgl_paper_new                       (<link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gchar">gchar</link> *name,
+                                                         <link linkend="gdouble">gdouble</link> width,
+                                                         <link linkend="gdouble">gdouble</link> height,
+                                                         <link linkend="gchar">gchar</link> *pwg_size);</programlisting>
+<para>
+Allocates and constructs a new <link linkend="lglPaper"><type>lglPaper</type></link> structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara>       Id of paper definition. (E.g. US-Letter, A4, etc.)  Should be
+           unique.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara>     Localized name of paper.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>width</parameter>&#160;:</term>
+<listitem><simpara>    Width of paper in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>height</parameter>&#160;:</term>
+<listitem><simpara>   Height of paper in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>pwg_size</parameter>&#160;:</term>
+<listitem><simpara> PWG 5101.1-2002 size name.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to a newly allocated <link linkend="lglPaper"><type>lglPaper</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-paper-dup" role="function">
+<title>lgl_paper_dup ()</title>
+<indexterm zone="lgl-paper-dup"><primary sortas="lgl_paper_dup">lgl_paper_dup</primary></indexterm><programlisting><link linkend="lglPaper">lglPaper</link> *          lgl_paper_dup                       (const <link linkend="lglPaper">lglPaper</link> *orig);</programlisting>
+<para>
+Duplicates an existing <link linkend="lglPaper"><type>lglPaper</type></link> structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig</parameter>&#160;:</term>
+<listitem><simpara>  <link linkend="lglPaper"><type>lglPaper</type></link> structure to be duplicated.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to a newly allocated <link linkend="lglPaper"><type>lglPaper</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-paper-free" role="function">
+<title>lgl_paper_free ()</title>
+<indexterm zone="lgl-paper-free"><primary sortas="lgl_paper_free">lgl_paper_free</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_paper_free                      (<link linkend="lglPaper">lglPaper</link> *paper);</programlisting>
+<para>
+Free all memory associated with an existing <link linkend="lglPaper"><type>lglPaper</type></link> structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>paper</parameter>&#160;:</term>
+<listitem><simpara>  pointer to <link linkend="lglPaper"><type>lglPaper</type></link> structure to be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/libglabels/xml/str.xml b/docs/libglabels/xml/str.xml
new file mode 100644 (file)
index 0000000..7071c10
--- /dev/null
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-str">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-str.top_of_page">String Utility Functions</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>String Utility Functions</refname>
+<refpurpose>String utility functions provided by libglabels</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-str.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/str.h&gt;
+
+<link linkend="gint">gint</link>                <link linkend="lgl-str-utf8-casecmp">lgl_str_utf8_casecmp</link>                (const <link linkend="gchar">gchar</link> *s1,
+                                                         const <link linkend="gchar">gchar</link> *s2);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-str.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section defines string utility functions used by libglabels and of
+possible use to a user of libglabels.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-str.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="lgl-str-utf8-casecmp" role="function">
+<title>lgl_str_utf8_casecmp ()</title>
+<indexterm zone="lgl-str-utf8-casecmp"><primary sortas="lgl_str_utf8_casecmp">lgl_str_utf8_casecmp</primary></indexterm><programlisting><link linkend="gint">gint</link>                lgl_str_utf8_casecmp                (const <link linkend="gchar">gchar</link> *s1,
+                                                         const <link linkend="gchar">gchar</link> *s2);</programlisting>
+<para>
+Compare two UTF-8 strings, ignoring the case of characters.
+</para>
+<para>
+This function should be used only on strings that are known to be encoded
+in UTF-8 or a compatible UTF-8 subset.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>s1</parameter>&#160;:</term>
+<listitem><simpara> string to compare with s2.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>s2</parameter>&#160;:</term>
+<listitem><simpara> string to compare with s1.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> 0 if the strings match, a negative value if s1 &lt; s2,
+         or a positive value if s1 &gt; s2.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/libglabels/xml/template.xml b/docs/libglabels/xml/template.xml
new file mode 100644 (file)
index 0000000..6e81f96
--- /dev/null
@@ -0,0 +1,1391 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-template">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-template.top_of_page">The lglTemplate Structure</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>The lglTemplate Structure</refname>
+<refpurpose>How templates are represented in memory</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-template.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/template.h&gt;
+
+                    <link linkend="lglTemplate">lglTemplate</link>;
+
+                    <link linkend="lglTemplateAlias">lglTemplateAlias</link>;
+
+enum                <link linkend="lglTemplateFrameShape">lglTemplateFrameShape</link>;
+union               <link linkend="lglTemplateFrame">lglTemplateFrame</link>;
+                    <link linkend="lglTemplateFrameAll">lglTemplateFrameAll</link>;
+                    <link linkend="lglTemplateFrameRect">lglTemplateFrameRect</link>;
+                    <link linkend="lglTemplateFrameRound">lglTemplateFrameRound</link>;
+                    <link linkend="lglTemplateFrameCD">lglTemplateFrameCD</link>;
+
+                    <link linkend="lglTemplateLayout">lglTemplateLayout</link>;
+
+enum                <link linkend="lglTemplateMarkupType">lglTemplateMarkupType</link>;
+union               <link linkend="lglTemplateMarkup">lglTemplateMarkup</link>;
+                    <link linkend="lglTemplateMarkupMargin">lglTemplateMarkupMargin</link>;
+                    <link linkend="lglTemplateMarkupLine">lglTemplateMarkupLine</link>;
+                    <link linkend="lglTemplateMarkupCircle">lglTemplateMarkupCircle</link>;
+                    <link linkend="lglTemplateMarkupRect">lglTemplateMarkupRect</link>;
+
+                    <link linkend="lglTemplateOrigin">lglTemplateOrigin</link>;
+
+<link linkend="lglTemplate">lglTemplate</link> *       <link linkend="lgl-template-new">lgl_template_new</link>                    (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *part,
+                                                         const <link linkend="gchar">gchar</link> *description,
+                                                         const <link linkend="gchar">gchar</link> *paper_id,
+                                                         <link linkend="gdouble">gdouble</link> page_width,
+                                                         <link linkend="gdouble">gdouble</link> page_height);
+<link linkend="lglTemplate">lglTemplate</link> *       <link linkend="lgl-template-dup">lgl_template_dup</link>                    (const <link linkend="lglTemplate">lglTemplate</link> *orig_template);
+<link linkend="void">void</link>                <link linkend="lgl-template-free">lgl_template_free</link>                   (<link linkend="lglTemplate">lglTemplate</link> *template);
+<link linkend="void">void</link>                <link linkend="lgl-template-add-category">lgl_template_add_category</link>           (<link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *category_id);
+<link linkend="void">void</link>                <link linkend="lgl-template-add-frame">lgl_template_add_frame</link>              (<link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         <link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame);
+<link linkend="void">void</link>                <link linkend="lgl-template-add-alias">lgl_template_add_alias</link>              (<link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         <link linkend="lglTemplateAlias">lglTemplateAlias</link> *alias);
+
+<link linkend="gchar">gchar</link> *             <link linkend="lgl-template-get-name">lgl_template_get_name</link>               (const <link linkend="lglTemplate">lglTemplate</link> *template);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-template-do-templates-match">lgl_template_do_templates_match</link>     (const <link linkend="lglTemplate">lglTemplate</link> *template1,
+                                                         const <link linkend="lglTemplate">lglTemplate</link> *template2);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-template-does-brand-match">lgl_template_does_brand_match</link>       (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *brand);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-template-does-page-size-match">lgl_template_does_page_size_match</link>   (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *paper_id);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-template-does-category-match">lgl_template_does_category_match</link>    (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *category_id);
+
+<link linkend="lglTemplateAlias">lglTemplateAlias</link> *  <link linkend="lgl-template-alias-new">lgl_template_alias_new</link>              (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *part);
+<link linkend="lglTemplateAlias">lglTemplateAlias</link> *  <link linkend="lgl-template-alias-dup">lgl_template_alias_dup</link>              (const <link linkend="lglTemplateAlias">lglTemplateAlias</link> *orig_alias);
+<link linkend="void">void</link>                <link linkend="lgl-template-alias-free">lgl_template_alias_free</link>             (<link linkend="lglTemplateAlias">lglTemplateAlias</link> *alias);
+
+<link linkend="lglTemplateFrame">lglTemplateFrame</link> *  <link linkend="lgl-template-frame-rect-new">lgl_template_frame_rect_new</link>         (const <link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gdouble">gdouble</link> w,
+                                                         <link linkend="gdouble">gdouble</link> h,
+                                                         <link linkend="gdouble">gdouble</link> r,
+                                                         <link linkend="gdouble">gdouble</link> x_waste,
+                                                         <link linkend="gdouble">gdouble</link> y_waste);
+<link linkend="lglTemplateFrame">lglTemplateFrame</link> *  <link linkend="lgl-template-frame-round-new">lgl_template_frame_round_new</link>        (const <link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gdouble">gdouble</link> r,
+                                                         <link linkend="gdouble">gdouble</link> waste);
+<link linkend="lglTemplateFrame">lglTemplateFrame</link> *  <link linkend="lgl-template-frame-cd-new">lgl_template_frame_cd_new</link>           (const <link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gdouble">gdouble</link> r1,
+                                                         <link linkend="gdouble">gdouble</link> r2,
+                                                         <link linkend="gdouble">gdouble</link> w,
+                                                         <link linkend="gdouble">gdouble</link> h,
+                                                         <link linkend="gdouble">gdouble</link> waste);
+<link linkend="lglTemplateFrame">lglTemplateFrame</link> *  <link linkend="lgl-template-frame-dup">lgl_template_frame_dup</link>              (const <link linkend="lglTemplateFrame">lglTemplateFrame</link> *orig_frame);
+<link linkend="void">void</link>                <link linkend="lgl-template-frame-free">lgl_template_frame_free</link>             (<link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame);
+<link linkend="void">void</link>                <link linkend="lgl-template-frame-add-layout">lgl_template_frame_add_layout</link>       (<link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame,
+                                                         <link linkend="lglTemplateLayout">lglTemplateLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="lgl-template-frame-add-markup">lgl_template_frame_add_markup</link>       (<link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame,
+                                                         <link linkend="lglTemplateMarkup">lglTemplateMarkup</link> *markup);
+
+<link linkend="void">void</link>                <link linkend="lgl-template-frame-get-size">lgl_template_frame_get_size</link>         (const <link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame,
+                                                         <link linkend="gdouble">gdouble</link> *w,
+                                                         <link linkend="gdouble">gdouble</link> *h);
+<link linkend="gint">gint</link>                <link linkend="lgl-template-frame-get-n-labels">lgl_template_frame_get_n_labels</link>     (const <link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame);
+<link linkend="lglTemplateOrigin">lglTemplateOrigin</link> * <link linkend="lgl-template-frame-get-origins">lgl_template_frame_get_origins</link>      (const <link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame);
+
+<link linkend="lglTemplateLayout">lglTemplateLayout</link> * <link linkend="lgl-template-layout-new">lgl_template_layout_new</link>             (<link linkend="gint">gint</link> nx,
+                                                         <link linkend="gint">gint</link> ny,
+                                                         <link linkend="gdouble">gdouble</link> x0,
+                                                         <link linkend="gdouble">gdouble</link> y0,
+                                                         <link linkend="gdouble">gdouble</link> dx,
+                                                         <link linkend="gdouble">gdouble</link> dy);
+<link linkend="lglTemplateLayout">lglTemplateLayout</link> * <link linkend="lgl-template-layout-dup">lgl_template_layout_dup</link>             (const <link linkend="lglTemplateLayout">lglTemplateLayout</link> *orig_layout);
+<link linkend="void">void</link>                <link linkend="lgl-template-layout-free">lgl_template_layout_free</link>            (<link linkend="lglTemplateLayout">lglTemplateLayout</link> *layout);
+
+<link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * <link linkend="lgl-template-markup-margin-new">lgl_template_markup_margin_new</link>      (<link linkend="gdouble">gdouble</link> size);
+<link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * <link linkend="lgl-template-markup-line-new">lgl_template_markup_line_new</link>        (<link linkend="gdouble">gdouble</link> x1,
+                                                         <link linkend="gdouble">gdouble</link> y1,
+                                                         <link linkend="gdouble">gdouble</link> x2,
+                                                         <link linkend="gdouble">gdouble</link> y2);
+<link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * <link linkend="lgl-template-markup-circle-new">lgl_template_markup_circle_new</link>      (<link linkend="gdouble">gdouble</link> x0,
+                                                         <link linkend="gdouble">gdouble</link> y0,
+                                                         <link linkend="gdouble">gdouble</link> r);
+<link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * <link linkend="lgl-template-markup-rect-new">lgl_template_markup_rect_new</link>        (<link linkend="gdouble">gdouble</link> x1,
+                                                         <link linkend="gdouble">gdouble</link> y1,
+                                                         <link linkend="gdouble">gdouble</link> w,
+                                                         <link linkend="gdouble">gdouble</link> h,
+                                                         <link linkend="gdouble">gdouble</link> r);
+<link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * <link linkend="lgl-template-markup-dup">lgl_template_markup_dup</link>             (const <link linkend="lglTemplateMarkup">lglTemplateMarkup</link> *orig_markup);
+<link linkend="void">void</link>                <link linkend="lgl-template-markup-free">lgl_template_markup_free</link>            (<link linkend="lglTemplateMarkup">lglTemplateMarkup</link> *markup);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-template.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section describes a set of structures that represent a template in memory.  It also
+describes functions to help create and interpret these structures.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-template.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="lglTemplate" role="struct">
+<title>lglTemplate</title>
+<indexterm zone="lglTemplate"><primary sortas="lglTemplate">lglTemplate</primary></indexterm><programlisting>typedef struct {
+       gchar               *brand;
+        gchar               *part;
+       gchar               *description;
+       gchar               *paper_id;
+       gdouble              page_width;
+       gdouble              page_height;
+
+       /* List of (lglTemplateAlias *) aliase structures. */
+       GList               *aliases;
+
+        /* List of (gchar *) category ids. */
+       GList               *category_ids;
+
+       /* List of (lglTemplateFrame *) label frame structures.
+        * Currently glabels only supports a single label frame per
+        * template. */
+       GList               *frames;
+} lglTemplate;
+</programlisting>
+<para>
+This is the main structure of a libglabels template.  A template represents a single sheet
+of peel-off labels or cards.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>brand</structfield>;</term>
+<listitem><simpara>Brand name of label or card.  E.g. "Avery."
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>part</structfield>;</term>
+<listitem><simpara>Part name or number of label or card.  E.g. "8160."
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>description</structfield>;</term>
+<listitem><simpara>A description of the template.  E.g. "Mailing labels."
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>paper_id</structfield>;</term>
+<listitem><simpara>A paper ID.  E.g. "A4" or "US-Letter."
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>page_width</structfield>;</term>
+<listitem><simpara>Page width in points.  Used only if paper_id is "Other."
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>page_height</structfield>;</term>
+<listitem><simpara>Page height in points.  Used only if paper_id is "Other."
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>aliases</structfield>;</term>
+<listitem><simpara>A list of alternate names for this template.  Often a single template can be used for
+multiple products.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>category_ids</structfield>;</term>
+<listitem><simpara>A list of category IDs that this template belongs to.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>frames</structfield>;</term>
+<listitem><simpara>A list of (<link linkend="lglTemplateFrame"><type>lglTemplateFrame</type></link> *) structures.  GLabels currently only supports one frame
+per template -- future versions may support multiple frames per template.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateAlias" role="struct">
+<title>lglTemplateAlias</title>
+<indexterm zone="lglTemplateAlias"><primary sortas="lglTemplateAlias">lglTemplateAlias</primary></indexterm><programlisting>typedef struct {
+       gchar               *brand;
+        gchar               *part;
+} lglTemplateAlias;
+</programlisting>
+<para>
+This structure defines an alias for the parent template structure.  An alias is used for
+different products that can use the same template.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>brand</structfield>;</term>
+<listitem><simpara>Brand name of label or card.  E.g. "Avery."
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>part</structfield>;</term>
+<listitem><simpara>Part name or number of label or card.  E.g. "8160."
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateFrameShape" role="enum">
+<title>enum lglTemplateFrameShape</title>
+<indexterm zone="lglTemplateFrameShape"><primary sortas="lglTemplateFrameShape">lglTemplateFrameShape</primary></indexterm><programlisting>typedef enum {
+       LGL_TEMPLATE_FRAME_SHAPE_RECT,
+       LGL_TEMPLATE_FRAME_SHAPE_ROUND,
+       LGL_TEMPLATE_FRAME_SHAPE_CD,
+} lglTemplateFrameShape;
+</programlisting>
+<para>
+This enumeration defines frame types that are supported by libglabels
+</para><variablelist role="enum">
+<varlistentry id="LGL-TEMPLATE-FRAME-SHAPE-RECT--CAPS" role="constant">
+<term><literal>LGL_TEMPLATE_FRAME_SHAPE_RECT</literal></term>
+<listitem><simpara>A rectangular frame.  (May have rounded corners.)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-TEMPLATE-FRAME-SHAPE-ROUND--CAPS" role="constant">
+<term><literal>LGL_TEMPLATE_FRAME_SHAPE_ROUND</literal></term>
+<listitem><simpara>A round frame.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-TEMPLATE-FRAME-SHAPE-CD--CAPS" role="constant">
+<term><literal>LGL_TEMPLATE_FRAME_SHAPE_CD</literal></term>
+<listitem><simpara>A CD or DVD frame.  (Includes credit-card style CDs.)
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateFrame" role="union">
+<title>union lglTemplateFrame</title>
+<indexterm zone="lglTemplateFrame"><primary sortas="lglTemplateFrame">lglTemplateFrame</primary></indexterm><programlisting>union lglTemplateFrame{
+
+       lglTemplateFrameShape shape;
+
+       lglTemplateFrameAll   all;
+       lglTemplateFrameRect  rect;
+       lglTemplateFrameRound round;
+       lglTemplateFrameCD    cd;
+};
+</programlisting>
+<para>
+A union of all possible frame structures.  The type of structure is indicated by the shape
+member, which overlays the first field of all other member structures.
+</para></refsect2>
+<refsect2 id="lglTemplateFrameAll" role="struct">
+<title>lglTemplateFrameAll</title>
+<indexterm zone="lglTemplateFrameAll"><primary sortas="lglTemplateFrameAll">lglTemplateFrameAll</primary></indexterm><programlisting>typedef struct {
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+} lglTemplateFrameAll;
+</programlisting>
+<para>
+This structure is composed of a set of fields common to all frame structures.  All frame types
+can be cast to this structure.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="lglTemplateFrameShape">lglTemplateFrameShape</link>&#160;<structfield>shape</structfield>;</term>
+<listitem><simpara>The shape of the frame.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>id</structfield>;</term>
+<listitem><simpara>Reserved for future use.  Should always be zero.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>layouts</structfield>;</term>
+<listitem><simpara>A list of (<link linkend="lglTemplateLayout"><type>lglTemplateLayout</type></link> *) structures.  Typically a frame will have a single
+layout, representing a simple grid of labels or cards.  If the layout of labels or cards is
+more complex, multiple (<link linkend="lglTemplateLayout"><type>lglTemplateLayout</type></link> *) structures may be needed.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>markups</structfield>;</term>
+<listitem><simpara>A list of (<link linkend="lglTemplateMarkup"><type>lglTemplateMarkup</type></link> *) structures, which represent non-printing markup lines.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateFrameRect" role="struct">
+<title>lglTemplateFrameRect</title>
+<indexterm zone="lglTemplateFrameRect"><primary sortas="lglTemplateFrameRect">lglTemplateFrameRect</primary></indexterm><programlisting>typedef struct {
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;    /* Always LGL_TEMPLATE_FRAME_SHAPE_RECT. */
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+
+        gdouble               w;        /* Width */
+        gdouble               h;        /* Height */
+        gdouble               r;        /* Corner radius */
+        gdouble               x_waste;  /* Amount of horiz overprint allowed. */
+        gdouble               y_waste;  /* Amount of vert overprint allowed. */
+} lglTemplateFrameRect;
+</programlisting>
+<para>
+This structure defines the frame for a rectangular label or card.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="lglTemplateFrameShape">lglTemplateFrameShape</link>&#160;<structfield>shape</structfield>;</term>
+<listitem><simpara>Common field.  Always <link linkend="LGL-TEMPLATE-FRAME-SHAPE-RECT--CAPS"><type>LGL_TEMPLATE_FRAME_SHAPE_RECT</type></link> for <link linkend="lglTemplateFrameRect"><type>lglTemplateFrameRect</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>id</structfield>;</term>
+<listitem><simpara>Common field.  See <link linkend="lglTemplateFrameAll"><type>lglTemplateFrameAll</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>layouts</structfield>;</term>
+<listitem><simpara> Common field.  See <link linkend="lglTemplateFrameAll"><type>lglTemplateFrameAll</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>markups</structfield>;</term>
+<listitem><simpara> Common field.  See <link linkend="lglTemplateFrameAll"><type>lglTemplateFrameAll</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>w</structfield>;</term>
+<listitem><simpara>Width of label or card in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>h</structfield>;</term>
+<listitem><simpara>Height of label or card in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>r</structfield>;</term>
+<listitem><simpara>Radius of corners in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>x_waste</structfield>;</term>
+<listitem><simpara>Amount of horizontal over-print to allow in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>y_waste</structfield>;</term>
+<listitem><simpara>Amount of vertical over-print to allow in points.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateFrameRound" role="struct">
+<title>lglTemplateFrameRound</title>
+<indexterm zone="lglTemplateFrameRound"><primary sortas="lglTemplateFrameRound">lglTemplateFrameRound</primary></indexterm><programlisting>typedef struct {
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;    /* Always LGL_TEMPLATE_FRAME_SHAPE_ROUND. */
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+
+        gdouble               r;      /* Radius */
+        gdouble               waste;  /* Amount of overprint allowed. */
+} lglTemplateFrameRound;
+</programlisting>
+<para>
+This structure defines the frame for a round label or card.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="lglTemplateFrameShape">lglTemplateFrameShape</link>&#160;<structfield>shape</structfield>;</term>
+<listitem><simpara>Common field.  Always <link linkend="LGL-TEMPLATE-FRAME-SHAPE-ROUND--CAPS"><type>LGL_TEMPLATE_FRAME_SHAPE_ROUND</type></link> for <link linkend="lglTemplateFrameRound"><type>lglTemplateFrameRound</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>id</structfield>;</term>
+<listitem><simpara>Common field.  See <link linkend="lglTemplateFrameAll"><type>lglTemplateFrameAll</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>layouts</structfield>;</term>
+<listitem><simpara>Common field.  See <link linkend="lglTemplateFrameAll"><type>lglTemplateFrameAll</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>markups</structfield>;</term>
+<listitem><simpara>Common field.  See <link linkend="lglTemplateFrameAll"><type>lglTemplateFrameAll</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>r</structfield>;</term>
+<listitem><simpara>Radius of label or card in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>waste</structfield>;</term>
+<listitem><simpara>Amount of over-print to allow in points.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateFrameCD" role="struct">
+<title>lglTemplateFrameCD</title>
+<indexterm zone="lglTemplateFrameCD"><primary sortas="lglTemplateFrameCD">lglTemplateFrameCD</primary></indexterm><programlisting>typedef struct {
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;    /* Always LGL_TEMPLATE_FRAME_SHAPE_CD. */
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+
+        gdouble               r1;     /* Outer radius */
+        gdouble               r2;     /* Inner radius (hole) */
+        gdouble               w;      /* Clip width, business card CDs */
+        gdouble               h;      /* Clip height, business card CDs */
+        gdouble               waste;  /* Amount of overprint allowed. */
+} lglTemplateFrameCD;
+</programlisting>
+<para>
+This structure defines the frame for a CD or DVD label.  This structure also supports
+credit-card CD labels.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="lglTemplateFrameShape">lglTemplateFrameShape</link>&#160;<structfield>shape</structfield>;</term>
+<listitem><simpara>Common field.  Always <link linkend="LGL-TEMPLATE-FRAME-SHAPE-CD--CAPS"><type>LGL_TEMPLATE_FRAME_SHAPE_CD</type></link> for <link linkend="lglTemplateFrameCD"><type>lglTemplateFrameCD</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gchar">gchar</link>&#160;*<structfield>id</structfield>;</term>
+<listitem><simpara>Common field.  See <link linkend="lglTemplateFrameAll"><type>lglTemplateFrameAll</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>layouts</structfield>;</term>
+<listitem><simpara>Common field.  See <link linkend="lglTemplateFrameAll"><type>lglTemplateFrameAll</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GList">GList</link>&#160;*<structfield>markups</structfield>;</term>
+<listitem><simpara>Common field.  See <link linkend="lglTemplateFrameAll"><type>lglTemplateFrameAll</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>r1</structfield>;</term>
+<listitem><simpara>Outer radius of label in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>r2</structfield>;</term>
+<listitem><simpara>Radius of center hole in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>w</structfield>;</term>
+<listitem><simpara>Clip width in points.  Used for credit-card CD labels.  This field is ignored if zero.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>h</structfield>;</term>
+<listitem><simpara>Clip height in points.  Used for credit-card CD labels.  This field is ignored if zero.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>waste</structfield>;</term>
+<listitem><simpara>Amount of over-print to allow in points.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateLayout" role="struct">
+<title>lglTemplateLayout</title>
+<indexterm zone="lglTemplateLayout"><primary sortas="lglTemplateLayout">lglTemplateLayout</primary></indexterm><programlisting>typedef struct {
+       gint                  nx;  /* Number of labels across */
+       gint                  ny;  /* Number of labels up and down */
+
+       gdouble               x0;  /* Left of grid from left edge of paper */
+       gdouble               y0;  /* Top of grid from top edge of paper */
+
+       gdouble               dx;  /* Horizontal pitch of grid */
+       gdouble               dy;  /* Vertical pitch of grid */
+} lglTemplateLayout;
+</programlisting>
+<para>
+This structure defines a simple grid layout of labels or cards.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;<structfield>nx</structfield>;</term>
+<listitem><simpara>Number of labels or cards across in the grid (horizontal).
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;<structfield>ny</structfield>;</term>
+<listitem><simpara>Number of labels or cards down in the grid (vertical).
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>x0</structfield>;</term>
+<listitem><simpara>Distance (in points) from the left edge of page to the left edge of the left column of
+cards or labels in the layout.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>y0</structfield>;</term>
+<listitem><simpara>Distance (in points) from the top edge of page to the top edge of the top row of
+cards or labels in the layout.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>dx</structfield>;</term>
+<listitem><simpara>Horizontal pitch of grid in points.  This is the distance from left edge to left edge
+(not the gap between labels or cards).
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>dy</structfield>;</term>
+<listitem><simpara>Vertical pitch of grid in points.  This is the distance from top edge to top edge
+(not the gap between labels or cards).
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateMarkupType" role="enum">
+<title>enum lglTemplateMarkupType</title>
+<indexterm zone="lglTemplateMarkupType"><primary sortas="lglTemplateMarkupType">lglTemplateMarkupType</primary></indexterm><programlisting>typedef enum {
+       LGL_TEMPLATE_MARKUP_MARGIN,
+       LGL_TEMPLATE_MARKUP_LINE,
+       LGL_TEMPLATE_MARKUP_CIRCLE,
+       LGL_TEMPLATE_MARKUP_RECT,
+} lglTemplateMarkupType;
+</programlisting>
+<para>
+This enumeration defines markup types that are supported by libglabels
+</para><variablelist role="enum">
+<varlistentry id="LGL-TEMPLATE-MARKUP-MARGIN--CAPS" role="constant">
+<term><literal>LGL_TEMPLATE_MARKUP_MARGIN</literal></term>
+<listitem><simpara>A margin line around perimeter of label or card.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-TEMPLATE-MARKUP-LINE--CAPS" role="constant">
+<term><literal>LGL_TEMPLATE_MARKUP_LINE</literal></term>
+<listitem><simpara>A simple line segment.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-TEMPLATE-MARKUP-CIRCLE--CAPS" role="constant">
+<term><literal>LGL_TEMPLATE_MARKUP_CIRCLE</literal></term>
+<listitem><simpara>A circle.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="LGL-TEMPLATE-MARKUP-RECT--CAPS" role="constant">
+<term><literal>LGL_TEMPLATE_MARKUP_RECT</literal></term>
+<listitem><simpara>A rectangle.  Possibly with rounded corners.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateMarkup" role="union">
+<title>union lglTemplateMarkup</title>
+<indexterm zone="lglTemplateMarkup"><primary sortas="lglTemplateMarkup">lglTemplateMarkup</primary></indexterm><programlisting>union lglTemplateMarkup {
+
+       lglTemplateMarkupType   type;
+
+       lglTemplateMarkupMargin margin;
+       lglTemplateMarkupLine   line;
+       lglTemplateMarkupCircle circle;
+       lglTemplateMarkupRect   rect;
+};
+</programlisting>
+<para>
+A union of all possible markup structures.  The type of structure is indicated by the type
+member, which overlays the first field of all other member structures.
+</para></refsect2>
+<refsect2 id="lglTemplateMarkupMargin" role="struct">
+<title>lglTemplateMarkupMargin</title>
+<indexterm zone="lglTemplateMarkupMargin"><primary sortas="lglTemplateMarkupMargin">lglTemplateMarkupMargin</primary></indexterm><programlisting>typedef struct {
+       lglTemplateMarkupType  type;  /* Always LGL_TEMPLATE_MARKUP_MARGIN */
+
+        gdouble                size;  /* Margin size */
+} lglTemplateMarkupMargin;
+</programlisting>
+<para>
+This structure defines a simple margin markup around the perimeter of a label or card.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="lglTemplateMarkupType">lglTemplateMarkupType</link>&#160;<structfield>type</structfield>;</term>
+<listitem><simpara>Common field.  Always <link linkend="LGL-TEMPLATE-MARKUP-MARGIN--CAPS"><type>LGL_TEMPLATE_MARKUP_MARGIN</type></link> for <link linkend="lglTemplateMarkupMargin"><type>lglTemplateMarkupMargin</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>size</structfield>;</term>
+<listitem><simpara>Distance of margin from edge of label or card.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateMarkupLine" role="struct">
+<title>lglTemplateMarkupLine</title>
+<indexterm zone="lglTemplateMarkupLine"><primary sortas="lglTemplateMarkupLine">lglTemplateMarkupLine</primary></indexterm><programlisting>typedef struct {
+       lglTemplateMarkupType  type;   /* Always LGL_TEMPLATE_MARKUP_LINE */
+
+        gdouble                x1, y1; /* 1st endpoint */
+        gdouble                x2, y2; /* 2nd endpoint */
+} lglTemplateMarkupLine;
+</programlisting>
+<para>
+This structure defines a simple line segment markup.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="lglTemplateMarkupType">lglTemplateMarkupType</link>&#160;<structfield>type</structfield>;</term>
+<listitem><simpara>Common field.  Always <link linkend="LGL-TEMPLATE-MARKUP-LINE--CAPS"><type>LGL_TEMPLATE_MARKUP_LINE</type></link> for <link linkend="lglTemplateMarkupLine"><type>lglTemplateMarkupLine</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>x1</structfield>;</term>
+<listitem><simpara>Distance (in points) of first endpoint from left edge of label or card.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>y1</structfield>;</term>
+<listitem><simpara>Distance (in points) of first endpoint from top edge of label or card.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>x2</structfield>;</term>
+<listitem><simpara>Distance (in points) of second endpoint from left edge of label or card.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>y2</structfield>;</term>
+<listitem><simpara>Distance (in points) of second endpoint from top edge of label or card.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateMarkupCircle" role="struct">
+<title>lglTemplateMarkupCircle</title>
+<indexterm zone="lglTemplateMarkupCircle"><primary sortas="lglTemplateMarkupCircle">lglTemplateMarkupCircle</primary></indexterm><programlisting>typedef struct {
+       lglTemplateMarkupType  type;   /* Always LGL_TEMPLATE_MARKUP_CIRCLE */
+
+        gdouble                x0, y0; /* Center of circle */
+        gdouble                r;      /* Radius of circle */
+} lglTemplateMarkupCircle;
+</programlisting>
+<para>
+This structure defines a simple circle markup.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="lglTemplateMarkupType">lglTemplateMarkupType</link>&#160;<structfield>type</structfield>;</term>
+<listitem><simpara>Common field.  Always <link linkend="LGL-TEMPLATE-MARKUP-CIRCLE--CAPS"><type>LGL_TEMPLATE_MARKUP_CIRCLE</type></link> for <link linkend="lglTemplateMarkupCircle"><type>lglTemplateMarkupCircle</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>x0</structfield>;</term>
+<listitem><simpara>Distance (in points) of vertex from left edge of label or card.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>y0</structfield>;</term>
+<listitem><simpara>Distance (in points) of vertex from top edge of label or card.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>r</structfield>;</term>
+<listitem><simpara>Radius of circle in points.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateMarkupRect" role="struct">
+<title>lglTemplateMarkupRect</title>
+<indexterm zone="lglTemplateMarkupRect"><primary sortas="lglTemplateMarkupRect">lglTemplateMarkupRect</primary></indexterm><programlisting>typedef struct {
+       lglTemplateMarkupType  type;   /* Always LGL_TEMPLATE_MARKUP_RECT */
+
+        gdouble                x1, y1; /* Upper left corner */
+        gdouble                w, h;   /* Width and height. */
+        gdouble                r;      /* Radius of corners. */
+} lglTemplateMarkupRect;
+</programlisting>
+<para>
+This structure defines a simple rectangle markup.  The rectangle can have rounded corners.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="lglTemplateMarkupType">lglTemplateMarkupType</link>&#160;<structfield>type</structfield>;</term>
+<listitem><simpara>Common field.  Always <link linkend="LGL-TEMPLATE-MARKUP-RECT--CAPS"><type>LGL_TEMPLATE_MARKUP_RECT</type></link> for <link linkend="lglTemplateMarkupRect"><type>lglTemplateMarkupRect</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>x1</structfield>;</term>
+<listitem><simpara>Distance (in points) of left edge of markup from left edge of label or card.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>y1</structfield>;</term>
+<listitem><simpara>Distance (in points) of top edge of markup from top edge of label or card.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>w</structfield>;</term>
+<listitem><simpara>Width of rectangle in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>h</structfield>;</term>
+<listitem><simpara>Height of rectangle in points.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>r</structfield>;</term>
+<listitem><simpara>Radius of corners in points.  Should be zero for sharp corners.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lglTemplateOrigin" role="struct">
+<title>lglTemplateOrigin</title>
+<indexterm zone="lglTemplateOrigin"><primary sortas="lglTemplateOrigin">lglTemplateOrigin</primary></indexterm><programlisting>typedef struct {
+       gdouble               x, y; /* Label origin relative to upper 
+                                    * upper left hand corner of paper */
+} lglTemplateOrigin;
+</programlisting>
+<para>
+This structure represents the cartesian coordinates of the origin of a label or card on the page.
+The orign is the upper left corner of the extent of the label or card.  These coordinates are
+relative to the upper left corner of the page.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>x</structfield>;</term>
+<listitem><simpara>Distance in points from top edge of page.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gdouble">gdouble</link>&#160;<structfield>y</structfield>;</term>
+<listitem><simpara>Distance in points from left edge of page.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-new" role="function">
+<title>lgl_template_new ()</title>
+<indexterm zone="lgl-template-new"><primary sortas="lgl_template_new">lgl_template_new</primary></indexterm><programlisting><link linkend="lglTemplate">lglTemplate</link> *       lgl_template_new                    (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *part,
+                                                         const <link linkend="gchar">gchar</link> *description,
+                                                         const <link linkend="gchar">gchar</link> *paper_id,
+                                                         <link linkend="gdouble">gdouble</link> page_width,
+                                                         <link linkend="gdouble">gdouble</link> page_height);</programlisting>
+<para>
+Create a new template structure, with the given top-level attributes.  The
+created template will have no initial aliases, categories, or frames
+associated with it.  See <link linkend="lgl-template-add-alias"><function>lgl_template_add_alias()</function></link>, <link linkend="lgl-template-add-category"><function>lgl_template_add_category()</function></link>,
+and <link linkend="lgl-template-add-frame"><function>lgl_template_add_frame()</function></link> to add these.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>brand</parameter>&#160;:</term>
+<listitem><simpara>        Template brand
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>part</parameter>&#160;:</term>
+<listitem><simpara>         Template part name/number
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>description</parameter>&#160;:</term>
+<listitem><simpara>  Template descriptions
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>paper_id</parameter>&#160;:</term>
+<listitem><simpara>     Page size id
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>page_width</parameter>&#160;:</term>
+<listitem><simpara>   Page width in points, set to zero unless paper_id="Other"
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>page_height</parameter>&#160;:</term>
+<listitem><simpara>  Page height in points, set to zero unless paper_id="Other"
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated <link linkend="lglTemplate"><type>lglTemplate</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-dup" role="function">
+<title>lgl_template_dup ()</title>
+<indexterm zone="lgl-template-dup"><primary sortas="lgl_template_dup">lgl_template_dup</primary></indexterm><programlisting><link linkend="lglTemplate">lglTemplate</link> *       lgl_template_dup                    (const <link linkend="lglTemplate">lglTemplate</link> *orig_template);</programlisting>
+<para>
+This function duplicates a template structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig_template</parameter>&#160;:</term>
+<listitem><simpara> Template to duplicate.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  a newly allocated <link linkend="lglTemplate"><type>lglTemplate</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-free" role="function">
+<title>lgl_template_free ()</title>
+<indexterm zone="lgl-template-free"><primary sortas="lgl_template_free">lgl_template_free</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_free                   (<link linkend="lglTemplate">lglTemplate</link> *template);</programlisting>
+<para>
+This function frees all memory associated with given template structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara> Template to free.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-add-category" role="function">
+<title>lgl_template_add_category ()</title>
+<indexterm zone="lgl-template-add-category"><primary sortas="lgl_template_add_category">lgl_template_add_category</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_add_category           (<link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *category_id);</programlisting>
+<para>
+This function adds the given category ID to a templates category list.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>     Pointer to template structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>category_id</parameter>&#160;:</term>
+<listitem><simpara>  Category ID string
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-add-frame" role="function">
+<title>lgl_template_add_frame ()</title>
+<indexterm zone="lgl-template-add-frame"><primary sortas="lgl_template_add_frame">lgl_template_add_frame</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_add_frame              (<link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         <link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame);</programlisting>
+<para>
+This function adds the given frame structure to the template.  Once added,
+the frame structure belongs to the given template; do not attempt to free
+it.
+</para>
+<para>
+Note: Currently glabels only supports a single frame per template.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to template structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>frame</parameter>&#160;:</term>
+<listitem><simpara>     Pointer to frame structure
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-add-alias" role="function">
+<title>lgl_template_add_alias ()</title>
+<indexterm zone="lgl-template-add-alias"><primary sortas="lgl_template_add_alias">lgl_template_add_alias</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_add_alias              (<link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         <link linkend="lglTemplateAlias">lglTemplateAlias</link> *alias);</programlisting>
+<para>
+This function adds the given alias to a templates list of aliases.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to template structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>alias</parameter>&#160;:</term>
+<listitem><simpara>     Alias string
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-get-name" role="function">
+<title>lgl_template_get_name ()</title>
+<indexterm zone="lgl-template-get-name"><primary sortas="lgl_template_get_name">lgl_template_get_name</primary></indexterm><programlisting><link linkend="gchar">gchar</link> *             lgl_template_get_name               (const <link linkend="lglTemplate">lglTemplate</link> *template);</programlisting>
+<para>
+This function returns the name of the given template.  The name is the concetenation
+of the brand and part name/number.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to template structure to test
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  A pointer to a newly allocated name string.  Should be freed with <link linkend="g-free"><function>g_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-do-templates-match" role="function">
+<title>lgl_template_do_templates_match ()</title>
+<indexterm zone="lgl-template-do-templates-match"><primary sortas="lgl_template_do_templates_match">lgl_template_do_templates_match</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_template_do_templates_match     (const <link linkend="lglTemplate">lglTemplate</link> *template1,
+                                                         const <link linkend="lglTemplate">lglTemplate</link> *template2);</programlisting>
+<para>
+This function tests if the given templates match.  This is a simple test that only tests
+the brand and part name/number. It does not test if they are actually identical.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template1</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to 1st template structure to test
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>template2</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to 2nd template structure to test
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  TRUE if the two template matche.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-does-brand-match" role="function">
+<title>lgl_template_does_brand_match ()</title>
+<indexterm zone="lgl-template-does-brand-match"><primary sortas="lgl_template_does_brand_match">lgl_template_does_brand_match</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_template_does_brand_match       (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *brand);</programlisting>
+<para>
+This function tests if the brand of the template matches the given brand.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to template structure to test
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>brand</parameter>&#160;:</term>
+<listitem><simpara>     Brand string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  TRUE if the template matches the given brand.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-does-page-size-match" role="function">
+<title>lgl_template_does_page_size_match ()</title>
+<indexterm zone="lgl-template-does-page-size-match"><primary sortas="lgl_template_does_page_size_match">lgl_template_does_page_size_match</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_template_does_page_size_match   (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *paper_id);</programlisting>
+<para>
+This function tests if the page size of the template matches the given ID.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to template structure to test
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>paper_id</parameter>&#160;:</term>
+<listitem><simpara>  Page size ID string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  TRUE if the template matches the given page size ID.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-does-category-match" role="function">
+<title>lgl_template_does_category_match ()</title>
+<indexterm zone="lgl-template-does-category-match"><primary sortas="lgl_template_does_category_match">lgl_template_does_category_match</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_template_does_category_match    (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *category_id);</programlisting>
+<para>
+This function tests if the given template belongs to the given category ID.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>     Pointer to template structure to test
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>category_id</parameter>&#160;:</term>
+<listitem><simpara>  Category ID string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  TRUE if the template matches the given category ID.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-alias-new" role="function">
+<title>lgl_template_alias_new ()</title>
+<indexterm zone="lgl-template-alias-new"><primary sortas="lgl_template_alias_new">lgl_template_alias_new</primary></indexterm><programlisting><link linkend="lglTemplateAlias">lglTemplateAlias</link> *  lgl_template_alias_new              (const <link linkend="gchar">gchar</link> *brand,
+                                                         const <link linkend="gchar">gchar</link> *part);</programlisting>
+<para>
+Create a new template alias structure, with the given brand and part number.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>brand</parameter>&#160;:</term>
+<listitem><simpara>        Alias brand
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>part</parameter>&#160;:</term>
+<listitem><simpara>         Alias part name/number
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> pointer to a newly allocated <link linkend="lglTemplateAlias"><type>lglTemplateAlias</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-alias-dup" role="function">
+<title>lgl_template_alias_dup ()</title>
+<indexterm zone="lgl-template-alias-dup"><primary sortas="lgl_template_alias_dup">lgl_template_alias_dup</primary></indexterm><programlisting><link linkend="lglTemplateAlias">lglTemplateAlias</link> *  lgl_template_alias_dup              (const <link linkend="lglTemplateAlias">lglTemplateAlias</link> *orig_alias);</programlisting>
+<para>
+This function duplicates a template alias structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig_alias</parameter>&#160;:</term>
+<listitem><simpara> Alias to duplicate.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  a newly allocated <link linkend="lglTemplateAlias"><type>lglTemplateAlias</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-alias-free" role="function">
+<title>lgl_template_alias_free ()</title>
+<indexterm zone="lgl-template-alias-free"><primary sortas="lgl_template_alias_free">lgl_template_alias_free</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_alias_free             (<link linkend="lglTemplateAlias">lglTemplateAlias</link> *alias);</programlisting>
+<para>
+This function frees all memory associated with given template alias structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>alias</parameter>&#160;:</term>
+<listitem><simpara> Alias to free.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-rect-new" role="function">
+<title>lgl_template_frame_rect_new ()</title>
+<indexterm zone="lgl-template-frame-rect-new"><primary sortas="lgl_template_frame_rect_new">lgl_template_frame_rect_new</primary></indexterm><programlisting><link linkend="lglTemplateFrame">lglTemplateFrame</link> *  lgl_template_frame_rect_new         (const <link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gdouble">gdouble</link> w,
+                                                         <link linkend="gdouble">gdouble</link> h,
+                                                         <link linkend="gdouble">gdouble</link> r,
+                                                         <link linkend="gdouble">gdouble</link> x_waste,
+                                                         <link linkend="gdouble">gdouble</link> y_waste);</programlisting>
+<para>
+This function creates a new template frame for a rectangular label or card.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara>      ID of frame.  (This should currently always be "0").
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>w</parameter>&#160;:</term>
+<listitem><simpara>       width of frame in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>h</parameter>&#160;:</term>
+<listitem><simpara>       height of frame in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>r</parameter>&#160;:</term>
+<listitem><simpara>       radius of rounded corners in points.  (Should be 0 for square corners.)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x_waste</parameter>&#160;:</term>
+<listitem><simpara> Amount of overprint to allow in the horizontal direction.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y_waste</parameter>&#160;:</term>
+<listitem><simpara> Amount of overprint to allow in the vertical direction.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> Pointer to newly allocated <link linkend="lglTemplateFrame"><type>lglTemplateFrame</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-round-new" role="function">
+<title>lgl_template_frame_round_new ()</title>
+<indexterm zone="lgl-template-frame-round-new"><primary sortas="lgl_template_frame_round_new">lgl_template_frame_round_new</primary></indexterm><programlisting><link linkend="lglTemplateFrame">lglTemplateFrame</link> *  lgl_template_frame_round_new        (const <link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gdouble">gdouble</link> r,
+                                                         <link linkend="gdouble">gdouble</link> waste);</programlisting>
+<para>
+This function creates a new template frame for a round label.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara>      ID of frame.  (This should currently always be "0").
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>r</parameter>&#160;:</term>
+<listitem><simpara>       radius of label in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>waste</parameter>&#160;:</term>
+<listitem><simpara>   Amount of overprint to allow.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> Pointer to newly allocated <link linkend="lglTemplateFrame"><type>lglTemplateFrame</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-cd-new" role="function">
+<title>lgl_template_frame_cd_new ()</title>
+<indexterm zone="lgl-template-frame-cd-new"><primary sortas="lgl_template_frame_cd_new">lgl_template_frame_cd_new</primary></indexterm><programlisting><link linkend="lglTemplateFrame">lglTemplateFrame</link> *  lgl_template_frame_cd_new           (const <link linkend="gchar">gchar</link> *id,
+                                                         <link linkend="gdouble">gdouble</link> r1,
+                                                         <link linkend="gdouble">gdouble</link> r2,
+                                                         <link linkend="gdouble">gdouble</link> w,
+                                                         <link linkend="gdouble">gdouble</link> h,
+                                                         <link linkend="gdouble">gdouble</link> waste);</programlisting>
+<para>
+This function creates a new template frame for a CD/DVD label.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara>      ID of frame.  (This should currently always be "0").
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>r1</parameter>&#160;:</term>
+<listitem><simpara>      outer radius of label in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>r2</parameter>&#160;:</term>
+<listitem><simpara>      radius of center hole in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>w</parameter>&#160;:</term>
+<listitem><simpara>       clip width of frame in points for business card CDs.  Should be 0 for no clipping.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>h</parameter>&#160;:</term>
+<listitem><simpara>       clip height of frame in points for business card CDs.  Should be 0 for no clipping.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>waste</parameter>&#160;:</term>
+<listitem><simpara>   Amount of overprint to allow.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> Pointer to newly allocated <link linkend="lglTemplateFrame"><type>lglTemplateFrame</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-dup" role="function">
+<title>lgl_template_frame_dup ()</title>
+<indexterm zone="lgl-template-frame-dup"><primary sortas="lgl_template_frame_dup">lgl_template_frame_dup</primary></indexterm><programlisting><link linkend="lglTemplateFrame">lglTemplateFrame</link> *  lgl_template_frame_dup              (const <link linkend="lglTemplateFrame">lglTemplateFrame</link> *orig_frame);</programlisting>
+<para>
+This function duplicates a template frame structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig_frame</parameter>&#160;:</term>
+<listitem><simpara> Frame to duplicate.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  a newly allocated <link linkend="lglTemplateFrame"><type>lglTemplateFrame</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-free" role="function">
+<title>lgl_template_frame_free ()</title>
+<indexterm zone="lgl-template-frame-free"><primary sortas="lgl_template_frame_free">lgl_template_frame_free</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_frame_free             (<link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame);</programlisting>
+<para>
+This function frees all memory associated with given template frame structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>frame</parameter>&#160;:</term>
+<listitem><simpara> Frame to free.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-add-layout" role="function">
+<title>lgl_template_frame_add_layout ()</title>
+<indexterm zone="lgl-template-frame-add-layout"><primary sortas="lgl_template_frame_add_layout">lgl_template_frame_add_layout</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_frame_add_layout       (<link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame,
+                                                         <link linkend="lglTemplateLayout">lglTemplateLayout</link> *layout);</programlisting>
+<para>
+This function adds a layout structure to the given template frame.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>frame</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to template frame to add layout to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> Pointer to layout structure to add to frame.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-add-markup" role="function">
+<title>lgl_template_frame_add_markup ()</title>
+<indexterm zone="lgl-template-frame-add-markup"><primary sortas="lgl_template_frame_add_markup">lgl_template_frame_add_markup</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_frame_add_markup       (<link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame,
+                                                         <link linkend="lglTemplateMarkup">lglTemplateMarkup</link> *markup);</programlisting>
+<para>
+This function adds a markup structure to the given template frame.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>frame</parameter>&#160;:</term>
+<listitem><simpara>  Pointer to template frame to add markup to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>markup</parameter>&#160;:</term>
+<listitem><simpara> Pointer to markup structure to add to frame.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-get-size" role="function">
+<title>lgl_template_frame_get_size ()</title>
+<indexterm zone="lgl-template-frame-get-size"><primary sortas="lgl_template_frame_get_size">lgl_template_frame_get_size</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_frame_get_size         (const <link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame,
+                                                         <link linkend="gdouble">gdouble</link> *w,
+                                                         <link linkend="gdouble">gdouble</link> *h);</programlisting>
+<para>
+Get size (width and height) of given <link linkend="lglTemplateFrame"><type>lglTemplateFrame</type></link> in points.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>frame</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="lglTemplateFrame"><type>lglTemplateFrame</type></link> structure to query
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>w</parameter>&#160;:</term>
+<listitem><simpara> pointer to location to receive width of frame
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>h</parameter>&#160;:</term>
+<listitem><simpara> pointer to location to receive height of frame
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-get-n-labels" role="function">
+<title>lgl_template_frame_get_n_labels ()</title>
+<indexterm zone="lgl-template-frame-get-n-labels"><primary sortas="lgl_template_frame_get_n_labels">lgl_template_frame_get_n_labels</primary></indexterm><programlisting><link linkend="gint">gint</link>                lgl_template_frame_get_n_labels     (const <link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame);</programlisting>
+<para>
+Get total number of labels per sheet corresponding to the given frame.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>frame</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="lglTemplateFrame"><type>lglTemplateFrame</type></link> structure to query
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> number of labels per sheet.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-frame-get-origins" role="function">
+<title>lgl_template_frame_get_origins ()</title>
+<indexterm zone="lgl-template-frame-get-origins"><primary sortas="lgl_template_frame_get_origins">lgl_template_frame_get_origins</primary></indexterm><programlisting><link linkend="lglTemplateOrigin">lglTemplateOrigin</link> * lgl_template_frame_get_origins      (const <link linkend="lglTemplateFrame">lglTemplateFrame</link> *frame);</programlisting>
+<para>
+Get an array of label origins for the given frame.  These origins represent the
+upper left hand corner of each label on a page corresponding to the given frame.
+The origins will be ordered geometrically left to right and then top to bottom.
+The array should be freed using <link linkend="g-free"><function>g_free()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>frame</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="lglTemplateFrame"><type>lglTemplateFrame</type></link> structure to query
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A newly allocated array of <link linkend="lglTemplateOrigin"><type>lglTemplateOrigin</type></link> structures.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-layout-new" role="function">
+<title>lgl_template_layout_new ()</title>
+<indexterm zone="lgl-template-layout-new"><primary sortas="lgl_template_layout_new">lgl_template_layout_new</primary></indexterm><programlisting><link linkend="lglTemplateLayout">lglTemplateLayout</link> * lgl_template_layout_new             (<link linkend="gint">gint</link> nx,
+                                                         <link linkend="gint">gint</link> ny,
+                                                         <link linkend="gdouble">gdouble</link> x0,
+                                                         <link linkend="gdouble">gdouble</link> y0,
+                                                         <link linkend="gdouble">gdouble</link> dx,
+                                                         <link linkend="gdouble">gdouble</link> dy);</programlisting>
+<para>
+This function creates a new layout structure with the given parameters.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>nx</parameter>&#160;:</term>
+<listitem><simpara>  Number of labels across.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ny</parameter>&#160;:</term>
+<listitem><simpara>  Number of labels down.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x0</parameter>&#160;:</term>
+<listitem><simpara>  X coordinate of the top-left corner of the top-left label in the layout in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y0</parameter>&#160;:</term>
+<listitem><simpara>  Y coordinate of the top-left corner of the top-left label in the layout in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dx</parameter>&#160;:</term>
+<listitem><simpara>  Horizontal pitch in points.  This is the distance from left-edge to left-edge.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dy</parameter>&#160;:</term>
+<listitem><simpara>  Vertical pitch in points.  This is the distance from top-edge to top-edge.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly allocated <link linkend="lglTemplateLayout"><type>lglTemplateLayout</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-layout-dup" role="function">
+<title>lgl_template_layout_dup ()</title>
+<indexterm zone="lgl-template-layout-dup"><primary sortas="lgl_template_layout_dup">lgl_template_layout_dup</primary></indexterm><programlisting><link linkend="lglTemplateLayout">lglTemplateLayout</link> * lgl_template_layout_dup             (const <link linkend="lglTemplateLayout">lglTemplateLayout</link> *orig_layout);</programlisting>
+<para>
+This function duplicates a template layout structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig_layout</parameter>&#160;:</term>
+<listitem><simpara> Layout to duplicate.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  a newly allocated <link linkend="lglTemplateLayout"><type>lglTemplateLayout</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-layout-free" role="function">
+<title>lgl_template_layout_free ()</title>
+<indexterm zone="lgl-template-layout-free"><primary sortas="lgl_template_layout_free">lgl_template_layout_free</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_layout_free            (<link linkend="lglTemplateLayout">lglTemplateLayout</link> *layout);</programlisting>
+<para>
+This function frees all memory associated with given template layout structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> Layout to free.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-markup-margin-new" role="function">
+<title>lgl_template_markup_margin_new ()</title>
+<indexterm zone="lgl-template-markup-margin-new"><primary sortas="lgl_template_markup_margin_new">lgl_template_markup_margin_new</primary></indexterm><programlisting><link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * lgl_template_markup_margin_new      (<link linkend="gdouble">gdouble</link> size);</programlisting>
+<para>
+This function creates a new margin markup structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>size</parameter>&#160;:</term>
+<listitem><simpara> margin size in points.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly allocated <link linkend="lglTemplateMarkup"><type>lglTemplateMarkup</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-markup-line-new" role="function">
+<title>lgl_template_markup_line_new ()</title>
+<indexterm zone="lgl-template-markup-line-new"><primary sortas="lgl_template_markup_line_new">lgl_template_markup_line_new</primary></indexterm><programlisting><link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * lgl_template_markup_line_new        (<link linkend="gdouble">gdouble</link> x1,
+                                                         <link linkend="gdouble">gdouble</link> y1,
+                                                         <link linkend="gdouble">gdouble</link> x2,
+                                                         <link linkend="gdouble">gdouble</link> y2);</programlisting>
+<para>
+This function creates a new line markup structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>x1</parameter>&#160;:</term>
+<listitem><simpara> x coordinate of first endpoint.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y1</parameter>&#160;:</term>
+<listitem><simpara> y coordinate of first endpoint.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x2</parameter>&#160;:</term>
+<listitem><simpara> x coordinate of second endpoint.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y2</parameter>&#160;:</term>
+<listitem><simpara> y coordinate of second endpoint.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly allocated <link linkend="lglTemplateMarkup"><type>lglTemplateMarkup</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-markup-circle-new" role="function">
+<title>lgl_template_markup_circle_new ()</title>
+<indexterm zone="lgl-template-markup-circle-new"><primary sortas="lgl_template_markup_circle_new">lgl_template_markup_circle_new</primary></indexterm><programlisting><link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * lgl_template_markup_circle_new      (<link linkend="gdouble">gdouble</link> x0,
+                                                         <link linkend="gdouble">gdouble</link> y0,
+                                                         <link linkend="gdouble">gdouble</link> r);</programlisting>
+<para>
+This function creates a new circle markup structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>x0</parameter>&#160;:</term>
+<listitem><simpara> x coordinate of center of circle.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y0</parameter>&#160;:</term>
+<listitem><simpara> y coordinate of center of circle.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>r</parameter>&#160;:</term>
+<listitem><simpara>  radius of circle.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly allocated <link linkend="lglTemplateMarkup"><type>lglTemplateMarkup</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-markup-rect-new" role="function">
+<title>lgl_template_markup_rect_new ()</title>
+<indexterm zone="lgl-template-markup-rect-new"><primary sortas="lgl_template_markup_rect_new">lgl_template_markup_rect_new</primary></indexterm><programlisting><link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * lgl_template_markup_rect_new        (<link linkend="gdouble">gdouble</link> x1,
+                                                         <link linkend="gdouble">gdouble</link> y1,
+                                                         <link linkend="gdouble">gdouble</link> w,
+                                                         <link linkend="gdouble">gdouble</link> h,
+                                                         <link linkend="gdouble">gdouble</link> r);</programlisting>
+<para>
+This function creates a new rectangle markup structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>x1</parameter>&#160;:</term>
+<listitem><simpara> x coordinate of top-left corner of rectangle.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y1</parameter>&#160;:</term>
+<listitem><simpara> y coordinate of top-left corner of rectangle.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>w</parameter>&#160;:</term>
+<listitem><simpara>  width of rectangle.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>h</parameter>&#160;:</term>
+<listitem><simpara>  height of rectangle.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>r</parameter>&#160;:</term>
+<listitem><simpara>  radius of rounded corner.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly allocated <link linkend="lglTemplateMarkup"><type>lglTemplateMarkup</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-markup-dup" role="function">
+<title>lgl_template_markup_dup ()</title>
+<indexterm zone="lgl-template-markup-dup"><primary sortas="lgl_template_markup_dup">lgl_template_markup_dup</primary></indexterm><programlisting><link linkend="lglTemplateMarkup">lglTemplateMarkup</link> * lgl_template_markup_dup             (const <link linkend="lglTemplateMarkup">lglTemplateMarkup</link> *orig_markup);</programlisting>
+<para>
+This function duplicates a template markup structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig_markup</parameter>&#160;:</term>
+<listitem><simpara> Markup to duplicate.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  a newly allocated <link linkend="lglTemplateMarkup"><type>lglTemplateMarkup</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-template-markup-free" role="function">
+<title>lgl_template_markup_free ()</title>
+<indexterm zone="lgl-template-markup-free"><primary sortas="lgl_template_markup_free">lgl_template_markup_free</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_template_markup_free            (<link linkend="lglTemplateMarkup">lglTemplateMarkup</link> *markup);</programlisting>
+<para>
+This function frees all memory associated with given template markup structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>markup</parameter>&#160;:</term>
+<listitem><simpara> Markup to free.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/libglabels/xml/xml-category.xml b/docs/libglabels/xml/xml-category.xml
new file mode 100644 (file)
index 0000000..d5a8d8e
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-xml-category">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-xml-category.top_of_page">XML Category Functions</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>XML Category Functions</refname>
+<refpurpose>Functions to parse glabels XML category definition files</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-xml-category.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/xml-category.h&gt;
+
+<link linkend="GList">GList</link> *             <link linkend="lgl-xml-category-read-categories-from-file">lgl_xml_category_read_categories_from_file</link>
+                                                        (<link linkend="gchar">gchar</link> *utf8_filename);
+<link linkend="GList">GList</link> *             <link linkend="lgl-xml-category-parse-categories-doc">lgl_xml_category_parse_categories_doc</link>
+                                                        (<link linkend="xmlDocPtr">xmlDocPtr</link> categories_doc);
+<link linkend="lglCategory">lglCategory</link> *       <link linkend="lgl-xml-category-parse-category-node">lgl_xml_category_parse_category_node</link>
+                                                        (<link linkend="xmlNodePtr">xmlNodePtr</link> category_node);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-xml-category.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section describes a number of functions for parsing glabels
+XML category definition files.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-xml-category.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="lgl-xml-category-read-categories-from-file" role="function">
+<title>lgl_xml_category_read_categories_from_file ()</title>
+<indexterm zone="lgl-xml-category-read-categories-from-file"><primary sortas="lgl_xml_category_read_categories_from_file">lgl_xml_category_read_categories_from_file</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_xml_category_read_categories_from_file
+                                                        (<link linkend="gchar">gchar</link> *utf8_filename);</programlisting>
+<para>
+Read category definitions from a file.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>utf8_filename</parameter>&#160;:</term>
+<listitem><simpara>       Filename of categories file (name encoded as UTF-8)
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of <link linkend="lglCategory"><type>lglCategory</type></link> structures.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-category-parse-categories-doc" role="function">
+<title>lgl_xml_category_parse_categories_doc ()</title>
+<indexterm zone="lgl-xml-category-parse-categories-doc"><primary sortas="lgl_xml_category_parse_categories_doc">lgl_xml_category_parse_categories_doc</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_xml_category_parse_categories_doc
+                                                        (<link linkend="xmlDocPtr">xmlDocPtr</link> categories_doc);</programlisting>
+<para>
+Read category definitions from a libxml <link linkend="xmlDocPtr"><type>xmlDocPtr</type></link> tree.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>categories_doc</parameter>&#160;:</term>
+<listitem><simpara>  libxml <link linkend="xmlDocPtr"><type>xmlDocPtr</type></link> tree, representing a categories
+definition file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of <link linkend="lglCategory"><type>lglCategory</type></link> structures.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-category-parse-category-node" role="function">
+<title>lgl_xml_category_parse_category_node ()</title>
+<indexterm zone="lgl-xml-category-parse-category-node"><primary sortas="lgl_xml_category_parse_category_node">lgl_xml_category_parse_category_node</primary></indexterm><programlisting><link linkend="lglCategory">lglCategory</link> *       lgl_xml_category_parse_category_node
+                                                        (<link linkend="xmlNodePtr">xmlNodePtr</link> category_node);</programlisting>
+<para>
+Read a single category definition from a libxml <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> node.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>category_node</parameter>&#160;:</term>
+<listitem><simpara>  libxml <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> category node from a <link linkend="xmlDocPtr"><type>xmlDocPtr</type></link> tree.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to a newly created <link linkend="lglCategory"><type>lglCategory</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/libglabels/xml/xml-paper.xml b/docs/libglabels/xml/xml-paper.xml
new file mode 100644 (file)
index 0000000..8097f4a
--- /dev/null
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-xml-paper">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-xml-paper.top_of_page">XML Paper Functions</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>XML Paper Functions</refname>
+<refpurpose>Functions to parse glabels XML paper definition files</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-xml-paper.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/xml-paper.h&gt;
+
+<link linkend="GList">GList</link> *             <link linkend="lgl-xml-paper-read-papers-from-file">lgl_xml_paper_read_papers_from_file</link> (<link linkend="gchar">gchar</link> *utf8_filename);
+<link linkend="GList">GList</link> *             <link linkend="lgl-xml-paper-parse-papers-doc">lgl_xml_paper_parse_papers_doc</link>      (<link linkend="xmlDocPtr">xmlDocPtr</link> papers_doc);
+<link linkend="lglPaper">lglPaper</link> *          <link linkend="lgl-xml-paper-parse-paper-node">lgl_xml_paper_parse_paper_node</link>      (<link linkend="xmlNodePtr">xmlNodePtr</link> paper_node);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-xml-paper.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section describes a number of functions for parsing glabels
+XML paper definition files.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-xml-paper.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="lgl-xml-paper-read-papers-from-file" role="function">
+<title>lgl_xml_paper_read_papers_from_file ()</title>
+<indexterm zone="lgl-xml-paper-read-papers-from-file"><primary sortas="lgl_xml_paper_read_papers_from_file">lgl_xml_paper_read_papers_from_file</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_xml_paper_read_papers_from_file (<link linkend="gchar">gchar</link> *utf8_filename);</programlisting>
+<para>
+Read paper definitions from a file.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>utf8_filename</parameter>&#160;:</term>
+<listitem><simpara>       Filename of papers file (name encoded as UTF-8)
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of <link linkend="lglPaper"><type>lglPaper</type></link> structures.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-paper-parse-papers-doc" role="function">
+<title>lgl_xml_paper_parse_papers_doc ()</title>
+<indexterm zone="lgl-xml-paper-parse-papers-doc"><primary sortas="lgl_xml_paper_parse_papers_doc">lgl_xml_paper_parse_papers_doc</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_xml_paper_parse_papers_doc      (<link linkend="xmlDocPtr">xmlDocPtr</link> papers_doc);</programlisting>
+<para>
+Read paper definitions from a libxml <link linkend="xmlDocPtr"><type>xmlDocPtr</type></link> tree.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>papers_doc</parameter>&#160;:</term>
+<listitem><simpara>  libxml <link linkend="xmlDocPtr"><type>xmlDocPtr</type></link> tree, representing a papers definition file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of <link linkend="lglPaper"><type>lglPaper</type></link> structures.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-paper-parse-paper-node" role="function">
+<title>lgl_xml_paper_parse_paper_node ()</title>
+<indexterm zone="lgl-xml-paper-parse-paper-node"><primary sortas="lgl_xml_paper_parse_paper_node">lgl_xml_paper_parse_paper_node</primary></indexterm><programlisting><link linkend="lglPaper">lglPaper</link> *          lgl_xml_paper_parse_paper_node      (<link linkend="xmlNodePtr">xmlNodePtr</link> paper_node);</programlisting>
+<para>
+Read a single paper definition from a libxml <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> node.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>paper_node</parameter>&#160;:</term>
+<listitem><simpara>  libxml <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> paper node from a <link linkend="xmlDocPtr"><type>xmlDocPtr</type></link> tree.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to a newly created <link linkend="lglPaper"><type>lglPaper</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/libglabels/xml/xml-template.xml b/docs/libglabels/xml/xml-template.xml
new file mode 100644 (file)
index 0000000..b8e88e3
--- /dev/null
@@ -0,0 +1,171 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-xml-template">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-xml-template.top_of_page">XML Template Functions</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>XML Template Functions</refname>
+<refpurpose>Functions to create and parse glabels XML template nodes and files</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-xml-template.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/xml-templates.h&gt;
+
+<link linkend="GList">GList</link> *             <link linkend="lgl-xml-template-read-templates-from-file">lgl_xml_template_read_templates_from_file</link>
+                                                        (const <link linkend="gchar">gchar</link> *utf8_filename);
+<link linkend="GList">GList</link> *             <link linkend="lgl-xml-template-parse-templates-doc">lgl_xml_template_parse_templates_doc</link>
+                                                        (const <link linkend="xmlDocPtr">xmlDocPtr</link> templates_doc);
+<link linkend="lglTemplate">lglTemplate</link> *       <link linkend="lgl-xml-template-parse-template-node">lgl_xml_template_parse_template_node</link>
+                                                        (const <link linkend="xmlNodePtr">xmlNodePtr</link> template_node);
+<link linkend="gint">gint</link>                <link linkend="lgl-xml-template-write-templates-to-file">lgl_xml_template_write_templates_to_file</link>
+                                                        (<link linkend="GList">GList</link> *templates,
+                                                         const <link linkend="gchar">gchar</link> *utf8_filename);
+<link linkend="gint">gint</link>                <link linkend="lgl-xml-template-write-template-to-file">lgl_xml_template_write_template_to_file</link>
+                                                        (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *utf8_filename);
+<link linkend="void">void</link>                <link linkend="lgl-xml-template-create-template-node">lgl_xml_template_create_template_node</link>
+                                                        (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         <link linkend="xmlNodePtr">xmlNodePtr</link> root,
+                                                         const <link linkend="xmlNsPtr">xmlNsPtr</link> ns);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-xml-template.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section describes a number of functions for creating and parsing
+glabels XML template nodes and files.  Template nodes are used in both
+template files and document files.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-xml-template.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="lgl-xml-template-read-templates-from-file" role="function">
+<title>lgl_xml_template_read_templates_from_file ()</title>
+<indexterm zone="lgl-xml-template-read-templates-from-file"><primary sortas="lgl_xml_template_read_templates_from_file">lgl_xml_template_read_templates_from_file</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_xml_template_read_templates_from_file
+                                                        (const <link linkend="gchar">gchar</link> *utf8_filename);</programlisting>
+<para>
+Read glabels templates from template file.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>utf8_filename</parameter>&#160;:</term>
+<listitem><simpara>       Filename of papers file (name encoded as UTF-8)
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of <link linkend="lglTemplate"><type>lglTemplate</type></link> structures.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-template-parse-templates-doc" role="function">
+<title>lgl_xml_template_parse_templates_doc ()</title>
+<indexterm zone="lgl-xml-template-parse-templates-doc"><primary sortas="lgl_xml_template_parse_templates_doc">lgl_xml_template_parse_templates_doc</primary></indexterm><programlisting><link linkend="GList">GList</link> *             lgl_xml_template_parse_templates_doc
+                                                        (const <link linkend="xmlDocPtr">xmlDocPtr</link> templates_doc);</programlisting>
+<para>
+Read glabels templates from a libxml <link linkend="xmlDocPtr"><type>xmlDocPtr</type></link> tree.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>templates_doc</parameter>&#160;:</term>
+<listitem><simpara>  libxml <link linkend="xmlDocPtr"><type>xmlDocPtr</type></link> tree, representing template file.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of <link linkend="lglTemplate"><type>lglTemplate</type></link> structures.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-template-parse-template-node" role="function">
+<title>lgl_xml_template_parse_template_node ()</title>
+<indexterm zone="lgl-xml-template-parse-template-node"><primary sortas="lgl_xml_template_parse_template_node">lgl_xml_template_parse_template_node</primary></indexterm><programlisting><link linkend="lglTemplate">lglTemplate</link> *       lgl_xml_template_parse_template_node
+                                                        (const <link linkend="xmlNodePtr">xmlNodePtr</link> template_node);</programlisting>
+<para>
+Read a single glabels template from a libxml <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> node.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template_node</parameter>&#160;:</term>
+<listitem><simpara>  libxml <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> template node from a <link linkend="xmlDocPtr"><type>xmlDocPtr</type></link> tree.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to a newly created <link linkend="lglTemplate"><type>lglTemplate</type></link> structure.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-template-write-templates-to-file" role="function">
+<title>lgl_xml_template_write_templates_to_file ()</title>
+<indexterm zone="lgl-xml-template-write-templates-to-file"><primary sortas="lgl_xml_template_write_templates_to_file">lgl_xml_template_write_templates_to_file</primary></indexterm><programlisting><link linkend="gint">gint</link>                lgl_xml_template_write_templates_to_file
+                                                        (<link linkend="GList">GList</link> *templates,
+                                                         const <link linkend="gchar">gchar</link> *utf8_filename);</programlisting>
+<para>
+Write a list of <link linkend="lglTemplate"><type>lglTemplate</type></link> structures to a glabels XML template file.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>templates</parameter>&#160;:</term>
+<listitem><simpara>      List of <link linkend="lglTemplate"><type>lglTemplate</type></link> structures
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>utf8_filename</parameter>&#160;:</term>
+<listitem><simpara>  Filename of templates file (name encoded as UTF-8)
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the number of bytes written or -1 in case of failure
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-template-write-template-to-file" role="function">
+<title>lgl_xml_template_write_template_to_file ()</title>
+<indexterm zone="lgl-xml-template-write-template-to-file"><primary sortas="lgl_xml_template_write_template_to_file">lgl_xml_template_write_template_to_file</primary></indexterm><programlisting><link linkend="gint">gint</link>                lgl_xml_template_write_template_to_file
+                                                        (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         const <link linkend="gchar">gchar</link> *utf8_filename);</programlisting>
+<para>
+Write a single <link linkend="lglTemplate"><type>lglTemplate</type></link> structures to a glabels XML template file.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>       <link linkend="lglTemplate"><type>lglTemplate</type></link> structure to be written
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>utf8_filename</parameter>&#160;:</term>
+<listitem><simpara>  Filename of templates file (name encoded as UTF-8)
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the number of bytes written or -1 in case of failure
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-template-create-template-node" role="function">
+<title>lgl_xml_template_create_template_node ()</title>
+<indexterm zone="lgl-xml-template-create-template-node"><primary sortas="lgl_xml_template_create_template_node">lgl_xml_template_create_template_node</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_xml_template_create_template_node
+                                                        (const <link linkend="lglTemplate">lglTemplate</link> *template,
+                                                         <link linkend="xmlNodePtr">xmlNodePtr</link> root,
+                                                         const <link linkend="xmlNsPtr">xmlNsPtr</link> ns);</programlisting>
+<para>
+Add a single <link linkend="lglTemplate"><type>lglTemplate</type></link> child node to given <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>template</parameter>&#160;:</term>
+<listitem><simpara>       <link linkend="lglTemplate"><type>lglTemplate</type></link> structure to be written
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>root</parameter>&#160;:</term>
+<listitem><simpara>           parent node to receive new child node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ns</parameter>&#160;:</term>
+<listitem><simpara>             a libxml <link linkend="xmlNsPtr"><type>xmlNsPtr</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/libglabels/xml/xml.xml b/docs/libglabels/xml/xml.xml
new file mode 100644 (file)
index 0000000..ad1919a
--- /dev/null
@@ -0,0 +1,430 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<refentry id="libglabels-xml">
+<refmeta>
+<refentrytitle role="top_of_page" id="libglabels-xml.top_of_page">XML Helper Functions</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>LIBGLABELS Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>XML Helper Functions</refname>
+<refpurpose>Functions to help format and parse glabels XML properties</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="libglabels-xml.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+
+#include &lt;libglabels/xml.h&gt;
+
+#define             <link linkend="LGL-XML-NAME-SPACE--CAPS">LGL_XML_NAME_SPACE</link>
+
+<link linkend="gchar">gchar</link> *             <link linkend="lgl-xml-get-prop-string">lgl_xml_get_prop_string</link>             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         const <link linkend="gchar">gchar</link> *default_val);
+<link linkend="gchar">gchar</link> *             <link linkend="lgl-xml-get-prop-i18n-string">lgl_xml_get_prop_i18n_string</link>        (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         const <link linkend="gchar">gchar</link> *default_val);
+<link linkend="gdouble">gdouble</link>             <link linkend="lgl-xml-get-prop-double">lgl_xml_get_prop_double</link>             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gdouble">gdouble</link> default_val);
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-xml-get-prop-boolean">lgl_xml_get_prop_boolean</link>            (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gboolean">gboolean</link> default_val);
+<link linkend="gint">gint</link>                <link linkend="lgl-xml-get-prop-int">lgl_xml_get_prop_int</link>                (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gint">gint</link> default_val);
+<link linkend="guint">guint</link>               <link linkend="lgl-xml-get-prop-uint">lgl_xml_get_prop_uint</link>               (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="guint">guint</link> default_val);
+<link linkend="gdouble">gdouble</link>             <link linkend="lgl-xml-get-prop-length">lgl_xml_get_prop_length</link>             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gdouble">gdouble</link> default_val);
+
+<link linkend="void">void</link>                <link linkend="lgl-xml-set-prop-string">lgl_xml_set_prop_string</link>             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         const <link linkend="gchar">gchar</link> *val);
+<link linkend="void">void</link>                <link linkend="lgl-xml-set-prop-double">lgl_xml_set_prop_double</link>             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gdouble">gdouble</link> val);
+<link linkend="void">void</link>                <link linkend="lgl-xml-set-prop-boolean">lgl_xml_set_prop_boolean</link>            (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gboolean">gboolean</link> val);
+<link linkend="void">void</link>                <link linkend="lgl-xml-set-prop-int">lgl_xml_set_prop_int</link>                (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gint">gint</link> val);
+<link linkend="void">void</link>                <link linkend="lgl-xml-set-prop-uint-hex">lgl_xml_set_prop_uint_hex</link>           (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="guint">guint</link> val);
+<link linkend="void">void</link>                <link linkend="lgl-xml-set-prop-length">lgl_xml_set_prop_length</link>             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gdouble">gdouble</link> val);
+
+<link linkend="gboolean">gboolean</link>            <link linkend="lgl-xml-is-node">lgl_xml_is_node</link>                     (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *name);
+<link linkend="gchar">gchar</link> *             <link linkend="lgl-xml-get-node-content">lgl_xml_get_node_content</link>            (<link linkend="xmlNodePtr">xmlNodePtr</link> node);
+
+<link linkend="void">void</link>                <link linkend="lgl-xml-set-default-units">lgl_xml_set_default_units</link>           (<link linkend="lglUnitsType">lglUnitsType</link> units);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="libglabels-xml.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+This section describes a number of "helper" functions for formatting and
+parsing various types of properties for tags in glabels XML file formats.
+</para>
+<para>
+These functions are basically wrappers to functions from libxml2.
+</para>
+</refsect1>
+
+<refsect1 id="libglabels-xml.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="LGL-XML-NAME-SPACE--CAPS" role="macro">
+<title>LGL_XML_NAME_SPACE</title>
+<indexterm zone="LGL-XML-NAME-SPACE--CAPS"><primary sortas="LGL_XML_NAME_SPACE">LGL_XML_NAME_SPACE</primary></indexterm><programlisting>#define LGL_XML_NAME_SPACE "http://snaught.com/glabels/2.2/"
+</programlisting>
+<para>
+</para></refsect2>
+<refsect2 id="lgl-xml-get-prop-string" role="function">
+<title>lgl_xml_get_prop_string ()</title>
+<indexterm zone="lgl-xml-get-prop-string"><primary sortas="lgl_xml_get_prop_string">lgl_xml_get_prop_string</primary></indexterm><programlisting><link linkend="gchar">gchar</link> *             lgl_xml_get_prop_string             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         const <link linkend="gchar">gchar</link> *default_val);</programlisting>
+<para>
+Return value of property as a string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>default_val</parameter>&#160;:</term>
+<listitem><simpara> a default value to return if property not found
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the property as a pointer to a gchar string.  This string should
+         be freed with <link linkend="g-free"><function>g_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-get-prop-i18n-string" role="function">
+<title>lgl_xml_get_prop_i18n_string ()</title>
+<indexterm zone="lgl-xml-get-prop-i18n-string"><primary sortas="lgl_xml_get_prop_i18n_string">lgl_xml_get_prop_i18n_string</primary></indexterm><programlisting><link linkend="gchar">gchar</link> *             lgl_xml_get_prop_i18n_string        (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         const <link linkend="gchar">gchar</link> *default_val);</programlisting>
+<para>
+Return value of a translatable property as a string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>default_val</parameter>&#160;:</term>
+<listitem><simpara> a default value to return if property not found
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the property as a pointer to a gchar string.  This string should
+         be freed with <link linkend="g-free"><function>g_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-get-prop-double" role="function">
+<title>lgl_xml_get_prop_double ()</title>
+<indexterm zone="lgl-xml-get-prop-double"><primary sortas="lgl_xml_get_prop_double">lgl_xml_get_prop_double</primary></indexterm><programlisting><link linkend="gdouble">gdouble</link>             lgl_xml_get_prop_double             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gdouble">gdouble</link> default_val);</programlisting>
+<para>
+Return value of property as a double.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>default_val</parameter>&#160;:</term>
+<listitem><simpara> a default value to return if property not found
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the property as a double.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-get-prop-boolean" role="function">
+<title>lgl_xml_get_prop_boolean ()</title>
+<indexterm zone="lgl-xml-get-prop-boolean"><primary sortas="lgl_xml_get_prop_boolean">lgl_xml_get_prop_boolean</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_xml_get_prop_boolean            (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gboolean">gboolean</link> default_val);</programlisting>
+<para>
+Return value of property as a boolean.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>default_val</parameter>&#160;:</term>
+<listitem><simpara> a default value to return if property not found
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the property as a boolean.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-get-prop-int" role="function">
+<title>lgl_xml_get_prop_int ()</title>
+<indexterm zone="lgl-xml-get-prop-int"><primary sortas="lgl_xml_get_prop_int">lgl_xml_get_prop_int</primary></indexterm><programlisting><link linkend="gint">gint</link>                lgl_xml_get_prop_int                (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gint">gint</link> default_val);</programlisting>
+<para>
+Return value of property as an integer.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>default_val</parameter>&#160;:</term>
+<listitem><simpara> a default value to return if property not found
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the property as an integer.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-get-prop-uint" role="function">
+<title>lgl_xml_get_prop_uint ()</title>
+<indexterm zone="lgl-xml-get-prop-uint"><primary sortas="lgl_xml_get_prop_uint">lgl_xml_get_prop_uint</primary></indexterm><programlisting><link linkend="guint">guint</link>               lgl_xml_get_prop_uint               (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="guint">guint</link> default_val);</programlisting>
+<para>
+Return value of property (usually formatted in hex) as an unsigned integer.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>default_val</parameter>&#160;:</term>
+<listitem><simpara> a default value to return if property not found
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the property as an unsigned integer.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-get-prop-length" role="function">
+<title>lgl_xml_get_prop_length ()</title>
+<indexterm zone="lgl-xml-get-prop-length"><primary sortas="lgl_xml_get_prop_length">lgl_xml_get_prop_length</primary></indexterm><programlisting><link linkend="gdouble">gdouble</link>             lgl_xml_get_prop_length             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gdouble">gdouble</link> default_val);</programlisting>
+<para>
+Return value of a length property as a double, converting to internal
+units (points).  The property is expected to be formatted as a number
+followed by a units string.  If there is no units string, the length
+is assumed to be in points.  Valid units strings are "pt" for points,
+"in" for inches, "mm" for millimeters, "cm" for centimeters, and
+"pc" for picas.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>default_val</parameter>&#160;:</term>
+<listitem><simpara> a default value to return if property not found
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the length in points.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-set-prop-string" role="function">
+<title>lgl_xml_set_prop_string ()</title>
+<indexterm zone="lgl-xml-set-prop-string"><primary sortas="lgl_xml_set_prop_string">lgl_xml_set_prop_string</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_xml_set_prop_string             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         const <link linkend="gchar">gchar</link> *val);</programlisting>
+<para>
+Set a property from a string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>val</parameter>&#160;:</term>
+<listitem><simpara>         the value to set
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-set-prop-double" role="function">
+<title>lgl_xml_set_prop_double ()</title>
+<indexterm zone="lgl-xml-set-prop-double"><primary sortas="lgl_xml_set_prop_double">lgl_xml_set_prop_double</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_xml_set_prop_double             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gdouble">gdouble</link> val);</programlisting>
+<para>
+Set a property from a double.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>val</parameter>&#160;:</term>
+<listitem><simpara>         the value to set
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-set-prop-boolean" role="function">
+<title>lgl_xml_set_prop_boolean ()</title>
+<indexterm zone="lgl-xml-set-prop-boolean"><primary sortas="lgl_xml_set_prop_boolean">lgl_xml_set_prop_boolean</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_xml_set_prop_boolean            (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gboolean">gboolean</link> val);</programlisting>
+<para>
+Set a property from a boolean.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>val</parameter>&#160;:</term>
+<listitem><simpara>         the value to set
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-set-prop-int" role="function">
+<title>lgl_xml_set_prop_int ()</title>
+<indexterm zone="lgl-xml-set-prop-int"><primary sortas="lgl_xml_set_prop_int">lgl_xml_set_prop_int</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_xml_set_prop_int                (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gint">gint</link> val);</programlisting>
+<para>
+Set a property from an integer.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>val</parameter>&#160;:</term>
+<listitem><simpara>         the value to set
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-set-prop-uint-hex" role="function">
+<title>lgl_xml_set_prop_uint_hex ()</title>
+<indexterm zone="lgl-xml-set-prop-uint-hex"><primary sortas="lgl_xml_set_prop_uint_hex">lgl_xml_set_prop_uint_hex</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_xml_set_prop_uint_hex           (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="guint">guint</link> val);</programlisting>
+<para>
+Set a property from an unsigned integer and format in hex.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>val</parameter>&#160;:</term>
+<listitem><simpara>         the value to set
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-set-prop-length" role="function">
+<title>lgl_xml_set_prop_length ()</title>
+<indexterm zone="lgl-xml-set-prop-length"><primary sortas="lgl_xml_set_prop_length">lgl_xml_set_prop_length</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_xml_set_prop_length             (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *property,
+                                                         <link linkend="gdouble">gdouble</link> val);</programlisting>
+<para>
+Set a property from a length, performing any necessary conversion.
+Length properties are formatted as a number followed by a units string.
+The units of the formatted property is determined by the most recent call to
+<link linkend="lgl-xml-set-default-units"><function>lgl_xml_set_default_units()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property</parameter>&#160;:</term>
+<listitem><simpara>    the property name
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>val</parameter>&#160;:</term>
+<listitem><simpara>         the length to set in internal units (points)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-is-node" role="function">
+<title>lgl_xml_is_node ()</title>
+<indexterm zone="lgl-xml-is-node"><primary sortas="lgl_xml_is_node">lgl_xml_is_node</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            lgl_xml_is_node                     (<link linkend="xmlNodePtr">xmlNodePtr</link> node,
+                                                         const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Test if a node name matches given name.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara>    the node name
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> TRUE if the name of the node matches.  Otherwise FALSE.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-get-node-content" role="function">
+<title>lgl_xml_get_node_content ()</title>
+<indexterm zone="lgl-xml-get-node-content"><primary sortas="lgl_xml_get_node_content">lgl_xml_get_node_content</primary></indexterm><programlisting><link linkend="gchar">gchar</link> *             lgl_xml_get_node_content            (<link linkend="xmlNodePtr">xmlNodePtr</link> node);</programlisting>
+<para>
+Get the content of a node.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>node</parameter>&#160;:</term>
+<listitem><simpara>        the libxml2 <link linkend="xmlNodePtr"><type>xmlNodePtr</type></link> of the node
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the property as a pointer to a gchar string.  This string should
+         be freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="lgl-xml-set-default-units" role="function">
+<title>lgl_xml_set_default_units ()</title>
+<indexterm zone="lgl-xml-set-default-units"><primary sortas="lgl_xml_set_default_units">lgl_xml_set_default_units</primary></indexterm><programlisting><link linkend="void">void</link>                lgl_xml_set_default_units           (<link linkend="lglUnitsType">lglUnitsType</link> units);</programlisting>
+<para>
+Set the default units when formatting lengths.  See
+<link linkend="lgl-xml-set-prop-length"><function>lgl_xml_set_prop_length()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>units</parameter>&#160;:</term>
+<listitem><simpara>       default units selection (<link linkend="lglUnitsType"><type>lglUnitsType</type></link>)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/glabels.spec b/glabels.spec
new file mode 100644 (file)
index 0000000..f4df384
--- /dev/null
@@ -0,0 +1,106 @@
+Summary: glabels is a GNOME program to create labels and business cards
+Name:      glabels
+Version:   2.2.8
+Release:   1
+License: GPL
+Group: Applications/Publishing
+URL: http://glabels.sourceforge.net/
+
+Source: %{name}-%{version}.tar.gz
+BuildRoot: %{_tmppath}/root-%{name}-%{version}
+Prefix: %{_prefix}
+
+BuildRequires: gtk2-devel >= 2.10.0
+BuildRequires: libxml2-devel >= 2.6.0
+BuildRequires: libgnomeui-devel >= 2.16.0
+BuildRequires: libglade2-devel >= 2.6.0
+
+Requires: gtk2 >= 2.10.0
+Requires: libxml2 >= 2.6.0
+Requires: libgnomeui >= 2.16.0
+Requires: libglade2 >= 2.6.0
+
+%description
+gLabels is a lightweight program for creating labels and
+business cards for the GNOME desktop environment.
+It is designed to work with various laser/ink-jet peel-off
+label and business card sheets that you'll find at most office
+supply stores.
+
+%prep
+%setup
+
+%build
+%configure
+%{__make} %{?_smp_mflags}
+
+%install
+%{__rm} -rf %{buildroot}
+%makeinstall
+%find_lang %{name}
+
+desktop-file-install --vendor gnome --delete-original \
+       --add-category X-Red-Hat-Base              \
+       --dir %{buildroot}%{_datadir}/applications \
+       %{buildroot}%{_datadir}/applications/%{name}.desktop
+
+%{__rm} -rf %{buildroot}/var/scrollkeeper
+%{__rm} -f %{buildroot}%{_datadir}/mime/XMLnamespaces
+%{__rm} -f %{buildroot}%{_datadir}/mime/globs
+%{__rm} -f %{buildroot}%{_datadir}/mime/magic
+%{__rm} -f %{buildroot}%{_datadir}/mime/mime.cache
+%{__rm} -rf %{buildroot}%{_datadir}/mime/application
+%{__rm} -rf %{buildroot}%{_datadir}/mime/aliases
+%{__rm} -rf %{buildroot}%{_datadir}/mime/subclasses
+
+
+%clean
+%{__rm} -rf %{buildroot}
+
+%post
+scrollkeeper-update
+if (update-mime-database -v &> /dev/null); then
+  update-mime-database "%{_datadir}/mime" > /dev/null
+fi
+
+%postun
+scrollkeeper-update
+if (update-mime-database -v &> /dev/null); then
+  update-mime-database "%{_datadir}/mime" > /dev/null
+fi
+
+%files -f %{name}.lang
+%defattr(-, root, root)
+%doc README COPYING.README_FIRST COPYING COPYING-DOCS COPYING-LIBGLABELS ChangeLog NEWS AUTHORS INSTALL
+%doc %{_datadir}/gnome/help/glabels/
+%{_bindir}/glabels
+%{_bindir}/glabels-batch
+%{_libdir}/libglabels.*
+%{_libdir}/pkgconfig/libglabels.pc
+%{_includedir}/libglabels/*
+%{_datadir}/glabels/
+%{_datadir}/pixmaps/*
+%{_datadir}/omf/
+%{_datadir}/applications/*.desktop
+%{_datadir}/application-registry/*
+%{_datadir}/mime-info/*
+%{_datadir}/mime/packages/*
+%{_datadir}/man/*
+%{_datadir}/gtk-doc/html/libglabels/*
+
+%changelog
+* Sun Aug  8 2004 Jim Evins <evins@snaught.com>
+- Added support for freedesktop.org mime database registration
+
+* Sat Feb 21 2004 Jim Evins <evins@snaught.com>
+- Added libglabels related files
+
+* Tue Dec 23 2003 Jim Evins <evins@snaught.com>
+- Added support for scrollkeeper
+
+* Sat Oct 18 2003 Jim Evins <evins@snaught.com>
+- Updated, based largely on Dag Wieers <dag@wieers.com> glabels.spec
+
+* Sat May 19 2001 Jim Evins <evins@snaught.com>
+- Created
+
diff --git a/glabels.spec.in b/glabels.spec.in
new file mode 100644 (file)
index 0000000..6050b0d
--- /dev/null
@@ -0,0 +1,106 @@
+Summary: glabels is a GNOME program to create labels and business cards
+Name:      glabels
+Version:   @VERSION@
+Release:   1
+License: GPL
+Group: Applications/Publishing
+URL: http://glabels.sourceforge.net/
+
+Source: %{name}-%{version}.tar.gz
+BuildRoot: %{_tmppath}/root-%{name}-%{version}
+Prefix: %{_prefix}
+
+BuildRequires: gtk2-devel >= @GTK_REQUIRED@
+BuildRequires: libxml2-devel >= @LIBXML_REQUIRED@
+BuildRequires: libgnomeui-devel >= @LIBGNOMEUI_REQUIRED@
+BuildRequires: libglade2-devel >= @LIBGLADE_REQUIRED@
+
+Requires: gtk2 >= @GTK_REQUIRED@
+Requires: libxml2 >= @LIBXML_REQUIRED@
+Requires: libgnomeui >= @LIBGNOMEUI_REQUIRED@
+Requires: libglade2 >= @LIBGLADE_REQUIRED@
+
+%description
+gLabels is a lightweight program for creating labels and
+business cards for the GNOME desktop environment.
+It is designed to work with various laser/ink-jet peel-off
+label and business card sheets that you'll find at most office
+supply stores.
+
+%prep
+%setup
+
+%build
+%configure
+%{__make} %{?_smp_mflags}
+
+%install
+%{__rm} -rf %{buildroot}
+%makeinstall
+%find_lang %{name}
+
+desktop-file-install --vendor gnome --delete-original \
+       --add-category X-Red-Hat-Base              \
+       --dir %{buildroot}%{_datadir}/applications \
+       %{buildroot}%{_datadir}/applications/%{name}.desktop
+
+%{__rm} -rf %{buildroot}/var/scrollkeeper
+%{__rm} -f %{buildroot}%{_datadir}/mime/XMLnamespaces
+%{__rm} -f %{buildroot}%{_datadir}/mime/globs
+%{__rm} -f %{buildroot}%{_datadir}/mime/magic
+%{__rm} -f %{buildroot}%{_datadir}/mime/mime.cache
+%{__rm} -rf %{buildroot}%{_datadir}/mime/application
+%{__rm} -rf %{buildroot}%{_datadir}/mime/aliases
+%{__rm} -rf %{buildroot}%{_datadir}/mime/subclasses
+
+
+%clean
+%{__rm} -rf %{buildroot}
+
+%post
+scrollkeeper-update
+if (update-mime-database -v &> /dev/null); then
+  update-mime-database "%{_datadir}/mime" > /dev/null
+fi
+
+%postun
+scrollkeeper-update
+if (update-mime-database -v &> /dev/null); then
+  update-mime-database "%{_datadir}/mime" > /dev/null
+fi
+
+%files -f %{name}.lang
+%defattr(-, root, root)
+%doc README COPYING.README_FIRST COPYING COPYING-DOCS COPYING-LIBGLABELS ChangeLog NEWS AUTHORS INSTALL
+%doc %{_datadir}/gnome/help/glabels/
+%{_bindir}/glabels
+%{_bindir}/glabels-batch
+%{_libdir}/libglabels.*
+%{_libdir}/pkgconfig/libglabels.pc
+%{_includedir}/libglabels/*
+%{_datadir}/glabels/
+%{_datadir}/pixmaps/*
+%{_datadir}/omf/
+%{_datadir}/applications/*.desktop
+%{_datadir}/application-registry/*
+%{_datadir}/mime-info/*
+%{_datadir}/mime/packages/*
+%{_datadir}/man/*
+%{_datadir}/gtk-doc/html/libglabels/*
+
+%changelog
+* Sun Aug  8 2004 Jim Evins <evins@snaught.com>
+- Added support for freedesktop.org mime database registration
+
+* Sat Feb 21 2004 Jim Evins <evins@snaught.com>
+- Added libglabels related files
+
+* Tue Dec 23 2003 Jim Evins <evins@snaught.com>
+- Added support for scrollkeeper
+
+* Sat Oct 18 2003 Jim Evins <evins@snaught.com>
+- Updated, based largely on Dag Wieers <dag@wieers.com> glabels.spec
+
+* Sat May 19 2001 Jim Evins <evins@snaught.com>
+- Created
+
diff --git a/gnome-doc-utils.make b/gnome-doc-utils.make
new file mode 100644 (file)
index 0000000..ec8f698
--- /dev/null
@@ -0,0 +1,639 @@
+# gnome-doc-utils.make - make magic for building documentation
+# Copyright (C) 2004-2005 Shaun McCance <shaunm@gnome.org>
+#
+# 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.
+
+################################################################################
+## @@ Generating Header Files
+
+## @ DOC_H_FILE
+## The name of the header file to generate
+DOC_H_FILE ?=
+
+## @ DOC_H_DOCS
+## The input DocBook files for generating the header file
+DOC_H_DOCS ?=
+
+$(DOC_H_FILE): $(DOC_H_DOCS);
+       @rm -f $@.tmp; touch $@.tmp;
+       echo 'const gchar* documentation_credits[] = {' >> $@.tmp
+       list='$(DOC_H_DOCS)'; for doc in $$list; do \
+         xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \
+         if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \
+         xsltproc --path "$$xmlpath" $(_credits) $$doc; \
+       done | sort | uniq \
+         | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \
+         | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp
+       echo '  NULL' >> $@.tmp
+       echo '};' >> $@.tmp
+       echo >> $@.tmp
+       list='$(DOC_H_DOCS)'; for doc in $$list; do \
+         xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \
+         if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \
+         docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \
+           | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \
+         echo $$xmlpath; \
+         ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \
+         for id in $$ids; do \
+           echo '#define HELP_'`echo $$docid`'_'`echo $$id \
+             | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \
+         done; \
+         echo >> $@.tmp; \
+       done;
+       cp $@.tmp $@ && rm -f $@.tmp
+
+dist-check-gdu:
+if !HAVE_GNOME_DOC_UTILS
+       @echo "*** GNOME Doc Utils must be installed in order to make dist"
+       @false
+endif
+
+.PHONY: dist-doc-header
+dist-doc-header: $(DOC_H_FILE)
+       @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \
+       echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \
+       $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)";
+
+doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header)
+
+.PHONY: clean-doc-header
+_clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header)
+clean-local: $(_clean_doc_header)
+distclean-local: $(_clean_doc_header)
+mostlyclean-local: $(_clean_doc_header)
+maintainer-clean-local: $(_clean_doc_header)
+clean-doc-header:
+       rm -f $(DOC_H_FILE)
+
+all: $(DOC_H_FILE)
+
+
+################################################################################
+## @@ Generating Documentation Files
+
+## @ DOC_MODULE
+## The name of the document being built
+DOC_MODULE ?=
+
+## @ DOC_ID
+## The unique identifier for a Mallard document
+DOC_ID ?=
+
+## @ DOC_PAGES
+## Page files in a Mallard document
+DOC_PAGES ?=
+
+## @ DOC_ENTITIES
+## Files included with a SYSTEM entity
+DOC_ENTITIES ?=
+
+## @ DOC_INCLUDES
+## Files included with XInclude
+DOC_INCLUDES ?=
+
+## @ DOC_FIGURES
+## Figures and other external data
+DOC_FIGURES ?=
+
+## @ DOC_FORMATS
+## The default formats to be built and installed
+DOC_FORMATS ?= docbook
+_DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS))
+
+## @ DOC_LINGUAS
+## The languages this document is translated into
+DOC_LINGUAS ?=
+_DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)),              \
+       $(filter $(LINGUAS),$(DOC_LINGUAS)),                                    \
+       $(DOC_LINGUAS))
+
+_DOC_ABS_SRCDIR = @abs_srcdir@
+
+
+################################################################################
+## Variables for Bootstrapping
+
+_xml2po ?= `which xml2po`
+_xml2po_mode = $(if $(DOC_ID),mallard,docbook)
+
+_db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils`
+_db2omf  ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils`
+_malrng  ?= `$(PKG_CONFIG) --variable malrng gnome-doc-utils`
+_chunks  ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl
+_credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl
+_ids ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/ids.xsl
+
+if ENABLE_SK
+_ENABLE_SK = true
+_skpkgdatadir ?= `scrollkeeper-config --pkgdatadir`
+_sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir`
+_skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml
+endif
+
+
+################################################################################
+## @@ Rules for OMF Files
+
+db2omf_args =                                                                  \
+       --stringparam db2omf.basename $(DOC_MODULE)                             \
+       --stringparam db2omf.format $(3)                                        \
+       --stringparam db2omf.dtd                                                \
+       $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1              \
+               | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/')                     \
+       --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \
+       --stringparam db2omf.omf_dir "$(OMF_DIR)"                               \
+       --stringparam db2omf.help_dir "$(HELP_DIR)"                             \
+       --stringparam db2omf.omf_in "$(_DOC_OMF_IN)"                            \
+       $(if $(_ENABLE_SK),                                                     \
+         --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)")            \
+       $(_db2omf) $(2)
+
+## @ _DOC_OMF_IN
+## The OMF input file
+_DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in))
+
+## @ _DOC_OMF_DB
+## The OMF files for DocBook output
+_DOC_OMF_DB = $(if $(_DOC_OMF_IN),                                             \
+       $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf))
+
+$(_DOC_OMF_DB) : $(_DOC_OMF_IN)
+$(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml
+       @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || {       \
+         echo "The file '$(_skcontentslist)' does not exist." >&2;             \
+         echo "Please check your ScrollKeeper installation." >&2;              \
+         exit 1; }
+       xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; }
+
+## @ _DOC_OMF_HTML
+## The OMF files for HTML output
+_DOC_OMF_HTML = $(if $(_DOC_OMF_IN),                                           \
+       $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf))
+
+$(_DOC_OMF_HTML) : $(_DOC_OMF_IN)
+$(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml
+if ENABLE_SK
+       @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || {       \
+         echo "The file '$(_skcontentslist)' does not exist" >&2;              \
+         echo "Please check your ScrollKeeper installation." >&2;              \
+         exit 1; }
+endif
+       xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; }
+
+## @ _DOC_OMF_ALL
+## All OMF output files to be built
+# FIXME
+_DOC_OMF_ALL =                                                                 \
+       $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB))             \
+       $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML))
+
+.PHONY: omf
+omf: $(_DOC_OMF_ALL)
+
+
+################################################################################
+## @@ C Locale Documents
+
+## @ _DOC_C_MODULE
+## The top-level documentation file in the C locale
+_DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml)
+
+## @ _DOC_C_PAGES
+## Page files in a Mallard document in the C locale
+_DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page))
+
+## @ _DOC_C_ENTITIES
+## Files included with a SYSTEM entity in the C locale
+_DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent))
+
+## @ _DOC_C_XINCLUDES
+## Files included with XInclude in the C locale
+_DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc))
+
+## @ _DOC_C_DOCS
+## All documentation files in the C locale
+_DOC_C_DOCS =                                                          \
+       $(_DOC_C_ENTITIES)      $(_DOC_C_INCLUDES)                      \
+       $(_DOC_C_PAGES)         $(_DOC_C_MODULE)
+
+## @ _DOC_C_DOCS_NOENT
+## All documentation files in the C locale,
+## except files included with a SYSTEM entity
+_DOC_C_DOCS_NOENT =                                                    \
+       $(_DOC_C_MODULE)        $(_DOC_C_INCLUDES)                      \
+       $(_DOC_C_PAGES)
+
+## @ _DOC_C_FIGURES
+## All figures and other external data in the C locale
+_DOC_C_FIGURES = $(if $(DOC_FIGURES),                                  \
+       $(foreach fig,$(DOC_FIGURES),C/$(fig)),                         \
+       $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png)))
+
+## @ _DOC_C_HTML
+## All HTML documentation in the C locale
+# FIXME: probably have to shell escape to determine the file names
+_DOC_C_HTML = $(foreach f,                                             \
+       $(shell xsltproc --xinclude                                     \
+         --stringparam db.chunk.basename "$(DOC_MODULE)"               \
+         $(_chunks) "C/$(DOC_MODULE).xml"),                            \
+       C/$(f).xhtml)
+
+###############################################################################
+## @@ Other Locale Documentation
+
+## @ _DOC_POFILES
+## The .po files used for translating the document
+_DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID),                                    \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po))
+
+.PHONY: po
+po: $(_DOC_POFILES)
+
+## @ _DOC_LC_MODULES
+## The top-level documentation files in all other locales
+_DOC_LC_MODULES = $(if $(DOC_MODULE),                                          \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml))
+
+## @ _DOC_LC_PAGES
+## Page files in a Mallard document in all other locales
+_DOC_LC_PAGES =                                                                        \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES),       \
+               $(lc)/$(notdir $(page)) ))
+
+## @ _DOC_LC_XINCLUDES
+## Files included with XInclude in all other locales
+_DOC_LC_INCLUDES =                                                             \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES),     \
+               $(lc)/$(notdir $(inc)) ))
+
+## @ _DOC_LC_HTML
+## All HTML documentation in all other locales
+# FIXME: probably have to shell escape to determine the file names
+_DOC_LC_HTML =                                                                 \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML),         \
+               $(lc)/$(notdir $(doc)) ))
+
+## @ _DOC_LC_DOCS
+## All documentation files in all other locales
+_DOC_LC_DOCS =                                                                 \
+       $(_DOC_LC_MODULES)      $(_DOC_LC_INCLUDES)     $(_DOC_LC_PAGES)        \
+       $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML))
+
+## @ _DOC_LC_FIGURES
+## All figures and other external data in all other locales
+_DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS),                           \
+       $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) )
+
+_DOC_SRC_FIGURES =                                                             \
+       $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS),   \
+               $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) ))
+
+$(_DOC_POFILES):
+       @if ! test -d $(dir $@); then \
+         echo "mkdir $(dir $@)"; \
+         mkdir "$(dir $@)"; \
+       fi
+       @if test ! -f $@ -a -f $(srcdir)/$@; then \
+         echo "cp $(srcdir)/$@ $@"; \
+         cp "$(srcdir)/$@" "$@"; \
+       fi;
+       @docs=; \
+       list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \
+         docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \
+       done; \
+       if ! test -f $@; then \
+         echo "(cd $(dir $@) && \
+           $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \
+           cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \
+         (cd $(dir $@) && \
+           $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \
+           cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \
+       else \
+         echo "(cd $(dir $@) && \
+           $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \
+         (cd $(dir $@) && \
+           $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \
+       fi
+
+# FIXME: fix the dependancy
+# FIXME: hook xml2po up
+$(_DOC_LC_DOCS) : $(_DOC_POFILES)
+$(_DOC_LC_DOCS) : $(_DOC_C_DOCS)
+       if ! test -d $(dir $@); then mkdir $(dir $@); fi
+       if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \
+       po="$(dir $@)$(patsubst %/$(notdir $@),%,$@).po"; \
+       if [ -f "$${po}" ]; then po="../$${po}"; else po="$(_DOC_ABS_SRCDIR)/$${po}"; fi; \
+       (cd $(dir $@) && \
+         $(_xml2po) -m $(_xml2po_mode) -e -p "$${po}" \
+           "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \
+           cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)
+
+## @ _DOC_POT
+## A pot file
+_DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot)
+.PHONY: pot
+pot: $(_DOC_POT)
+$(_DOC_POT): $(_DOC_C_DOCS_NOENT)
+       $(_xml2po) -m $(_xml2po_mode) -e -o $@ $^
+
+
+################################################################################
+## @@ All Documentation
+
+## @ _DOC_HTML_ALL
+## All HTML documentation, only if it's built
+_DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \
+       $(_DOC_C_HTML) $(_DOC_LC_HTML))
+
+_DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml)
+
+$(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS)
+       xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@)
+
+
+################################################################################
+## All
+
+all:                                                   \
+       $(_DOC_C_DOCS)          $(_DOC_LC_DOCS)         \
+       $(_DOC_OMF_ALL)         $(_DOC_DSK_ALL)         \
+       $(_DOC_HTML_ALL)        $(_DOC_POFILES)
+
+
+################################################################################
+## Clean
+
+.PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir
+
+clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML)
+clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML)
+clean-doc-lc:
+       rm -f $(_DOC_LC_DOCS)
+       @list='$(_DOC_POFILES)'; for po in $$list; do \
+         if ! test "$$po" -ef "$(srcdir)/$$po"; then \
+           echo "rm -f $$po"; \
+           rm -f "$$po"; \
+         fi; \
+       done
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         if test -f "$$lc/.xml2po.mo"; then \
+           echo "rm -f $$lc/.xml2po.mo"; \
+           rm -f "$$lc/.xml2po.mo"; \
+         fi; \
+       done
+clean-doc-dir: clean-doc-lc
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         for dir in `find $$lc -depth -type d`; do \
+           if ! test $$dir -ef $(srcdir)/$$dir; then \
+             echo "rmdir $$dir"; \
+             rmdir "$$dir"; \
+          fi; \
+         done; \
+       done
+
+_clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf)
+_clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk)
+_clean_lc  = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc)
+_clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir)
+
+clean-local:                                           \
+       $(_clean_omf)           $(_clean_dsk)           \
+       $(_clean_lc)            $(_clean_dir)
+distclean-local:                                       \
+       $(_clean_omf)           $(_clean_dsk)           \
+       $(_clean_lc)            $(_clean_dir)
+mostlyclean-local:                                     \
+       $(_clean_omf)           $(_clean_dsk)           \
+       $(_clean_lc)            $(_clean_dir)
+maintainer-clean-local:                                        \
+       $(_clean_omf)           $(_clean_dsk)           \
+       $(_clean_lc)            $(_clean_dir)
+
+
+
+################################################################################
+## Dist
+
+.PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk
+doc-dist-hook:                                                 \
+       $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs)      \
+       $(if $(_DOC_C_FIGURES),dist-doc-figs)           \
+       $(if $(_DOC_OMF_IN),dist-doc-omf)
+#      $(if $(_DOC_DSK_IN),dist-doc-dsk)
+
+dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         echo " $(mkinstalldirs) $(distdir)/$$lc"; \
+         $(mkinstalldirs) "$(distdir)/$$lc"; \
+       done
+       @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)'; \
+       for doc in $$list; do \
+         if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \
+           docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+           if ! test -d "$(distdir)/$$docdir"; then \
+             echo "$(mkinstalldirs) $(distdir)/$$docdir"; \
+             $(mkinstalldirs) "$(distdir)/$$docdir"; \
+           fi; \
+         echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \
+         $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \
+       done
+
+dist-doc-figs: $(_DOC_SRC_FIGURES)
+       @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \
+       for fig in $$list; do \
+         if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$fig"; then \
+           figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+           if ! test -d "$(distdir)/$$figdir"; then \
+             echo "$(mkinstalldirs) $(distdir)/$$figdir"; \
+             $(mkinstalldirs) "$(distdir)/$$figdir"; \
+           fi; \
+           echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \
+           $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \
+         fi; \
+       done;
+
+dist-doc-omf:
+       @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \
+       echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \
+       $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))"
+
+dist-doc-dsk:
+       @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \
+       echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \
+       $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))"
+
+
+
+################################################################################
+## Check
+
+.PHONY: check-doc-docs check-doc-omf
+check:                                                 \
+       $(if $(DOC_MODULE),check-doc-docs)              \
+       $(if $(DOC_ID),check-doc-pages)                 \
+       $(if $(_DOC_OMF_IN),check-doc-omf)
+
+check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS)
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         if test -f "$$lc"; \
+           then d=; \
+           xmlpath="$$lc"; \
+         else \
+           d="$(srcdir)/"; \
+           xmlpath="$$lc:$(srcdir)/$$lc"; \
+         fi; \
+         echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \
+         xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \
+       done
+
+check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES)
+       for lc in C $(_DOC_REAL_LINGUAS); do \
+         if test -f "$$lc"; \
+           then d=; \
+           xmlpath="$$lc"; \
+         else \
+           d="$(srcdir)/"; \
+           xmlpath="$$lc:$(srcdir)/$$lc"; \
+         fi; \
+         for page in $(DOC_PAGES); do \
+           echo "xmllint --noout --noent --path $$xmlpath --xinclude --relaxng $(_malrng) $$d$$lc/$$page"; \
+           xmllint --noout --noent --path "$$xmlpath" --xinclude --relaxng "$(_malrng)" "$$d$$lc/$$page"; \
+         done; \
+       done
+
+check-doc-omf: $(_DOC_OMF_ALL)
+       @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
+         echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \
+         xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \
+       done
+
+
+
+################################################################################
+## Install
+
+.PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk
+
+_doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE))
+
+install-data-local:                                    \
+       $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs)   \
+       $(if $(_DOC_HTML_ALL),install-doc-html)         \
+       $(if $(_DOC_C_FIGURES),install-doc-figs)        \
+       $(if $(_DOC_OMF_IN),install-doc-omf)
+#      $(if $(_DOC_DSK_IN),install-doc-dsk)
+
+install-doc-docs:
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \
+         $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \
+       done
+       @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \
+         if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \
+         docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+         docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \
+         if ! test -d "$$docdir"; then \
+           echo "$(mkinstalldirs) $$docdir"; \
+           $(mkinstalldirs) "$$docdir"; \
+         fi; \
+         echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
+         $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \
+       done
+
+install-doc-figs:
+       @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \
+         for lc in C $(_DOC_REAL_LINGUAS); do \
+           figsymlink=false; \
+           if test -f "$$lc/$$fig"; then \
+             figfile="$$lc/$$fig"; \
+           elif test -f "$(srcdir)/$$lc/$$fig"; then \
+             figfile="$(srcdir)/$$lc/$$fig"; \
+           else \
+             figsymlink=true; \
+           fi; \
+           figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+           figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \
+           if ! test -d "$$figdir"; then \
+             echo "$(mkinstalldirs) $$figdir"; \
+             $(mkinstalldirs) "$$figdir"; \
+           fi; \
+           figbase=`echo $$fig | sed -e 's/^.*\///'`; \
+           if $$figsymlink; then \
+             echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \
+             ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \
+           else \
+             echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \
+             $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \
+           fi; \
+         done; \
+       done
+
+install-doc-html:
+       echo install-html
+
+install-doc-omf:
+       $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)
+       @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
+         echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+         $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \
+       done
+       @if test "x$(_ENABLE_SK)" = "xtrue"; then \
+         echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \
+         scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \
+       fi;
+
+install-doc-dsk:
+       echo install-dsk
+
+
+
+################################################################################
+## Uninstall
+
+.PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk
+uninstall-local:                                       \
+       $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \
+       $(if $(_DOC_HTML_ALL),uninstall-doc-html)       \
+       $(if $(_DOC_C_FIGURES),uninstall-doc-figs)      \
+       $(if $(_DOC_OMF_IN),uninstall-doc-omf)
+#      $(if $(_DOC_DSK_IN),uninstall-doc-dsk)
+
+uninstall-doc-docs:
+       @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \
+         echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
+         rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
+       done
+
+uninstall-doc-figs:
+       @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \
+         echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \
+         rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \
+       done;
+
+uninstall-doc-omf:
+       @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
+         if test "x$(_ENABLE_SK)" = "xtrue"; then \
+           echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+           scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+         fi; \
+         echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+         rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+       done
diff --git a/gtk-doc.make b/gtk-doc.make
new file mode 100644 (file)
index 0000000..0f87cc7
--- /dev/null
@@ -0,0 +1,196 @@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN = $(LIBTOOL) --mode=execute
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN = sh -c
+endif
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+EXTRA_DIST =                           \
+       $(content_files)                \
+       $(HTML_IMAGES)                  \
+       $(DOC_MAIN_SGML_FILE)           \
+       $(DOC_MODULE)-sections.txt      \
+       $(DOC_MODULE)-overrides.txt
+
+DOC_STAMPS=scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+          $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES =                 \
+       $(DOC_MODULE).args       \
+       $(DOC_MODULE).hierarchy  \
+       $(DOC_MODULE).interfaces \
+       $(DOC_MODULE).prerequisites \
+       $(DOC_MODULE).signals
+
+REPORT_FILES = \
+       $(DOC_MODULE)-undocumented.txt \
+       $(DOC_MODULE)-undeclared.txt \
+       $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+
+if ENABLE_GTK_DOC
+all-local: html-build.stamp
+else
+all-local:
+endif
+
+docs: html-build.stamp
+
+$(REPORT_FILES): sgml-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+       @echo 'gtk-doc: Scanning header files'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && \
+         gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+       if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+           CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+       else \
+           cd $(srcdir) ; \
+           for i in $(SCANOBJ_FILES) ; do \
+               test -f $$i || touch $$i ; \
+           done \
+       fi
+       touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+       @true
+
+#### templates ####
+
+tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+       @echo 'gtk-doc: Rebuilding template files'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+       touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+       @true
+
+tmpl/*.sgml:
+       @true
+
+
+#### xml ####
+
+sgml-build.stamp: tmpl.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
+       @echo 'gtk-doc: Building XML'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && \
+       gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS)
+       touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+       @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+       @echo 'gtk-doc: Building HTML'
+       @-chmod -R u+w $(srcdir)
+       rm -rf $(srcdir)/html
+       mkdir $(srcdir)/html
+       mkhtml_options=""; \
+       gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
+       if test "$(?)" = "0"; then \
+         mkhtml_options=--path="$(srcdir)"; \
+       fi
+       cd $(srcdir)/html && gtkdoc-mkhtml $(mkhtml_options) $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+       test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+       @echo 'gtk-doc: Fixing cross-references'
+       cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+       touch html-build.stamp
+
+##############
+
+clean-local:
+       rm -f *~ *.bak
+       rm -rf .libs
+
+distclean-local:
+       cd $(srcdir) && \
+         rm -rf xml $(REPORT_FILES) \
+                $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+maintainer-clean-local: clean
+       cd $(srcdir) && rm -rf xml html
+
+install-data-local:
+       installfiles=`echo $(srcdir)/html/*`; \
+       if test "$$installfiles" = '$(srcdir)/html/*'; \
+       then echo '-- Nothing to install' ; \
+       else \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+         else \
+           installdir="$(DESTDIR)$(TARGET_DIR)"; \
+         fi; \
+         $(mkinstalldirs) $${installdir} ; \
+         for i in $$installfiles; do \
+           echo '-- Installing '$$i ; \
+           $(INSTALL_DATA) $$i $${installdir}; \
+         done; \
+         if test -n "$(DOC_MODULE_VERSION)"; then \
+           mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+             $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+           mv -f $${installdir}/$(DOC_MODULE).devhelp \
+             $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp; \
+         fi; \
+         ! which gtkdoc-rebase >/dev/null 2>&1 || \
+           gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir} ; \
+       fi
+
+uninstall-local:
+       if test -n "$(DOC_MODULE_VERSION)"; then \
+         installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+       else \
+         installdir="$(DESTDIR)$(TARGET_DIR)"; \
+       fi; \
+       rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+if ENABLE_GTK_DOC
+dist-check-gtkdoc:
+else
+dist-check-gtkdoc:
+       @echo "*** gtk-doc must be installed and enabled in order to make dist"
+       @false
+endif
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+       mkdir $(distdir)/tmpl
+       mkdir $(distdir)/xml
+       mkdir $(distdir)/html
+       -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+       -cp $(srcdir)/xml/*.xml $(distdir)/xml
+       cp $(srcdir)/html/* $(distdir)/html
+       -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+       -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+       cd $(distdir) && rm -f $(DISTCLEANFILES)
+       ! which gtkdoc-rebase >/dev/null 2>&1 || \
+         gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
diff --git a/help/C/figures/glabels-template-cd.png b/help/C/figures/glabels-template-cd.png
new file mode 100644 (file)
index 0000000..0a3de3b
Binary files /dev/null and b/help/C/figures/glabels-template-cd.png differ
diff --git a/help/C/figures/glabels-template-label.png b/help/C/figures/glabels-template-label.png
new file mode 100644 (file)
index 0000000..87a724b
Binary files /dev/null and b/help/C/figures/glabels-template-label.png differ
diff --git a/help/C/figures/glabels-template-layout.png b/help/C/figures/glabels-template-layout.png
new file mode 100644 (file)
index 0000000..c712795
Binary files /dev/null and b/help/C/figures/glabels-template-layout.png differ
diff --git a/help/C/figures/main-window-empty.png b/help/C/figures/main-window-empty.png
new file mode 100644 (file)
index 0000000..94a2ab4
Binary files /dev/null and b/help/C/figures/main-window-empty.png differ
diff --git a/help/C/figures/merge-ex1-1.png b/help/C/figures/merge-ex1-1.png
new file mode 100644 (file)
index 0000000..72221b9
Binary files /dev/null and b/help/C/figures/merge-ex1-1.png differ
diff --git a/help/C/figures/merge-ex1-2.png b/help/C/figures/merge-ex1-2.png
new file mode 100644 (file)
index 0000000..37ea403
Binary files /dev/null and b/help/C/figures/merge-ex1-2.png differ
diff --git a/help/C/figures/merge-ex1-3.png b/help/C/figures/merge-ex1-3.png
new file mode 100644 (file)
index 0000000..ede4240
Binary files /dev/null and b/help/C/figures/merge-ex1-3.png differ
diff --git a/help/C/figures/merge-ex1-4.png b/help/C/figures/merge-ex1-4.png
new file mode 100644 (file)
index 0000000..808aef6
Binary files /dev/null and b/help/C/figures/merge-ex1-4.png differ
diff --git a/help/C/figures/merge-ex2-1.png b/help/C/figures/merge-ex2-1.png
new file mode 100644 (file)
index 0000000..a41e3d6
Binary files /dev/null and b/help/C/figures/merge-ex2-1.png differ
diff --git a/help/C/figures/merge-ex2-2.png b/help/C/figures/merge-ex2-2.png
new file mode 100644 (file)
index 0000000..5de11e0
Binary files /dev/null and b/help/C/figures/merge-ex2-2.png differ
diff --git a/help/C/figures/merge-ex2-3.png b/help/C/figures/merge-ex2-3.png
new file mode 100644 (file)
index 0000000..c222d9c
Binary files /dev/null and b/help/C/figures/merge-ex2-3.png differ
diff --git a/help/C/figures/merge-ex2-4.png b/help/C/figures/merge-ex2-4.png
new file mode 100644 (file)
index 0000000..73996dd
Binary files /dev/null and b/help/C/figures/merge-ex2-4.png differ
diff --git a/help/C/figures/merge-ex3-1.png b/help/C/figures/merge-ex3-1.png
new file mode 100644 (file)
index 0000000..6395cd0
Binary files /dev/null and b/help/C/figures/merge-ex3-1.png differ
diff --git a/help/C/figures/merge-ex3-2.png b/help/C/figures/merge-ex3-2.png
new file mode 100644 (file)
index 0000000..09c7bea
Binary files /dev/null and b/help/C/figures/merge-ex3-2.png differ
diff --git a/help/C/figures/object-editor-sidebar.png b/help/C/figures/object-editor-sidebar.png
new file mode 100644 (file)
index 0000000..1c41426
Binary files /dev/null and b/help/C/figures/object-editor-sidebar.png differ
diff --git a/help/C/figures/print-copies.png b/help/C/figures/print-copies.png
new file mode 100644 (file)
index 0000000..029add8
Binary files /dev/null and b/help/C/figures/print-copies.png differ
diff --git a/help/C/figures/print-merge.png b/help/C/figures/print-merge.png
new file mode 100644 (file)
index 0000000..86f2e92
Binary files /dev/null and b/help/C/figures/print-merge.png differ
diff --git a/help/C/glabels.xml b/help/C/glabels.xml
new file mode 100644 (file)
index 0000000..8e17cb3
--- /dev/null
@@ -0,0 +1,2251 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+  <!ENTITY legal SYSTEM "legal.xml">
+  <!ENTITY appversion "2.2.6">
+  <!ENTITY manrevision "2.2.6">
+  <!ENTITY date "December 2007">
+  <!ENTITY app "<application>gLabels</application>">
+  <!-- Information about the entities
+       The legal.xml file contains legal information, there is no need to edit the file. 
+       Use the appversion entity to specify the version of the application.
+       Use the manrevision entity to specify the revision number of this manual.
+       Use the date entity to specify the release date of this manual.
+       Use the app entity to specify the name of the application. -->
+]>
+
+
+<!-- 
+      (Do not remove this comment block.)
+  Maintained by the GNOME Documentation Project
+  http://developer.gnome.org/projects/gdp
+  Template version: 2.0 beta
+  Template last modified Apr 11, 2002
+-->
+
+<!-- =============Document Header ============================= -->
+<article id="index" lang="en">
+<!-- please do not change the id; for translations, change lang to -->
+<!-- appropriate code -->
+  <articleinfo> 
+    <title>&app; Manual V&manrevision;</title>       
+       <abstract role="description">
+       <para> 
+        User manual for the &app; label and business card creation program
+       </para>
+    </abstract>
+    <copyright> 
+      <year>2003-2009</year> 
+      <holder>Jim Evins</holder> 
+    </copyright>
+       <publisher> 
+               <publishername> Jim Evins </publishername> 
+       </publisher> 
+
+   &legal;
+   <!-- This file  contains link to license for the documentation (GNU FDL), and 
+        other legal stuff such as "NO WARRANTY" statement. Please do not change 
+       any of this. -->
+
+    <authorgroup> 
+      <author role="maintainer"> 
+               <firstname>Jim</firstname> 
+               <surname>Evins</surname> 
+      </author> 
+      
+<!-- This is appropriate place for other contributors: translators,
+     maintainers,  etc. Commented out by default.
+     
+      <othercredit role="translator">
+               <firstname>Latin</firstname> 
+               <surname>Translator 1</surname> 
+               <affiliation> 
+                       <orgname>Latin Translation Team</orgname> 
+                       <address> <email>translator@gnome.org</email> </address> 
+               </affiliation>
+               <contrib>Latin translation</contrib>
+      </othercredit>
+-->
+    </authorgroup>
+
+
+<!-- According to GNU FDL, revision history is mandatory if you are -->
+<!-- modifying/reusing someone else's document.  If not, you can omit it. -->
+<!-- Remember to remove the &manrevision; entity from the revision entries other
+-->
+<!-- than the current revision. -->
+<!-- The revision numbering system for GNOME manuals is as follows: -->
+<!-- * the revision number consists of two components -->
+<!-- * the first component of the revision number reflects the release version of the GNOME desktop. -->
+<!-- * the second component of the revision number is a decimal unit that is incremented with each revision of the manual. -->
+<!-- For example, if the GNOME desktop release is V2.x, the first version of the manual that -->
+<!-- is written in that desktop timeframe is V2.0, the second version of the manual is V2.1, etc. -->
+<!-- When the desktop release version changes to V3.x, the revision number of the manual changes -->
+<!-- to V3.0, and so on. -->  
+    <revhistory>
+      <revision> 
+               <revnumber>gLabels Manual V2.2.6</revnumber> 
+               <date>October 2009</date> 
+               <revdescription> 
+                       <para role="author">Mario Blättermann
+               <email>mariobl@gnome.org</email>
+                       </para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+      <revision> 
+               <revnumber>gLabels Manual V2.2</revnumber> 
+               <date>December 2007</date> 
+               <revdescription> 
+                       <para role="author">Jim Evins
+               <email>evins@snaught.com</email>
+                       </para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+    </revhistory> 
+
+    <releaseinfo>This manual describes version &appversion; of &app;.
+    </releaseinfo> 
+    <legalnotice> 
+      <title>Feedback</title> 
+      <para>To report a bug or make a suggestion regarding the &app; application or
+      this manual, follow the directions in the <ulink url="http://glabels.sourceforge.net/contact/"
+         type="http">&app; Contact Page</ulink>. 
+      </para>
+<!-- Translators may also add here feedback address for translations -->
+    </legalnotice> 
+  </articleinfo> 
+
+  <indexterm zone="index"> 
+    <primary>gLabels</primary> 
+  </indexterm> 
+  <indexterm zone="index"> 
+    <primary>glabels</primary> 
+  </indexterm>
+
+
+
+
+<!-- ============= Document Body ============================= -->
+<!-- ============= Introduction ============================== -->
+<!-- Use the Introduction section to give a brief overview of what
+     the application is and what it does. -->
+  <sect1 id="glabels-introduction"> 
+    <title>Introduction</title> 
+
+    <para>The &app; application is a lightweight program for creating labels
+      and business cards for the <systemitem>GNOME desktop</systemitem>
+      environment.  It is designed to work with various laser/ink-jet
+      peel-off label and business card sheets that you'll find at most
+      office supply stores.</para>
+
+  </sect1>
+
+
+
+
+<!-- =========== Getting Started ============================== -->
+<!-- Use the Getting Started section to describe the steps required
+     to start the application and to describe the user interface components
+     of the application. If there is other information that it is important
+     for readers to know before they start using the application, you should
+     also include this information here. 
+     If the information about how to get started is very short, you can 
+     include it in the Introduction and omit this section. -->
+
+  <sect1 id="glabels-getting-started"> 
+    <title>Getting Started</title> 
+
+    <sect2 id="glabels-start">
+    <title>To Start &app;</title>
+    <para>You can start &app; in the following ways:
+    </para> 
+    <variablelist>
+       <varlistentry>
+               <term><guimenu>Applications</guimenu> menu</term>
+               <listitem>
+               <para>Choose 
+               <menuchoice>
+               <guisubmenu>Office</guisubmenu>
+               <guimenuitem>gLabels</guimenuitem>
+               </menuchoice>. </para>
+               </listitem>
+       </varlistentry>
+       <varlistentry>
+               <term>Command line</term>
+               <listitem>
+               <para>Type <command>glabels</command>,
+                then press <keycap>Return</keycap>:</para>
+               </listitem>
+       </varlistentry>
+    </variablelist>
+    </sect2>
+
+    <sect2 id="glabels-when-start">
+    <title>When You Start &app;</title>
+    <para>When you start &app;, the following window is displayed.</para>
+
+    <!-- ==== Figure ==== -->
+      <figure id="mainwindow-fig"> 
+       <title>&app; Start Up Window</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+               fileref="figures/main-window-empty.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+    <!-- ==== End of Figure ==== -->
+
+    <!-- Include any descriptions of the GUI immediately after the screenshot of the main UI, -->
+    <!-- for example, the items on the menubar and on the toolbar. This section is optional. -->
+
+    <para>The &app; window contains the following elements:
+    </para>
+      <variablelist>
+       <varlistentry>
+       <term>Menubar. </term>
+       <listitem>
+           <para>The menus on the menubar contain all of the commands you
+              need to create and edit labels and business cards in 
+             &app;.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Main toolbar. </term>
+       <listitem>
+           <para>The main toolbar contains a subset of common File and Edit
+              commands that you can access from the menubar.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Drawing toolbar.</term>
+       <listitem>
+           <para>The drawing toolbar contains a subset of commands for
+              editing the current &app; document.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Display area.</term>
+       <listitem>
+           <para>The display area is the main drawing interface to
+              &app;.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Object sidebar.</term>
+       <listitem>
+           <para>The object sidebar provides an interface for viewing and
+              editing all properties of an individual object. </para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Properties toolbar. </term>
+       <listitem>
+           <para>The properties toolbar contains a set of tools to
+              manipulate the properties of selected objects and set default
+              properties for new objects.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Statusbar. </term>
+       <listitem>
+           <para>The statusbar displays information about current
+              &app; activity and contextual
+              information about the menu items. </para>
+       </listitem>
+       </varlistentry>
+       </variablelist>
+    </sect2>
+  </sect1>
+
+
+
+
+<!-- ================ Usage ================================ -->
+<!-- Use this section to describe how to use the application to perform the tasks for 
+  which the application is designed. -->
+  <sect1 id="glabels-usage"> 
+    <title>Usage</title> 
+
+<!-- ============= To create a new file ============================= -->
+    <sect2 id="glabels-open-new"> 
+      <title>To Create a New Label or Card</title>
+
+      <para>To create a new label or business card, choose 
+        <menuchoice> <guimenu>File</guimenu> <guimenuitem>New</guimenuitem>
+       </menuchoice>
+       to display the <guilabel>New Label or Card</guilabel> dialog. Select
+        the media type and orientation for the new document,
+       then click <guibutton>OK</guibutton>. A new document is
+       displayed in the display area of the &app;
+        window. </para>
+
+      <para>If your particular media type is missing from this dialog,
+        see <xref linkend="glabels-create-template"/></para>
+
+    </sect2>
+
+<!-- ============= To Open a File ============================= -->
+    <sect2 id="glabels-open-file"> 
+      <title>To Open a File</title>
+
+      <para>To open a file, choose 
+        <menuchoice> <guimenu>File</guimenu> <guimenuitem>Open</guimenuitem>
+       </menuchoice> to display the <guilabel>Open File</guilabel> dialog.
+        Select the file that you want to open, then click
+        <guibutton>OK</guibutton>. The file is displayed in the display area
+        of the &app; window. </para>
+
+      <para>You can also open multiple files in
+        &app;. The application creates a separate
+        application window for each open file.</para>
+
+      <para>The application records the paths and filenames of the
+        most recent files that you have edited and displays the files as menu
+        items on the <menuchoice>
+        <guimenu>File</guimenu><guisubmenu>Recent Files</guisubmenu>
+        </menuchoice> menu.</para>
+
+    </sect2>
+
+<!-- ============= To Open Multiple Files from the Command Line ========= -->
+    <sect2 id="glabels-run-from-cmd-line"> 
+      <title>To Open Multiple Files from a Command Line</title>
+
+      <para>You can run &app; from a command line
+       and open a single file or multiple files. To open multiple files from
+        a command line, type the following command, then press
+        <keycap>Return</keycap>:</para>
+
+      <para><command>glabels
+      <replaceable>file1.glabels file2.glabels file3.glabels</replaceable>
+      </command></para>
+
+      <para>When the application starts, the files that you specify are
+       displayed in separate &app; windows.</para>
+
+    </sect2>
+
+<!-- ============= To Save a File ========= -->
+    <sect2 id="glabels-save-file"> 
+      <title>To Save a File</title>
+
+      <para>You can save files in the following ways:</para>
+
+      <itemizedlist> 
+       <listitem>
+
+         <para>To save changes to an existing file, choose 
+            <menuchoice> <guimenu>File</guimenu>
+            <guimenuitem>Save</guimenuitem> </menuchoice>. </para>
+
+       </listitem>
+       <listitem>
+
+         <para>To save a new file or to save an existing file under a new
+            filename, choose <menuchoice> <guimenu>File</guimenu>
+            <guimenuitem>Save As</guimenuitem> </menuchoice>. Enter a name
+            for the file in the <guilabel>Save As</guilabel> dialog box,
+            then click <guibutton>OK</guibutton>.</para>
+
+       </listitem>
+      </itemizedlist>
+
+    </sect2>
+
+<!-- ============= To Change Label Properties ========= -->
+    <sect2 id="glabels-label-properties"> 
+      <title>To Change Label Properties</title>
+
+      <para>To change the media type and/or orientation of a label, choose
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Properties</guimenuitem> </menuchoice> to display the
+        <guilabel>Label properties</guilabel> dialog.  Select the
+        new media type and orientation for the document, then click
+        <guibutton>OK</guibutton>.</para>
+
+    </sect2>
+
+<!-- ============= To create a custom template ======================= -->
+    <sect2 id="glabels-create-template"> 
+      <title>To Create a Custom Template</title>
+
+      <para>To create a new custom template, choose 
+        <menuchoice> <guimenu>File</guimenu>
+       <guimenuitem>Template Designer ...</guimenuitem> </menuchoice>
+       to display the <guilabel>Template Designer</guilabel> dialog.
+        This dialog will assist you in creating a custom template for
+        most types of label or card stationery that you may encounter.</para>
+
+      <para>If you prefer, you can create your templates manually.
+        For this option see <xref linkend="glabels-manual-create-template"/>
+      </para>
+
+    </sect2>
+
+<!-- ============= To Close a File ========= -->
+    <sect2 id="glabels-close-file"> 
+      <title>To Close a File</title>
+
+      <para>To close the current document, choose
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Close</guimenuitem> </menuchoice> to close the application
+        window.  If the current document is modified, a confirmation dialog
+        will be presented, allowing you to save the document or cancel
+        the command.  If the window being closed is the only open window,
+        &app; will exit.</para>
+
+    </sect2>
+
+<!-- ============= To Quit ========= -->
+    <sect2 id="glabels-quit"> 
+      <title>To Quit &app;</title>
+
+      <para>To quit &app;, choose
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Quit</guimenuitem> </menuchoice>. This is equivalent
+        to closing all open windows.  See
+        <xref linkend="glabels-close-file"/>.</para>
+
+    </sect2>
+
+<!-- ============= To Print Labels and Cards ========= -->
+    <sect2 id="glabels-print-file"> 
+      <title>To Print Labels or Cards</title>
+
+      <para>To print labels or cards, choose
+        <menuchoice> <guimenu>File</guimenu> <guimenuitem>Print</guimenuitem>
+       </menuchoice> to display the <guilabel>Print</guilabel> dialog.
+        Once print options have been selected, click <guilabel>Print</guilabel>
+        to print the labels or cards.  To simply preview the results,
+        click <guilabel>Print Preview</guilabel> instead.</para>
+
+      <para>The <guilabel>Print</guilabel> dialog allows you to specify the
+        following print options:</para>
+               
+      <sect3 id="print-dialog-job">
+       <title>The Labels Tab of the Print Dialog</title>
+
+       <variablelist>
+
+         <varlistentry>
+            <term><guilabel>Print control (Simple)</guilabel></term>
+           <listitem> 
+
+             <para>For simple labels or cards (no document merge), the <guilabel>labels</guilabel>
+                tabbed section contains the following copy controls.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-copies-fig"> 
+               <title>Print Copy Controls</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata
+                      fileref="figures/print-copies.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>The number of copies of the label can be selected by
+                choosing the number of full sheets to print, or a specific
+                subset of labels on a single sheet.</para>
+
+             <para>The mini-preview can also be used to graphically select
+                the subset of labels by clicking the first label on the
+                mini-preview and dragging to the last label.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry>
+            <term><guilabel>Print control (Merge)</guilabel></term>
+           <listitem> 
+
+             <para>For labels or cards using the document merge (also known
+                as "mail merge") capability, the <guilabel>labels</guilabel> tabbed section contains
+                the following merge controls instead of copy controls.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-merge-fig"> 
+               <title>Print Document Merge Controls</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata
+                      fileref="figures/print-merge.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>The total number of labels or cards printed is the
+                product of the number of records in the merge source and
+                the number of copies selected.  If multiple copies are
+                selected, these can be either collated (copies of the
+                same record grouped together) or un-collated (one copy
+                each record is printed before next copy).</para>
+
+             <para>Printing can begin on any label on the first sheet.
+                This can be selected with the <guilabel>Start on
+                label</guilabel> spinbutton.</para>
+
+             <para>The mini-preview can also be used to graphically select
+                this first label, by clicking on the desired label in the
+                mini-preview.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry> <term><guilabel>Options</guilabel> </term> 
+           <listitem> 
+             <para>The following options can also be selected.</para>
+             <itemizedlist>
+               <listitem>
+                 <para><guilabel>print outlines</guilabel></para>
+                 <para>Print outlines of labels.  This option is useful for
+                    dry-runs, to test printer alignment.</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>print in reverse</guilabel></para>
+                 <para>Prints the labels as mirror images.  This option is
+                    useful for printing on clear labels that will be viewed
+                    from the reverse side (e.g. in a car window).</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>print crop marks</guilabel></para>
+                 <para>Prints crop marks along the edge of the sheet.
+                    This option is useful for printing on blank stock, to
+                    be cut after printing.  This option does not work well
+                    with all templates.</para>
+               </listitem>
+             </itemizedlist>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+      </sect3>
+               
+    </sect2>
+
+<!-- ============= To Create New Objects ========= -->
+    <sect2 id="glabels-new-objects"> 
+      <title>To Create New Objects</title>
+
+      <para>Objects are created by choosing the appropriate selection under
+        the <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Create Object</guimenuitem> </menuchoice> submenu or
+        the <guilabel>Drawing Toolbar</guilabel>.  This will place the
+        display area into object creation mode as indicated by its cursor.
+        To return to the default object selection mode without creating
+        an object, choose <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Select Mode</guimenuitem> </menuchoice>.  This will
+        return the display area's cursor to the default selection arrow.</para>
+
+      <para>The following describes the object creation mode for each object
+        type:</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Text</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              text object.  New text objects are initialized with the
+              string "Text."  To change this text, or other properties, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Box</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              box object and drag to the desired location of the lower right
+              corner.  If you simply click in a single location, a square
+              box will be created. To change properties of the box object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Line</term>
+         <listitem>
+           <para>Click the desired location of one end of the
+              line object and drag to the desired location of the other end.
+              If you simply click in a single location, a diagonal line
+              will be created. To change properties of the line object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Ellipse</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              ellipse object and drag to the desired location of the lower
+              right corner.  If you simply click in a single location, a circle
+              will be created. To change properties of the ellipse object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Image</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              image object and drag to the desired location of the lower
+              right corner.  If you simply click in a single location, a square
+              will be created.  New image objects are initialized with a
+              simple checkerboard image.  To change this image, or other
+              properties of the image object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Barcode</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              barcode object.  New barcode objects are initialized to a
+              POSTNET barcode with representative data.  To change data
+              and properties of the barcode object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+
+    </sect2>
+
+<!-- ============= To Select Objects ========= -->
+    <sect2 id="glabels-select-objects"> 
+      <title>To Select Objects</title>
+
+      <para>A prerequisite for performing operations on objects is the
+        selection of individual objects or groups of objects.  The
+        display area must be in the object selection mode to create new
+        selections, as indicated by an arrow cursor.  The object
+        selection mode is selected by the
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Select Mode</guimenuitem> </menuchoice> menu item,
+        or the corresponding command on the <guilabel>Drawing
+        Toolbar</guilabel>.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Selecting a single object</term>
+         <listitem>
+           <para>A single object can be selected simply by clicking
+             on the desired object in the display area.
+             Once selected the object will be highlighted with a set of
+             resizing handles.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Aggregate object selections</term>
+         <listitem>
+           <para>Multiple objects can be selected by first selecting the first
+              object as above and then by holding the <keycap>Ctrl</keycap>
+              key while selecting additional objects.
+              Individual objects can be added to an existing selection
+              at any time by holding the <keycap>Ctrl</keycap> key while
+              selecting the desired objects.  All objects can also be
+              selected by using the <menuchoice> <guimenu>Edit</guimenu>
+              <guimenuitem>Select All</guimenuitem> </menuchoice>
+              menu item.  All objects in an aggregate object selection will be
+              highlighted.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Area selections</term>
+         <listitem>
+           <para>Multiple objects can also be selected by clicking an empty
+              area and dragging to form a rectangular area.  When released,
+              all objects contained in the area will form an aggregate
+              selection.  An area selection can be used to add to an existing
+              selection by holding the <keycap>Ctrl</keycap> key while
+              performing the selection.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Unselecting objects</term>
+         <listitem>
+           <para>Individual objects can be removed from an existing
+              selection by holding the <keycap>Ctrl</keycap> key while
+              clicking on a previously selected object.  An entire selection
+              can be dismissed by using the <menuchoice>
+             <guimenu>Edit</guimenu> <guimenuitem>Un-select All</guimenuitem>
+              </menuchoice> menu item
+              or by simply clicking any empty space in the display area.
+              Once an object is unselected its highlight is removed.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= Clipboard Commands ========= -->
+    <sect2 id="glabels-clipboard"> 
+      <title>Clipboard Commands</title>
+
+      <para>Object selections can be manipulated using the standard clipboard
+        operations <guimenuitem>Cut</guimenuitem>,
+        <guimenuitem>Copy</guimenuitem>, <guimenuitem>Paste</guimenuitem>,
+        and <guimenuitem>Delete</guimenuitem>.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>X</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Cut</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Moves selected objects to the clipboard.  The objects are
+              then available for pasting back into the current document or
+              another document.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Copy</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Copies selected objects to the clipboard without deleting
+              them.  The objects are then available for pasting back into
+              the current document or another document.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>V</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Paste</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Pastes objects from the clipboard into the current document.
+              &app; can only paste objects from
+              another &app; document.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycap>Delete</keycap>
+             </shortcut>
+             <guimenuitem>Delete</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Deletes selected objects without placing them on the
+              clipboard.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= To Edit object Properties ========= -->
+    <sect2 id="glabels-object-properties"> 
+      <title>To Edit Object Properties</title>
+
+      <para>Most object properties can be modified through the object
+        editor sidebar, illustrated below.  To use the object editor,
+        a single object must first be selected.  See
+        <xref linkend="glabels-select-objects" />.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="object-editor-sidebar-fig"> 
+       <title>Object Editor Sidebar</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+             fileref="figures/object-editor-sidebar.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>The object editor will contain a subset of the following
+        tabbed sections, depending on object type:</para>
+
+      <sect3 id="object-editor-text">
+       <title>Text Tabbed Section (Text objects)</title>
+
+       <para>This section contains a small editor for changing the content
+          of a text object.  It also contains a dropdown menu of available
+          document merge keys, that can be inserted into text.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-image">
+       <title>Image Tabbed Section (Image objecs)</title>
+
+       <para>This section contains a file entry with preview to select
+          image files.  The browse button can be used to easily locate
+          image files.  Alternatively, a document merge key can be used
+          instead to provide a filename at print time.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-data">
+       <title>Data Tabbed Section (Barcode objecs)</title>
+
+       <para>This section contains a text entry to enter literal barcode
+          data. Alternatively, a document merge key can be used to
+          provide this data at print time.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-style">
+       <title>Style Tabbed Section (Text objects)</title>
+
+       <para>This section contains controls to select text properties,
+          including font family, font size, font weight, color, and
+          text justification.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-barcode">
+       <title>Style Tabbed Section (Barcode objecs)</title>
+
+       <para>This section contains controls to select barcode properties,
+          including barcode style, color, whether to print text, and whether
+          to include a checksum digit.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-line">
+       <title>Line Tabbed Section</title>
+
+       <para>This section contains controls to select properties of lines
+          and outlines.  These properties include line width and color.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-fill">
+       <title>Fill Tabbed Section</title>
+
+       <para>This section contains controls to select fill properties of box
+          and ellipse objects.  Currently the only fill property is fill
+          color.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size">
+       <title>Size Tabbed Section (All except line objects)</title>
+
+       <para>This section contains controls to select the width and height
+          of an object.  A checkbox is provided, so that the current aspect
+          ratio can be locked while manipulating the width and height controls.
+          Image objects also provide a button to reset the size to the
+          image's natural size (Assumes 72DPI).</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size-line">
+       <title>Size Tabbed Section (Line objects)</title>
+
+       <para>This section contains controls to select the length and angle
+          of a line object.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-position">
+       <title>Position Tabbed Section</title>
+
+       <para>This section contains controls to change the position of an
+          object.</para>
+
+      </sect3>
+
+
+      <sect3 id="object-editor-shadow">
+       <title>Shadow Tabbed Section (All except image and barcode objects)</title>
+
+       <para>This section contains controls to add a shadow to an object.</para>
+
+      </sect3>
+
+
+    </sect2>
+
+<!-- ============= Other Manipulations of Objects ========= -->
+    <sect2 id="glabels-object-manipulation"> 
+      <title>Other Manipulations of Objects</title>
+
+      <para>Objects can also be manipulated in the following ways.</para>
+
+      <sect3 id="other-moving-resizing">
+       <title>Moving and Resizing Objects</title>
+
+       <para>Objects can be moved by simply clicking on a selected
+          object and dragging the object to its new location.  If the object
+          is part of an aggregate selection, all objects in the selection
+          will move with the object being dragged, maintaining their relative
+          positions to one another.  If no object is selected, clicking on
+          an object will create a new selection containing that object.
+          See <xref linkend="glabels-select-objects" />.</para>
+
+       <para>A selected object can be resized by clicking one of its resize
+          handle and dragging it to obtain the new size.</para>
+
+      </sect3>
+
+      <sect3 id="other-stacking-order">
+       <title>Changing Stacking Order</title>
+
+       <para>Stacking order refers to relative position in the z-axis of
+          objects.  That is when objects overlap, which object will appear
+          on top of the other.  By default, newer objects will appear above
+          older objects.  To change this order, select one or more objects
+          and choose <menuchoice> <guimenu>Objects</guimenu>
+          <guimenuitem>Order</guimenuitem>
+          <guimenuitem>Bring to Front</guimenuitem> </menuchoice>
+          to raise the selection to the top of the stacking
+          order, or choose <menuchoice> <guimenu>Objects</guimenu>
+          <guimenuitem>Order</guimenuitem>
+          <guimenuitem>Send to Back</guimenuitem> </menuchoice>
+          to lower the selection to the bottom of the
+          stacking order.  These menuitems are also available by right-clicking
+          the display area when there is a non-empty selection.</para>
+
+      </sect3>
+
+      <sect3 id="other-rotating-flipping">
+       <title>Rotating and Flipping Objects</title>
+
+       <para>Objects can be rotated 90 degrees in either direction, or flipped
+          horizontally or vertically, by choosing the appropriate menuitem
+          in the  <menuchoice> <guimenu>Objects</guimenu>
+          <guimenuitem>Rotate/Flip</guimenuitem> </menuchoice> sub-menu.  These
+          menuitems are also available by right-clicking
+          the display area when there is a non-empty selection.</para>
+
+      </sect3>
+
+      <sect3 id="other-alignment">
+       <title>Aligning Objects</title>
+
+       <para>Objects can be aligned horizontally or vertically, relative to
+          one another, or relative to the center line of the label, by
+          choosing the appropriate menuitem from the  <menuchoice>
+          <guimenu>Objects</guimenu>
+          <guimenuitem>Align Horizontal</guimenuitem>
+          </menuchoice> or  <menuchoice> <guimenu>Objects</guimenu>
+          <guimenuitem>Align Horizontal</guimenuitem> </menuchoice> sub-menus.
+          These menuitems are also available by right-clicking
+          the display area when there is a non-empty selection.</para>
+
+      </sect3>
+
+      <sect3 id="other-property-bar">
+       <title>Using the Property Bar</title>
+
+       <para>The property bar can be used to change some common properties
+          of objects en-masse.  These properties include font family, font
+          size, font weight, text alignment, text color, fill color, line
+          or outline color, and line width.  The property bar also controls
+          the defaults for these properties for any newly created objects.
+          </para>
+
+      </sect3>
+
+
+
+    </sect2>
+
+<!-- ============= Document Merge Features ========= -->
+    <sect2 id="glabels-merge"> 
+      <title>Performing a Document Merge</title>
+
+      <para>Document Merge (sometimes called "Mail Merge") is a powerful
+        feature that allows a unique label or card to be printed for each
+        record in an external data source.</para>
+
+      <para>The first step to performing a document merge is to prepare
+        a source document that contains your merge data.  This data could
+        be mailing addresses or any other data that you wish to create
+        unique labels or cards for.  Currently back-ends only exist for
+        text files and the evolution data server -- others are planned.  The currently
+        supported text-file format is very simple:  each line is a record;
+        fields are delimited by commas (CSV), tabs, or colons; and newlines
+        can be embedded into fields by using the "\n" entity.  This file
+        could be created using any text editor or could be created by
+        another program or script.  A common way of creating CSV files is
+       to export them from a spreadsheet program.</para>
+
+      <para>A label must then be configured to "point at" this data file.
+        To configure the merge properties of a document, choose
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Merge Properties</guimenuitem> </menuchoice> menu item
+        to display the <guilabel>merge properties</guilabel> dialog.  This
+        dialog is used to select the exact data file format and file
+        name (location) of the merge data.</para>
+
+      <para>Finally, once the label has been configured for a data file,
+        field keys can be inserted into text objects and used as source
+        or data for barcode objects and image filenames for image objects.
+        See <xref linkend="glabels-object-properties" /> for more information
+        on using merge data for these object types.</para>
+
+      <para>Now that your label is configured, &app; will print a unique
+        label for each record in your source document -- substituting fields
+        from each record for field keys in the all text, barcode, and
+        image objects.</para>
+
+      <para>See <xref linkend="glabels-merge-tutorial" /> for a detailed
+        tutorial on the document merge feature.</para>
+
+
+    </sect2>
+
+
+  </sect1>
+
+
+
+
+  <!-- ============= Customization ============================= -->
+  <!-- Use this section to describe how to customize the application. -->
+  <sect1 id="glabels-prefs"> 
+    <title>Settings</title> 
+    <para>To configure &app;, choose 
+      <menuchoice> 
+       <guimenu>Settings</guimenu> 
+       <guimenuitem>Preferences</guimenuitem> 
+      </menuchoice>. The 
+      <guilabel>Preferences</guilabel> dialog contains the following tabbed
+      sections:</para> 
+    <itemizedlist> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-locale"/></para> 
+      </listitem> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-object-defaults"/></para> 
+      </listitem> 
+    </itemizedlist>
+<!-- =============== Customization Subsection ================ -->
+<!-- Use a new section to describe different tabbed sections on the Settings or Preferences
+            dialog. -->
+    <sect2 id="glabels-prefs-locale"> 
+      <title>Locale</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Units</guilabel> </term> 
+         <listitem> 
+           <para>Use this radio button group to specify your preferred units.
+              Select one of the following options:</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Points</guilabel> </para> 
+               <para>Use points (1 point = 1/72 in = 0.352778 mm).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Inches</guilabel> </para> 
+               <para>Use inches.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Millimeters</guilabel> </para> 
+               <para>Use millimeters.</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Default: 
+             <guilabel>Inches</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Default page size</guilabel> </term> 
+         <listitem> 
+           <para>Use this radio button group to specify your preferred page size.
+              This will make it quicker for you to locate media types when creating a new
+              label or card.</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>US Letter</guilabel> </para> 
+               <para>Most of your media will be of the US Letter page size (8.5 x 11 inches).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>ISO A4</guilabel> </para> 
+               <para>Most of your media will be of the ISO A4 page size (210 x 297 mm).</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Default: 
+             <guilabel>US Letter</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2>
+    <!-- ============= Customization Subsection ===================== -->
+    <!-- Another tabbed section on the Preferences dialog. -->
+    <sect2 id="glabels-prefs-object-defaults"> 
+      <title>Object defaults</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Text</guilabel> </term> 
+         <listitem> 
+           <para>Use these controls to set the default properties of new text objects.
+              These properties are</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Font</guilabel> </para> 
+               <para>These controls are used to select font family and font size, and
+                  whether the font should bold or in italics.</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Color</guilabel> </para> 
+               <para>This control selects the default text color.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Alignment</guilabel> </para> 
+               <para>These controls are used to select the default text alignment (left, center or right).</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Line</guilabel> </term> 
+         <listitem> 
+           <para>Use these controls to set the default properties of lines and outlines of
+              new objects.  These properties are</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Width</guilabel> </para> 
+               <para>This control selects the default line width.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Color</guilabel> </para> 
+               <para>This control selects the default line color.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Fill</guilabel> </term> 
+         <listitem> 
+           <para>Use these controls to set the default fill properties of
+              new objects.  These properties are</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Color</guilabel> </para> 
+               <para>This control selects the default fill color.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2> 
+  </sect1>
+
+
+
+
+<!-- ============= Document Merge Tutorial ================================== -->
+  <sect1 id="glabels-merge-tutorial"> 
+    <title>Document Merge Tutorial</title>
+
+    <para>Document Merge (sometimes called "Mail Merge") is a powerful
+      feature that allows a unique label or card to be printed for each
+      record in an external data source.  It is however, the most mis-understood
+      feature of &app;.  The following examples
+      will step through a couple of common tasks using the document merge
+      feature.</para>
+
+    <sect2 id="merge-ex1">
+      <title>Example 1: Name Tags Using a CSV File</title>
+  
+      <para>In this example we are organizing an orientation party for the new
+        crew members of our ship.  We have a list of freshman crew members that we
+        created in <application>gnumeric</application> and exported as the following
+        CSV file.  We could have created this file by using a text editor, but heck it
+        is the 23rd century.</para>
+
+      <programlisting>
+Name,Department,SN
+"Jim Kirk",Management,"SC937-0176 CEC"
+"Mr. Spock",Sciences,S179-276SP
+"Leonard McCoy",Medicine,unknown
+"Montgomery Scott",Engineering,SE-197-54T
+      </programlisting>
+
+      <para>In &app; we have created a new &app;
+        document using the Avery 5395 "Name Badge Labels" template.  Next we use the
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Merge Properties</guimenuitem> </menuchoice> menu item to display
+        the <guilabel>merge properties</guilabel> dialog.  We use this dialog to
+        select the source type (in our case CSV) and the merge source (filename) as
+        shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-1-fig"> 
+       <title>Merge properties dialog</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex1-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Before applying the merge source, we uncheck the first record since it is only
+        column headers from our original <application>gnumeric</application> spreadsheet
+        and would simply waste our first label.  We could also unselect any other records
+        that we didn't want to print a label for.</para>
+
+      <para>We can also view each record in more detail by clicking on the appropriate
+        expander (the little triangles) as shown.  Once we are satisfied with the
+        selections in this dialog we click <guibutton>OK</guibutton> to accept the
+        changes.</para>
+
+      <para>Now we start adding objects to our &app; document as shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-2-fig"> 
+       <title>Adding objects</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex1-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>In this example we have added three text objects and a barcode object.  The
+        first text object contains only simple literal text ("Hello, my name is").  The
+        second text object contains a single merge field ("${1}") corresponding to the
+        first field of a record (first column of a line) which contains the new crew
+        member's full name.  The third text field contains both literal text
+        ("Department: ") followed by a single merge field ("${2}") corresponding to
+        the second field or the crew member's department.  The barcode object is
+        configured to use field (or key) "3" which contains our crew member's
+        starfleet serial number.</para>
+
+      <para>Now we can print our name tags by selecting the
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Print</guimenuitem> </menuchoice> menu item.  This will display
+        print dialog as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-3-fig"> 
+       <title>Printing name tags</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex1-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Just to make sure our labels are going to look okay, we select the
+        <guilabel>Print outlines</guilabel> option and click
+        <guibutton>Print Preview</guibutton>.  This will display a print preview dialog
+        as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-4-fig"> 
+       <title>Name tags preview</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex1-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Everything looks good, so we can now load up our printer with
+        the appropriate label stock, print our name tags and start beaming our guests
+        aboard.</para>
+
+    </sect2>
+
+    <sect2 id="merge-ex2">
+      <title>Example 2: Address Labels Using a CSV File</title>
+  
+      <para>In this example we are going to throw a party and need to print mailing
+        address labels for our invitations.  We have a list of our closest friends
+        that we created in <application>gnumeric</application> and exported as the
+        following CSV file.  It should be noted that not everyone has a middle initial or
+        a two line address.</para>
+
+      <programlisting>
+LAST,FIRST,MI,ADDR1,ADDR2,CITY,STATE,ZIP
+,,,,,,,
+Critter,Ess,S,"123 Faux St.",,Alexandria,VA,22310
+Doe,John,,"Apt 1X","451 Mystery St.",Trenton,NJ,08601
+Summers,Joyce,,"1630 Revello Dr",,Sunnydale,CA,95037
+McGarret,Steve,O,"404 Piikoi Street",,Honolulu,HI,96813
+Kramer,Cosmo,,"Apt 5B","129 W. 81 St.","New York",NY,10024-7207
+      </programlisting>
+
+      <para>In &app; we have created a new &app;
+        document using the Avery 5512 "Address Labels" template.  Next we use the
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Merge Properties</guimenuitem> </menuchoice> menu item to display
+        the <guilabel>merge properties</guilabel> dialog.  We use this dialog to
+        select the source type (in our case CSV) and the merge source (filename) as
+        shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-1-fig"> 
+       <title>Merge properties dialog</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex2-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Before applying the merge source, we uncheck the first record since it is only
+        column headers from our original <application>gnumeric</application> spreadsheet
+        and would simply waste our first label.  We also unselect the second record
+        which is empty (an artifact of our original spreadsheet).  We could also unselect
+        any other records that we didn't want to print a label for.</para>
+
+      <para>We can also view each record in more detail by clicking on the appropriate
+        expander (the little triangles) as shown.  Once we are satisfied with the
+        selections in this dialog we click <guibutton>OK</guibutton> to accept the
+        changes.</para>
+
+      <para>Now we start adding objects to our &app; document as shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-2-fig"> 
+       <title>Adding objects</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex2-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>In this example we have a single text object.  This text object contains
+        all of our merge fields organized on multiple lines as a mailing address.
+        Notice that fields ${4} and ${5} (corresponding to ADDR1 and ADDR2) are each
+        located with no other text on their own lines.  When
+        &app; encounters a field as the only text on
+        a line, it will not expand the line if the field is empty.</para>
+
+      <para>Now we can print our address labels by selecting the
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Print</guimenuitem> </menuchoice> menu item.  This will display
+        print dialog as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-3-fig"> 
+       <title>Printing address labels</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Just to make sure our labels are going to look okay, we select the
+        <guilabel>Print outlines</guilabel> option and click
+        <guibutton>Print Preview</guibutton>.  This will display a print preview dialog
+        as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-4-fig"> 
+       <title>Address labels preview</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Everything looks good, so we can now load up our printer with
+        the appropriate label stock, print our address labels and start mailing
+        our party invitations.</para>
+
+    </sect2>
+
+<sect2 id="merge-ex3">
+      <title>Example 3: Address Labels Using the <application>Evolution</application> Addressbook</title>
+  
+      <para>Our last party was a great success, and now we need to print mailing
+        address labels for the invitations to a new one. To simplify this, we can use
+       the <application>Evolution</application> addressbook, because the address
+       data of all our friends is stored there.</para>
+
+      <note>
+       <para>Depending on how your copy of &app; was packaged, this option could be unavailable.
+         Support for the <application>Evolution</application> addressbook will only be available
+         if the <application>evolution-data-server</application> and its development files
+         were present when &app; was built. Please keep this in mind if you build &app;
+         directly from source.</para>
+       
+       <para>If the &app; package from your distribution lacks this support,
+         you may wish to contact the package maintainer or file a bug against the package
+         to request it.</para>
+      </note>
+
+      <para>In <application>glabels</application> we have created a new &app;
+        document using the Avery 5512 "Address Labels" template. Next we use the
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item to display
+        the <guilabel>Merge properties</guilabel> dialog. We use this dialog to
+        select the source type (in our case <guilabel>Data from default Evolution
+       addressbook</guilabel>) as shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-1-fig"> 
+       <title>Merge properties dialog</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex3-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Once we have chosen <guilabel>Data from default Evolution addressbook
+       </guilabel> as our merge source, we will get a full list of its content. Initially,
+       all entries are checked. Assuming we were planning a really big party, we could
+       leave this selection untouched (but let's keep our budget in mind). We will now select or
+       unselect certain entries by clicking on the appropriate checkboxes, or we could use
+       the <guibutton>Select all</guibutton> and <guibutton>Unselect all
+       </guibutton> buttons to activate or deactivate all entries in the address book.</para>
+      <para>We can also view each entry in more detail by clicking on the appropriate
+        expander (the little triangles) as shown. Once we are satisfied with the
+        selections in this dialog, we will click the <guibutton>OK</guibutton> button to
+       accept the changes.</para>
+
+      <para>Now we start adding objects to our glabels document as shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-2-fig"> 
+       <title>Adding objects</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex3-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>In this example we have a single text object again. This text object contains
+        all of our merge fields organized on multiple lines as a mailing address.</para>
+
+      <para>Now we can print our address labels by selecting the
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Print</guimenuitem> </menuchoice> menu item. This will display
+        the print dialog as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-3-fig"> 
+       <title>Printing address labels</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Just to make sure our labels are going to look okay, we select the
+        <guilabel>Print outlines</guilabel> option and click
+        <guibutton>Print Preview</guibutton>. This will display a print preview dialog
+        as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-4-fig"> 
+       <title>Address labels preview</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+              fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Everything looks good, so we can now load up our printer with
+        the appropriate label stock, print our address labels and start mailing
+        our party invitations.</para>
+
+    </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Creating templates ================================== -->
+  <sect1 id="glabels-manual-create-template"> 
+    <title>Manually Creating New Templates</title> 
+
+    <para>Predefined templates are defined by XML files located in
+      <filename>${prefix}/share/glabels/</filename>,
+      where <filename>${prefix}</filename> is usually something like
+      <filename>/usr/local</filename> or <filename>/usr</filename> depending
+      on the configuration option <filename>prefix</filename>.  &app; will
+      use all files of the form <filename>*-templates.xml</filename>
+      or <filename>*.template</filename>, that it finds in
+      <filename>${prefix}/share/glabels/</filename> and
+      <filename>${HOME}/.glabels/</filename>.
+      Additional templates can be added by creating additional
+      <filename>*.template</filename> files in either of these directories.
+      </para>
+
+    <para>The format for these files is defined in the DTD:
+      <ulink url="http://glabels.sourceforge.net/doc/glabels-2.0.dtd.txt"
+       type="http">glabels-2.2.dtd</ulink>. (This DTD also describes other
+       XML formats used by &app;.)</para>
+
+    <sect2 id="template-assumptions">
+      <title>Assumptions/caveats</title>
+      <itemizedlist>
+       <listitem>
+         <para>A sheet contains only one size of label or card (if a sheet
+            contains more than one size of item, it can be split into
+             multiple templates for multiple pass printing)</para>
+       </listitem>
+       <listitem>
+         <para>Distances can be expressed in units of <emphasis>pt</emphasis>,
+            <emphasis>in</emphasis>, <emphasis>mm</emphasis>,
+            <emphasis>cm</emphasis>, or <emphasis>pc</emphasis>.  For example:
+            "<literal>1.0in</literal>" or "<literal>2.54cm</literal>".  If no
+            units are specified, computer points (<emphasis>pt</emphasis>) will
+            be assumed (1 <emphasis>pt</emphasis> =
+            1/72 <emphasis>in</emphasis> = 0.352778 <emphasis>mm</emphasis>).
+            </para>
+       </listitem>
+      </itemizedlist>
+    </sect2>
+
+    <sect2 id="template-file">
+      <title>Template Files</title>
+
+      <programlisting>
+&lt;?xml version="1.0"?&gt;
+&lt;Glabels-templates&gt;
+
+   <replaceable>...templates...</replaceable>
+
+&lt;/Glabels-templates&gt;
+      </programlisting>
+    </sect2>
+
+
+    <sect2 id="template-example">
+      <title>Example Template</title>
+      <programlisting>
+  &lt;Template brand="Avery" part="8160" size="US-Letter" description="Mailing Labels"&gt;
+    &lt;Label-rectangle id="0" width="189pt" height="72pt" round="5pt"&gt;
+      &lt;Markup-margin size="5pt"/&gt;
+      &lt;Layout nx="3" ny="10" x0="11.25pt" y0="36pt" dx="200pt" dy="72pt"/&gt;
+    &lt;/Label-rectangle&gt;
+    &lt;Alias brand="Avery" part="5160"/&gt;
+    &lt;Alias brand="Avery" part="6233"/&gt;
+  &lt;/Template&gt;
+      </programlisting>
+    </sect2>
+
+    <sect2 id="template-template-node">
+      <title>Template Node</title>
+
+      <para>A <emphasis>Template</emphasis> node describes a single stationary
+        product.  It must contain one instance of any type of Label node
+        (<emphasis>Label-rectangle</emphasis>,
+        <emphasis>Label-round</emphasis>, or <emphasis>Label-cd</emphasis>).
+        This node can be followed by zero or more 
+        <emphasis>Alias</emphasis> nodes.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>Brand or manufacturer of stationary product.
+                  E.g. "Avery"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>Part number or name of stationary product.
+                  E.g. "8160"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>size</para></entry>
+             <entry>
+                <para>Size of sheet.  E.g., "US-Letter," "A4", ...</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>description</para></entry>
+             <entry>
+                <para>Description of stationary product.  E.g,
+                   "Mailing Labels."</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>_description</para></entry>
+             <entry>
+                <para>Translatable description of stationary product.
+                  E.g, "Mailing Labels." (Only useful for predefined
+                  templates)</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry>
+                <para>Page width.  Only valid if size="Other"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry>
+                <para>Page height.  Only valid if size="Other"</para>
+               </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-rectangle-node">
+      <title>Label-rectangle Node</title>
+
+      <para>A <emphasis>Label-rectangle</emphasis> node describes the
+        dimensions of a single label or business card that is rectangular
+        in shape (may have rounded edges).</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Reserved for future use.  Should always be 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry><para>Width of label/card</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry><para>Height of label/card</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>round</para></entry>
+             <entry>
+                <para>Radius of corners.  For items with square edges
+                  (business cards), the radius should be 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x_waste</para></entry>
+             <entry>
+                <para>Amount of horizontal waste (over-print) to allow.  This is useful
+                  for minimizing alignment problems when using non-white
+                  backgrounds (e.g. images).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y_waste</para></entry>
+             <entry>
+                <para>Amount of vertical waste (over-print) to allow.  This is useful
+                  for minimizing alignment problems when using non-white
+                  backgrounds (e.g. images).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-fig"> 
+       <title>Label-rectangle Parameters</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+               fileref="figures/glabels-template-label.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-label-round-node">
+      <title>Label-round Node</title>
+
+      <para>A <emphasis>Label-round</emphasis> node describes the dimensions
+        of a simple round label (not a CD).</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Reserved for future use.  Should always be 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Radius (1/2 diameter) of label</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>waste</para></entry>
+             <entry>
+                <para>Amount of waste (over-print) to allow.  This is useful
+                  for minimizing alignment problems when using non-white
+                  backgrounds (e.g. images).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-cd-node">
+      <title>Label-cd Node</title>
+
+      <para>A <emphasis>Label-cd</emphasis> node describes the dimensions
+        of a CD, DVD, or business card CD.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Reserved for future use.  Should always be 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Outer radius of label</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>hole</para></entry>
+             <entry><para>Radius of concentric hole</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry>
+                <para>If present, the label is clipped to the given width.
+                  (Useful for "business card CDs").</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry>
+                <para>If present, the label is clipped to the given height.
+                  (Useful for "business card CDs").</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>waste</para></entry>
+             <entry>
+                <para>Amount of waste (over-print) to allow.  This is useful
+                  for minimizing alignment problems when using non-white
+                  backgrounds (e.g. images).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-cd-fig"> 
+       <title>CD Label Parameters</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+               fileref="figures/glabels-template-cd.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-markup-margin-node">
+      <title>Markup-margin Node</title>
+
+      <para>A <emphasis>Markup-margin</emphasis> describes a margin along
+        all edges of a label.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>size</para></entry>
+             <entry>
+                <para>Size of the margin.  I.e. the distance of the margin
+                  line from the edge of the card/label.</para>
+              </entry>
+            </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-line-node">
+      <title>Markup-line Node</title>
+
+      <para>A <emphasis>Markup-line</emphasis> describes a markup line.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>x coordinate of 1st endpoint of the line segment.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>y coordinate of 1st endpoint of the line segment.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x2</para></entry>
+             <entry>
+                <para>x coordinate of 2nd endpoint of the line segment.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y2</para></entry>
+             <entry>
+                <para>y coordinate of 2nd endpoint of the line segment.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-circle-node">
+      <title>Markup-circle Node</title>
+
+      <para>A <emphasis>Markup-circle</emphasis> describes a markup circle.
+        </para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>x coordinate of circle origin (center).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>y coordinate of circle origin (center).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Radius of circle.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-rect-node">
+      <title>Markup-rect Node</title>
+
+      <para>A <emphasis>Markup-rect</emphasis> describes a markup rectangle.
+        </para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>x coordinate of upper left corner of rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>y coordinate of upper left corner of rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>w</para></entry>
+             <entry>
+                <para>Width of rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>h</para></entry>
+             <entry>
+                <para>Height of rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>r</para></entry>
+             <entry><para>Radius of rounded corners of rectangle.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-layout-node">
+      <title>Layout Node</title>
+
+      <para>A label node may contain multiple <emphasis>Layout</emphasis>
+        children.  If labels are arranged in a simple grid pattern, only
+        one layout is needed.  However, if labels are arranged in multiple
+        grids, such as a running bond pattern, multiple
+        <emphasis>layout</emphasis> tags can be used.  Note: a single label
+        can always be treated as a grid of one.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>nx</para></entry>
+             <entry>
+                <para>Number of labels/cards across in the grid
+                  (horizontal)</para>
+              </entry>
+            </row>
+           <row valign="top">
+             <entry><para>ny</para></entry>
+             <entry>
+                <para>Number of labels/cards up and down in the grid
+                  (vertical)</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>Distance from left edge of sheet to the left edge of
+                  the left column of cards/labels in the layout.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>Distance from the top edge of sheet to the top edge of
+                  the top row of labels/cards in the layout.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>dx</para></entry>
+             <entry><para>Horizontal pitch of grid.</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>dy</para></entry>
+             <entry><para>Vertical pitch of grid.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-layout-fig"> 
+       <title>Layout Parameters</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata
+               fileref="figures/glabels-template-layout.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-alias-node">
+      <title>Alias Node</title>
+
+      <para>An <emphasis>Alias</emphasis> node provides the name of a
+        product with the same size and layout characteristics as the
+        parent template.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Property</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>The brand or manufacturer of the equivalent product.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>The part number or name of the equivalent product.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Bugs ================================== -->
+<!-- This section is optional and is commented out by default. 
+     You can use it to describe known bugs and limitations of the 
+         program if there are any - please be frank and list all
+     problems you know of. 
+  
+  <sect1 id="mayapp-bugs">
+  <title>Known Bugs and Limitations</title>
+  <para> </para>
+ </sect1>
+-->
+
+
+
+
+<!-- ============= About ================================== -->
+<!-- This section contains info about the program (not docs), such as
+      author's name(s), web page, license, feedback address. This
+      section is optional: primary place for this info is "About.." box of
+      the program. However, if you do wish to include this info in the
+      manual, this is the place to put it. Alternatively, you can put this information in the title page.-->
+  <sect1 id="glabels-about"> 
+    <title>About &app;</title> 
+    <para> &app; was written by Jim Evins
+      (<email>evins@snaught.com</email>). To find more information about
+      &app;, please visit the 
+      <ulink url="http://glabels.sourceforge.net" type="http">gLabels Web
+       page</ulink>. </para>
+    <para>
+      To report a bug or make a suggestion regarding this application or
+      this manual, follow the directions at the
+      <ulink url="http://glabels.sourceforge.net/contact/" type="http">&app; Contact Page</ulink>.
+    </para>
+
+    <para> This program is distributed 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. A copy of this license can be found at this
+      <ulink url="ghelp:gpl" type="help">link</ulink>, or in the file
+      COPYING included with the source code of this program. </para>
+
+  </sect1> 
+
+
+
+
+
+</article>
diff --git a/help/C/legal.xml b/help/C/legal.xml
new file mode 100644 (file)
index 0000000..ac97e1d
--- /dev/null
@@ -0,0 +1,76 @@
+  <legalnotice id="legalnotice">
+       <para>
+         Permission is granted to copy, distribute and/or modify this
+         document under the terms of the GNU Free Documentation
+         License (GFDL), Version 1.1 or any later version published
+         by the Free Software Foundation with no Invariant Sections,
+         no Front-Cover Texts, and no Back-Cover Texts.  You can find
+         a copy of the GFDL at this <ulink type="help"
+         url="ghelp:fdl">link</ulink> or in the file COPYING-DOCS
+         distributed with this manual.
+         </para>
+         <para> This manual is part of a collection of GNOME manuals
+          distributed under the GFDL.  If you want to distribute this
+          manual separately from the collection, you can do so by
+          adding a copy of the license to the manual, as described in
+          section 6 of the license.
+       </para>
+
+       <para>
+         Many of the names used by companies to distinguish their
+         products and services are claimed as trademarks. Where those
+         names appear in any GNOME documentation, and the members of
+         the GNOME Documentation Project are made aware of those
+         trademarks, then the names are in capital letters or initial
+         capital letters.
+       </para>
+
+       <para>
+         DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED
+         UNDER  THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE
+         WITH THE FURTHER UNDERSTANDING THAT:
+
+         <orderedlist>
+               <listitem>
+                 <para>DOCUMENT IS PROVIDED ON AN "AS IS" BASIS,
+                    WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
+                    IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
+                    THAT THE DOCUMENT OR MODIFIED VERSION OF THE
+                    DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR
+                    A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
+                    RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE
+                    OF THE DOCUMENT OR MODIFIED VERSION OF THE
+                    DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR
+                    MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT,
+                    YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY
+                    CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
+                    SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+                    OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
+                    LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED
+                    VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER
+                    EXCEPT UNDER THIS DISCLAIMER; AND
+                 </para>
+               </listitem>
+               <listitem>
+                 <para>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL
+                       THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE),
+                       CONTRACT, OR OTHERWISE, SHALL THE AUTHOR,
+                       INITIAL WRITER, ANY CONTRIBUTOR, OR ANY
+                       DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION
+                       OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH
+                       PARTIES, BE LIABLE TO ANY PERSON FOR ANY
+                       DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
+                       CONSEQUENTIAL DAMAGES OF ANY CHARACTER
+                       INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS
+                       OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
+                       MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR
+                       LOSSES ARISING OUT OF OR RELATING TO USE OF THE
+                       DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT,
+                       EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF
+                       THE POSSIBILITY OF SUCH DAMAGES.
+                 </para>
+               </listitem>
+         </orderedlist>
+       </para>
+  </legalnotice>
+
diff --git a/help/Makefile.am b/help/Makefile.am
new file mode 100644 (file)
index 0000000..3ed935f
--- /dev/null
@@ -0,0 +1,26 @@
+include $(top_srcdir)/gnome-doc-utils.make
+
+dist-hook: doc-dist-hook
+
+DOC_MODULE = glabels
+DOC_ENTITIES = legal.xml 
+DOC_INCLUDES =
+DOC_FIGURES = figures/glabels-template-cd.png          \
+              figures/glabels-template-label.png       \
+             figures/glabels-template-layout.png       \
+             figures/main-window-empty.png             \
+             figures/merge-ex1-1.png                   \
+             figures/merge-ex1-2.png                   \
+             figures/merge-ex1-3.png                   \
+             figures/merge-ex1-4.png                   \
+             figures/merge-ex2-1.png                   \
+             figures/merge-ex2-2.png                   \
+             figures/merge-ex2-3.png                   \
+             figures/merge-ex2-4.png                   \
+             figures/merge-ex3-1.png                   \
+             figures/merge-ex3-2.png                   \
+             figures/object-editor-sidebar.png         \
+             figures/print-copies.png                  \
+             figures/print-merge.png
+
+DOC_LINGUAS = cs de es fr
diff --git a/help/Makefile.in b/help/Makefile.in
new file mode 100644 (file)
index 0000000..c8b57ac
--- /dev/null
@@ -0,0 +1,969 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+# gnome-doc-utils.make - make magic for building documentation
+# Copyright (C) 2004-2005 Shaun McCance <shaunm@gnome.org>
+#
+# 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.
+
+################################################################################
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/gnome-doc-utils.make
+subdir = help
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+_clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header)
+_DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS))
+_DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)),              \
+       $(filter $(LINGUAS),$(DOC_LINGUAS)),                                    \
+       $(DOC_LINGUAS))
+
+_DOC_ABS_SRCDIR = @abs_srcdir@
+_xml2po_mode = $(if $(DOC_ID),mallard,docbook)
+@ENABLE_SK_TRUE@_ENABLE_SK = true
+
+################################################################################
+db2omf_args = \
+       --stringparam db2omf.basename $(DOC_MODULE)                             \
+       --stringparam db2omf.format $(3)                                        \
+       --stringparam db2omf.dtd                                                \
+       $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1              \
+               | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/')                     \
+       --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \
+       --stringparam db2omf.omf_dir "$(OMF_DIR)"                               \
+       --stringparam db2omf.help_dir "$(HELP_DIR)"                             \
+       --stringparam db2omf.omf_in "$(_DOC_OMF_IN)"                            \
+       $(if $(_ENABLE_SK),                                                     \
+         --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)")            \
+       $(_db2omf) $(2)
+
+_DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in))
+_DOC_OMF_DB = $(if $(_DOC_OMF_IN),                                             \
+       $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf))
+
+_DOC_OMF_HTML = $(if $(_DOC_OMF_IN),                                           \
+       $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf))
+
+
+# FIXME
+_DOC_OMF_ALL = \
+       $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB))             \
+       $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML))
+
+
+################################################################################
+_DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml)
+_DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page))
+_DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent))
+_DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc))
+_DOC_C_DOCS = \
+       $(_DOC_C_ENTITIES)      $(_DOC_C_INCLUDES)                      \
+       $(_DOC_C_PAGES)         $(_DOC_C_MODULE)
+
+_DOC_C_DOCS_NOENT = \
+       $(_DOC_C_MODULE)        $(_DOC_C_INCLUDES)                      \
+       $(_DOC_C_PAGES)
+
+_DOC_C_FIGURES = $(if $(DOC_FIGURES),                                  \
+       $(foreach fig,$(DOC_FIGURES),C/$(fig)),                         \
+       $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png)))
+
+
+# FIXME: probably have to shell escape to determine the file names
+_DOC_C_HTML = $(foreach f,                                             \
+       $(shell xsltproc --xinclude                                     \
+         --stringparam db.chunk.basename "$(DOC_MODULE)"               \
+         $(_chunks) "C/$(DOC_MODULE).xml"),                            \
+       C/$(f).xhtml)
+
+
+###############################################################################
+_DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID),                                    \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po))
+
+_DOC_LC_MODULES = $(if $(DOC_MODULE),                                          \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml))
+
+_DOC_LC_PAGES = \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES),       \
+               $(lc)/$(notdir $(page)) ))
+
+_DOC_LC_INCLUDES = \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES),     \
+               $(lc)/$(notdir $(inc)) ))
+
+
+# FIXME: probably have to shell escape to determine the file names
+_DOC_LC_HTML = \
+       $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML),         \
+               $(lc)/$(notdir $(doc)) ))
+
+_DOC_LC_DOCS = \
+       $(_DOC_LC_MODULES)      $(_DOC_LC_INCLUDES)     $(_DOC_LC_PAGES)        \
+       $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML))
+
+_DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS),                           \
+       $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) )
+
+_DOC_SRC_FIGURES = \
+       $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS),   \
+               $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) ))
+
+_DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot)
+
+################################################################################
+_DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \
+       $(_DOC_C_HTML) $(_DOC_LC_HTML))
+
+_DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml)
+_clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf)
+_clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk)
+_clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc)
+_clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir)
+_doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE))
+DOC_MODULE = glabels
+DOC_ENTITIES = legal.xml 
+DOC_INCLUDES = 
+DOC_FIGURES = figures/glabels-template-cd.png          \
+              figures/glabels-template-label.png       \
+             figures/glabels-template-layout.png       \
+             figures/main-window-empty.png             \
+             figures/merge-ex1-1.png                   \
+             figures/merge-ex1-2.png                   \
+             figures/merge-ex1-3.png                   \
+             figures/merge-ex1-4.png                   \
+             figures/merge-ex2-1.png                   \
+             figures/merge-ex2-2.png                   \
+             figures/merge-ex2-3.png                   \
+             figures/merge-ex2-4.png                   \
+             figures/merge-ex3-1.png                   \
+             figures/merge-ex3-2.png                   \
+             figures/object-editor-sidebar.png         \
+             figures/print-copies.png                  \
+             figures/print-merge.png
+
+DOC_LINGUAS = cs de es fr
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gnome-doc-utils.make $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu help/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu help/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+       maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
+       mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       clean-local dist-hook distclean distclean-generic \
+       distclean-libtool distclean-local distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-data-local install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic maintainer-clean-local mostlyclean \
+       mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \
+       pdf-am ps ps-am uninstall uninstall-am uninstall-local
+
+
+DOC_H_FILE ?=
+
+DOC_H_DOCS ?=
+
+$(DOC_H_FILE): $(DOC_H_DOCS);
+       @rm -f $@.tmp; touch $@.tmp;
+       echo 'const gchar* documentation_credits[] = {' >> $@.tmp
+       list='$(DOC_H_DOCS)'; for doc in $$list; do \
+         xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \
+         if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \
+         xsltproc --path "$$xmlpath" $(_credits) $$doc; \
+       done | sort | uniq \
+         | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \
+         | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp
+       echo '  NULL' >> $@.tmp
+       echo '};' >> $@.tmp
+       echo >> $@.tmp
+       list='$(DOC_H_DOCS)'; for doc in $$list; do \
+         xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \
+         if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \
+         docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \
+           | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \
+         echo $$xmlpath; \
+         ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \
+         for id in $$ids; do \
+           echo '#define HELP_'`echo $$docid`'_'`echo $$id \
+             | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \
+         done; \
+         echo >> $@.tmp; \
+       done;
+       cp $@.tmp $@ && rm -f $@.tmp
+
+dist-check-gdu:
+@HAVE_GNOME_DOC_UTILS_FALSE@   @echo "*** GNOME Doc Utils must be installed in order to make dist"
+@HAVE_GNOME_DOC_UTILS_FALSE@   @false
+
+.PHONY: dist-doc-header
+dist-doc-header: $(DOC_H_FILE)
+       @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \
+       echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \
+       $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)";
+
+doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header)
+
+.PHONY: clean-doc-header
+clean-local: $(_clean_doc_header)
+distclean-local: $(_clean_doc_header)
+mostlyclean-local: $(_clean_doc_header)
+maintainer-clean-local: $(_clean_doc_header)
+clean-doc-header:
+       rm -f $(DOC_H_FILE)
+
+all: $(DOC_H_FILE)
+
+################################################################################
+
+DOC_MODULE ?=
+
+DOC_ID ?=
+
+DOC_PAGES ?=
+
+DOC_ENTITIES ?=
+
+DOC_INCLUDES ?=
+
+DOC_FIGURES ?=
+
+DOC_FORMATS ?= docbook
+
+DOC_LINGUAS ?=
+
+################################################################################
+
+_xml2po ?= `which xml2po`
+
+_db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils`
+_db2omf  ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils`
+_malrng  ?= `$(PKG_CONFIG) --variable malrng gnome-doc-utils`
+_chunks  ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl
+_credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl
+_ids ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/ids.xsl
+@ENABLE_SK_TRUE@_skpkgdatadir ?= `scrollkeeper-config --pkgdatadir`
+@ENABLE_SK_TRUE@_sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir`
+@ENABLE_SK_TRUE@_skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml
+
+$(_DOC_OMF_DB) : $(_DOC_OMF_IN)
+$(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml
+       @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || {       \
+         echo "The file '$(_skcontentslist)' does not exist." >&2;             \
+         echo "Please check your ScrollKeeper installation." >&2;              \
+         exit 1; }
+       xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; }
+
+$(_DOC_OMF_HTML) : $(_DOC_OMF_IN)
+$(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml
+@ENABLE_SK_TRUE@       @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || {       \
+@ENABLE_SK_TRUE@         echo "The file '$(_skcontentslist)' does not exist" >&2;              \
+@ENABLE_SK_TRUE@         echo "Please check your ScrollKeeper installation." >&2;              \
+@ENABLE_SK_TRUE@         exit 1; }
+       xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; }
+
+.PHONY: omf
+omf: $(_DOC_OMF_ALL)
+
+.PHONY: po
+po: $(_DOC_POFILES)
+
+$(_DOC_POFILES):
+       @if ! test -d $(dir $@); then \
+         echo "mkdir $(dir $@)"; \
+         mkdir "$(dir $@)"; \
+       fi
+       @if test ! -f $@ -a -f $(srcdir)/$@; then \
+         echo "cp $(srcdir)/$@ $@"; \
+         cp "$(srcdir)/$@" "$@"; \
+       fi;
+       @docs=; \
+       list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \
+         docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \
+       done; \
+       if ! test -f $@; then \
+         echo "(cd $(dir $@) && \
+           $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \
+           cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \
+         (cd $(dir $@) && \
+           $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \
+           cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \
+       else \
+         echo "(cd $(dir $@) && \
+           $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \
+         (cd $(dir $@) && \
+           $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \
+       fi
+
+# FIXME: fix the dependancy
+# FIXME: hook xml2po up
+$(_DOC_LC_DOCS) : $(_DOC_POFILES)
+$(_DOC_LC_DOCS) : $(_DOC_C_DOCS)
+       if ! test -d $(dir $@); then mkdir $(dir $@); fi
+       if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \
+       po="$(dir $@)$(patsubst %/$(notdir $@),%,$@).po"; \
+       if [ -f "$${po}" ]; then po="../$${po}"; else po="$(_DOC_ABS_SRCDIR)/$${po}"; fi; \
+       (cd $(dir $@) && \
+         $(_xml2po) -m $(_xml2po_mode) -e -p "$${po}" \
+           "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \
+           cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)
+.PHONY: pot
+pot: $(_DOC_POT)
+$(_DOC_POT): $(_DOC_C_DOCS_NOENT)
+       $(_xml2po) -m $(_xml2po_mode) -e -o $@ $^
+
+$(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS)
+       xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@)
+
+################################################################################
+
+all:                                                   \
+       $(_DOC_C_DOCS)          $(_DOC_LC_DOCS)         \
+       $(_DOC_OMF_ALL)         $(_DOC_DSK_ALL)         \
+       $(_DOC_HTML_ALL)        $(_DOC_POFILES)
+
+################################################################################
+
+.PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir
+
+clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML)
+clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML)
+clean-doc-lc:
+       rm -f $(_DOC_LC_DOCS)
+       @list='$(_DOC_POFILES)'; for po in $$list; do \
+         if ! test "$$po" -ef "$(srcdir)/$$po"; then \
+           echo "rm -f $$po"; \
+           rm -f "$$po"; \
+         fi; \
+       done
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         if test -f "$$lc/.xml2po.mo"; then \
+           echo "rm -f $$lc/.xml2po.mo"; \
+           rm -f "$$lc/.xml2po.mo"; \
+         fi; \
+       done
+clean-doc-dir: clean-doc-lc
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         for dir in `find $$lc -depth -type d`; do \
+           if ! test $$dir -ef $(srcdir)/$$dir; then \
+             echo "rmdir $$dir"; \
+             rmdir "$$dir"; \
+          fi; \
+         done; \
+       done
+
+clean-local:                                           \
+       $(_clean_omf)           $(_clean_dsk)           \
+       $(_clean_lc)            $(_clean_dir)
+distclean-local:                                       \
+       $(_clean_omf)           $(_clean_dsk)           \
+       $(_clean_lc)            $(_clean_dir)
+mostlyclean-local:                                     \
+       $(_clean_omf)           $(_clean_dsk)           \
+       $(_clean_lc)            $(_clean_dir)
+maintainer-clean-local:                                        \
+       $(_clean_omf)           $(_clean_dsk)           \
+       $(_clean_lc)            $(_clean_dir)
+
+################################################################################
+
+.PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk
+doc-dist-hook:                                                 \
+       $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs)      \
+       $(if $(_DOC_C_FIGURES),dist-doc-figs)           \
+       $(if $(_DOC_OMF_IN),dist-doc-omf)
+#      $(if $(_DOC_DSK_IN),dist-doc-dsk)
+
+dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         echo " $(mkinstalldirs) $(distdir)/$$lc"; \
+         $(mkinstalldirs) "$(distdir)/$$lc"; \
+       done
+       @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)'; \
+       for doc in $$list; do \
+         if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \
+           docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+           if ! test -d "$(distdir)/$$docdir"; then \
+             echo "$(mkinstalldirs) $(distdir)/$$docdir"; \
+             $(mkinstalldirs) "$(distdir)/$$docdir"; \
+           fi; \
+         echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \
+         $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \
+       done
+
+dist-doc-figs: $(_DOC_SRC_FIGURES)
+       @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \
+       for fig in $$list; do \
+         if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$fig"; then \
+           figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+           if ! test -d "$(distdir)/$$figdir"; then \
+             echo "$(mkinstalldirs) $(distdir)/$$figdir"; \
+             $(mkinstalldirs) "$(distdir)/$$figdir"; \
+           fi; \
+           echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \
+           $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \
+         fi; \
+       done;
+
+dist-doc-omf:
+       @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \
+       echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \
+       $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))"
+
+dist-doc-dsk:
+       @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \
+       echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \
+       $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))"
+
+################################################################################
+
+.PHONY: check-doc-docs check-doc-omf
+check:                                                 \
+       $(if $(DOC_MODULE),check-doc-docs)              \
+       $(if $(DOC_ID),check-doc-pages)                 \
+       $(if $(_DOC_OMF_IN),check-doc-omf)
+
+check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS)
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         if test -f "$$lc"; \
+           then d=; \
+           xmlpath="$$lc"; \
+         else \
+           d="$(srcdir)/"; \
+           xmlpath="$$lc:$(srcdir)/$$lc"; \
+         fi; \
+         echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \
+         xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \
+       done
+
+check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES)
+       for lc in C $(_DOC_REAL_LINGUAS); do \
+         if test -f "$$lc"; \
+           then d=; \
+           xmlpath="$$lc"; \
+         else \
+           d="$(srcdir)/"; \
+           xmlpath="$$lc:$(srcdir)/$$lc"; \
+         fi; \
+         for page in $(DOC_PAGES); do \
+           echo "xmllint --noout --noent --path $$xmlpath --xinclude --relaxng $(_malrng) $$d$$lc/$$page"; \
+           xmllint --noout --noent --path "$$xmlpath" --xinclude --relaxng "$(_malrng)" "$$d$$lc/$$page"; \
+         done; \
+       done
+
+check-doc-omf: $(_DOC_OMF_ALL)
+       @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
+         echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \
+         xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \
+       done
+
+################################################################################
+
+.PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk
+
+install-data-local:                                    \
+       $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs)   \
+       $(if $(_DOC_HTML_ALL),install-doc-html)         \
+       $(if $(_DOC_C_FIGURES),install-doc-figs)        \
+       $(if $(_DOC_OMF_IN),install-doc-omf)
+#      $(if $(_DOC_DSK_IN),install-doc-dsk)
+
+install-doc-docs:
+       @for lc in C $(_DOC_REAL_LINGUAS); do \
+         echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \
+         $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \
+       done
+       @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \
+         if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \
+         docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+         docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \
+         if ! test -d "$$docdir"; then \
+           echo "$(mkinstalldirs) $$docdir"; \
+           $(mkinstalldirs) "$$docdir"; \
+         fi; \
+         echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
+         $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \
+       done
+
+install-doc-figs:
+       @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \
+         for lc in C $(_DOC_REAL_LINGUAS); do \
+           figsymlink=false; \
+           if test -f "$$lc/$$fig"; then \
+             figfile="$$lc/$$fig"; \
+           elif test -f "$(srcdir)/$$lc/$$fig"; then \
+             figfile="$(srcdir)/$$lc/$$fig"; \
+           else \
+             figsymlink=true; \
+           fi; \
+           figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+           figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \
+           if ! test -d "$$figdir"; then \
+             echo "$(mkinstalldirs) $$figdir"; \
+             $(mkinstalldirs) "$$figdir"; \
+           fi; \
+           figbase=`echo $$fig | sed -e 's/^.*\///'`; \
+           if $$figsymlink; then \
+             echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \
+             ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \
+           else \
+             echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \
+             $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \
+           fi; \
+         done; \
+       done
+
+install-doc-html:
+       echo install-html
+
+install-doc-omf:
+       $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)
+       @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
+         echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+         $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \
+       done
+       @if test "x$(_ENABLE_SK)" = "xtrue"; then \
+         echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \
+         scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \
+       fi;
+
+install-doc-dsk:
+       echo install-dsk
+
+################################################################################
+
+.PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk
+uninstall-local:                                       \
+       $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \
+       $(if $(_DOC_HTML_ALL),uninstall-doc-html)       \
+       $(if $(_DOC_C_FIGURES),uninstall-doc-figs)      \
+       $(if $(_DOC_OMF_IN),uninstall-doc-omf)
+#      $(if $(_DOC_DSK_IN),uninstall-doc-dsk)
+
+uninstall-doc-docs:
+       @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \
+         echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
+         rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
+       done
+
+uninstall-doc-figs:
+       @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \
+         echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \
+         rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \
+       done;
+
+uninstall-doc-omf:
+       @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
+         if test "x$(_ENABLE_SK)" = "xtrue"; then \
+           echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+           scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+         fi; \
+         echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+         rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+       done
+
+dist-hook: doc-dist-hook
+
+# 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/help/cs/cs.po b/help/cs/cs.po
new file mode 100644 (file)
index 0000000..86f2287
--- /dev/null
@@ -0,0 +1,2787 @@
+# Czech translation for glabels help.
+# Copyright (C) 2010 glabels's COPYRIGHT HOLDER
+# This file is distributed under the same license as the glabels help.
+# Marek Černocký <marek@manet.cz>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels glabels_2_2\n"
+"POT-Creation-Date: 2010-02-19 11:58+0000\n"
+"PO-Revision-Date: 2010-02-19 21:31+0100\n"
+"Last-Translator: Marek Černocký <marek@manet.cz>\n"
+"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:195(None)
+msgid ""
+"@@image: 'figures/main-window-empty.png'; "
+"md5=226b58f05f4171531066358a29cda1a7"
+msgstr ""
+"@@image: 'figures/main-window-empty.png'; "
+"md5=226b58f05f4171531066358a29cda1a7"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:447(None)
+msgid ""
+"@@image: 'figures/print-copies.png'; md5=ebb4d08810a67cc9cd7ec6ddd7b52fb0"
+msgstr ""
+"@@image: 'figures/print-copies.png'; md5=ebb4d08810a67cc9cd7ec6ddd7b52fb0"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:479(None)
+msgid ""
+"@@image: 'figures/print-merge.png'; md5=ffe6027513a10f7ba940c350c1dc5717"
+msgstr ""
+"@@image: 'figures/print-merge.png'; md5=ffe6027513a10f7ba940c350c1dc5717"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:790(None)
+msgid ""
+"@@image: 'figures/object-editor-sidebar.png'; "
+"md5=14eace177c1f5bfe36022acbbd6a9f0e"
+msgstr ""
+"@@image: 'figures/object-editor-sidebar.png'; "
+"md5=14eace177c1f5bfe36022acbbd6a9f0e"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1231(None)
+msgid ""
+"@@image: 'figures/merge-ex1-1.png'; md5=55a97963022047cdad6aa198b5ed698e"
+msgstr ""
+"@@image: 'figures/merge-ex1-1.png'; md5=55a97963022047cdad6aa198b5ed698e"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1256(None)
+msgid ""
+"@@image: 'figures/merge-ex1-2.png'; md5=d03979f010e20e98532258edb20b1bc0"
+msgstr ""
+"@@image: 'figures/merge-ex1-2.png'; md5=d03979f010e20e98532258edb20b1bc0"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1284(None)
+msgid ""
+"@@image: 'figures/merge-ex1-3.png'; md5=94e382ccdfbc2fe5d320010d2ef10c61"
+msgstr ""
+"@@image: 'figures/merge-ex1-3.png'; md5=94e382ccdfbc2fe5d320010d2ef10c61"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1302(None)
+msgid ""
+"@@image: 'figures/merge-ex1-4.png'; md5=e72810bc3c191df6c8b2ad0cb1131021"
+msgstr ""
+"@@image: 'figures/merge-ex1-4.png'; md5=e72810bc3c191df6c8b2ad0cb1131021"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1348(None)
+msgid ""
+"@@image: 'figures/merge-ex2-1.png'; md5=4f062158be21bfadc4adfbdcf5d0206f"
+msgstr ""
+"@@image: 'figures/merge-ex2-1.png'; md5=4f062158be21bfadc4adfbdcf5d0206f"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1374(None)
+msgid ""
+"@@image: 'figures/merge-ex2-2.png'; md5=f69a7e0ae86f66b0d70d39a7757918fa"
+msgstr ""
+"@@image: 'figures/merge-ex2-2.png'; md5=f69a7e0ae86f66b0d70d39a7757918fa"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1399(None) C/glabels.xml:1513(None)
+msgid ""
+"@@image: 'figures/merge-ex2-3.png'; md5=f5134b9e911ebdd17d4a5b36a5ba56d0"
+msgstr ""
+"@@image: 'figures/merge-ex2-3.png'; md5=f5134b9e911ebdd17d4a5b36a5ba56d0"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1417(None) C/glabels.xml:1531(None)
+msgid ""
+"@@image: 'figures/merge-ex2-4.png'; md5=29a60e970cb026aecf75543203494b00"
+msgstr ""
+"@@image: 'figures/merge-ex2-4.png'; md5=29a60e970cb026aecf75543203494b00"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1464(None)
+msgid ""
+"@@image: 'figures/merge-ex3-1.png'; md5=b0c387b5fcfd730b2ae75172895ff5b8"
+msgstr ""
+"@@image: 'figures/merge-ex3-1.png'; md5=b0c387b5fcfd730b2ae75172895ff5b8"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1492(None)
+msgid ""
+"@@image: 'figures/merge-ex3-2.png'; md5=09f105e133657345e6e478a464e5b49f"
+msgstr ""
+"@@image: 'figures/merge-ex3-2.png'; md5=09f105e133657345e6e478a464e5b49f"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1767(None)
+msgid ""
+"@@image: 'figures/glabels-template-label.png'; "
+"md5=b7db4090373462b8d45feb22d4cd5646"
+msgstr ""
+"@@image: 'figures/glabels-template-label.png'; "
+"md5=b7db4090373462b8d45feb22d4cd5646"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1888(None)
+msgid ""
+"@@image: 'figures/glabels-template-cd.png'; "
+"md5=145b49a5380de63ffa9451d2bbb81934"
+msgstr ""
+"@@image: 'figures/glabels-template-cd.png'; "
+"md5=145b49a5380de63ffa9451d2bbb81934"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:2150(None)
+msgid ""
+"@@image: 'figures/glabels-template-layout.png'; "
+"md5=a8adcff0584be1f0275bc2a169a580df"
+msgstr ""
+"@@image: 'figures/glabels-template-layout.png'; "
+"md5=a8adcff0584be1f0275bc2a169a580df"
+
+#: C/glabels.xml:31(title)
+msgid "<application>gLabels</application> Manual V2.2.6"
+msgstr "Příručka V2.2.6 k aplikaci <application>gLabels</application>"
+
+#: C/glabels.xml:33(para)
+msgid ""
+"User manual for the <application>gLabels</application> label and business "
+"card creation program"
+msgstr ""
+"Uživatelská příručka k aplikaci <application>gLabels</application> na "
+"vytváření etiket a vizitek"
+
+#: C/glabels.xml:38(year)
+msgid "2003-2009"
+msgstr "2003-2009"
+
+#: C/glabels.xml:39(holder) C/glabels.xml:42(publishername)
+#: C/glabels.xml:93(para) C/glabels.xml:103(para)
+msgid "Jim Evins"
+msgstr "Jim Evins"
+
+#: C/glabels.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Je povoleno kopírovat, šířit a/nebo upravovat tento dokument za podmínek GNU "
+"Free Documentation License, verze 1.1 nebo jakékoli další verze vydané "
+"nadací Free Software Foundation; bez neměnných oddílů, bez textů předních "
+"desek a bez textů zadních desek. Kopie této licence je zahrnuta v oddílu "
+"jménem <ulink type=\"help\" url=\"ghelp:fdl\">GNU Free Documentation "
+"License</ulink> nebo v souboru COPYING-DOCS dodávaném s touto příručkou."
+
+#: C/glabels.xml:12(para)
+msgid ""
+"This manual is part of a collection of GNOME manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Tato příručka je součástí kolekce příruček GNOME, distribuovaných pod "
+"licencí GNU FDL. Pokud chcete tento dokument šířit odděleně od kolekce, "
+"musíte přiložit kopii licence dle popisu v sekci 6 dané licence."
+
+#: C/glabels.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any GNOME "
+"documentation, and the members of the GNOME Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Mnoho užívaných jmen určených k zviditelnění produktů nebo služeb jsou "
+"ochranné známky. Na místech, kde jsou tato jména v dokumentaci užita a "
+"členové Dokumentačního projektu GNOME jsou si vědomi skutečnosti, že se "
+"jedná o ochrannou známku, je takové jméno psáno velkými písmeny celé nebo s "
+"velkým písmenem na začátku."
+
+#: C/glabels.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"DOKUMENT JE POSKYTOVÁN V PODOBĚ „JAK JE“ BEZ ZÁRUKY V JAKÉKOLIV PODOBĚ, "
+"NEPOSKYTUJÍ SE ANI ODVOZENÉ ZÁRUKY, ZÁRUKY, ŽE DOKUMENT, NEBO JEHO UPRAVENÁ "
+"VERZE, JE BEZCHYBNÝ NEBO ZÁRUKY PRODEJNOSTI, VHODNOSTI PRO URČITÝ ÚČEL NEBO "
+"NEPORUŠENOSTI. RIZIKO NEKVALITY, NEPŘESNOSTI A ŠPATNÉHO PROVEDENÍ DOKUMENTU, "
+"NEBO JEHO UPRAVENÉ VERZE, LEŽÍ NA VÁS. POKUD KVŮLI TOMUTO DOKUMENTU, NEBO "
+"JEHO UPRAVENÉ VERZI, NASTANE PROBLÉM, VY (NIKOLIV PŮVODNÍ AUTOR NEBO "
+"JAKÝKOLIV PŘISPĚVATEL) PŘEBÍRÁTE JAKÉKOLIV NÁKLADY ZA NUTNÉ ÚPRAVY, OPRAVY "
+"ČI SLUŽBY. TOTO PROHLÁŠENÍ O ZÁRUCE PŘEDSTAVUJE ZÁKLADNÍ SOUČÁST TÉTO "
+"LICENCE. BEZ TOHOTO PROHLÁŠENÍ NENÍ, PODLE TÉTO DOHODY, POVOLENO UŽÍVÁNÍ ANI "
+"ÚPRAVY TOHOTO DOKUMENTU; DÁLE"
+
+#: C/glabels.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"ZA ŽÁDNÝCH OKOLNOSTÍ A ŽÁDNÝCH PRÁVNÍCH PŘEDPOKLADŮ, AŤ SE JEDNÁ O PŘEČIN "
+"(VČETNĚ NEDBALOSTNÍCH), SMLOUVU NEBO JINÉ, NENÍ AUTOR, PŮVODNÍ PISATEL, "
+"KTERÝKOLIV PŘISPĚVATEL NEBO KTERÝKOLIV DISTRIBUTOR TOHOTO DOKUMENTU NEBO "
+"UPRAVENÉ VERZE DOKUMENTU NEBO KTERÝKOLIV DODAVATEL NĚKTERÉ Z TĚCHTO STRAN "
+"ODPOVĚDNÝ NĚJAKÉ OSOBĚ ZA PŘÍMÉ, NEPŘÍMÉ, SPECIÁLNÍ, NAHODILÉ NEBO NÁSLEDNÉ "
+"ŠKODY JAKÉHOKOLIV CHARAKTERU, VČETNĚ, ALE NEJEN, ZA POŠKOZENÍ ZE ZTRÁTY "
+"DOBRÉHO JMÉNA, PŘERUŠENÍ PRÁCE, PORUCHY NEBO NESPRÁVNÉ FUNKCE POČÍTAČE NEBO "
+"JINÉHO A VŠECH DALŠÍCH ŠKOD NEBO ZTRÁT VYVSTÁVAJÍCÍCH Z NEBO VZTAHUJÍCÍCH SE "
+"K POUŽÍVÁNÍ TOHOTO DOKUMENTU NEBO UPRAVENÝCH VERZÍ DOKUMENTU, I KDYŽ BY "
+"TAKOVÁTO STRANA BYLA INFORMOVANÁ O MOŽNOSTI TAKOVÉHOTO POŠKOZENÍ."
+
+#: C/glabels.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"DOKUMENT A JEHO UPRAVENÉ VERZE JSOU ŠÍŘENY V SOULADU SE ZNĚNÍM LICENCE GNU "
+"FREE DOCUMENTATION LICENSE S NÁSLEDUJÍCÍM USTANOVENÍM: <placeholder-1/>"
+
+#: C/glabels.xml:52(firstname)
+msgid "Jim"
+msgstr "Jim"
+
+#: C/glabels.xml:53(surname)
+msgid "Evins"
+msgstr "Evins"
+
+#: C/glabels.xml:87(revnumber)
+msgid "gLabels Manual V2.2.6"
+msgstr "Příručka V2.2.6 k aplikaci gLabels"
+
+#: C/glabels.xml:88(date)
+msgid "October 2009"
+msgstr "Říjen 2009"
+
+#: C/glabels.xml:90(para)
+msgid "Mario Blättermann <email>mariobl@gnome.org</email>"
+msgstr "Mario Blättermann <email>mariobl@gnome.org</email>"
+
+#: C/glabels.xml:97(revnumber)
+msgid "gLabels Manual V2.2"
+msgstr "Příručka V2.2 k aplikaci gLabels"
+
+#: C/glabels.xml:98(date)
+msgid "December 2007"
+msgstr "Prosinec 2007"
+
+#: C/glabels.xml:100(para)
+msgid "Jim Evins <email>evins@snaught.com</email>"
+msgstr "Jim Evins <email>evins@snaught.com</email>"
+
+#: C/glabels.xml:108(releaseinfo)
+msgid ""
+"This manual describes version 2.2.6 of <application>gLabels</application>."
+msgstr ""
+"Tato příručka popisuje aplikaci <application>gLabels</application> ve verzi "
+"2.2.6."
+
+#: C/glabels.xml:111(title)
+msgid "Feedback"
+msgstr "Ohlasy"
+
+#: C/glabels.xml:112(para)
+msgid ""
+"To report a bug or make a suggestion regarding the <application>gLabels</"
+"application> application or this manual, follow the directions in the <ulink "
+"url=\"http://glabels.sourceforge.net/contact/\" type=\"http"
+"\"><application>gLabels</application> Contact Page</ulink>."
+msgstr ""
+"Pokud chcete oznámit chybu nebo navrhnout vylepšení vztahující se k aplikaci "
+"<application>gLabels</application> nebo této příručce, postupujte dle "
+"instrukcí na <ulink url=\"http://glabels.sourceforge.net/contact/\" type="
+"\"http\">kontaktní stránce <application>gLabels</application></ulink>."
+
+#: C/glabels.xml:121(primary)
+msgid "gLabels"
+msgstr "gLabels"
+
+#: C/glabels.xml:124(primary)
+msgid "glabels"
+msgstr "glabels"
+
+#: C/glabels.xml:135(title)
+msgid "Introduction"
+msgstr "Úvod"
+
+#: C/glabels.xml:137(para)
+msgid ""
+"The <application>gLabels</application> application is a lightweight program "
+"for creating labels and business cards for the <systemitem>GNOME desktop</"
+"systemitem> environment. It is designed to work with various laser/ink-jet "
+"peel-off label and business card sheets that you'll find at most office "
+"supply stores."
+msgstr ""
+"Aplikace <application>gLabels</application> je jednoduchý program na "
+"vytváření etiket a vizitek pro <systemitem>pracovní prostředí GNOME</"
+"systemitem>. Je navržená pro práci s různými samolepicími etiketami a "
+"vizitkami rozmístěnými na listech pro laserový/inkoustový tisk, které "
+"najdete v každém obchodě s kancelářskými potřebami."
+
+#: C/glabels.xml:158(title)
+msgid "Getting Started"
+msgstr "Začínáme"
+
+#: C/glabels.xml:161(title)
+msgid "To Start <application>gLabels</application>"
+msgstr "Jak spustit aplikaci <application>gLabels</application>"
+
+#: C/glabels.xml:162(para)
+msgid "You can start <application>gLabels</application> in the following ways:"
+msgstr ""
+"Aplikaci <application>gLabels</application> můžete spustit následujícími "
+"způsoby:"
+
+#: C/glabels.xml:166(term)
+msgid "<guimenu>Applications</guimenu> menu"
+msgstr "Nabídka <guimenu>Aplikace</guimenu>"
+
+#: C/glabels.xml:168(para)
+msgid ""
+"Choose <menuchoice><guisubmenu>Office</guisubmenu><guimenuitem>gLabels</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Zvolte <menuchoice><guisubmenu>Kancelář</guisubmenu><guimenuitem>Návrhář "
+"etiket gLabels</guimenuitem></menuchoice>."
+
+#: C/glabels.xml:176(term)
+msgid "Command line"
+msgstr "Příkazový řádek"
+
+#: C/glabels.xml:178(para)
+msgid "Type <command>glabels</command>, then press <keycap>Return</keycap>:"
+msgstr ""
+"Napište příkaz <command>glabels</command> a zmáčkněte <keycap>Enter</keycap>:"
+
+#: C/glabels.xml:186(title)
+msgid "When You Start <application>gLabels</application>"
+msgstr "Když spustíte aplikaci <application>gLabels</application>"
+
+#: C/glabels.xml:187(para)
+msgid ""
+"When you start <application>gLabels</application>, the following window is "
+"displayed."
+msgstr ""
+"Když spustíte aplikaci <application>gLabels</application>, zobrazí se "
+"následující okno."
+
+#: C/glabels.xml:191(title)
+msgid "<application>gLabels</application> Start Up Window"
+msgstr "Okno <application>gLabels</application> po spuštění"
+
+#. for example, the items on the menubar and on the toolbar. This section is optional.
+#: C/glabels.xml:205(para)
+msgid ""
+"The <application>gLabels</application> window contains the following "
+"elements:"
+msgstr "Okno <application>gLabels</application> obsahuje následující části:"
+
+#: C/glabels.xml:209(term)
+msgid "Menubar."
+msgstr "Panel nabídek."
+
+#: C/glabels.xml:211(para)
+msgid ""
+"The menus on the menubar contain all of the commands you need to create and "
+"edit labels and business cards in <application>gLabels</application>."
+msgstr ""
+"Nabídky v panelu nabídek obsahují všechny příkazy potřebné k vytváření a "
+"úpravám etiket a vizitek v aplikaci <application>gLabels</application>."
+
+#: C/glabels.xml:217(term)
+msgid "Main toolbar."
+msgstr "Hlavní panel nástrojů."
+
+#: C/glabels.xml:219(para)
+msgid ""
+"The main toolbar contains a subset of common File and Edit commands that you "
+"can access from the menubar."
+msgstr ""
+"Hlavní panel nástrojů obsahuje podmnožinu běžných příkazů pro práci se "
+"soubory a k úpravám z těch, které jsou dostupné v panelu nabídek."
+
+#: C/glabels.xml:224(term)
+msgid "Drawing toolbar."
+msgstr "Panel kreslení."
+
+#: C/glabels.xml:226(para)
+msgid ""
+"The drawing toolbar contains a subset of commands for editing the current "
+"<application>gLabels</application> document."
+msgstr ""
+"Panel kreslení obsahuje podmnožinu běžných příkazů k úpravám aktuálního "
+"dokumentu <application>gLabels</application>."
+
+#: C/glabels.xml:231(term)
+msgid "Display area."
+msgstr "Zobrazovací oblast"
+
+#: C/glabels.xml:233(para)
+msgid ""
+"The display area is the main drawing interface to <application>gLabels</"
+"application>."
+msgstr ""
+"Zobrazovací oblast je hlavní rozhraní aplikace <application>gLabels</"
+"application> sloužící ke kreslení."
+
+#: C/glabels.xml:238(term)
+msgid "Object sidebar."
+msgstr "Postranní panel objektů."
+
+#: C/glabels.xml:240(para)
+msgid ""
+"The object sidebar provides an interface for viewing and editing all "
+"properties of an individual object."
+msgstr ""
+"Postranní panel objektů poskytuje rozhraní na prohlížení a úpravu všech "
+"vlastností jednotlivých objektů."
+
+#: C/glabels.xml:245(term)
+msgid "Properties toolbar."
+msgstr "Panel vlastností."
+
+#: C/glabels.xml:247(para)
+msgid ""
+"The properties toolbar contains a set of tools to manipulate the properties "
+"of selected objects and set default properties for new objects."
+msgstr ""
+"Panel vlastností obsahuje sadu nástrojů na úpravu vlastností vybraných "
+"objektů a nastavení výchozích vlastností pro nové objekty."
+
+#: C/glabels.xml:253(term)
+msgid "Statusbar."
+msgstr "Stavový panel."
+
+#: C/glabels.xml:255(para)
+msgid ""
+"The statusbar displays information about current <application>gLabels</"
+"application> activity and contextual information about the menu items."
+msgstr ""
+"Stavový panel zobrazuje informace o aktuální činnosti aplikace "
+"<application>gLabels</application> a kontextové informace o položkách "
+"nabídky."
+
+#: C/glabels.xml:271(title)
+msgid "Usage"
+msgstr "Použití"
+
+#: C/glabels.xml:275(title)
+msgid "To Create a New Label or Card"
+msgstr "Jak vytvořit novou etiketu nebo vizitku"
+
+#: C/glabels.xml:277(para)
+msgid ""
+"To create a new label or business card, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>New</guimenuitem></menuchoice> to display the "
+"<guilabel>New Label or Card</guilabel> dialog. Select the media type and "
+"orientation for the new document, then click <guibutton>OK</guibutton>. A "
+"new document is displayed in the display area of the <application>gLabels</"
+"application> window."
+msgstr ""
+"Když chcete vytvořit novou etiketu nebo vizitku, zvolte "
+"<menuchoice><guimenu>Soubor</guimenu><guimenuitem>Nový</guimenuitem></"
+"menuchoice> a zobrazí se dialogové okno <guilabel>Nová etiketa či vizitka</"
+"guilabel>. Vyberte pro nový dokument typ média a orientaci a klikněte na "
+"<guibutton>OK</guibutton>. Nový dokument se zobrazí v zobrazovací oblasti "
+"okna <application>gLabels</application>."
+
+#: C/glabels.xml:286(para)
+msgid ""
+"If your particular media type is missing from this dialog, see <xref linkend="
+"\"glabels-create-template\"/>"
+msgstr ""
+"V případě, že vaše konkrétní médium v tomto dialogovém okně schází, přečtěte "
+"si <xref linkend=\"glabels-create-template\"/>."
+
+#: C/glabels.xml:293(title)
+msgid "To Open a File"
+msgstr "Jak otevřít soubor"
+
+#: C/glabels.xml:295(para)
+msgid ""
+"To open a file, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</"
+"guimenuitem></menuchoice> to display the <guilabel>Open File</guilabel> "
+"dialog. Select the file that you want to open, then click <guibutton>OK</"
+"guibutton>. The file is displayed in the display area of the "
+"<application>gLabels</application> window."
+msgstr ""
+"Soubor otevřete pomocí volby <menuchoice><guimenu>Soubor</"
+"guimenu><guimenuitem>Otevřít</guimenuitem></menuchoice>, která zobrazí "
+"dialogové okno <guilabel>Otevření souboru</guilabel>. Vyberte soubor, který "
+"chcete otevřít a klikněte na <guibutton>OK</guibutton>. Soubor se zobrazí v "
+"zobrazovací oblasti okna <application>gLabels</application>."
+
+#: C/glabels.xml:302(para)
+msgid ""
+"You can also open multiple files in <application>gLabels</application>. The "
+"application creates a separate application window for each open file."
+msgstr ""
+"V aplikaci <application>gLabels</application> můžete otevřít i více souborů "
+"naráz. Aplikace pro každý otevřený soubor vytvoří zvláštní okno."
+
+#: C/glabels.xml:306(para)
+msgid ""
+"The application records the paths and filenames of the most recent files "
+"that you have edited and displays the files as menu items on the "
+"<menuchoice><guimenu>File</guimenu><guisubmenu>Recent Files</guisubmenu></"
+"menuchoice> menu."
+msgstr ""
+"Pro soubory nedávno otevřené k úpravě si aplikace zaznamenává cesty a názvy "
+"a tyto soubory potom zobrazuje v nabídce <menuchoice><guimenu>Soubor</"
+"guimenu><guisubmenu>Otevřít nedávné soubory</guisubmenu></menuchoice>."
+
+#: C/glabels.xml:316(title)
+msgid "To Open Multiple Files from a Command Line"
+msgstr "Jak otevřít více souborů z příkazové řádky"
+
+#: C/glabels.xml:318(para)
+msgid ""
+"You can run <application>gLabels</application> from a command line and open "
+"a single file or multiple files. To open multiple files from a command line, "
+"type the following command, then press <keycap>Return</keycap>:"
+msgstr ""
+"Aplikaci <application>gLabels</application> můžete spustit z příkazového "
+"řádku a otevřít při tom jeden nebo více souborů. Pokud chcete otevřít z "
+"příkazového řádku více souborů, napište následující příkaz a zmáčkněte "
+"<keycap>Enter</keycap>:"
+
+#: C/glabels.xml:324(replaceable)
+msgid "file1.glabels file2.glabels file3.glabels"
+msgstr "soubor1.glabels soubor2.glabels soubor3.glabels"
+
+#: C/glabels.xml:323(command)
+msgid "glabels <placeholder-1/>"
+msgstr "glabels <placeholder-1/>"
+
+#: C/glabels.xml:327(para)
+msgid ""
+"When the application starts, the files that you specify are displayed in "
+"separate <application>gLabels</application> windows."
+msgstr ""
+"Po spuštění aplikace se každý ze zadaných souborů zobrazí ve zvláštním okně "
+"<application>gLabels</application>."
+
+#: C/glabels.xml:334(title)
+msgid "To Save a File"
+msgstr "Jak uložit soubor"
+
+#: C/glabels.xml:336(para)
+msgid "You can save files in the following ways:"
+msgstr "Soubory můžete uložit následujícími způsoby:"
+
+#: C/glabels.xml:341(para)
+msgid ""
+"To save changes to an existing file, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Save</guimenuitem></menuchoice>."
+msgstr ""
+"Pro uložení změn do stávajícího souboru, zvolte <menuchoice><guimenu>Soubor</"
+"guimenu><guimenuitem>Uložit</guimenuitem></menuchoice>."
+
+#: C/glabels.xml:348(para)
+msgid ""
+"To save a new file or to save an existing file under a new filename, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Save As</guimenuitem></"
+"menuchoice>. Enter a name for the file in the <guilabel>Save As</guilabel> "
+"dialog box, then click <guibutton>OK</guibutton>."
+msgstr ""
+"Pro uložení nového souboru nebo uložení stávajícího souboru pod novým "
+"názvem, zvolte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Uložit "
+"jako</guimenuitem></menuchoice>. V dialogovém okně <guilabel>Uložit jako</"
+"guilabel> zadejte pro soubor název a klikněte na <guibutton>OK</guibutton>."
+
+#: C/glabels.xml:361(title)
+msgid "To Change Label Properties"
+msgstr "Jak změnit vlastnosti etikety"
+
+#: C/glabels.xml:363(para)
+msgid ""
+"To change the media type and/or orientation of a label, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Properties</guimenuitem></"
+"menuchoice> to display the <guilabel>Label properties</guilabel> dialog. "
+"Select the new media type and orientation for the document, then click "
+"<guibutton>OK</guibutton>."
+msgstr ""
+"Pokud chcete změnit typ média a/nebo orientaci etiket, zvolte "
+"<menuchoice><guimenu>Soubor</guimenu><guimenuitem>Vlastnosti</guimenuitem></"
+"menuchoice> a zobrazí se dialogové okno <guilabel>Vlastnosti etikety</"
+"guilabel>. Zvolte pro dokument nový typ média a orientaci a klikněte na "
+"<guibutton>OK</guibutton>."
+
+#: C/glabels.xml:374(title)
+msgid "To Create a Custom Template"
+msgstr "Jak vytvořit vlastní šablonu"
+
+#: C/glabels.xml:376(para)
+msgid ""
+"To create a new custom template, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Template Designer ...</guimenuitem></menuchoice> to "
+"display the <guilabel>Template Designer</guilabel> dialog. This dialog will "
+"assist you in creating a custom template for most types of label or card "
+"stationery that you may encounter."
+msgstr ""
+"Když chcete vytvořit novou vlastní šablonu, zvolte "
+"<menuchoice><guimenu>Soubor</guimenu><guimenuitem>Návrhář šablon…</"
+"guimenuitem></menuchoice> a zobrazí se dialogové okno <guilabel>Návrhář "
+"šablon gLabels</guilabel>. Toto dialogové okno vás provede vytvořením "
+"vlastní šablony pro většinu typů etiket nebo vizitek, se kterými se můžete "
+"setkat."
+
+#: C/glabels.xml:383(para)
+msgid ""
+"If you prefer, you can create your templates manually. For this option see "
+"<xref linkend=\"glabels-manual-create-template\"/>"
+msgstr ""
+"Pokud dáváte přednost ručnímu vytvoření šablon, přečtěte si <xref linkend="
+"\"glabels-manual-create-template\"/>"
+
+#: C/glabels.xml:391(title)
+msgid "To Close a File"
+msgstr "Jak zavřít soubor"
+
+#: C/glabels.xml:393(para)
+msgid ""
+"To close the current document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice> to close the "
+"application window. If the current document is modified, a confirmation "
+"dialog will be presented, allowing you to save the document or cancel the "
+"command. If the window being closed is the only open window, "
+"<application>gLabels</application> will exit."
+msgstr ""
+"Když chcete aktuální dokument zavřít, zvolte <menuchoice><guimenu>Soubor</"
+"guimenu><guimenuitem>Zavřít</guimenuitem></menuchoice> a zavřete tím "
+"aplikační okno. Pokud byl aktuální dokument změněn, zobrazí se potvrzovací "
+"dialogové okno, kde můžete dokument uložit nebo příkaz zrušit. Pokud je "
+"zavírané okno jediné otevřené, ukončí se celá aplikace <application>gLabels</"
+"application>."
+
+#: C/glabels.xml:405(title)
+msgid "To Quit <application>gLabels</application>"
+msgstr "Jak ukončit <application>gLabels</application>"
+
+#: C/glabels.xml:407(para)
+msgid ""
+"To quit <application>gLabels</application>, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Quit</guimenuitem></"
+"menuchoice>. This is equivalent to closing all open windows. See <xref "
+"linkend=\"glabels-close-file\"/>."
+msgstr ""
+"Když chcete aplikaci <application>gLabels</application> ukončit, zvolte "
+"<menuchoice><guimenu>Soubor</guimenu><guimenuitem>Ukončit</guimenuitem></"
+"menuchoice>. Odpovídá to zavření všech otevřených oken. Viz <xref linkend="
+"\"glabels-close-file\"/>."
+
+#: C/glabels.xml:417(title)
+msgid "To Print Labels or Cards"
+msgstr "Jak vytisknout etikety nebo vizitky"
+
+#: C/glabels.xml:419(para)
+msgid ""
+"To print labels or cards, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice> to display the "
+"<guilabel>Print</guilabel> dialog. Once print options have been selected, "
+"click <guilabel>Print</guilabel> to print the labels or cards. To simply "
+"preview the results, click <guilabel>Print Preview</guilabel> instead."
+msgstr ""
+"Když chcete vytisknout etikety nebo vizitky, zvolte "
+"<menuchoice><guimenu>Soubor</guimenu><guimenuitem>Tisk</guimenuitem></"
+"menuchoice> a zobrazí se dialogové okno <guilabel>Tisk</guilabel>. Až "
+"nastavíte volby tisku, klikněte na <guilabel>Tisk</guilabel> a etikety nebo "
+"vizitky se vytisknou. Pokud se chcete jen podívat na náhled, klikněte místo "
+"toho na <guilabel>Náhled tisku</guilabel>."
+
+#: C/glabels.xml:426(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog allows you to specify the following "
+"print options:"
+msgstr ""
+"V dialogovém okně <guilabel>Tisk</guilabel> můžete nastavit následující "
+"volby tisku:"
+
+#: C/glabels.xml:430(title)
+msgid "The Labels Tab of the Print Dialog"
+msgstr "Karta Etikety v dialogovém okně Tisk"
+
+#: C/glabels.xml:435(guilabel)
+msgid "Print control (Simple)"
+msgstr "Ovládání tisku (jednoduchý)"
+
+#: C/glabels.xml:438(para)
+msgid ""
+"For simple labels or cards (no document merge), the <guilabel>labels</"
+"guilabel> tabbed section contains the following copy controls."
+msgstr ""
+"Pro jednoduché etikety nebo vizitky (bez slučování dokumentů), obsahuje "
+"karta <guilabel>Etikety</guilabel> následující prvky."
+
+#: C/glabels.xml:443(title)
+msgid "Print Copy Controls"
+msgstr "Ovládací prvky tisku kopií"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:454(para)
+msgid ""
+"The number of copies of the label can be selected by choosing the number of "
+"full sheets to print, or a specific subset of labels on a single sheet."
+msgstr ""
+"Počet kopií etikety můžete vybrat zvolením počtu plných listů, které se mají "
+"vytisknout, a nebo vybrat jen část etiket na jednom listu."
+
+#: C/glabels.xml:458(para)
+msgid ""
+"The mini-preview can also be used to graphically select the subset of labels "
+"by clicking the first label on the mini-preview and dragging to the last "
+"label."
+msgstr ""
+"Mini-náhled můžete také použít ke grafickému výběru části etiket tak, že "
+"kliknete na první etiketu v mini-náhledu a táhnete až na poslední etiketu."
+
+#: C/glabels.xml:466(guilabel)
+msgid "Print control (Merge)"
+msgstr "Ovládání tisku (slučování)"
+
+#: C/glabels.xml:469(para)
+msgid ""
+"For labels or cards using the document merge (also known as \"mail merge\") "
+"capability, the <guilabel>labels</guilabel> tabbed section contains the "
+"following merge controls instead of copy controls."
+msgstr ""
+"Pro etikety nebo vizitky používající slučování dokumentů (někdy také "
+"nazývané „hromadná korespondence“), obsahuje karta <guilabel>Etikety</"
+"guilabel> následující ovládací prvky slučování lišící se od ovládacích prvků "
+"jednoduchého tisku."
+
+#: C/glabels.xml:475(title)
+msgid "Print Document Merge Controls"
+msgstr "Ovládací prvky tisku slučovaných dokumentů"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:486(para)
+msgid ""
+"The total number of labels or cards printed is the product of the number of "
+"records in the merge source and the number of copies selected. If multiple "
+"copies are selected, these can be either collated (copies of the same record "
+"grouped together) or un-collated (one copy each record is printed before "
+"next copy)."
+msgstr ""
+"Celkový počet etiket nebo vizitek je dán počtem záznamů ve zdroji slučování "
+"a počtem vybraných kopií. Jestliže je vybráno více kopií, mohou být také "
+"uspořádané (kopie ze stejného záznamu seskupené spolu) nebo neuspořádané "
+"(kopie jednotlivých záznamů za sebou)."
+
+#: C/glabels.xml:493(para)
+msgid ""
+"Printing can begin on any label on the first sheet. This can be selected "
+"with the <guilabel>Start on label</guilabel> spinbutton."
+msgstr ""
+"Tisk může začínat na libovolné etiketě na prvním listu. Tu můžete vybrat "
+"pomocí číselníku <guilabel>Začít na etiketě</guilabel>."
+
+#: C/glabels.xml:497(para)
+msgid ""
+"The mini-preview can also be used to graphically select this first label, by "
+"clicking on the desired label in the mini-preview."
+msgstr ""
+"Mini-náhled můžete také použít ke grafickému výběru první etikety tak, že na "
+"ni v mini-náhledu kliknete."
+
+#: C/glabels.xml:504(guilabel)
+msgid "Options"
+msgstr "Volby"
+
+#: C/glabels.xml:506(para)
+msgid "The following options can also be selected."
+msgstr "Můžete rovněž vybrat následující volby."
+
+#: C/glabels.xml:509(guilabel)
+msgid "print outlines"
+msgstr "tisk obrysů"
+
+#: C/glabels.xml:510(para)
+msgid ""
+"Print outlines of labels. This option is useful for dry-runs, to test "
+"printer alignment."
+msgstr ""
+"Tisk obrysů etiket. Tato volba je použitelná k tisku nanečisto, k otestování "
+"lícování."
+
+#: C/glabels.xml:514(guilabel)
+msgid "print in reverse"
+msgstr "obrácený tisk"
+
+#: C/glabels.xml:515(para)
+msgid ""
+"Prints the labels as mirror images. This option is useful for printing on "
+"clear labels that will be viewed from the reverse side (e.g. in a car "
+"window)."
+msgstr ""
+"Tisknout etikety zrcadlově. Tato volba je použitelná pro tisk na čiré "
+"etikety, na které se bude dívat z druhé strany (např. na okně auta)."
+
+#: C/glabels.xml:520(guilabel)
+msgid "print crop marks"
+msgstr "tisknout značky pro ořez"
+
+#: C/glabels.xml:521(para)
+msgid ""
+"Prints crop marks along the edge of the sheet. This option is useful for "
+"printing on blank stock, to be cut after printing. This option does not work "
+"well with all templates."
+msgstr ""
+"Tisknout ořezové značky podél hran listu. Tato volba je použitelná pro tisk "
+"na čisté listy, které se budou po tisku rozřezávat. Tato volba nepracuje "
+"úplně správně se všemi šablonami."
+
+#: C/glabels.xml:536(title)
+msgid "To Create New Objects"
+msgstr "Jak vytvořit nový objekt"
+
+#: C/glabels.xml:538(para)
+msgid ""
+"Objects are created by choosing the appropriate selection under the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Create Object</"
+"guimenuitem></menuchoice> submenu or the <guilabel>Drawing Toolbar</"
+"guilabel>. This will place the display area into object creation mode as "
+"indicated by its cursor. To return to the default object selection mode "
+"without creating an object, choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Select Mode</guimenuitem></menuchoice>. This will "
+"return the display area's cursor to the default selection arrow."
+msgstr ""
+"Objekty se vytvářejí příslušným výběrem v podnabídce "
+"<menuchoice><guimenu>Objekty</guimenu><guimenuitem>Vytvořit</guimenuitem></"
+"menuchoice> nebo na <guilabel>Panelu kreslení</guilabel>. Zobrazovací oblast "
+"se přepne do režimu vytváření objektu, což je indikováno patřičným "
+"ukazatelem. Do výchozího režimu výběru objektů se můžete vrátit, aniž byste "
+"nějaký objekt vytvořili, volbou <menuchoice><guimenu>Objekty</"
+"guimenu><guimenuitem>Režim výběru</guimenuitem></menuchoice>. Ukazatel pro "
+"zobrazovací oblast se změní zpět na výchozí šipku."
+
+#: C/glabels.xml:548(para)
+msgid "The following describes the object creation mode for each object type:"
+msgstr "Zde je popis režimu vytváření objektu pro jednotlivé typy objektů:"
+
+#: C/glabels.xml:554(term) C/glabels.xml:1123(guilabel)
+msgid "Text"
+msgstr "Text"
+
+#: C/glabels.xml:556(para)
+msgid ""
+"Click the desired location of the upper left corner of the text object. New "
+"text objects are initialized with the string \"Text.\" To change this text, "
+"or other properties, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Klikněte na požadované umístění levého horního rohu objektu text. Nový "
+"textový objekt se vytvoří s počátečním řetězcem „Text“. Jak tento text nebo "
+"další vlastnosti změnit uvádí <xref linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:564(term)
+msgid "Box"
+msgstr "Obdélník"
+
+#: C/glabels.xml:566(para)
+msgid ""
+"Click the desired location of the upper left corner of the box object and "
+"drag to the desired location of the lower right corner. If you simply click "
+"in a single location, a square box will be created. To change properties of "
+"the box object, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Klikněte na požadované umístění levého horního rohu objektu obdélník a "
+"táhněte k požadovanému umístění pravého dolního rohu. Když jednoduše "
+"kliknete na jednom místě, vytvoří se čtverec. Jak změnit vlastnosti "
+"obdélníku uvádí <xref linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:575(term) C/glabels.xml:1149(guilabel)
+msgid "Line"
+msgstr "Čára"
+
+#: C/glabels.xml:577(para)
+msgid ""
+"Click the desired location of one end of the line object and drag to the "
+"desired location of the other end. If you simply click in a single location, "
+"a diagonal line will be created. To change properties of the line object, "
+"see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Klikněte na požadované umístění levého horního konce objektu čára a táhněte "
+"k požadovanému umístění pravého dolního konce. Když jednoduše kliknete na "
+"jednom místě, vytvoří diagonální úsečka. Jak změnit vlastnosti čáry uvádí "
+"<xref linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:586(term)
+msgid "Ellipse"
+msgstr "Elipsa"
+
+#: C/glabels.xml:588(para)
+msgid ""
+"Click the desired location of the upper left corner of the ellipse object "
+"and drag to the desired location of the lower right corner. If you simply "
+"click in a single location, a circle will be created. To change properties "
+"of the ellipse object, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Klikněte na požadované umístění levého horního rohu objektu elipsa a táhněte "
+"k požadovanému umístění pravého dolního rohu. Když jednoduše kliknete na "
+"jednom místě, vytvoří se kruh. Jak změnit vlastnosti elipsy uvádí <xref "
+"linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:597(term)
+msgid "Image"
+msgstr "Obrázek"
+
+#: C/glabels.xml:599(para)
+msgid ""
+"Click the desired location of the upper left corner of the image object and "
+"drag to the desired location of the lower right corner. If you simply click "
+"in a single location, a square will be created. New image objects are "
+"initialized with a simple checkerboard image. To change this image, or other "
+"properties of the image object, see <xref linkend=\"glabels-object-properties"
+"\"/>."
+msgstr ""
+"Klikněte na požadované umístění levého horního rohu objektu obrázku a "
+"táhněte k požadovanému umístění pravého dolního rohu. Když jednoduše "
+"kliknete na jednom místě, vytvoří se čtverec. Nový obrázkový objekt se "
+"vytvoří s jednoduchým počátečním obrázkem šachovnice. Jak změnit tento "
+"obrázek a další vlastnosti uvádí <xref linkend=\"glabels-object-properties\"/"
+">."
+
+#: C/glabels.xml:610(term)
+msgid "Barcode"
+msgstr "Čárový kód"
+
+#: C/glabels.xml:612(para)
+msgid ""
+"Click the desired location of the upper left corner of the barcode object. "
+"New barcode objects are initialized to a POSTNET barcode with representative "
+"data. To change data and properties of the barcode object, see <xref linkend="
+"\"glabels-object-properties\"/>."
+msgstr ""
+"Klikněte na požadované umístění levého horního rohu objektu čárového kódu. "
+"Nový objekt čárového kódu se vytvoří jako čárový kód POSTNET s ukázkovými "
+"daty. Jak tato data nebo další vlastnosti změnit uvádí <xref linkend="
+"\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:627(title)
+msgid "To Select Objects"
+msgstr "Jak vybrat objekty"
+
+#: C/glabels.xml:629(para)
+msgid ""
+"A prerequisite for performing operations on objects is the selection of "
+"individual objects or groups of objects. The display area must be in the "
+"object selection mode to create new selections, as indicated by an arrow "
+"cursor. The object selection mode is selected by the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Select Mode</"
+"guimenuitem></menuchoice> menu item, or the corresponding command on the "
+"<guilabel>Drawing Toolbar</guilabel>."
+msgstr ""
+"Předpokladem k provádění operací s objekty je výběr jednoho či skupiny více "
+"objektů. Aby bylo možné výběr provést, musí být zobrazovací oblast v režimu "
+"výběru objektů, což je indikováno kurzorem v podobě šipky. Režim výběru "
+"objektů se zvolí pomocí <menuchoice><guimenu>Objekty</"
+"guimenu><guimenuitem>Režim výběru</guimenuitem></menuchoice> nebo "
+"odpovídajícím příkazem na <guilabel>Panelu kreslení</guilabel>."
+
+#: C/glabels.xml:642(term)
+msgid "Selecting a single object"
+msgstr "Výběr jednoho objektu"
+
+#: C/glabels.xml:644(para)
+msgid ""
+"A single object can be selected simply by clicking on the desired object in "
+"the display area. Once selected the object will be highlighted with a set of "
+"resizing handles."
+msgstr ""
+"Jeden objekt vyberete prostým kliknutím na něj v zobrazovací oblasti. "
+"Vybraný objekt bude zvýrazněný sadou úchopů sloužících ke změně velikosti"
+
+#: C/glabels.xml:652(term)
+msgid "Aggregate object selections"
+msgstr "Přidávání objektů do výběru"
+
+#: C/glabels.xml:654(para)
+msgid ""
+"Multiple objects can be selected by first selecting the first object as "
+"above and then by holding the <keycap>Ctrl</keycap> key while selecting "
+"additional objects. Individual objects can be added to an existing selection "
+"at any time by holding the <keycap>Ctrl</keycap> key while selecting the "
+"desired objects. All objects can also be selected by using the "
+"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Select All</guimenuitem></"
+"menuchoice> menu item. All objects in an aggregate object selection will be "
+"highlighted."
+msgstr ""
+"Více objektů můžete vybrat tak, že vyberete první dříve uvedeným způsobem a "
+"po té budete držet klávesu <keycap>Ctrl</keycap> a vybírat další objekty. "
+"Jednotlivé objekty lze přidat do stávajícího výběru kdykoliv držením klávesy "
+"<keycap>Ctrl</keycap> během vybírání požadovaných objektů. Všechny objekty "
+"můžete vybrat pomocí položky nabídky <menuchoice><guimenu>Upravit</"
+"guimenu><guimenuitem>Vybrat vše</guimenuitem></menuchoice>. Všechny objekty "
+"ve výběru jsou zvýrazněné."
+
+#: C/glabels.xml:668(term)
+msgid "Area selections"
+msgstr "Výběr oblasti"
+
+#: C/glabels.xml:670(para)
+msgid ""
+"Multiple objects can also be selected by clicking an empty area and dragging "
+"to form a rectangular area. When released, all objects contained in the area "
+"will form an aggregate selection. An area selection can be used to add to an "
+"existing selection by holding the <keycap>Ctrl</keycap> key while performing "
+"the selection."
+msgstr ""
+"Více objektů lze rovněž vybrat zmáčknutím tlačítka myši na prázdném místě a "
+"tažením obdélníkové oblasti. Po uvolnění tlačítka se všechny objekty "
+"obsažené v takovéto oblasti naráz vyberou. Výběr pomocí oblasti lez použít k "
+"přidání ke stávajícímu výběru podržením klávesy <keycap>Ctrl</keycap> během "
+"provádění výběru."
+
+#: C/glabels.xml:680(term)
+msgid "Unselecting objects"
+msgstr "Zrušení výběru objektů"
+
+#: C/glabels.xml:682(para)
+msgid ""
+"Individual objects can be removed from an existing selection by holding the "
+"<keycap>Ctrl</keycap> key while clicking on a previously selected object. An "
+"entire selection can be dismissed by using the <menuchoice><guimenu>Edit</"
+"guimenu><guimenuitem>Un-select All</guimenuitem></menuchoice> menu item or "
+"by simply clicking any empty space in the display area. Once an object is "
+"unselected its highlight is removed."
+msgstr ""
+"Jednotlivé objekty lze z výběru odebrat podržením klávesy <keycap>Ctrl</"
+"keycap> a klikáním na označené objekty. Veškerý výběr můžete zrušit pomocí "
+"nabídky <menuchoice><guimenu>Upravit</guimenu><guimenuitem>Zrušit výběr</"
+"guimenuitem></menuchoice> nebo jednoduchým kliknutím na prázdné místo v "
+"zobrazovací oblasti. Jakmile je u objektu zrušen výběr, zmizí i jeho "
+"zvýraznění."
+
+#: C/glabels.xml:699(title)
+msgid "Clipboard Commands"
+msgstr "Příkazy pro práci se schránkou"
+
+#: C/glabels.xml:701(para)
+msgid ""
+"Object selections can be manipulated using the standard clipboard operations "
+"<guimenuitem>Cut</guimenuitem>, <guimenuitem>Copy</guimenuitem>, "
+"<guimenuitem>Paste</guimenuitem>, and <guimenuitem>Delete</guimenuitem>."
+msgstr ""
+"S vybranými objekty lze manipulovat pomocí standardních operací se schránkou "
+"<guimenuitem>Vyjmout</guimenuitem>, <guimenuitem>Kopírovat</guimenuitem>, "
+"<guimenuitem>Vložit</guimenuitem> a <guimenuitem>Smazat</guimenuitem>."
+
+#: C/glabels.xml:712(keycap) C/glabels.xml:728(keycap)
+#: C/glabels.xml:744(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/glabels.xml:712(keycap)
+msgid "X"
+msgstr "X"
+
+#: C/glabels.xml:714(guimenuitem)
+msgid "Cut"
+msgstr "Vyjmout"
+
+#: C/glabels.xml:718(para)
+msgid ""
+"Moves selected objects to the clipboard. The objects are then available for "
+"pasting back into the current document or another document."
+msgstr ""
+"Přesune vybrané objekty do schránky. Objekty jsou potom přístupné pro "
+"vkládání zpátky do aktuálního dokumentu nebo jiného dokumentu."
+
+#: C/glabels.xml:728(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/glabels.xml:730(guimenuitem)
+msgid "Copy"
+msgstr "Kopírovat"
+
+#: C/glabels.xml:734(para)
+msgid ""
+"Copies selected objects to the clipboard without deleting them. The objects "
+"are then available for pasting back into the current document or another "
+"document."
+msgstr ""
+"Zkopíruje vybrané objekty do schránky, aniž by byly vymazány. Objekty jsou "
+"potom přístupné pro vkládání zpátky do aktuálního dokumentu nebo jiného "
+"dokumentu."
+
+#: C/glabels.xml:744(keycap)
+msgid "V"
+msgstr "V"
+
+#: C/glabels.xml:746(guimenuitem)
+msgid "Paste"
+msgstr "Vložit"
+
+#: C/glabels.xml:750(para)
+msgid ""
+"Pastes objects from the clipboard into the current document. "
+"<application>gLabels</application> can only paste objects from another "
+"<application>gLabels</application> document."
+msgstr ""
+"Vloží objekty ze schránky do aktuálního dokumentu. Aplikace "
+"<application>gLabels</application> umí vkládat pouze objekty z jiného "
+"dokumentu <application>gLabels</application>."
+
+#: C/glabels.xml:760(keycap) C/glabels.xml:762(guimenuitem)
+msgid "Delete"
+msgstr "Smazat"
+
+#: C/glabels.xml:766(para)
+msgid "Deletes selected objects without placing them on the clipboard."
+msgstr "Smaže vybrané objekty, aniž by byly umístěny do schránky."
+
+#: C/glabels.xml:777(title)
+msgid "To Edit Object Properties"
+msgstr "Jak upravit vlastnosti objektu"
+
+#: C/glabels.xml:779(para)
+msgid ""
+"Most object properties can be modified through the object editor sidebar, "
+"illustrated below. To use the object editor, a single object must first be "
+"selected. See <xref linkend=\"glabels-select-objects\"/>."
+msgstr ""
+"Většinu vlastností objektů lze upravit přes editor objektů v postranním "
+"panelu, který je vyobrazený níže. Abyste mohli editor objektů používat, "
+"musíte nejdříve vybrat jeden objekt. Viz <xref linkend=\"glabels-select-"
+"objects\"/>."
+
+#: C/glabels.xml:786(title)
+msgid "Object Editor Sidebar"
+msgstr "Editor objektů z postranního panelu"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:797(para)
+msgid ""
+"The object editor will contain a subset of the following tabbed sections, "
+"depending on object type:"
+msgstr ""
+"Editor objektů bude obsahovat některé z následujících karet, které závisí na "
+"typu objektu:"
+
+#: C/glabels.xml:801(title)
+msgid "Text Tabbed Section (Text objects)"
+msgstr "Karta Text (textové objekty)"
+
+#: C/glabels.xml:803(para)
+msgid ""
+"This section contains a small editor for changing the content of a text "
+"object. It also contains a dropdown menu of available document merge keys, "
+"that can be inserted into text."
+msgstr ""
+"Tato karta obsahuje malý editor na úpravu obsahu textového objektu. Rovněž "
+"obsahuje vyskakovací nabídku dostupných klíčů slučování dokumentů, které lze "
+"do textu vkládat."
+
+#: C/glabels.xml:810(title)
+msgid "Image Tabbed Section (Image objecs)"
+msgstr "Karta Obrázek (obrázkové objekty)"
+
+#: C/glabels.xml:812(para)
+msgid ""
+"This section contains a file entry with preview to select image files. The "
+"browse button can be used to easily locate image files. Alternatively, a "
+"document merge key can be used instead to provide a filename at print time."
+msgstr ""
+"Tato karta obsahuje pole na zadání souboru s obrázkem. Přes tlačítko "
+"procházení můžete soubor snadno najít. Druhou možností je použití klíče pro "
+"slučování dokumentů, který poskytne název souboru až během tisku."
+
+#: C/glabels.xml:820(title)
+msgid "Data Tabbed Section (Barcode objecs)"
+msgstr "Karta Data (objekty čárových kódů)"
+
+#: C/glabels.xml:822(para)
+msgid ""
+"This section contains a text entry to enter literal barcode data. "
+"Alternatively, a document merge key can be used to provide this data at "
+"print time."
+msgstr ""
+"Tato karta obsahuje textové pole na zadání dat pro čárový kód. Druhou "
+"možností je použití klíče pro slučování dokumentů, přes který jsou data "
+"poskytována až během tisku."
+
+#: C/glabels.xml:829(title)
+msgid "Style Tabbed Section (Text objects)"
+msgstr "Karta Styl (textové objekty)"
+
+#: C/glabels.xml:831(para)
+msgid ""
+"This section contains controls to select text properties, including font "
+"family, font size, font weight, color, and text justification."
+msgstr ""
+"Tato karta obsahuje ovládací prvky na výběr vlastností textu, včetně typu "
+"písma, velikosti písma, tloušťky písma, barvy a zarovnání textu."
+
+#: C/glabels.xml:838(title)
+msgid "Style Tabbed Section (Barcode objecs)"
+msgstr "Karta Styl (objekty čárových kódů)"
+
+#: C/glabels.xml:840(para)
+msgid ""
+"This section contains controls to select barcode properties, including "
+"barcode style, color, whether to print text, and whether to include a "
+"checksum digit."
+msgstr ""
+"Tato karta obsahuje ovládací prvky na výběr vlastností čárového kódu, včetně "
+"stylu čárového kódu, barvy, zda tisknout text a zda vkládat číslo s "
+"kontrolním součtem."
+
+#: C/glabels.xml:847(title)
+msgid "Line Tabbed Section"
+msgstr "Karta Čára"
+
+#: C/glabels.xml:849(para)
+msgid ""
+"This section contains controls to select properties of lines and outlines. "
+"These properties include line width and color."
+msgstr ""
+"Tato karta obsahuje ovládací prvky na výběr vlastností čar a obrysů. Tyto "
+"vlastnosti zahrnují tloušťku čáry a její barvu."
+
+#: C/glabels.xml:855(title)
+msgid "Fill Tabbed Section"
+msgstr "Karta Výplň"
+
+#: C/glabels.xml:857(para)
+msgid ""
+"This section contains controls to select fill properties of box and ellipse "
+"objects. Currently the only fill property is fill color."
+msgstr ""
+"Tato karta obsahuje ovládací prvky na výběr vlastností výplně objektů "
+"obdélníků a elips. V současnosti obsahuje pouze barvu výplně."
+
+#: C/glabels.xml:864(title)
+msgid "Size Tabbed Section (All except line objects)"
+msgstr "Karta Velikost (všechny objekty vyjma čar)"
+
+#: C/glabels.xml:866(para)
+msgid ""
+"This section contains controls to select the width and height of an object. "
+"A checkbox is provided, so that the current aspect ratio can be locked while "
+"manipulating the width and height controls. Image objects also provide a "
+"button to reset the size to the image's natural size (Assumes 72DPI)."
+msgstr ""
+"Tato karta obsahuje ovládací prvky na výběr šířky a výšky objektu. K "
+"dispozici je zaškrtávací pole, kterým můžete zamknout poměr stran během "
+"úprav šířky a výšky. U obrázků je k dispozici rovněž tlačítko, kterým můžete "
+"nastavit reálné rozměry obrázku (předpokládá se 72 DPI)."
+
+#: C/glabels.xml:875(title)
+msgid "Size Tabbed Section (Line objects)"
+msgstr "Karta Velikost (objekty čar)"
+
+#: C/glabels.xml:877(para)
+msgid ""
+"This section contains controls to select the length and angle of a line "
+"object."
+msgstr "Tato karta obsahuje ovládací prvky pro výběr délky a úhlu čáry."
+
+#: C/glabels.xml:883(title)
+msgid "Position Tabbed Section"
+msgstr "Karta Pozice"
+
+#: C/glabels.xml:885(para)
+msgid "This section contains controls to change the position of an object."
+msgstr "Tato karta obsahuje ovládací prvky pro změnu pozice objektu."
+
+#: C/glabels.xml:892(title)
+msgid "Shadow Tabbed Section (All except image and barcode objects)"
+msgstr "Karta Stín (všechny objekty vyjma obrázků a čárových kódů)"
+
+#: C/glabels.xml:894(para)
+msgid "This section contains controls to add a shadow to an object."
+msgstr "Tato karta obsahuje ovládací prvky pro přidání stínu k objektu."
+
+#: C/glabels.xml:903(title)
+msgid "Other Manipulations of Objects"
+msgstr "Ostatní manipulace s objekty"
+
+#: C/glabels.xml:905(para)
+msgid "Objects can also be manipulated in the following ways."
+msgstr "S objekty lze manipulovat ještě následujícími způsoby:"
+
+#: C/glabels.xml:908(title)
+msgid "Moving and Resizing Objects"
+msgstr "Přesouvání a změna velikosti objektů"
+
+#: C/glabels.xml:910(para)
+msgid ""
+"Objects can be moved by simply clicking on a selected object and dragging "
+"the object to its new location. If the object is part of an aggregate "
+"selection, all objects in the selection will move with the object being "
+"dragged, maintaining their relative positions to one another. If no object "
+"is selected, clicking on an object will create a new selection containing "
+"that object. See <xref linkend=\"glabels-select-objects\"/>."
+msgstr ""
+"Objekty lze přesunout kliknutím na vybraný objekt a tažením objektu na nové "
+"místo. Pokud je objekt součástí skupiny označených objektů, budou se s "
+"objektem přesouvat všechny vybrané objekty, ale jejich vzájemná pozice "
+"zůstane zachovaná. Pokud není žádný objekt vybraný, kliknutí na objekt "
+"provede nový výběr tohoto objektu. Viz <xref linkend=\"glabels-select-objects"
+"\"/>."
+
+#: C/glabels.xml:918(para)
+msgid ""
+"A selected object can be resized by clicking one of its resize handle and "
+"dragging it to obtain the new size."
+msgstr ""
+"U vybraných objektů můžete měnit jejich velikost kliknutím na úchop pro "
+"změnu velikosti a jeho tažením tak, abyste dosáhli správné velikost."
+
+#: C/glabels.xml:924(title)
+msgid "Changing Stacking Order"
+msgstr "Změna pořadí objektů"
+
+#: C/glabels.xml:926(para)
+msgid ""
+"Stacking order refers to relative position in the z-axis of objects. That is "
+"when objects overlap, which object will appear on top of the other. By "
+"default, newer objects will appear above older objects. To change this "
+"order, select one or more objects and choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Order</guimenuitem><guimenuitem>Bring to Front</"
+"guimenuitem></menuchoice> to raise the selection to the top of the stacking "
+"order, or choose <menuchoice><guimenu>Objects</guimenu><guimenuitem>Order</"
+"guimenuitem><guimenuitem>Send to Back</guimenuitem></menuchoice> to lower "
+"the selection to the bottom of the stacking order. These menuitems are also "
+"available by right-clicking the display area when there is a non-empty "
+"selection."
+msgstr ""
+"Pořadí objektů představuje jejich relativní polohu v ose z. Prakticky to "
+"určuje při překrývání objektů, který z nich bude nahoře a který vespod. "
+"Standardně se nové objekty vytvářejí nad staršími objekty. Když chcete toto "
+"pořadí změnit, jeden nebo více objektů vyberte a zvolte "
+"<menuchoice><guimenu>Objekty</guimenu><guimenuitem>Pořadí</"
+"guimenuitem><guimenuitem>Přenést dopředu</guimenuitem></menuchoice> pro "
+"vynesení výběru na nejvyšší pozici nebo <menuchoice><guimenu>Objekty</"
+"guimenu><guimenuitem>Pořadí</guimenuitem><guimenuitem>Přenést dozadu</"
+"guimenuitem></menuchoice> pro zatlačení výběru úplně dospod. Tyto položky "
+"nabídky jsou přístupné i po kliknutí pravým tlačítkem v zobrazovací oblasti "
+"za předpokladu, že jsou vybrané nějaké objekty."
+
+#: C/glabels.xml:944(title)
+msgid "Rotating and Flipping Objects"
+msgstr "Otáčení a překlápění objektů"
+
+#: C/glabels.xml:946(para)
+msgid ""
+"Objects can be rotated 90 degrees in either direction, or flipped "
+"horizontally or vertically, by choosing the appropriate menuitem in the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Rotate/Flip</"
+"guimenuitem></menuchoice> sub-menu. These menuitems are also available by "
+"right-clicking the display area when there is a non-empty selection."
+msgstr ""
+"Objekty lze otáčet po 90stupňových krocích v obou směrech nebo je překlápět "
+"svisle nebo vodorovně a to volbou příslušné položky v podnabídce "
+"<menuchoice><guimenu>Objekty</guimenu><guimenuitem>Otočit/Překlopit</"
+"guimenuitem></menuchoice>. Tyto položky nabídky jsou přístupné i po kliknutí "
+"pravým tlačítkem v zobrazovací oblasti za předpokladu, že jsou vybrané "
+"nějaké objekty."
+
+#: C/glabels.xml:956(title)
+msgid "Aligning Objects"
+msgstr "Zarovnávání objektů"
+
+#: C/glabels.xml:958(para)
+msgid ""
+"Objects can be aligned horizontally or vertically, relative to one another, "
+"or relative to the center line of the label, by choosing the appropriate "
+"menuitem from the <menuchoice><guimenu>Objects</guimenu><guimenuitem>Align "
+"Horizontal</guimenuitem></menuchoice> or <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Align Horizontal</guimenuitem></menuchoice> sub-menus. "
+"These menuitems are also available by right-clicking the display area when "
+"there is a non-empty selection."
+msgstr ""
+"Objekty lze zarovnávat vodorovně nebo svisle, relativně vůči sobě nebo "
+"relativně ke středové čáře etikety, volbou příslušné položky z podnabídky "
+"<menuchoice><guimenu>Objekty</guimenu><guimenuitem>Zarovnat vodorovně</"
+"guimenuitem></menuchoice> nebo <menuchoice><guimenu>Objekty</"
+"guimenu><guimenuitem>Zarovnat svisle</guimenuitem></menuchoice>. Tyto "
+"položky nabídky jsou přístupné i po kliknutí pravým tlačítkem v zobrazovací "
+"oblasti za předpokladu, že jsou vybrané nějaké objekty."
+
+#: C/glabels.xml:971(title)
+msgid "Using the Property Bar"
+msgstr "Používání panelu vlastností"
+
+#: C/glabels.xml:973(para)
+msgid ""
+"The property bar can be used to change some common properties of objects en-"
+"masse. These properties include font family, font size, font weight, text "
+"alignment, text color, fill color, line or outline color, and line width. "
+"The property bar also controls the defaults for these properties for any "
+"newly created objects."
+msgstr ""
+"Panel vlastností lze použít ke změně některých běžných vlastností objektů "
+"jako celku. Tyto vlastnosti zahrnují typ písma, velikost písma, tloušťku "
+"písma, zarovnání textu, barvu textu, barvu výplně, barvu čáry nebo obrysu a "
+"tloušťku čáry. Přes panel vlastností může také zadat výchozí hodnoty těchto "
+"vlastností pro nově vytvářené objekty."
+
+#: C/glabels.xml:988(title)
+msgid "Performing a Document Merge"
+msgstr "Provádění slučování dokumentů"
+
+#: C/glabels.xml:990(para)
+msgid ""
+"Document Merge (sometimes called \"Mail Merge\") is a powerful feature that "
+"allows a unique label or card to be printed for each record in an external "
+"data source."
+msgstr ""
+"Slučování dokumentů (někdy také nazývané „hromadná korespondence“) je mocná "
+"funkce, která umožňuje vytisknout na etikety nebo vizitky různé texty podle "
+"jednotlivých záznamů v externím zdroji dat."
+
+#: C/glabels.xml:994(para)
+msgid ""
+"The first step to performing a document merge is to prepare a source "
+"document that contains your merge data. This data could be mailing addresses "
+"or any other data that you wish to create unique labels or cards for. "
+"Currently back-ends only exist for text files and the evolution data server "
+"-- others are planned. The currently supported text-file format is very "
+"simple: each line is a record; fields are delimited by commas (CSV), tabs, "
+"or colons; and newlines can be embedded into fields by using the \"\\n\" "
+"entity. This file could be created using any text editor or could be created "
+"by another program or script. A common way of creating CSV files is to "
+"export them from a spreadsheet program."
+msgstr ""
+"Prvním krokem při slučování dokumentů je příprava zdrojového dokumentu, "
+"který má obsahovat slučovaná data. Tato data mohou být poštovní adresy nebo "
+"jakákoliv jiná data, pro která si přejete vytvořit jedinečné etikety nebo "
+"vizitky. V současnosti jsou zatím jako zdroje podporované pouze textové "
+"soubory a datový server Evolution, jiné jsou v plánu. Současně podporovaný "
+"formát textových souborů je velmi jednoduchý: co řádek, to záznam; pole jsou "
+"oddělená čárkami (CSV), tabulátory nebo dvojtečkami; řádky jsou zakončené "
+"pomocí znaku „\\n“. Takovýto soubor jde vytvořit v libovolném textovém "
+"editoru nebo jiným programem nebo skriptem. Obvyklým způsobem vytváření "
+"souborů CSV je jejich export z tabulkového kalkulátoru."
+
+#: C/glabels.xml:1006(para)
+msgid ""
+"A label must then be configured to \"point at\" this data file. To configure "
+"the merge properties of a document, choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>merge properties</guilabel> dialog. This dialog is "
+"used to select the exact data file format and file name (location) of the "
+"merge data."
+msgstr ""
+"Etiketa musí být nastavená tak, aby „ukazovala na“ takovýto datový soubor. "
+"Abyste nastavili vlastnosti slučování dokumentu, zvolte položku nabídky "
+"<menuchoice><guimenu>Objekty</guimenu><guimenuitem>Vlastnosti slučování</"
+"guimenuitem></menuchoice>, zobrazí se dialogové okno <guilabel>vlastnosti "
+"slučování</guilabel>. Toto dialogové okno slouží k výběru přesného formátu "
+"datového souboru a názvu (umístění) souboru se slučovanými daty."
+
+#: C/glabels.xml:1014(para)
+msgid ""
+"Finally, once the label has been configured for a data file, field keys can "
+"be inserted into text objects and used as source or data for barcode objects "
+"and image filenames for image objects. See <xref linkend=\"glabels-object-"
+"properties\"/> for more information on using merge data for these object "
+"types."
+msgstr ""
+"Nakonec, až je etiketa nastavená pro datový soubor, je zapotřebí vložit "
+"klíče polí do textových objektů a použít klíče polí jako zdroje nebo data "
+"pro objekty čárových kódů a jako názvy souborů pro obrázkové objekty. Více "
+"informací o použití slučovaných dat pro tyto typy objektů viz <xref linkend="
+"\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:1020(para)
+msgid ""
+"Now that your label is configured, <application>gLabels</application> will "
+"print a unique label for each record in your source document -- substituting "
+"fields from each record for field keys in the all text, barcode, and image "
+"objects."
+msgstr ""
+"Nyní, když máte svoji etiketu nastavenou, bude aplikace "
+"<application>gLabels</application> tisknout jednotlivé etikety odlišné pro "
+"každý záznam ve vašem zdrojovém dokumentu - do klíčů polí se ve všech "
+"textech budou dosazovat pole z jednotlivých záznamů."
+
+#: C/glabels.xml:1025(para)
+msgid ""
+"See <xref linkend=\"glabels-merge-tutorial\"/> for a detailed tutorial on "
+"the document merge feature."
+msgstr ""
+"Podrobný průvodce funkcí slučování dokumentů viz <xref linkend=\"glabels-"
+"merge-tutorial\"/>."
+
+#: C/glabels.xml:1040(title)
+msgid "Settings"
+msgstr "Nastavení"
+
+#: C/glabels.xml:1041(para)
+msgid ""
+"To configure <application>gLabels</application>, choose "
+"<menuchoice><guimenu>Settings</guimenu><guimenuitem>Preferences</"
+"guimenuitem></menuchoice>. The <guilabel>Preferences</guilabel> dialog "
+"contains the following tabbed sections:"
+msgstr ""
+"Když chcete v aplikaci <application>gLabels</application> změnit nastavení, "
+"zvolte <menuchoice><guimenu>Upravit</guimenu><guimenuitem>Předvolby</"
+"guimenuitem></menuchoice>. Dialogové okno <guilabel>Předvolby gLabels</"
+"guilabel> obsahuje následující karty:"
+
+#: C/glabels.xml:1062(title)
+msgid "Locale"
+msgstr "Národní prostředí"
+
+#: C/glabels.xml:1066(guilabel)
+msgid "Units"
+msgstr "Jednotky"
+
+#: C/glabels.xml:1068(para)
+msgid ""
+"Use this radio button group to specify your preferred units. Select one of "
+"the following options:"
+msgstr ""
+"Tento skupinový přepínač použijte k určení svých upřednostňovaných jednotek. "
+"Vyberte jednu z následujících možností:"
+
+#: C/glabels.xml:1073(guilabel)
+msgid "Points"
+msgstr "Body"
+
+#: C/glabels.xml:1074(para)
+msgid "Use points (1 point = 1/72 in = 0.352778 mm)."
+msgstr "Použít body (1 bod = 1/72 palce = 0,352778 mm)."
+
+#: C/glabels.xml:1078(guilabel)
+msgid "Inches"
+msgstr "Palce"
+
+#: C/glabels.xml:1079(para)
+msgid "Use inches."
+msgstr "Použít palce (1 palec = 25,4 mm)."
+
+#: C/glabels.xml:1083(guilabel)
+msgid "Millimeters"
+msgstr "Milimetry"
+
+#: C/glabels.xml:1084(para)
+msgid "Use millimeters."
+msgstr "Použít milimetry."
+
+#: C/glabels.xml:1087(para)
+msgid "Default: <guilabel>Inches</guilabel>."
+msgstr "Výchozí : <guilabel>Palce</guilabel>."
+
+#: C/glabels.xml:1093(guilabel)
+msgid "Default page size"
+msgstr "Výchozí velikost stránky"
+
+#: C/glabels.xml:1095(para)
+msgid ""
+"Use this radio button group to specify your preferred page size. This will "
+"make it quicker for you to locate media types when creating a new label or "
+"card."
+msgstr ""
+"Tento skupinový přepínač použijte k určení své upřednostňované velikosti "
+"stránky. Urychlí vám to hledání typu média při vytváření nové etikety nebo "
+"vizitky."
+
+#: C/glabels.xml:1101(guilabel)
+msgid "US Letter"
+msgstr "US Letter"
+
+#: C/glabels.xml:1102(para)
+msgid ""
+"Most of your media will be of the US Letter page size (8.5 x 11 inches)."
+msgstr "Většina vašich médií má velikost stránky US Letter (8,5 × 11 palců)."
+
+#: C/glabels.xml:1106(guilabel)
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: C/glabels.xml:1107(para)
+msgid "Most of your media will be of the ISO A4 page size (210 x 297 mm)."
+msgstr "Většina vašich médií má velikost stránky ISO A4 (210 × 297 mm)."
+
+#: C/glabels.xml:1110(para)
+msgid "Default: <guilabel>US Letter</guilabel>."
+msgstr "Výchozí: <guilabel>US Letter</guilabel>."
+
+#: C/glabels.xml:1119(title)
+msgid "Object defaults"
+msgstr "Výchozí hodnoty objektu"
+
+#: C/glabels.xml:1125(para)
+msgid ""
+"Use these controls to set the default properties of new text objects. These "
+"properties are"
+msgstr ""
+"Použijte tyto ovládací prvky k nastavení výchozích vlastností nových "
+"textových objektů. Tyto vlastnosti jsou:"
+
+#: C/glabels.xml:1130(guilabel)
+msgid "Font"
+msgstr "Písmo"
+
+#: C/glabels.xml:1131(para)
+msgid ""
+"These controls are used to select font family and font size, and whether the "
+"font should bold or in italics."
+msgstr ""
+"Tyto ovládací prvky slouží k nastavení rodiny písma a velikosti písma a zda "
+"by mělo být písmo tučné nebo kurzívou."
+
+#: C/glabels.xml:1136(guilabel) C/glabels.xml:1161(guilabel)
+#: C/glabels.xml:1176(guilabel)
+msgid "Color"
+msgstr "Barva"
+
+#: C/glabels.xml:1137(para)
+msgid "This control selects the default text color."
+msgstr "Tímto ovládacím prvkem se vybírá výchozí barva textu."
+
+#: C/glabels.xml:1141(guilabel)
+msgid "Alignment"
+msgstr "Zarovnání"
+
+#: C/glabels.xml:1142(para)
+msgid ""
+"These controls are used to select the default text alignment (left, center "
+"or right)."
+msgstr ""
+"Tyto ovládací prvky slouží k výběru výchozího zarovnání textu (vlevo, na "
+"střed nebo vpravo)."
+
+#: C/glabels.xml:1151(para)
+msgid ""
+"Use these controls to set the default properties of lines and outlines of "
+"new objects. These properties are"
+msgstr ""
+"Použijte tyto ovládací prvky k nastavení výchozích vlastností čar a obrysů "
+"nových objektů. Tyto vlastnosti jsou:"
+
+#: C/glabels.xml:1156(guilabel)
+msgid "Width"
+msgstr "Šířka"
+
+#: C/glabels.xml:1157(para)
+msgid "This control selects the default line width."
+msgstr "Tímto ovládacím prvkem se vybírá výchozí šířka čáry."
+
+#: C/glabels.xml:1162(para)
+msgid "This control selects the default line color."
+msgstr "Tímto ovládacím prvkem se vybírá výchozí barva čáry."
+
+#: C/glabels.xml:1169(guilabel)
+msgid "Fill"
+msgstr "Výplň"
+
+#: C/glabels.xml:1171(para)
+msgid ""
+"Use these controls to set the default fill properties of new objects. These "
+"properties are"
+msgstr ""
+"Použijte tyto ovládací prvky k nastavení výchozích vlastností výplně nových "
+"objektů. Tyto vlastnosti jsou:"
+
+#: C/glabels.xml:1177(para)
+msgid "This control selects the default fill color."
+msgstr "Tento ovládací prvek slouží k výběru výchozí barvy výplně."
+
+#: C/glabels.xml:1191(title)
+msgid "Document Merge Tutorial"
+msgstr "Průvodce slučováním dokumentů"
+
+#: C/glabels.xml:1193(para)
+msgid ""
+"Document Merge (sometimes called \"Mail Merge\") is a powerful feature that "
+"allows a unique label or card to be printed for each record in an external "
+"data source. It is however, the most mis-understood feature of "
+"<application>gLabels</application>. The following examples will step through "
+"a couple of common tasks using the document merge feature."
+msgstr ""
+"Slučování dokumentů (někdy také nazývané „hromadná korespondence“) je mocná "
+"funkce, díky které můžete tisknout odlišné etikety nebo vizitky pro každý "
+"záznam v externím zdroji dat. Je však také ze všech funkcí aplikace "
+"<application>gLabels</application> nejnáročnější na pochopení. Následující "
+"příklady vás provedou dvojicí obvyklých úloh, které používají funkci "
+"slučování dokumentů."
+
+#: C/glabels.xml:1201(title)
+msgid "Example 1: Name Tags Using a CSV File"
+msgstr "Příklad 1: Jmenovky s použitím souboru CSV"
+
+#: C/glabels.xml:1203(para)
+msgid ""
+"In this example we are organizing an orientation party for the new crew "
+"members of our ship. We have a list of freshman crew members that we created "
+"in <application>gnumeric</application> and exported as the following CSV "
+"file. We could have created this file by using a text editor, but heck it is "
+"the 23rd century."
+msgstr ""
+"V tomto příkladu pořádáme seznamovací párty pro nové členy osádky naší lodi. "
+"Máme seznam nováčků v osádce, který jsme vytvořili v aplikaci "
+"<application>gnumeric</application> a následně jej vyexportovali do souboru "
+"CSV. Mohli bychom jej vytvořit i v textovém editoru, ale žijeme přece v 21. "
+"století."
+
+#: C/glabels.xml:1209(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"Name,Department,SN\n"
+"\"Jim Kirk\",Management,\"SC937-0176 CEC\"\n"
+"\"Mr. Spock\",Sciences,S179-276SP\n"
+"\"Leonard McCoy\",Medicine,unknown\n"
+"\"Montgomery Scott\",Engineering,SE-197-54T\n"
+"      "
+msgstr ""
+"\n"
+"jmeno,zarazeni,cislo\n"
+"\"Jiří Kroupa\",vedení,\"SC937-0176 CEC\"\n"
+"\"prof. Hrbolek\",vědec,S179-276SP\n"
+"\"MUDr. Kroupová\",lékař,unknown\n"
+"\"Viktor Hujer\",technik,SE-197-54T\n"
+"      "
+
+#: C/glabels.xml:1217(para)
+msgid ""
+"In <application>gLabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5395 \"Name "
+"Badge Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>merge properties</guilabel> dialog. We use this "
+"dialog to select the source type (in our case CSV) and the merge source "
+"(filename) as shown."
+msgstr ""
+"V aplikaci <application>gLabels</application> máme vytvořený dokument "
+"vycházející ze šablony Avery 5395 „Etikety na jmenovky“. Nyní použijeme "
+"položku nabídky <menuchoice><guimenu>Objekty</"
+"guimenu><guimenuitem>Vlastnosti slučování</guimenuitem></menuchoice> a "
+"zobrazí se nám dialogové okno <guilabel>vlastnosti slučování</guilabel>. "
+"Toto dialogové okno použijeme k výběru typu zdroje (v našem případě CSV) a "
+"vlastního zdroje (souboru), jak můžete vidět níže."
+
+#: C/glabels.xml:1227(title) C/glabels.xml:1344(title)
+#: C/glabels.xml:1460(title)
+msgid "Merge properties dialog"
+msgstr "Dialogové okno vlastností slučování"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1238(para)
+msgid ""
+"Before applying the merge source, we uncheck the first record since it is "
+"only column headers from our original <application>gnumeric</application> "
+"spreadsheet and would simply waste our first label. We could also unselect "
+"any other records that we didn't want to print a label for."
+msgstr ""
+"Před použitím zdroje slučování zrušíme zaškrtnutí prvního záznamu, protože "
+"ten obsahuje pouze záhlaví sloupců z naší původní tabulky v "
+"<application>gnumeric</application> a akorát bychom tím zničili první "
+"etiketu. Stejným způsobem můžeme zrušit zaškrtnutí kteréhokoliv záznamu, "
+"který nechceme vytisknout."
+
+#: C/glabels.xml:1243(para) C/glabels.xml:1361(para)
+msgid ""
+"We can also view each record in more detail by clicking on the appropriate "
+"expander (the little triangles) as shown. Once we are satisfied with the "
+"selections in this dialog we click <guibutton>OK</guibutton> to accept the "
+"changes."
+msgstr ""
+"U každého záznamu si také můžeme prohlédnou všechny údaje po jeho rozbalení "
+"kliknutím na malý trojúhelníček. Až jsme s výběrem v dialogovém okně "
+"spokojení, klikneme na <guibutton>OK</guibutton> a změny se použijí."
+
+#: C/glabels.xml:1248(para) C/glabels.xml:1366(para)
+msgid ""
+"Now we start adding objects to our <application>gLabels</application> "
+"document as shown."
+msgstr ""
+"Nyní můžeme začít s přidáváním objektů do svého dokumentu "
+"<application>gLabels</application>, jak je zobrazeno níže."
+
+#: C/glabels.xml:1252(title) C/glabels.xml:1370(title)
+#: C/glabels.xml:1488(title)
+msgid "Adding objects"
+msgstr "Přidávání objektů"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1263(para)
+msgid ""
+"In this example we have added three text objects and a barcode object. The "
+"first text object contains only simple literal text (\"Hello, my name is\"). "
+"The second text object contains a single merge field (\"${1}\") "
+"corresponding to the first field of a record (first column of a line) which "
+"contains the new crew member's full name. The third text field contains both "
+"literal text (\"Department: \") followed by a single merge field (\"${2}\") "
+"corresponding to the second field or the crew member's department. The "
+"barcode object is configured to use field (or key) \"3\" which contains our "
+"crew member's starfleet serial number."
+msgstr ""
+"V tomto příkladu máme přidané tři textové objekty a čárový kód. První "
+"textový objekt obsahuje pouze prostý text („Ahoj, jmenuji se“). Druhý "
+"textový objekt obsahuje jedno slučované pole („${1}“), které odpovídá "
+"prvnímu poli v záznamu (první sloupec v řádku) a které obsahuje celé jméno "
+"nového člena osádky. Třetí textové pole obsahuje jak text („Zařazení: “), "
+"tak za ním následuje jedno slučované pole („${2}“), které odpovídá druhému "
+"poli se zařazením člena posádky. Objekt s čárovým kódem je nastavený na "
+"použití pole (klíče) „3“, které obsahuje identifikační číslo člena posádky."
+
+#: C/glabels.xml:1273(para)
+msgid ""
+"Now we can print our name tags by selecting the <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu item. This will "
+"display print dialog as shown below."
+msgstr ""
+"Nyní můžeme své jmenovky vytisknout pomocí položky nabídky "
+"<menuchoice><guimenu>Soubor</guimenu><guimenuitem>Tisk</guimenuitem></"
+"menuchoice>. Zobrazí se dialogové okno jako na následujícím obrázku."
+
+#: C/glabels.xml:1280(title)
+msgid "Printing name tags"
+msgstr "Tisk jmenovek"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1291(para) C/glabels.xml:1406(para) C/glabels.xml:1520(para)
+msgid ""
+"Just to make sure our labels are going to look okay, we select the "
+"<guilabel>Print outlines</guilabel> option and click <guibutton>Print "
+"Preview</guibutton>. This will display a print preview dialog as shown below."
+msgstr ""
+"Nyní zkontrolujeme, zda vypadají etikety jak mají. Vybereme možnost "
+"<guilabel>Tisk obrysů</guilabel> a klikneme na <guibutton>Náhled tisku</"
+"guibutton>. Zobrazí se dialogové okno s náhledem tisku, stejně jako na "
+"následujícím obrázku."
+
+#: C/glabels.xml:1298(title)
+msgid "Name tags preview"
+msgstr "Náhled jmenovek"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1309(para)
+msgid ""
+"Everything looks good, so we can now load up our printer with the "
+"appropriate label stock, print our name tags and start beaming our guests "
+"aboard."
+msgstr ""
+"Vše vypadá v pořádku, takže můžeme do tiskárny vložit správný list s "
+"etiketami, vytisknout jmenovky a vzhůru na palubu nalodit naše hosty."
+
+#: C/glabels.xml:1316(title)
+msgid "Example 2: Address Labels Using a CSV File"
+msgstr "Příklad 2: Adresní štítky s použitím souboru CSV"
+
+#: C/glabels.xml:1318(para)
+msgid ""
+"In this example we are going to throw a party and need to print mailing "
+"address labels for our invitations. We have a list of our closest friends "
+"that we created in <application>gnumeric</application> and exported as the "
+"following CSV file. It should be noted that not everyone has a middle "
+"initial or a two line address."
+msgstr ""
+"V tomto příkladu se chystáme uspořádat večírek a potřebujeme vytisknout "
+"adresní štítky na své pozvánky. Máme seznam svých nejbližších přátel, který "
+"jsem vytvořili v aplikaci <application>gnumeric</application> a "
+"vyexportovali jej jako soubor CSV. Povšimněte si, že ne všichni mají "
+"přezdívku nebo dvouřádkovou adresu."
+
+#: C/glabels.xml:1324(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"LAST,FIRST,MI,ADDR1,ADDR2,CITY,STATE,ZIP\n"
+",,,,,,,\n"
+"Critter,Ess,S,\"123 Faux St.\",,Alexandria,VA,22310\n"
+"Doe,John,,\"Apt 1X\",\"451 Mystery St.\",Trenton,NJ,08601\n"
+"Summers,Joyce,,\"1630 Revello Dr\",,Sunnydale,CA,95037\n"
+"McGarret,Steve,O,\"404 Piikoi Street\",,Honolulu,HI,96813\n"
+"Kramer,Cosmo,,\"Apt 5B\",\"129 W. 81 St.\",\"New York\",NY,10024-7207\n"
+"      "
+msgstr ""
+"\n"
+"PRIJMENI,JMENO,PREZDIVKA,ADR1,ADR2,MESTO,PSC\n"
+",,,,,,,\n"
+"Pacovský,Tomáš,,\"U dvou akordů\",\"Křižíkova 506\",Praha,\"123 00\"\n"
+"Pacovský,František,Ozzák,\"Křižíkova 62\",,\"Praha - Vinohrady\",\"110 00\"\n"
+"Divićová,Marcela,,\"Náměstí míru 1\",,Praha,\"150 00\"\n"
+"Bůček,Alexandr,Lexa,\"U Jezevce\",\"Nitranská 7\",Praha,\"160 13\"\n"
+"Bůčková,Alexandra,,\"Korunní 18\",,Praha,\"100 24\"\n"
+"      "
+
+#: C/glabels.xml:1334(para)
+msgid ""
+"In <application>gLabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5512 \"Address "
+"Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>merge properties</guilabel> dialog. We use this "
+"dialog to select the source type (in our case CSV) and the merge source "
+"(filename) as shown."
+msgstr ""
+"V aplikaci <application>gLabels</application> vytvoříme nový dokument ze "
+"šablony Avery L7162 „Poštovní etikety“. Následně použijeme položku nabídky "
+"<menuchoice><guimenu>Objekty</guimenu><guimenuitem>Vlastnosti slučování</"
+"guimenuitem></menuchoice> a zobrazí se nám dialogové okno "
+"<guilabel>vlastností slučování</guilabel>. V tomto dialogovém okně vybereme "
+"typ zdroje (v našem případě CSV) a konkrétní zdroj (název souboru) pro "
+"slučování, jak můžete vidět na následujícím obrázku."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1355(para)
+msgid ""
+"Before applying the merge source, we uncheck the first record since it is "
+"only column headers from our original <application>gnumeric</application> "
+"spreadsheet and would simply waste our first label. We also unselect the "
+"second record which is empty (an artifact of our original spreadsheet). We "
+"could also unselect any other records that we didn't want to print a label "
+"for."
+msgstr ""
+"Před tím, než zdroj pro slučován použijeme, zrušíme zaškrtnutí prvního "
+"záznamu, protože ten obsahuje pouze záhlaví sloupců z původní tabulky v "
+"<application>gnumeric</application> a akorát bychom tím znehodnotili první "
+"etiketu. Zrušíme zaškrtnutí i druhého záznamu, protože je prázdný (což je "
+"pozůstatek z tabulkového kalkulátoru). A stejným způsobem můžeme vyřadit "
+"kterýkoliv jiný záznam, který nechceme na etikety vytisknout."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1381(para)
+msgid ""
+"In this example we have a single text object. This text object contains all "
+"of our merge fields organized on multiple lines as a mailing address. Notice "
+"that fields ${4} and ${5} (corresponding to ADDR1 and ADDR2) are each "
+"located with no other text on their own lines. When <application>gLabels</"
+"application> encounters a field as the only text on a line, it will not "
+"expand the line if the field is empty."
+msgstr ""
+"V tomto příkladu máme jen jeden textový objekt. Tento textový objekt "
+"obsahuje všechna slučovaná pole uspořádaná v několika řádcích "
+"představujících poštovní adresu. Všimněte si, že pole ${4} a ${5} (ta "
+"odpovídají ADR1 a ADR2) jsou umístěná na samostatných řádcích bez "
+"jakéhokoliv dalšího textu. Pokud aplikace <application>gLabels</application> "
+"narazí na pole, které je jediným textem na řádku a toto pole je prázdné, "
+"řádek nebude ve výsledku zabírat žádné místo."
+
+#: C/glabels.xml:1388(para)
+msgid ""
+"Now we can print our address labels by selecting the "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></"
+"menuchoice> menu item. This will display print dialog as shown below."
+msgstr ""
+"Nyní se můžeme pustit do tisku adresních etiket pomocí volby "
+"<menuchoice><guimenu>Soubor</guimenu><guimenuitem>Tisk</guimenuitem></"
+"menuchoice> v nabídce. Zobrazí se dialogové okno tisku jako na následujícím "
+"obrázku."
+
+#: C/glabels.xml:1395(title) C/glabels.xml:1509(title)
+msgid "Printing address labels"
+msgstr "Tisk etiket s adresami"
+
+#: C/glabels.xml:1413(title) C/glabels.xml:1527(title)
+msgid "Address labels preview"
+msgstr "Náhled etiket s adresami"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1424(para) C/glabels.xml:1538(para)
+msgid ""
+"Everything looks good, so we can now load up our printer with the "
+"appropriate label stock, print our address labels and start mailing our "
+"party invitations."
+msgstr ""
+"Vše vypadá dobře a tak můžeme vložit do tiskárny správný list s etiketami, "
+"vytisknout adresní štítky a začít rozesílat pozvánky na večírek."
+
+#: C/glabels.xml:1431(title)
+msgid ""
+"Example 3: Address Labels Using the <application>Evolution</application> "
+"Addressbook"
+msgstr ""
+"Příklad 3: Adresní štítky s použitím adresáře aplikace "
+"<application>Evolution</application>"
+
+#: C/glabels.xml:1433(para)
+msgid ""
+"Our last party was a great success, and now we need to print mailing address "
+"labels for the invitations to a new one. To simplify this, we can use the "
+"<application>Evolution</application> addressbook, because the address data "
+"of all our friends is stored there."
+msgstr ""
+"Náš předchozí večírek měl velký úspěch a my nyní chceme vytisknout adresní "
+"štítky pro pozvánky na další takový. Abychom si to zjednodušili, můžeme "
+"použít adresář aplikace <application>Evolution</application>, protože adresy "
+"všech našich přátel máme uložené v něm."
+
+#: C/glabels.xml:1439(para)
+msgid ""
+"Depending on how your copy of <application>gLabels</application> was "
+"packaged, this option could be unavailable. Support for the "
+"<application>Evolution</application> addressbook will only be available if "
+"the <application>evolution-data-server</application> and its development "
+"files were present when <application>gLabels</application> was built. Please "
+"keep this in mind if you build <application>gLabels</application> directly "
+"from source."
+msgstr ""
+"V závislosti na tom, jak byl připravený váš balíček <application>gLabels</"
+"application>, nemusí být tato funkčnost dostupná. Podpora pro adresář "
+"<application>Evolution</application> je dostupná jen v případě, že byl při "
+"překladu aplikace <application>gLabels</application> k dispozici "
+"<application>evolution-data-server</application> a k němu vývojářské "
+"soubory. Mějte toto na paměti, pokud si aplikaci překládáte sami ze "
+"zdrojových kódů."
+
+#: C/glabels.xml:1445(para)
+msgid ""
+"If the <application>gLabels</application> package from your distribution "
+"lacks this support, you may wish to contact the package maintainer or file a "
+"bug against the package to request it."
+msgstr ""
+"Pokud balíček <application>gLabels</application> ve vaší distribuci tuto "
+"podporu postrádá, můžete zkusit kontaktovat správce balíčku nebo to zkusit "
+"nahlásit jako chybu."
+
+#: C/glabels.xml:1450(para)
+msgid ""
+"In <application>glabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5512 \"Address "
+"Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>Merge properties</guilabel> dialog. We use this "
+"dialog to select the source type (in our case <guilabel>Data from default "
+"Evolution addressbook</guilabel>) as shown."
+msgstr ""
+"V aplikaci <application>glabels</application> vytvoříme nový dokument ze "
+"šablony Avery L7162 „Poštovní etikety“. Potom v nabídce zvolíme "
+"<menuchoice><guimenu>Objekty</guimenu><guimenuitem>Vlastnosti slučování</"
+"guimenuitem></menuchoice>, aby se nám zobrazilo dialogové okno "
+"<guilabel>Vlastnosti slučování</guilabel>. V něm vybereme typ zdroje (v "
+"našem případě <guilabel>Data z výchozího adresáře Evolution</guilabel>), jak "
+"je ukázáno na obrázku."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1471(para)
+msgid ""
+"Once we have chosen <guilabel>Data from default Evolution addressbook </"
+"guilabel> as our merge source, we will get a full list of its content. "
+"Initially, all entries are checked. Assuming we were planning a really big "
+"party, we could leave this selection untouched (but let's keep our budget in "
+"mind). We will now select or unselect certain entries by clicking on the "
+"appropriate checkboxes, or we could use the <guibutton>Select all</"
+"guibutton> and <guibutton>Unselect all </guibutton> buttons to activate or "
+"deactivate all entries in the address book."
+msgstr ""
+"Když máme jako zdroj slučování vybráno <guilabel>Data z výchozího adresáře "
+"Evolution</guilabel>, obdržíme úplný seznam jeho obsahu. Na začátku jsou "
+"zaškrtnuté všechny položky. Předpokládá se, že budeme pořádat opravdu velký "
+"večírek a tak bychom mohli ponechat výběr jak je (ale uvědomte si kolik to "
+"bude stát). Nyní některé záznamy kliknutím na příslušné zaškrtávací políčko "
+"vyřadíme nebo naopak vybereme, případně můžeme použít tlačítka "
+"<guibutton>Vybrat vše</guibutton> a <guibutton>Zrušit výběr</guibutton> pro "
+"aktivování nebo deaktivování všech záznamů v adresáři."
+
+#: C/glabels.xml:1479(para)
+msgid ""
+"We can also view each entry in more detail by clicking on the appropriate "
+"expander (the little triangles) as shown. Once we are satisfied with the "
+"selections in this dialog, we will click the <guibutton>OK</guibutton> "
+"button to accept the changes."
+msgstr ""
+"U každého záznamu si také můžeme prohlédnou všechny údaje po jeho rozbalení "
+"kliknutím na malý trojúhelníček. Až jsme s výběrem v dialogovém okně "
+"spokojení, klikneme na <guibutton>OK</guibutton> a změny se použijí."
+
+#: C/glabels.xml:1484(para)
+msgid "Now we start adding objects to our glabels document as shown."
+msgstr ""
+"Nyní můžeme začít s přidáváním objektů do svého dokumentu glabels, jak bylo "
+"ukázáno dříve."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1499(para)
+msgid ""
+"In this example we have a single text object again. This text object "
+"contains all of our merge fields organized on multiple lines as a mailing "
+"address."
+msgstr ""
+"V tomto příkladu máme opět jen jeden textový objekt. Ten obsahuje všechna "
+"slučovaná pole uspořádaná v několika řádcích, představujících poštovní "
+"adresy."
+
+#: C/glabels.xml:1502(para)
+msgid ""
+"Now we can print our address labels by selecting the "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></"
+"menuchoice> menu item. This will display the print dialog as shown below."
+msgstr ""
+"Nyní můžeme své etikety s adresami vytisknout volbou položky nabídky "
+"<menuchoice><guimenu>Soubor</guimenu><guimenuitem>Tisk</guimenuitem></"
+"menuchoice>. Zobrazí se dialogové okno tisku, jak jej můžete vidět níže."
+
+#: C/glabels.xml:1551(title)
+msgid "Manually Creating New Templates"
+msgstr "Ruční vytváření šablon"
+
+#: C/glabels.xml:1553(para)
+msgid ""
+"Predefined templates are defined by XML files located in <filename>${prefix}/"
+"share/glabels/</filename>, where <filename>${prefix}</filename> is usually "
+"something like <filename>/usr/local</filename> or <filename>/usr</filename> "
+"depending on the configuration option <filename>prefix</filename>. "
+"<application>gLabels</application> will use all files of the form "
+"<filename>*-templates.xml</filename> or <filename>*.template</filename>, "
+"that it finds in <filename>${prefix}/share/glabels/</filename> and <filename>"
+"${HOME}/.glabels/</filename>. Additional templates can be added by creating "
+"additional <filename>*.template</filename> files in either of these "
+"directories."
+msgstr ""
+"Předdefinované šablony jsou definované soubory XML umístěnými v <filename>"
+"${prefix}/share/glabels/</filename>, kde <filename>${prefix}</filename> je "
+"obvykle <filename>/usr/local</filename> nebo <filename>/usr</filename>, v "
+"závislosti na volbě nastavení <filename>prefix</filename> při překladu "
+"programu. Aplikace <application>gLabels</application> použije všechny "
+"soubory s názvem v podobě <filename>*-templates.xml</filename> nebo "
+"<filename>*.template</filename>, které nalezne v <filename>${prefix}/share/"
+"glabels/</filename> a <filename>${HOME}/.glabels/</filename>. Další šablony "
+"si můžete přidat vytvořením dalších souborů <filename>*.template</filename> "
+"v jedné z těchto složek."
+
+#: C/glabels.xml:1566(para)
+msgid ""
+"The format for these files is defined in the DTD: <ulink url=\"http://"
+"glabels.sourceforge.net/doc/glabels-2.0.dtd.txt\" type=\"http\">glabels-2.2."
+"dtd</ulink>. (This DTD also describes other XML formats used by "
+"<application>gLabels</application>.)"
+msgstr ""
+"Formát těchto souborů je dán v DTD: <ulink url=\"http://glabels.sourceforge."
+"net/doc/glabels-2.0.dtd.txt\" type=\"http\">glabels-2.2.dtd</ulink>. (Toto "
+"DTD popisuje i ostatní formáty XML používané v aplikaci "
+"<application>gLabels</application>.)"
+
+#: C/glabels.xml:1572(title)
+msgid "Assumptions/caveats"
+msgstr "Předpoklady/upozornění"
+
+#: C/glabels.xml:1575(para)
+msgid ""
+"A sheet contains only one size of label or card (if a sheet contains more "
+"than one size of item, it can be split into multiple templates for multiple "
+"pass printing)"
+msgstr ""
+"Stránka obsahuje etiketu nebo vizitku pouze jedné velikosti (pokud má "
+"stránka obsahovat více než jednu velikost položky, můžete ji rozdělit do "
+"více šablon a vytisknout na vícekrát)"
+
+#: C/glabels.xml:1580(para)
+msgid ""
+"Distances can be expressed in units of <emphasis>pt</emphasis>, "
+"<emphasis>in</emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis>, "
+"or <emphasis>pc</emphasis>. For example: \"<literal>1.0in</literal>\" or "
+"\"<literal>2.54cm</literal>\". If no units are specified, computer points "
+"(<emphasis>pt</emphasis>) will be assumed (1 <emphasis>pt</emphasis> = 1/72 "
+"<emphasis>in</emphasis> = 0.352778 <emphasis>mm</emphasis>)."
+msgstr ""
+"Rozměry mohou být uváděny v jednotkách <emphasis>pt</emphasis>, "
+"<emphasis>in</emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis> "
+"nebo <emphasis>pc</emphasis>. Například: „<literal>1.0in</literal>“ nebo "
+"„<literal>2.54cm</literal>“. Pokud není žádná jednotka uvedená, budou "
+"předpokládány body <emphasis>pt</emphasis>  (1 <emphasis>pt</emphasis> = "
+"1/72 <emphasis>in</emphasis> = 0,352778 <emphasis>mm</emphasis>)."
+
+#: C/glabels.xml:1593(title)
+msgid "Template Files"
+msgstr "Soubory šablon"
+
+#: C/glabels.xml:1595(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"&lt;?xml version=\"1.0\"?&gt;\n"
+"&lt;Glabels-templates&gt;\n"
+"\n"
+"   <replaceable>...templates...</replaceable>\n"
+"\n"
+"&lt;/Glabels-templates&gt;\n"
+"      "
+msgstr ""
+"\n"
+"&lt;?xml version=\"1.0\"?&gt;\n"
+"&lt;Glabels-templates&gt;\n"
+"\n"
+"   <replaceable>…šablony…</replaceable>\n"
+"\n"
+"&lt;/Glabels-templates&gt;\n"
+"      "
+
+#: C/glabels.xml:1607(title)
+msgid "Example Template"
+msgstr "Příklad šablony"
+
+#: C/glabels.xml:1608(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"  &lt;Template brand=\"Avery\" part=\"8160\" size=\"US-Letter\" description=\"Mailing Labels\"&gt;\n"
+"    &lt;Label-rectangle id=\"0\" width=\"189pt\" height=\"72pt\" round=\"5pt\"&gt;\n"
+"      &lt;Markup-margin size=\"5pt\"/&gt;\n"
+"      &lt;Layout nx=\"3\" ny=\"10\" x0=\"11.25pt\" y0=\"36pt\" dx=\"200pt\" dy=\"72pt\"/&gt;\n"
+"    &lt;/Label-rectangle&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"5160\"/&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"6233\"/&gt;\n"
+"  &lt;/Template&gt;\n"
+"      "
+msgstr ""
+"\n"
+"  &lt;Template brand=\"Avery\" part=\"8160\" size=\"US-Letter\" _description=\"Mailing Labels\"&gt;\n"
+"    &lt;Label-rectangle id=\"0\" width=\"189pt\" height=\"72pt\" round=\"5pt\"&gt;\n"
+"      &lt;Markup-margin size=\"5pt\"/&gt;\n"
+"      &lt;Layout nx=\"3\" ny=\"10\" x0=\"11.25pt\" y0=\"36pt\" dx=\"200pt\" dy=\"72pt\"/&gt;\n"
+"    &lt;/Label-rectangle&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"5160\"/&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"6233\"/&gt;\n"
+"  &lt;/Template&gt;\n"
+"      "
+
+#: C/glabels.xml:1621(title)
+msgid "Template Node"
+msgstr "Uzel Template"
+
+#: C/glabels.xml:1623(para)
+msgid ""
+"A <emphasis>Template</emphasis> node describes a single stationary product. "
+"It must contain one instance of any type of Label node (<emphasis>Label-"
+"rectangle</emphasis>, <emphasis>Label-round</emphasis>, or <emphasis>Label-"
+"cd</emphasis>). This node can be followed by zero or more <emphasis>Alias</"
+"emphasis> nodes."
+msgstr ""
+"Uzel <emphasis>Template</emphasis> popisuje jeden pevně daný výrobek. Musí "
+"obsahovat jednu instanci libovolného uzlu Label (<emphasis>Label-rectangle</"
+"emphasis>, <emphasis>Label-round</emphasis> nebo <emphasis>Label-cd</"
+"emphasis>). Tento uzel může být následován žádným nebo více uzly "
+"<emphasis>Alias</emphasis>."
+
+#: C/glabels.xml:1637(para) C/glabels.xml:1712(para) C/glabels.xml:1789(para)
+#: C/glabels.xml:1834(para) C/glabels.xml:1910(para) C/glabels.xml:1943(para)
+#: C/glabels.xml:1994(para) C/glabels.xml:2037(para) C/glabels.xml:2096(para)
+#: C/glabels.xml:2173(para)
+msgid "Property"
+msgstr "Vlastnost"
+
+#: C/glabels.xml:1640(para) C/glabels.xml:1715(para) C/glabels.xml:1792(para)
+#: C/glabels.xml:1837(para) C/glabels.xml:1913(para) C/glabels.xml:1946(para)
+#: C/glabels.xml:1997(para) C/glabels.xml:2040(para) C/glabels.xml:2099(para)
+#: C/glabels.xml:2176(para)
+msgid "Description"
+msgstr "Popis"
+
+#: C/glabels.xml:1646(para) C/glabels.xml:2182(para)
+msgid "brand"
+msgstr "brand"
+
+#: C/glabels.xml:1648(para)
+msgid "Brand or manufacturer of stationary product. E.g. \"Avery\""
+msgstr "Značka nebo výrobce pevně daného výrobku. Např. \"S&K Label\""
+
+#: C/glabels.xml:1653(para) C/glabels.xml:2188(para)
+msgid "part"
+msgstr "part"
+
+#: C/glabels.xml:1655(para)
+msgid "Part number or name of stationary product. E.g. \"8160\""
+msgstr "Produktové číslo nebo název pevně daného výrobku. Např. \"8160\""
+
+#: C/glabels.xml:1660(para) C/glabels.xml:1919(para)
+msgid "size"
+msgstr "size"
+
+#: C/glabels.xml:1662(para)
+msgid "Size of sheet. E.g., \"US-Letter,\" \"A4\", ..."
+msgstr "Velikost stránky. Např. \"A4\", \"US-Letter\""
+
+#: C/glabels.xml:1666(para)
+msgid "description"
+msgstr "description"
+
+#: C/glabels.xml:1668(para)
+msgid "Description of stationary product. E.g, \"Mailing Labels.\""
+msgstr "Popis pevně daného produktu. Např. \"Mailing Labels.\""
+
+#: C/glabels.xml:1673(para)
+msgid "_description"
+msgstr "_description"
+
+#: C/glabels.xml:1675(para)
+msgid ""
+"Translatable description of stationary product. E.g, \"Mailing Labels."
+"\" (Only useful for predefined templates)"
+msgstr ""
+"Popis pevně daného produktu s možností překladu. Např. \"Mailing Labels."
+"\" (Použitelné pouze pro předdefinované šablony)"
+
+#: C/glabels.xml:1681(para) C/glabels.xml:1727(para) C/glabels.xml:1857(para)
+msgid "width"
+msgstr "width"
+
+#: C/glabels.xml:1683(para)
+msgid "Page width. Only valid if size=\"Other\""
+msgstr "Šířka stránky. Platné jen v případě, že size=\"Other\""
+
+#: C/glabels.xml:1687(para) C/glabels.xml:1731(para) C/glabels.xml:1864(para)
+msgid "height"
+msgstr "height"
+
+#: C/glabels.xml:1689(para)
+msgid "Page height. Only valid if size=\"Other\""
+msgstr "Výška stránky. Platné jen v případě, že size=\"Other\""
+
+#: C/glabels.xml:1699(title)
+msgid "Label-rectangle Node"
+msgstr "Uzel Label-rectangle"
+
+#: C/glabels.xml:1701(para)
+msgid ""
+"A <emphasis>Label-rectangle</emphasis> node describes the dimensions of a "
+"single label or business card that is rectangular in shape (may have rounded "
+"edges)."
+msgstr ""
+"Uzel <emphasis>Label-rectangle</emphasis> popisuje rozměry jedné etikety "
+"nebo vizitky, která má obdélníkový tvar (může mít zaoblené rohy)."
+
+#: C/glabels.xml:1721(para) C/glabels.xml:1798(para) C/glabels.xml:1843(para)
+msgid "id"
+msgstr "id"
+
+#: C/glabels.xml:1723(para) C/glabels.xml:1800(para) C/glabels.xml:1845(para)
+msgid "Reserved for future use. Should always be 0."
+msgstr "Rezervované pro pozdější použití. Vždy by mělo být nastavené  na 0."
+
+#: C/glabels.xml:1728(para)
+msgid "Width of label/card"
+msgstr "Šířka etikety/vizitky"
+
+#: C/glabels.xml:1732(para)
+msgid "Height of label/card"
+msgstr "Výška etikety/vizitky"
+
+#: C/glabels.xml:1735(para)
+msgid "round"
+msgstr "round"
+
+#: C/glabels.xml:1737(para)
+msgid ""
+"Radius of corners. For items with square edges (business cards), the radius "
+"should be 0."
+msgstr ""
+"Poloměr rohů. Pro položky s ostrými rohy (např. vizitky) by mělo být "
+"nastaveno na 0."
+
+#: C/glabels.xml:1742(para)
+msgid "x_waste"
+msgstr "x_waste"
+
+#: C/glabels.xml:1744(para)
+msgid ""
+"Amount of horizontal waste (over-print) to allow. This is useful for "
+"minimizing alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+"Velikost dovoleného vodorovného odsazení (umožňuje přetisk). To je užitečné "
+"kvůli zamezení problémům se zarovnáním v situaci, kdy se nepoužívá bílé "
+"pozadí, ale např. obrázkové."
+
+#: C/glabels.xml:1750(para)
+msgid "y_waste"
+msgstr "y_waste"
+
+#: C/glabels.xml:1752(para)
+msgid ""
+"Amount of vertical waste (over-print) to allow. This is useful for "
+"minimizing alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+"Velikost dovoleného svislého odsazení (umožňuje přetisk). To je užitečné "
+"kvůli zamezení problémům se zarovnáním v situaci, kdy se nepoužívá bílé "
+"pozadí, ale např. obrázkové."
+
+#: C/glabels.xml:1763(title)
+msgid "Label-rectangle Parameters"
+msgstr "Parametry uzlu Label-rectangle"
+
+#: C/glabels.xml:1777(title)
+msgid "Label-round Node"
+msgstr "Uzel Label-round"
+
+#: C/glabels.xml:1779(para)
+msgid ""
+"A <emphasis>Label-round</emphasis> node describes the dimensions of a simple "
+"round label (not a CD)."
+msgstr ""
+"Uzel <emphasis>Label-round</emphasis> popisuje rozměry jedné zaoblené "
+"etikety (ne CD)."
+
+#: C/glabels.xml:1804(para) C/glabels.xml:1849(para) C/glabels.xml:2015(para)
+msgid "radius"
+msgstr "radius"
+
+#: C/glabels.xml:1805(para)
+msgid "Radius (1/2 diameter) of label"
+msgstr "Poloměr (½ průměru) etikety"
+
+#: C/glabels.xml:1808(para) C/glabels.xml:1871(para)
+msgid "waste"
+msgstr "waste"
+
+#: C/glabels.xml:1810(para) C/glabels.xml:1873(para)
+msgid ""
+"Amount of waste (over-print) to allow. This is useful for minimizing "
+"alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+"Velikost dovoleného odsazení (umožňuje přetisk). To je užitečné kvůli "
+"zamezení problémům se zarovnáním v situaci, kdy se nepoužívá bílé pozadí, "
+"ale např. obrázkové."
+
+#: C/glabels.xml:1822(title)
+msgid "Label-cd Node"
+msgstr "Uzel Label-cd"
+
+#: C/glabels.xml:1824(para)
+msgid ""
+"A <emphasis>Label-cd</emphasis> node describes the dimensions of a CD, DVD, "
+"or business card CD."
+msgstr ""
+"Uzel <emphasis>Label-cd</emphasis> popisuje rozměry etiket na CD, DVD nebo "
+"vizitkové CD."
+
+#: C/glabels.xml:1850(para)
+msgid "Outer radius of label"
+msgstr "Vnější poloměr etikety"
+
+#: C/glabels.xml:1853(para)
+msgid "hole"
+msgstr "hole"
+
+#: C/glabels.xml:1854(para)
+msgid "Radius of concentric hole"
+msgstr "Poloměr středové díry"
+
+#: C/glabels.xml:1859(para)
+msgid ""
+"If present, the label is clipped to the given width. (Useful for \"business "
+"card CDs\")."
+msgstr ""
+"Pokud je zadáno, bude etiketa oříznuta na uvedenou šířku. (Vhodné pro "
+"„vizitková CD“)."
+
+#: C/glabels.xml:1866(para)
+msgid ""
+"If present, the label is clipped to the given height. (Useful for \"business "
+"card CDs\")."
+msgstr ""
+"Pokud je zadáno, bude etiketa oříznuta na uvedenou výšku. (Vhodné pro "
+"„vizitková CD“)."
+
+#: C/glabels.xml:1884(title)
+msgid "CD Label Parameters"
+msgstr "Parametry etiket na CD"
+
+#: C/glabels.xml:1898(title)
+msgid "Markup-margin Node"
+msgstr "Uzel Markup-margin"
+
+#: C/glabels.xml:1900(para)
+msgid ""
+"A <emphasis>Markup-margin</emphasis> describes a margin along all edges of a "
+"label."
+msgstr ""
+"Uzel <emphasis>Markup-margin</emphasis> popisuje okraj podél všech hran "
+"etikety."
+
+#: C/glabels.xml:1921(para)
+msgid ""
+"Size of the margin. I.e. the distance of the margin line from the edge of "
+"the card/label."
+msgstr ""
+"Velikost okraje. Např. vzdálenost hranice okraje od hrany etikety/vizitky."
+
+#: C/glabels.xml:1932(title)
+msgid "Markup-line Node"
+msgstr "Uzel Markup-line"
+
+#: C/glabels.xml:1934(para)
+msgid "A <emphasis>Markup-line</emphasis> describes a markup line."
+msgstr "Uzel <emphasis>Markup-line</emphasis> popisuje značku v podobě čáry."
+
+#: C/glabels.xml:1952(para) C/glabels.xml:2046(para)
+msgid "x1"
+msgstr "x1"
+
+#: C/glabels.xml:1954(para)
+msgid "x coordinate of 1st endpoint of the line segment."
+msgstr "x-ová souřadnice počátku úsečky"
+
+#: C/glabels.xml:1958(para) C/glabels.xml:2052(para)
+msgid "y1"
+msgstr "y1"
+
+#: C/glabels.xml:1960(para)
+msgid "y coordinate of 1st endpoint of the line segment."
+msgstr "y-ová souřadnice počátku úsečky"
+
+#: C/glabels.xml:1964(para)
+msgid "x2"
+msgstr "x2"
+
+#: C/glabels.xml:1966(para)
+msgid "x coordinate of 2nd endpoint of the line segment."
+msgstr "x-ová souřadnice konce úsečky"
+
+#: C/glabels.xml:1970(para)
+msgid "y2"
+msgstr "y2"
+
+#: C/glabels.xml:1972(para)
+msgid "y coordinate of 2nd endpoint of the line segment."
+msgstr "y-ová souřadnice konce úsečky"
+
+#: C/glabels.xml:1982(title)
+msgid "Markup-circle Node"
+msgstr "Uzel Markup-circle"
+
+#: C/glabels.xml:1984(para)
+msgid "A <emphasis>Markup-circle</emphasis> describes a markup circle."
+msgstr ""
+"Uzel <emphasis>Markup-circle</emphasis> popisuje značku v podobě kruhu."
+
+#: C/glabels.xml:2003(para) C/glabels.xml:2119(para)
+msgid "x0"
+msgstr "x0"
+
+#: C/glabels.xml:2005(para)
+msgid "x coordinate of circle origin (center)."
+msgstr "x-ová souřadnice středu kruhu"
+
+#: C/glabels.xml:2009(para) C/glabels.xml:2126(para)
+msgid "y0"
+msgstr "y0"
+
+#: C/glabels.xml:2011(para)
+msgid "y coordinate of circle origin (center)."
+msgstr "y-ová souřadnice středu kruhu"
+
+#: C/glabels.xml:2016(para)
+msgid "Radius of circle."
+msgstr "Poloměr kruhu."
+
+#: C/glabels.xml:2025(title)
+msgid "Markup-rect Node"
+msgstr "Uzel Markup-rect"
+
+#: C/glabels.xml:2027(para)
+msgid "A <emphasis>Markup-rect</emphasis> describes a markup rectangle."
+msgstr ""
+"Uzel <emphasis>Markup-rect</emphasis> popisuje značku v podobě obdélníku."
+
+#: C/glabels.xml:2048(para)
+msgid "x coordinate of upper left corner of rectangle."
+msgstr "x-ová souřadnice levého horního rohu obdélníku."
+
+#: C/glabels.xml:2054(para)
+msgid "y coordinate of upper left corner of rectangle."
+msgstr "y-ová souřadnice levého horního rohu obdélníku."
+
+#: C/glabels.xml:2058(para)
+msgid "w"
+msgstr "w"
+
+#: C/glabels.xml:2060(para)
+msgid "Width of rectangle."
+msgstr "Šířka obdélníku."
+
+#: C/glabels.xml:2064(para)
+msgid "h"
+msgstr "h"
+
+#: C/glabels.xml:2066(para)
+msgid "Height of rectangle."
+msgstr "Výška obdélníku."
+
+#: C/glabels.xml:2070(para)
+msgid "r"
+msgstr "r"
+
+#: C/glabels.xml:2071(para)
+msgid "Radius of rounded corners of rectangle."
+msgstr "Poloměr zakulacených rohů obdélníku."
+
+#: C/glabels.xml:2080(title)
+msgid "Layout Node"
+msgstr "Uzel Layout"
+
+#: C/glabels.xml:2082(para)
+msgid ""
+"A label node may contain multiple <emphasis>Layout</emphasis> children. If "
+"labels are arranged in a simple grid pattern, only one layout is needed. "
+"However, if labels are arranged in multiple grids, such as a running bond "
+"pattern, multiple <emphasis>layout</emphasis> tags can be used. Note: a "
+"single label can always be treated as a grid of one."
+msgstr ""
+"Uzel typu Label může obsahovat více potomků <emphasis>Layout</emphasis>. V "
+"případě, že jsou etikety rozmístěné do jednoduché pravidelné mřížky, "
+"postačuje jeden uzel Layout. Pokud ale jsou etikety rozmístěné ve více "
+"mřížkách, např. mají podobu cihlové zdi, musí se použít více značek "
+"<emphasis>layout</emphasis>. Poznámka: jedna etiketa může být vždy "
+"považována za mřížku s jednou buňkou."
+
+#: C/glabels.xml:2105(para)
+msgid "nx"
+msgstr "nx"
+
+#: C/glabels.xml:2107(para)
+msgid "Number of labels/cards across in the grid (horizontal)"
+msgstr "Počet etiket/vizitek v mřížce (vodorovně)"
+
+#: C/glabels.xml:2112(para)
+msgid "ny"
+msgstr "ny"
+
+#: C/glabels.xml:2114(para)
+msgid "Number of labels/cards up and down in the grid (vertical)"
+msgstr "Počet etiket/vizitek v mřížce (svisle)"
+
+#: C/glabels.xml:2121(para)
+msgid ""
+"Distance from left edge of sheet to the left edge of the left column of "
+"cards/labels in the layout."
+msgstr ""
+"Vzdálenost od levé hrany stránky k levé hraně levého sloupce etiket/vizitek "
+"v rozvržení."
+
+#: C/glabels.xml:2128(para)
+msgid ""
+"Distance from the top edge of sheet to the top edge of the top row of labels/"
+"cards in the layout."
+msgstr ""
+"Vzdálenost od horní hrany stránky k horní hraně horní řady etiket/vizitek v "
+"rozvržení."
+
+#: C/glabels.xml:2133(para)
+msgid "dx"
+msgstr "dx"
+
+#: C/glabels.xml:2134(para)
+msgid "Horizontal pitch of grid."
+msgstr "Vodorovná rozteč mřížky."
+
+#: C/glabels.xml:2137(para)
+msgid "dy"
+msgstr "dy"
+
+#: C/glabels.xml:2138(para)
+msgid "Vertical pitch of grid."
+msgstr "Svislá rozteč mřížky."
+
+#: C/glabels.xml:2146(title)
+msgid "Layout Parameters"
+msgstr "Parametry uzlu Layout"
+
+#: C/glabels.xml:2160(title)
+msgid "Alias Node"
+msgstr "Uzel Alias"
+
+#: C/glabels.xml:2162(para)
+msgid ""
+"An <emphasis>Alias</emphasis> node provides the name of a product with the "
+"same size and layout characteristics as the parent template."
+msgstr ""
+"Uzel <emphasis>Alias</emphasis> uvádí názvy výrobků se stejnými rozměry a "
+"rozvržením, jako má rodičovská šablona."
+
+#: C/glabels.xml:2184(para)
+msgid "The brand or manufacturer of the equivalent product."
+msgstr "Značka nebo výrobce odpovídajícího výrobku."
+
+#: C/glabels.xml:2190(para)
+msgid "The part number or name of the equivalent product."
+msgstr "Produktové číslo nebo název odpovídajícího výrobku."
+
+#: C/glabels.xml:2226(title)
+msgid "About <application>gLabels</application>"
+msgstr "O aplikaci <application>gLabels</application>"
+
+#: C/glabels.xml:2227(para)
+msgid ""
+"<application>gLabels</application> was written by Jim Evins "
+"(<email>evins@snaught.com</email>). To find more information about "
+"<application>gLabels</application>, please visit the <ulink url=\"http://"
+"glabels.sourceforge.net\" type=\"http\">gLabels Web page</ulink>."
+msgstr ""
+"Aplikaci <application>gLabels</application> napsal Jim Evins "
+"(<email>evins@snaught.com</email>).  Pokud chcete o aplikaci "
+"<application>gLabels</application> najít více informací, navštivte prosím "
+"<ulink url=\"http://glabels.sourceforge.net\" type=\"http\">webovou stránku "
+"gLabels</ulink>."
+
+#: C/glabels.xml:2232(para)
+msgid ""
+"To report a bug or make a suggestion regarding this application or this "
+"manual, follow the directions at the <ulink url=\"http://glabels.sourceforge."
+"net/contact/\" type=\"http\"><application>gLabels</application> Contact "
+"Page</ulink>."
+msgstr ""
+"Pokud chcete oznámit chybu nebo navrhnout vylepšení vztahující se k této "
+"aplikaci nebo této příručce, postupujte dle instrukcí na <ulink url=\"http://"
+"glabels.sourceforge.net/contact/\" type=\"http\">kontaktní stránce "
+"<application>gLabels</application></ulink>."
+
+#: C/glabels.xml:2238(para)
+msgid ""
+"This program is distributed 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. A copy of this license "
+"can be found at this <ulink url=\"ghelp:gpl\" type=\"help\">link</ulink>, or "
+"in the file COPYING included with the source code of this program."
+msgstr ""
+"Tento program je šířen podle ustanovení GNU General Public License, vydávané "
+"Free Software Foundation; a to buď verze 2 této licence anebo (podle "
+"vlastního uvážení) kterékoliv pozdější verze. Kopii této licence naleznete "
+"pod tímto <ulink url=\"ghelp:gpl\" type=\"help\">odkazem</ulink> nebo v "
+"souboru COPYING přiloženém ke zdrojovým kódům tohoto programu. "
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: C/glabels.xml:0(None)
+msgid "translator-credits"
+msgstr "Marek Černocký <marek@manet.cz>, 2010"
+
diff --git a/help/cs/figures/main-window-empty.png b/help/cs/figures/main-window-empty.png
new file mode 100644 (file)
index 0000000..f9157f9
Binary files /dev/null and b/help/cs/figures/main-window-empty.png differ
diff --git a/help/cs/figures/merge-ex1-1.png b/help/cs/figures/merge-ex1-1.png
new file mode 100644 (file)
index 0000000..49a24b6
Binary files /dev/null and b/help/cs/figures/merge-ex1-1.png differ
diff --git a/help/cs/figures/merge-ex1-2.png b/help/cs/figures/merge-ex1-2.png
new file mode 100644 (file)
index 0000000..ab40f96
Binary files /dev/null and b/help/cs/figures/merge-ex1-2.png differ
diff --git a/help/cs/figures/merge-ex1-3.png b/help/cs/figures/merge-ex1-3.png
new file mode 100644 (file)
index 0000000..0559876
Binary files /dev/null and b/help/cs/figures/merge-ex1-3.png differ
diff --git a/help/cs/figures/merge-ex1-4.png b/help/cs/figures/merge-ex1-4.png
new file mode 100644 (file)
index 0000000..a602d01
Binary files /dev/null and b/help/cs/figures/merge-ex1-4.png differ
diff --git a/help/cs/figures/merge-ex2-1.png b/help/cs/figures/merge-ex2-1.png
new file mode 100644 (file)
index 0000000..855a1c1
Binary files /dev/null and b/help/cs/figures/merge-ex2-1.png differ
diff --git a/help/cs/figures/merge-ex2-2.png b/help/cs/figures/merge-ex2-2.png
new file mode 100644 (file)
index 0000000..49284d4
Binary files /dev/null and b/help/cs/figures/merge-ex2-2.png differ
diff --git a/help/cs/figures/merge-ex2-3.png b/help/cs/figures/merge-ex2-3.png
new file mode 100644 (file)
index 0000000..03526c0
Binary files /dev/null and b/help/cs/figures/merge-ex2-3.png differ
diff --git a/help/cs/figures/merge-ex2-4.png b/help/cs/figures/merge-ex2-4.png
new file mode 100644 (file)
index 0000000..9891c95
Binary files /dev/null and b/help/cs/figures/merge-ex2-4.png differ
diff --git a/help/cs/figures/object-editor-sidebar.png b/help/cs/figures/object-editor-sidebar.png
new file mode 100644 (file)
index 0000000..f09cd2b
Binary files /dev/null and b/help/cs/figures/object-editor-sidebar.png differ
diff --git a/help/cs/figures/print-copies.png b/help/cs/figures/print-copies.png
new file mode 100644 (file)
index 0000000..9befece
Binary files /dev/null and b/help/cs/figures/print-copies.png differ
diff --git a/help/cs/figures/print-merge.png b/help/cs/figures/print-merge.png
new file mode 100644 (file)
index 0000000..30f417a
Binary files /dev/null and b/help/cs/figures/print-merge.png differ
diff --git a/help/cs/glabels.xml b/help/cs/glabels.xml
new file mode 100644 (file)
index 0000000..82202da
--- /dev/null
@@ -0,0 +1,1776 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY legal SYSTEM "legal.xml">
+<!ENTITY appversion "2.2.6">
+<!ENTITY manrevision "2.2.6">
+<!ENTITY date "December 2007">
+<!ENTITY app "<application>gLabels</application>">
+<!-- Information about the entities
+       The legal.xml file contains legal information, there is no need to edit the file. 
+       Use the appversion entity to specify the version of the application.
+       Use the manrevision entity to specify the revision number of this manual.
+       Use the date entity to specify the release date of this manual.
+       Use the app entity to specify the name of the application. -->]>
+<!-- 
+      (Do not remove this comment block.)
+  Maintained by the GNOME Documentation Project
+  http://developer.gnome.org/projects/gdp
+  Template version: 2.0 beta
+  Template last modified Apr 11, 2002
+-->
+<!-- =============Document Header ============================= -->
+<article id="index" lang="cs">
+<!-- please do not change the id; for translations, change lang to -->
+<!-- appropriate code -->
+  <articleinfo> 
+    <title>Příručka V2.2.6 k aplikaci <application>gLabels</application></title>       
+       <abstract role="description">
+       <para>Uživatelská příručka k aplikaci <application>gLabels</application> na vytváření etiket a vizitek</para>
+    </abstract>
+    <copyright> 
+      <year>2003-2009</year> 
+      <holder>Jim Evins</holder> 
+    </copyright><copyright><year>2010</year><holder>Marek Černocký (marek@manet.cz)</holder></copyright>
+       <publisher> 
+               <publishername>Jim Evins</publishername> 
+       </publisher> 
+
+     <legalnotice id="legalnotice">
+       <para>Je povoleno kopírovat, šířit a/nebo upravovat tento dokument za podmínek GNU Free Documentation License, verze 1.1 nebo jakékoli další verze vydané nadací Free Software Foundation; bez neměnných oddílů, bez textů předních desek a bez textů zadních desek. Kopie této licence je zahrnuta v oddílu jménem <ulink type="help" url="ghelp:fdl">GNU Free Documentation License</ulink> nebo v souboru COPYING-DOCS dodávaném s touto příručkou.</para>
+         <para>Tato příručka je součástí kolekce příruček GNOME, distribuovaných pod licencí GNU FDL. Pokud chcete tento dokument šířit odděleně od kolekce, musíte přiložit kopii licence dle popisu v sekci 6 dané licence.</para>
+
+       <para>Mnoho užívaných jmen určených k zviditelnění produktů nebo služeb jsou ochranné známky. Na místech, kde jsou tato jména v dokumentaci užita a členové Dokumentačního projektu GNOME jsou si vědomi skutečnosti, že se jedná o ochrannou známku, je takové jméno psáno velkými písmeny celé nebo s velkým písmenem na začátku.</para>
+
+       <para>DOKUMENT A JEHO UPRAVENÉ VERZE JSOU ŠÍŘENY V SOULADU SE ZNĚNÍM LICENCE GNU FREE DOCUMENTATION LICENSE S NÁSLEDUJÍCÍM USTANOVENÍM: <orderedlist>
+               <listitem>
+                 <para>DOKUMENT JE POSKYTOVÁN V PODOBĚ „JAK JE“ BEZ ZÁRUKY V JAKÉKOLIV PODOBĚ, NEPOSKYTUJÍ SE ANI ODVOZENÉ ZÁRUKY, ZÁRUKY, ŽE DOKUMENT, NEBO JEHO UPRAVENÁ VERZE, JE BEZCHYBNÝ NEBO ZÁRUKY PRODEJNOSTI, VHODNOSTI PRO URČITÝ ÚČEL NEBO NEPORUŠENOSTI. RIZIKO NEKVALITY, NEPŘESNOSTI A ŠPATNÉHO PROVEDENÍ DOKUMENTU, NEBO JEHO UPRAVENÉ VERZE, LEŽÍ NA VÁS. POKUD KVŮLI TOMUTO DOKUMENTU, NEBO JEHO UPRAVENÉ VERZI, NASTANE PROBLÉM, VY (NIKOLIV PŮVODNÍ AUTOR NEBO JAKÝKOLIV PŘISPĚVATEL) PŘEBÍRÁTE JAKÉKOLIV NÁKLADY ZA NUTNÉ ÚPRAVY, OPRAVY ČI SLUŽBY. TOTO PROHLÁŠENÍ O ZÁRUCE PŘEDSTAVUJE ZÁKLADNÍ SOUČÁST TÉTO LICENCE. BEZ TOHOTO PROHLÁŠENÍ NENÍ, PODLE TÉTO DOHODY, POVOLENO UŽÍVÁNÍ ANI ÚPRAVY TOHOTO DOKUMENTU; DÁLE</para>
+               </listitem>
+               <listitem>
+                 <para>ZA ŽÁDNÝCH OKOLNOSTÍ A ŽÁDNÝCH PRÁVNÍCH PŘEDPOKLADŮ, AŤ SE JEDNÁ O PŘEČIN (VČETNĚ NEDBALOSTNÍCH), SMLOUVU NEBO JINÉ, NENÍ AUTOR, PŮVODNÍ PISATEL, KTERÝKOLIV PŘISPĚVATEL NEBO KTERÝKOLIV DISTRIBUTOR TOHOTO DOKUMENTU NEBO UPRAVENÉ VERZE DOKUMENTU NEBO KTERÝKOLIV DODAVATEL NĚKTERÉ Z TĚCHTO STRAN ODPOVĚDNÝ NĚJAKÉ OSOBĚ ZA PŘÍMÉ, NEPŘÍMÉ, SPECIÁLNÍ, NAHODILÉ NEBO NÁSLEDNÉ ŠKODY JAKÉHOKOLIV CHARAKTERU, VČETNĚ, ALE NEJEN, ZA POŠKOZENÍ ZE ZTRÁTY DOBRÉHO JMÉNA, PŘERUŠENÍ PRÁCE, PORUCHY NEBO NESPRÁVNÉ FUNKCE POČÍTAČE NEBO JINÉHO A VŠECH DALŠÍCH ŠKOD NEBO ZTRÁT VYVSTÁVAJÍCÍCH Z NEBO VZTAHUJÍCÍCH SE K POUŽÍVÁNÍ TOHOTO DOKUMENTU NEBO UPRAVENÝCH VERZÍ DOKUMENTU, I KDYŽ BY TAKOVÁTO STRANA BYLA INFORMOVANÁ O MOŽNOSTI TAKOVÉHOTO POŠKOZENÍ.</para>
+               </listitem>
+         </orderedlist></para>
+  </legalnotice>
+
+
+   <!-- This file  contains link to license for the documentation (GNU FDL), and 
+        other legal stuff such as "NO WARRANTY" statement. Please do not change 
+       any of this. -->
+
+    <authorgroup> 
+      <author role="maintainer"> 
+               <firstname>Jim</firstname> 
+               <surname>Evins</surname> 
+      </author> 
+      
+<!-- This is appropriate place for other contributors: translators,
+     maintainers,  etc. Commented out by default.
+     
+      <othercredit role="translator">
+               <firstname>Latin</firstname> 
+               <surname>Translator 1</surname> 
+               <affiliation> 
+                       <orgname>Latin Translation Team</orgname> 
+                       <address> <email>translator@gnome.org</email> </address> 
+               </affiliation>
+               <contrib>Latin translation</contrib>
+      </othercredit>
+-->
+    </authorgroup>
+
+
+<!-- According to GNU FDL, revision history is mandatory if you are -->
+<!-- modifying/reusing someone else's document.  If not, you can omit it. -->
+<!-- Remember to remove the &manrevision; entity from the revision entries other
+-->
+<!-- than the current revision. -->
+<!-- The revision numbering system for GNOME manuals is as follows: -->
+<!-- * the revision number consists of two components -->
+<!-- * the first component of the revision number reflects the release version of the GNOME desktop. -->
+<!-- * the second component of the revision number is a decimal unit that is incremented with each revision of the manual. -->
+<!-- For example, if the GNOME desktop release is V2.x, the first version of the manual that -->
+<!-- is written in that desktop timeframe is V2.0, the second version of the manual is V2.1, etc. -->
+<!-- When the desktop release version changes to V3.x, the revision number of the manual changes -->
+<!-- to V3.0, and so on. -->  
+    <revhistory>
+      <revision> 
+               <revnumber>Příručka V2.2.6 k aplikaci gLabels</revnumber> 
+               <date>Říjen 2009</date> 
+               <revdescription> 
+                       <para role="author">Mario Blättermann <email>mariobl@gnome.org</email></para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+      <revision> 
+               <revnumber>Příručka V2.2 k aplikaci gLabels</revnumber> 
+               <date>Prosinec 2007</date> 
+               <revdescription> 
+                       <para role="author">Jim Evins <email>evins@snaught.com</email></para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+    </revhistory> 
+
+    <releaseinfo>Tato příručka popisuje aplikaci <application>gLabels</application> ve verzi 2.2.6.</releaseinfo> 
+    <legalnotice> 
+      <title>Ohlasy</title> 
+      <para>Pokud chcete oznámit chybu nebo navrhnout vylepšení vztahující se k aplikaci <application>gLabels</application> nebo této příručce, postupujte dle instrukcí na <ulink url="http://glabels.sourceforge.net/contact/" type="http">kontaktní stránce <application>gLabels</application></ulink>.</para>
+<!-- Translators may also add here feedback address for translations -->
+    </legalnotice> 
+  </articleinfo> 
+
+  <indexterm zone="index"> 
+    <primary>gLabels</primary> 
+  </indexterm> 
+  <indexterm zone="index"> 
+    <primary>glabels</primary> 
+  </indexterm>
+
+
+
+
+<!-- ============= Document Body ============================= -->
+<!-- ============= Introduction ============================== -->
+<!-- Use the Introduction section to give a brief overview of what
+     the application is and what it does. -->
+  <sect1 id="glabels-introduction"> 
+    <title>Úvod</title> 
+
+    <para>Aplikace <application>gLabels</application> je jednoduchý program na vytváření etiket a vizitek pro <systemitem>pracovní prostředí GNOME</systemitem>. Je navržená pro práci s různými samolepicími etiketami a vizitkami rozmístěnými na listech pro laserový/inkoustový tisk, které najdete v každém obchodě s kancelářskými potřebami.</para>
+
+  </sect1>
+
+
+
+
+<!-- =========== Getting Started ============================== -->
+<!-- Use the Getting Started section to describe the steps required
+     to start the application and to describe the user interface components
+     of the application. If there is other information that it is important
+     for readers to know before they start using the application, you should
+     also include this information here. 
+     If the information about how to get started is very short, you can 
+     include it in the Introduction and omit this section. -->
+
+  <sect1 id="glabels-getting-started"> 
+    <title>Začínáme</title> 
+
+    <sect2 id="glabels-start">
+    <title>Jak spustit aplikaci <application>gLabels</application></title>
+    <para>Aplikaci <application>gLabels</application> můžete spustit následujícími způsoby:</para> 
+    <variablelist>
+       <varlistentry>
+               <term>Nabídka <guimenu>Aplikace</guimenu></term>
+               <listitem>
+               <para>Zvolte <menuchoice><guisubmenu>Kancelář</guisubmenu><guimenuitem>Návrhář etiket gLabels</guimenuitem></menuchoice>.</para>
+               </listitem>
+       </varlistentry>
+       <varlistentry>
+               <term>Příkazový řádek</term>
+               <listitem>
+               <para>Napište příkaz <command>glabels</command> a zmáčkněte <keycap>Enter</keycap>:</para>
+               </listitem>
+       </varlistentry>
+    </variablelist>
+    </sect2>
+
+    <sect2 id="glabels-when-start">
+    <title>Když spustíte aplikaci <application>gLabels</application></title>
+    <para>Když spustíte aplikaci <application>gLabels</application>, zobrazí se následující okno.</para>
+
+    <!-- ==== Figure ==== -->
+      <figure id="mainwindow-fig"> 
+       <title>Okno <application>gLabels</application> po spuštění</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/main-window-empty.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+    <!-- ==== End of Figure ==== -->
+
+    <!-- Include any descriptions of the GUI immediately after the screenshot of the main UI, -->
+    <!-- for example, the items on the menubar and on the toolbar. This section is optional. -->
+
+    <para>Okno <application>gLabels</application> obsahuje následující části:</para>
+      <variablelist>
+       <varlistentry>
+       <term>Panel nabídek.</term>
+       <listitem>
+           <para>Nabídky v panelu nabídek obsahují všechny příkazy potřebné k vytváření a úpravám etiket a vizitek v aplikaci <application>gLabels</application>.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Hlavní panel nástrojů.</term>
+       <listitem>
+           <para>Hlavní panel nástrojů obsahuje podmnožinu běžných příkazů pro práci se soubory a k úpravám z těch, které jsou dostupné v panelu nabídek.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Panel kreslení.</term>
+       <listitem>
+           <para>Panel kreslení obsahuje podmnožinu běžných příkazů k úpravám aktuálního dokumentu <application>gLabels</application>.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Zobrazovací oblast</term>
+       <listitem>
+           <para>Zobrazovací oblast je hlavní rozhraní aplikace <application>gLabels</application> sloužící ke kreslení.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Postranní panel objektů.</term>
+       <listitem>
+           <para>Postranní panel objektů poskytuje rozhraní na prohlížení a úpravu všech vlastností jednotlivých objektů.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Panel vlastností.</term>
+       <listitem>
+           <para>Panel vlastností obsahuje sadu nástrojů na úpravu vlastností vybraných objektů a nastavení výchozích vlastností pro nové objekty.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Stavový panel.</term>
+       <listitem>
+           <para>Stavový panel zobrazuje informace o aktuální činnosti aplikace <application>gLabels</application> a kontextové informace o položkách nabídky.</para>
+       </listitem>
+       </varlistentry>
+       </variablelist>
+    </sect2>
+  </sect1>
+
+
+
+
+<!-- ================ Usage ================================ -->
+<!-- Use this section to describe how to use the application to perform the tasks for 
+  which the application is designed. -->
+  <sect1 id="glabels-usage"> 
+    <title>Použití</title> 
+
+<!-- ============= To create a new file ============================= -->
+    <sect2 id="glabels-open-new"> 
+      <title>Jak vytvořit novou etiketu nebo vizitku</title>
+
+      <para>Když chcete vytvořit novou etiketu nebo vizitku, zvolte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Nový</guimenuitem></menuchoice> a zobrazí se dialogové okno <guilabel>Nová etiketa či vizitka</guilabel>. Vyberte pro nový dokument typ média a orientaci a klikněte na <guibutton>OK</guibutton>. Nový dokument se zobrazí v zobrazovací oblasti okna <application>gLabels</application>.</para>
+
+      <para>V případě, že vaše konkrétní médium v tomto dialogovém okně schází, přečtěte si <xref linkend="glabels-create-template"/>.</para>
+
+    </sect2>
+
+<!-- ============= To Open a File ============================= -->
+    <sect2 id="glabels-open-file"> 
+      <title>Jak otevřít soubor</title>
+
+      <para>Soubor otevřete pomocí volby <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Otevřít</guimenuitem></menuchoice>, která zobrazí dialogové okno <guilabel>Otevření souboru</guilabel>. Vyberte soubor, který chcete otevřít a klikněte na <guibutton>OK</guibutton>. Soubor se zobrazí v zobrazovací oblasti okna <application>gLabels</application>.</para>
+
+      <para>V aplikaci <application>gLabels</application> můžete otevřít i více souborů naráz. Aplikace pro každý otevřený soubor vytvoří zvláštní okno.</para>
+
+      <para>Pro soubory nedávno otevřené k úpravě si aplikace zaznamenává cesty a názvy a tyto soubory potom zobrazuje v nabídce <menuchoice><guimenu>Soubor</guimenu><guisubmenu>Otevřít nedávné soubory</guisubmenu></menuchoice>.</para>
+
+    </sect2>
+
+<!-- ============= To Open Multiple Files from the Command Line ========= -->
+    <sect2 id="glabels-run-from-cmd-line"> 
+      <title>Jak otevřít více souborů z příkazové řádky</title>
+
+      <para>Aplikaci <application>gLabels</application> můžete spustit z příkazového řádku a otevřít při tom jeden nebo více souborů. Pokud chcete otevřít z příkazového řádku více souborů, napište následující příkaz a zmáčkněte <keycap>Enter</keycap>:</para>
+
+      <para><command>glabels <replaceable>soubor1.glabels soubor2.glabels soubor3.glabels</replaceable></command></para>
+
+      <para>Po spuštění aplikace se každý ze zadaných souborů zobrazí ve zvláštním okně <application>gLabels</application>.</para>
+
+    </sect2>
+
+<!-- ============= To Save a File ========= -->
+    <sect2 id="glabels-save-file"> 
+      <title>Jak uložit soubor</title>
+
+      <para>Soubory můžete uložit následujícími způsoby:</para>
+
+      <itemizedlist> 
+       <listitem>
+
+         <para>Pro uložení změn do stávajícího souboru, zvolte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Uložit</guimenuitem></menuchoice>.</para>
+
+       </listitem>
+       <listitem>
+
+         <para>Pro uložení nového souboru nebo uložení stávajícího souboru pod novým názvem, zvolte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Uložit jako</guimenuitem></menuchoice>. V dialogovém okně <guilabel>Uložit jako</guilabel> zadejte pro soubor název a klikněte na <guibutton>OK</guibutton>.</para>
+
+       </listitem>
+      </itemizedlist>
+
+    </sect2>
+
+<!-- ============= To Change Label Properties ========= -->
+    <sect2 id="glabels-label-properties"> 
+      <title>Jak změnit vlastnosti etikety</title>
+
+      <para>Pokud chcete změnit typ média a/nebo orientaci etiket, zvolte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Vlastnosti</guimenuitem></menuchoice> a zobrazí se dialogové okno <guilabel>Vlastnosti etikety</guilabel>. Zvolte pro dokument nový typ média a orientaci a klikněte na <guibutton>OK</guibutton>.</para>
+
+    </sect2>
+
+<!-- ============= To create a custom template ======================= -->
+    <sect2 id="glabels-create-template"> 
+      <title>Jak vytvořit vlastní šablonu</title>
+
+      <para>Když chcete vytvořit novou vlastní šablonu, zvolte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Návrhář šablon…</guimenuitem></menuchoice> a zobrazí se dialogové okno <guilabel>Návrhář šablon gLabels</guilabel>. Toto dialogové okno vás provede vytvořením vlastní šablony pro většinu typů etiket nebo vizitek, se kterými se můžete setkat.</para>
+
+      <para>Pokud dáváte přednost ručnímu vytvoření šablon, přečtěte si <xref linkend="glabels-manual-create-template"/></para>
+
+    </sect2>
+
+<!-- ============= To Close a File ========= -->
+    <sect2 id="glabels-close-file"> 
+      <title>Jak zavřít soubor</title>
+
+      <para>Když chcete aktuální dokument zavřít, zvolte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Zavřít</guimenuitem></menuchoice> a zavřete tím aplikační okno. Pokud byl aktuální dokument změněn, zobrazí se potvrzovací dialogové okno, kde můžete dokument uložit nebo příkaz zrušit. Pokud je zavírané okno jediné otevřené, ukončí se celá aplikace <application>gLabels</application>.</para>
+
+    </sect2>
+
+<!-- ============= To Quit ========= -->
+    <sect2 id="glabels-quit"> 
+      <title>Jak ukončit <application>gLabels</application></title>
+
+      <para>Když chcete aplikaci <application>gLabels</application> ukončit, zvolte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Ukončit</guimenuitem></menuchoice>. Odpovídá to zavření všech otevřených oken. Viz <xref linkend="glabels-close-file"/>.</para>
+
+    </sect2>
+
+<!-- ============= To Print Labels and Cards ========= -->
+    <sect2 id="glabels-print-file"> 
+      <title>Jak vytisknout etikety nebo vizitky</title>
+
+      <para>Když chcete vytisknout etikety nebo vizitky, zvolte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Tisk</guimenuitem></menuchoice> a zobrazí se dialogové okno <guilabel>Tisk</guilabel>. Až nastavíte volby tisku, klikněte na <guilabel>Tisk</guilabel> a etikety nebo vizitky se vytisknou. Pokud se chcete jen podívat na náhled, klikněte místo toho na <guilabel>Náhled tisku</guilabel>.</para>
+
+      <para>V dialogovém okně <guilabel>Tisk</guilabel> můžete nastavit následující volby tisku:</para>
+               
+      <sect3 id="print-dialog-job">
+       <title>Karta Etikety v dialogovém okně Tisk</title>
+
+       <variablelist>
+
+         <varlistentry>
+            <term><guilabel>Ovládání tisku (jednoduchý)</guilabel></term>
+           <listitem> 
+
+             <para>Pro jednoduché etikety nebo vizitky (bez slučování dokumentů), obsahuje karta <guilabel>Etikety</guilabel> následující prvky.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-copies-fig"> 
+               <title>Ovládací prvky tisku kopií</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata fileref="figures/print-copies.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>Počet kopií etikety můžete vybrat zvolením počtu plných listů, které se mají vytisknout, a nebo vybrat jen část etiket na jednom listu.</para>
+
+             <para>Mini-náhled můžete také použít ke grafickému výběru části etiket tak, že kliknete na první etiketu v mini-náhledu a táhnete až na poslední etiketu.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry>
+            <term><guilabel>Ovládání tisku (slučování)</guilabel></term>
+           <listitem> 
+
+             <para>Pro etikety nebo vizitky používající slučování dokumentů (někdy také nazývané „hromadná korespondence“), obsahuje karta <guilabel>Etikety</guilabel> následující ovládací prvky slučování lišící se od ovládacích prvků jednoduchého tisku.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-merge-fig"> 
+               <title>Ovládací prvky tisku slučovaných dokumentů</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata fileref="figures/print-merge.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>Celkový počet etiket nebo vizitek je dán počtem záznamů ve zdroji slučování a počtem vybraných kopií. Jestliže je vybráno více kopií, mohou být také uspořádané (kopie ze stejného záznamu seskupené spolu) nebo neuspořádané (kopie jednotlivých záznamů za sebou).</para>
+
+             <para>Tisk může začínat na libovolné etiketě na prvním listu. Tu můžete vybrat pomocí číselníku <guilabel>Začít na etiketě</guilabel>.</para>
+
+             <para>Mini-náhled můžete také použít ke grafickému výběru první etikety tak, že na ni v mini-náhledu kliknete.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry> <term><guilabel>Volby</guilabel> </term> 
+           <listitem> 
+             <para>Můžete rovněž vybrat následující volby.</para>
+             <itemizedlist>
+               <listitem>
+                 <para><guilabel>tisk obrysů</guilabel></para>
+                 <para>Tisk obrysů etiket. Tato volba je použitelná k tisku nanečisto, k otestování lícování.</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>obrácený tisk</guilabel></para>
+                 <para>Tisknout etikety zrcadlově. Tato volba je použitelná pro tisk na čiré etikety, na které se bude dívat z druhé strany (např. na okně auta).</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>tisknout značky pro ořez</guilabel></para>
+                 <para>Tisknout ořezové značky podél hran listu. Tato volba je použitelná pro tisk na čisté listy, které se budou po tisku rozřezávat. Tato volba nepracuje úplně správně se všemi šablonami.</para>
+               </listitem>
+             </itemizedlist>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+      </sect3>
+               
+    </sect2>
+
+<!-- ============= To Create New Objects ========= -->
+    <sect2 id="glabels-new-objects"> 
+      <title>Jak vytvořit nový objekt</title>
+
+      <para>Objekty se vytvářejí příslušným výběrem v podnabídce <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Vytvořit</guimenuitem></menuchoice> nebo na <guilabel>Panelu kreslení</guilabel>. Zobrazovací oblast se přepne do režimu vytváření objektu, což je indikováno patřičným ukazatelem. Do výchozího režimu výběru objektů se můžete vrátit, aniž byste nějaký objekt vytvořili, volbou <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Režim výběru</guimenuitem></menuchoice>. Ukazatel pro zobrazovací oblast se změní zpět na výchozí šipku.</para>
+
+      <para>Zde je popis režimu vytváření objektu pro jednotlivé typy objektů:</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Text</term>
+         <listitem>
+           <para>Klikněte na požadované umístění levého horního rohu objektu text. Nový textový objekt se vytvoří s počátečním řetězcem „Text“. Jak tento text nebo další vlastnosti změnit uvádí <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Obdélník</term>
+         <listitem>
+           <para>Klikněte na požadované umístění levého horního rohu objektu obdélník a táhněte k požadovanému umístění pravého dolního rohu. Když jednoduše kliknete na jednom místě, vytvoří se čtverec. Jak změnit vlastnosti obdélníku uvádí <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Čára</term>
+         <listitem>
+           <para>Klikněte na požadované umístění levého horního konce objektu čára a táhněte k požadovanému umístění pravého dolního konce. Když jednoduše kliknete na jednom místě, vytvoří diagonální úsečka. Jak změnit vlastnosti čáry uvádí <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Elipsa</term>
+         <listitem>
+           <para>Klikněte na požadované umístění levého horního rohu objektu elipsa a táhněte k požadovanému umístění pravého dolního rohu. Když jednoduše kliknete na jednom místě, vytvoří se kruh. Jak změnit vlastnosti elipsy uvádí <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Obrázek</term>
+         <listitem>
+           <para>Klikněte na požadované umístění levého horního rohu objektu obrázku a táhněte k požadovanému umístění pravého dolního rohu. Když jednoduše kliknete na jednom místě, vytvoří se čtverec. Nový obrázkový objekt se vytvoří s jednoduchým počátečním obrázkem šachovnice. Jak změnit tento obrázek a další vlastnosti uvádí <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Čárový kód</term>
+         <listitem>
+           <para>Klikněte na požadované umístění levého horního rohu objektu čárového kódu. Nový objekt čárového kódu se vytvoří jako čárový kód POSTNET s ukázkovými daty. Jak tato data nebo další vlastnosti změnit uvádí <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+
+    </sect2>
+
+<!-- ============= To Select Objects ========= -->
+    <sect2 id="glabels-select-objects"> 
+      <title>Jak vybrat objekty</title>
+
+      <para>Předpokladem k provádění operací s objekty je výběr jednoho či skupiny více objektů. Aby bylo možné výběr provést, musí být zobrazovací oblast v režimu výběru objektů, což je indikováno kurzorem v podobě šipky. Režim výběru objektů se zvolí pomocí <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Režim výběru</guimenuitem></menuchoice> nebo odpovídajícím příkazem na <guilabel>Panelu kreslení</guilabel>.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Výběr jednoho objektu</term>
+         <listitem>
+           <para>Jeden objekt vyberete prostým kliknutím na něj v zobrazovací oblasti. Vybraný objekt bude zvýrazněný sadou úchopů sloužících ke změně velikosti</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Přidávání objektů do výběru</term>
+         <listitem>
+           <para>Více objektů můžete vybrat tak, že vyberete první dříve uvedeným způsobem a po té budete držet klávesu <keycap>Ctrl</keycap> a vybírat další objekty. Jednotlivé objekty lze přidat do stávajícího výběru kdykoliv držením klávesy <keycap>Ctrl</keycap> během vybírání požadovaných objektů. Všechny objekty můžete vybrat pomocí položky nabídky <menuchoice><guimenu>Upravit</guimenu><guimenuitem>Vybrat vše</guimenuitem></menuchoice>. Všechny objekty ve výběru jsou zvýrazněné.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Výběr oblasti</term>
+         <listitem>
+           <para>Více objektů lze rovněž vybrat zmáčknutím tlačítka myši na prázdném místě a tažením obdélníkové oblasti. Po uvolnění tlačítka se všechny objekty obsažené v takovéto oblasti naráz vyberou. Výběr pomocí oblasti lez použít k přidání ke stávajícímu výběru podržením klávesy <keycap>Ctrl</keycap> během provádění výběru.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Zrušení výběru objektů</term>
+         <listitem>
+           <para>Jednotlivé objekty lze z výběru odebrat podržením klávesy <keycap>Ctrl</keycap> a klikáním na označené objekty. Veškerý výběr můžete zrušit pomocí nabídky <menuchoice><guimenu>Upravit</guimenu><guimenuitem>Zrušit výběr</guimenuitem></menuchoice> nebo jednoduchým kliknutím na prázdné místo v zobrazovací oblasti. Jakmile je u objektu zrušen výběr, zmizí i jeho zvýraznění.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= Clipboard Commands ========= -->
+    <sect2 id="glabels-clipboard"> 
+      <title>Příkazy pro práci se schránkou</title>
+
+      <para>S vybranými objekty lze manipulovat pomocí standardních operací se schránkou <guimenuitem>Vyjmout</guimenuitem>, <guimenuitem>Kopírovat</guimenuitem>, <guimenuitem>Vložit</guimenuitem> a <guimenuitem>Smazat</guimenuitem>.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>X</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Vyjmout</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Přesune vybrané objekty do schránky. Objekty jsou potom přístupné pro vkládání zpátky do aktuálního dokumentu nebo jiného dokumentu.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Kopírovat</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Zkopíruje vybrané objekty do schránky, aniž by byly vymazány. Objekty jsou potom přístupné pro vkládání zpátky do aktuálního dokumentu nebo jiného dokumentu.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>V</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Vložit</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Vloží objekty ze schránky do aktuálního dokumentu. Aplikace <application>gLabels</application> umí vkládat pouze objekty z jiného dokumentu <application>gLabels</application>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycap>Smazat</keycap>
+             </shortcut>
+             <guimenuitem>Smazat</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Smaže vybrané objekty, aniž by byly umístěny do schránky.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= To Edit object Properties ========= -->
+    <sect2 id="glabels-object-properties"> 
+      <title>Jak upravit vlastnosti objektu</title>
+
+      <para>Většinu vlastností objektů lze upravit přes editor objektů v postranním panelu, který je vyobrazený níže. Abyste mohli editor objektů používat, musíte nejdříve vybrat jeden objekt. Viz <xref linkend="glabels-select-objects"/>.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="object-editor-sidebar-fig"> 
+       <title>Editor objektů z postranního panelu</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/object-editor-sidebar.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Editor objektů bude obsahovat některé z následujících karet, které závisí na typu objektu:</para>
+
+      <sect3 id="object-editor-text">
+       <title>Karta Text (textové objekty)</title>
+
+       <para>Tato karta obsahuje malý editor na úpravu obsahu textového objektu. Rovněž obsahuje vyskakovací nabídku dostupných klíčů slučování dokumentů, které lze do textu vkládat.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-image">
+       <title>Karta Obrázek (obrázkové objekty)</title>
+
+       <para>Tato karta obsahuje pole na zadání souboru s obrázkem. Přes tlačítko procházení můžete soubor snadno najít. Druhou možností je použití klíče pro slučování dokumentů, který poskytne název souboru až během tisku.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-data">
+       <title>Karta Data (objekty čárových kódů)</title>
+
+       <para>Tato karta obsahuje textové pole na zadání dat pro čárový kód. Druhou možností je použití klíče pro slučování dokumentů, přes který jsou data poskytována až během tisku.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-style">
+       <title>Karta Styl (textové objekty)</title>
+
+       <para>Tato karta obsahuje ovládací prvky na výběr vlastností textu, včetně typu písma, velikosti písma, tloušťky písma, barvy a zarovnání textu.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-barcode">
+       <title>Karta Styl (objekty čárových kódů)</title>
+
+       <para>Tato karta obsahuje ovládací prvky na výběr vlastností čárového kódu, včetně stylu čárového kódu, barvy, zda tisknout text a zda vkládat číslo s kontrolním součtem.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-line">
+       <title>Karta Čára</title>
+
+       <para>Tato karta obsahuje ovládací prvky na výběr vlastností čar a obrysů. Tyto vlastnosti zahrnují tloušťku čáry a její barvu.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-fill">
+       <title>Karta Výplň</title>
+
+       <para>Tato karta obsahuje ovládací prvky na výběr vlastností výplně objektů obdélníků a elips. V současnosti obsahuje pouze barvu výplně.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size">
+       <title>Karta Velikost (všechny objekty vyjma čar)</title>
+
+       <para>Tato karta obsahuje ovládací prvky na výběr šířky a výšky objektu. K dispozici je zaškrtávací pole, kterým můžete zamknout poměr stran během úprav šířky a výšky. U obrázků je k dispozici rovněž tlačítko, kterým můžete nastavit reálné rozměry obrázku (předpokládá se 72 DPI).</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size-line">
+       <title>Karta Velikost (objekty čar)</title>
+
+       <para>Tato karta obsahuje ovládací prvky pro výběr délky a úhlu čáry.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-position">
+       <title>Karta Pozice</title>
+
+       <para>Tato karta obsahuje ovládací prvky pro změnu pozice objektu.</para>
+
+      </sect3>
+
+
+      <sect3 id="object-editor-shadow">
+       <title>Karta Stín (všechny objekty vyjma obrázků a čárových kódů)</title>
+
+       <para>Tato karta obsahuje ovládací prvky pro přidání stínu k objektu.</para>
+
+      </sect3>
+
+
+    </sect2>
+
+<!-- ============= Other Manipulations of Objects ========= -->
+    <sect2 id="glabels-object-manipulation"> 
+      <title>Ostatní manipulace s objekty</title>
+
+      <para>S objekty lze manipulovat ještě následujícími způsoby:</para>
+
+      <sect3 id="other-moving-resizing">
+       <title>Přesouvání a změna velikosti objektů</title>
+
+       <para>Objekty lze přesunout kliknutím na vybraný objekt a tažením objektu na nové místo. Pokud je objekt součástí skupiny označených objektů, budou se s objektem přesouvat všechny vybrané objekty, ale jejich vzájemná pozice zůstane zachovaná. Pokud není žádný objekt vybraný, kliknutí na objekt provede nový výběr tohoto objektu. Viz <xref linkend="glabels-select-objects"/>.</para>
+
+       <para>U vybraných objektů můžete měnit jejich velikost kliknutím na úchop pro změnu velikosti a jeho tažením tak, abyste dosáhli správné velikost.</para>
+
+      </sect3>
+
+      <sect3 id="other-stacking-order">
+       <title>Změna pořadí objektů</title>
+
+       <para>Pořadí objektů představuje jejich relativní polohu v ose z. Prakticky to určuje při překrývání objektů, který z nich bude nahoře a který vespod. Standardně se nové objekty vytvářejí nad staršími objekty. Když chcete toto pořadí změnit, jeden nebo více objektů vyberte a zvolte <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Pořadí</guimenuitem><guimenuitem>Přenést dopředu</guimenuitem></menuchoice> pro vynesení výběru na nejvyšší pozici nebo <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Pořadí</guimenuitem><guimenuitem>Přenést dozadu</guimenuitem></menuchoice> pro zatlačení výběru úplně dospod. Tyto položky nabídky jsou přístupné i po kliknutí pravým tlačítkem v zobrazovací oblasti za předpokladu, že jsou vybrané nějaké objekty.</para>
+
+      </sect3>
+
+      <sect3 id="other-rotating-flipping">
+       <title>Otáčení a překlápění objektů</title>
+
+       <para>Objekty lze otáčet po 90stupňových krocích v obou směrech nebo je překlápět svisle nebo vodorovně a to volbou příslušné položky v podnabídce <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Otočit/Překlopit</guimenuitem></menuchoice>. Tyto položky nabídky jsou přístupné i po kliknutí pravým tlačítkem v zobrazovací oblasti za předpokladu, že jsou vybrané nějaké objekty.</para>
+
+      </sect3>
+
+      <sect3 id="other-alignment">
+       <title>Zarovnávání objektů</title>
+
+       <para>Objekty lze zarovnávat vodorovně nebo svisle, relativně vůči sobě nebo relativně ke středové čáře etikety, volbou příslušné položky z podnabídky <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Zarovnat vodorovně</guimenuitem></menuchoice> nebo <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Zarovnat svisle</guimenuitem></menuchoice>. Tyto položky nabídky jsou přístupné i po kliknutí pravým tlačítkem v zobrazovací oblasti za předpokladu, že jsou vybrané nějaké objekty.</para>
+
+      </sect3>
+
+      <sect3 id="other-property-bar">
+       <title>Používání panelu vlastností</title>
+
+       <para>Panel vlastností lze použít ke změně některých běžných vlastností objektů jako celku. Tyto vlastnosti zahrnují typ písma, velikost písma, tloušťku písma, zarovnání textu, barvu textu, barvu výplně, barvu čáry nebo obrysu a tloušťku čáry. Přes panel vlastností může také zadat výchozí hodnoty těchto vlastností pro nově vytvářené objekty.</para>
+
+      </sect3>
+
+
+
+    </sect2>
+
+<!-- ============= Document Merge Features ========= -->
+    <sect2 id="glabels-merge"> 
+      <title>Provádění slučování dokumentů</title>
+
+      <para>Slučování dokumentů (někdy také nazývané „hromadná korespondence“) je mocná funkce, která umožňuje vytisknout na etikety nebo vizitky různé texty podle jednotlivých záznamů v externím zdroji dat.</para>
+
+      <para>Prvním krokem při slučování dokumentů je příprava zdrojového dokumentu, který má obsahovat slučovaná data. Tato data mohou být poštovní adresy nebo jakákoliv jiná data, pro která si přejete vytvořit jedinečné etikety nebo vizitky. V současnosti jsou zatím jako zdroje podporované pouze textové soubory a datový server Evolution, jiné jsou v plánu. Současně podporovaný formát textových souborů je velmi jednoduchý: co řádek, to záznam; pole jsou oddělená čárkami (CSV), tabulátory nebo dvojtečkami; řádky jsou zakončené pomocí znaku „\n“. Takovýto soubor jde vytvořit v libovolném textovém editoru nebo jiným programem nebo skriptem. Obvyklým způsobem vytváření souborů CSV je jejich export z tabulkového kalkulátoru.</para>
+
+      <para>Etiketa musí být nastavená tak, aby „ukazovala na“ takovýto datový soubor. Abyste nastavili vlastnosti slučování dokumentu, zvolte položku nabídky <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Vlastnosti slučování</guimenuitem></menuchoice>, zobrazí se dialogové okno <guilabel>vlastnosti slučování</guilabel>. Toto dialogové okno slouží k výběru přesného formátu datového souboru a názvu (umístění) souboru se slučovanými daty.</para>
+
+      <para>Nakonec, až je etiketa nastavená pro datový soubor, je zapotřebí vložit klíče polí do textových objektů a použít klíče polí jako zdroje nebo data pro objekty čárových kódů a jako názvy souborů pro obrázkové objekty. Více informací o použití slučovaných dat pro tyto typy objektů viz <xref linkend="glabels-object-properties"/>.</para>
+
+      <para>Nyní, když máte svoji etiketu nastavenou, bude aplikace <application>gLabels</application> tisknout jednotlivé etikety odlišné pro každý záznam ve vašem zdrojovém dokumentu - do klíčů polí se ve všech textech budou dosazovat pole z jednotlivých záznamů.</para>
+
+      <para>Podrobný průvodce funkcí slučování dokumentů viz <xref linkend="glabels-merge-tutorial"/>.</para>
+
+
+    </sect2>
+
+
+  </sect1>
+
+
+
+
+  <!-- ============= Customization ============================= -->
+  <!-- Use this section to describe how to customize the application. -->
+  <sect1 id="glabels-prefs"> 
+    <title>Nastavení</title> 
+    <para>Když chcete v aplikaci <application>gLabels</application> změnit nastavení, zvolte <menuchoice><guimenu>Upravit</guimenu><guimenuitem>Předvolby</guimenuitem></menuchoice>. Dialogové okno <guilabel>Předvolby gLabels</guilabel> obsahuje následující karty:</para> 
+    <itemizedlist> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-locale"/></para> 
+      </listitem> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-object-defaults"/></para> 
+      </listitem> 
+    </itemizedlist>
+<!-- =============== Customization Subsection ================ -->
+<!-- Use a new section to describe different tabbed sections on the Settings or Preferences
+            dialog. -->
+    <sect2 id="glabels-prefs-locale"> 
+      <title>Národní prostředí</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Jednotky</guilabel> </term> 
+         <listitem> 
+           <para>Tento skupinový přepínač použijte k určení svých upřednostňovaných jednotek. Vyberte jednu z následujících možností:</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Body</guilabel> </para> 
+               <para>Použít body (1 bod = 1/72 palce = 0,352778 mm).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Palce</guilabel> </para> 
+               <para>Použít palce (1 palec = 25,4 mm).</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Milimetry</guilabel> </para> 
+               <para>Použít milimetry.</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Výchozí : <guilabel>Palce</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Výchozí velikost stránky</guilabel> </term> 
+         <listitem> 
+           <para>Tento skupinový přepínač použijte k určení své upřednostňované velikosti stránky. Urychlí vám to hledání typu média při vytváření nové etikety nebo vizitky.</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>US Letter</guilabel> </para> 
+               <para>Většina vašich médií má velikost stránky US Letter (8,5 × 11 palců).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>ISO A4</guilabel> </para> 
+               <para>Většina vašich médií má velikost stránky ISO A4 (210 × 297 mm).</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Výchozí: <guilabel>US Letter</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2>
+    <!-- ============= Customization Subsection ===================== -->
+    <!-- Another tabbed section on the Preferences dialog. -->
+    <sect2 id="glabels-prefs-object-defaults"> 
+      <title>Výchozí hodnoty objektu</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Text</guilabel> </term> 
+         <listitem> 
+           <para>Použijte tyto ovládací prvky k nastavení výchozích vlastností nových textových objektů. Tyto vlastnosti jsou:</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Písmo</guilabel> </para> 
+               <para>Tyto ovládací prvky slouží k nastavení rodiny písma a velikosti písma a zda by mělo být písmo tučné nebo kurzívou.</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Barva</guilabel> </para> 
+               <para>Tímto ovládacím prvkem se vybírá výchozí barva textu.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Zarovnání</guilabel> </para> 
+               <para>Tyto ovládací prvky slouží k výběru výchozího zarovnání textu (vlevo, na střed nebo vpravo).</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Čára</guilabel> </term> 
+         <listitem> 
+           <para>Použijte tyto ovládací prvky k nastavení výchozích vlastností čar a obrysů nových objektů. Tyto vlastnosti jsou:</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Šířka</guilabel> </para> 
+               <para>Tímto ovládacím prvkem se vybírá výchozí šířka čáry.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Barva</guilabel> </para> 
+               <para>Tímto ovládacím prvkem se vybírá výchozí barva čáry.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Výplň</guilabel> </term> 
+         <listitem> 
+           <para>Použijte tyto ovládací prvky k nastavení výchozích vlastností výplně nových objektů. Tyto vlastnosti jsou:</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Barva</guilabel> </para> 
+               <para>Tento ovládací prvek slouží k výběru výchozí barvy výplně.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2> 
+  </sect1>
+
+
+
+
+<!-- ============= Document Merge Tutorial ================================== -->
+  <sect1 id="glabels-merge-tutorial"> 
+    <title>Průvodce slučováním dokumentů</title>
+
+    <para>Slučování dokumentů (někdy také nazývané „hromadná korespondence“) je mocná funkce, díky které můžete tisknout odlišné etikety nebo vizitky pro každý záznam v externím zdroji dat. Je však také ze všech funkcí aplikace <application>gLabels</application> nejnáročnější na pochopení. Následující příklady vás provedou dvojicí obvyklých úloh, které používají funkci slučování dokumentů.</para>
+
+    <sect2 id="merge-ex1">
+      <title>Příklad 1: Jmenovky s použitím souboru CSV</title>
+  
+      <para>V tomto příkladu pořádáme seznamovací párty pro nové členy osádky naší lodi. Máme seznam nováčků v osádce, který jsme vytvořili v aplikaci <application>gnumeric</application> a následně jej vyexportovali do souboru CSV. Mohli bychom jej vytvořit i v textovém editoru, ale žijeme přece v 21. století.</para>
+
+      <programlisting>
+jmeno,zarazeni,cislo
+"Jiří Kroupa",vedení,"SC937-0176 CEC"
+"prof. Hrbolek",vědec,S179-276SP
+"MUDr. Kroupová",lékař,unknown
+"Viktor Hujer",technik,SE-197-54T
+      </programlisting>
+
+      <para>V aplikaci <application>gLabels</application> máme vytvořený dokument vycházející ze šablony Avery 5395 „Etikety na jmenovky“. Nyní použijeme položku nabídky <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Vlastnosti slučování</guimenuitem></menuchoice> a zobrazí se nám dialogové okno <guilabel>vlastnosti slučování</guilabel>. Toto dialogové okno použijeme k výběru typu zdroje (v našem případě CSV) a vlastního zdroje (souboru), jak můžete vidět níže.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-1-fig"> 
+       <title>Dialogové okno vlastností slučování</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Před použitím zdroje slučování zrušíme zaškrtnutí prvního záznamu, protože ten obsahuje pouze záhlaví sloupců z naší původní tabulky v <application>gnumeric</application> a akorát bychom tím zničili první etiketu. Stejným způsobem můžeme zrušit zaškrtnutí kteréhokoliv záznamu, který nechceme vytisknout.</para>
+
+      <para>U každého záznamu si také můžeme prohlédnou všechny údaje po jeho rozbalení kliknutím na malý trojúhelníček. Až jsme s výběrem v dialogovém okně spokojení, klikneme na <guibutton>OK</guibutton> a změny se použijí.</para>
+
+      <para>Nyní můžeme začít s přidáváním objektů do svého dokumentu <application>gLabels</application>, jak je zobrazeno níže.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-2-fig"> 
+       <title>Přidávání objektů</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>V tomto příkladu máme přidané tři textové objekty a čárový kód. První textový objekt obsahuje pouze prostý text („Ahoj, jmenuji se“). Druhý textový objekt obsahuje jedno slučované pole („${1}“), které odpovídá prvnímu poli v záznamu (první sloupec v řádku) a které obsahuje celé jméno nového člena osádky. Třetí textové pole obsahuje jak text („Zařazení: “), tak za ním následuje jedno slučované pole („${2}“), které odpovídá druhému poli se zařazením člena posádky. Objekt s čárovým kódem je nastavený na použití pole (klíče) „3“, které obsahuje identifikační číslo člena posádky.</para>
+
+      <para>Nyní můžeme své jmenovky vytisknout pomocí položky nabídky <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Tisk</guimenuitem></menuchoice>. Zobrazí se dialogové okno jako na následujícím obrázku.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-3-fig"> 
+       <title>Tisk jmenovek</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Nyní zkontrolujeme, zda vypadají etikety jak mají. Vybereme možnost <guilabel>Tisk obrysů</guilabel> a klikneme na <guibutton>Náhled tisku</guibutton>. Zobrazí se dialogové okno s náhledem tisku, stejně jako na následujícím obrázku.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-4-fig"> 
+       <title>Náhled jmenovek</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Vše vypadá v pořádku, takže můžeme do tiskárny vložit správný list s etiketami, vytisknout jmenovky a vzhůru na palubu nalodit naše hosty.</para>
+
+    </sect2>
+
+    <sect2 id="merge-ex2">
+      <title>Příklad 2: Adresní štítky s použitím souboru CSV</title>
+  
+      <para>V tomto příkladu se chystáme uspořádat večírek a potřebujeme vytisknout adresní štítky na své pozvánky. Máme seznam svých nejbližších přátel, který jsem vytvořili v aplikaci <application>gnumeric</application> a vyexportovali jej jako soubor CSV. Povšimněte si, že ne všichni mají přezdívku nebo dvouřádkovou adresu.</para>
+
+      <programlisting>
+PRIJMENI,JMENO,PREZDIVKA,ADR1,ADR2,MESTO,PSC
+,,,,,,,
+Pacovský,Tomáš,,"U dvou akordů","Křižíkova 506",Praha,"123 00"
+Pacovský,František,Ozzák,"Křižíkova 62",,"Praha - Vinohrady","110 00"
+Divićová,Marcela,,"Náměstí míru 1",,Praha,"150 00"
+Bůček,Alexandr,Lexa,"U Jezevce","Nitranská 7",Praha,"160 13"
+Bůčková,Alexandra,,"Korunní 18",,Praha,"100 24"
+      </programlisting>
+
+      <para>V aplikaci <application>gLabels</application> vytvoříme nový dokument ze šablony Avery L7162 „Poštovní etikety“. Následně použijeme položku nabídky <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Vlastnosti slučování</guimenuitem></menuchoice> a zobrazí se nám dialogové okno <guilabel>vlastností slučování</guilabel>. V tomto dialogovém okně vybereme typ zdroje (v našem případě CSV) a konkrétní zdroj (název souboru) pro slučování, jak můžete vidět na následujícím obrázku.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-1-fig"> 
+       <title>Dialogové okno vlastností slučování</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Před tím, než zdroj pro slučován použijeme, zrušíme zaškrtnutí prvního záznamu, protože ten obsahuje pouze záhlaví sloupců z původní tabulky v <application>gnumeric</application> a akorát bychom tím znehodnotili první etiketu. Zrušíme zaškrtnutí i druhého záznamu, protože je prázdný (což je pozůstatek z tabulkového kalkulátoru). A stejným způsobem můžeme vyřadit kterýkoliv jiný záznam, který nechceme na etikety vytisknout.</para>
+
+      <para>U každého záznamu si také můžeme prohlédnou všechny údaje po jeho rozbalení kliknutím na malý trojúhelníček. Až jsme s výběrem v dialogovém okně spokojení, klikneme na <guibutton>OK</guibutton> a změny se použijí.</para>
+
+      <para>Nyní můžeme začít s přidáváním objektů do svého dokumentu <application>gLabels</application>, jak je zobrazeno níže.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-2-fig"> 
+       <title>Přidávání objektů</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>V tomto příkladu máme jen jeden textový objekt. Tento textový objekt obsahuje všechna slučovaná pole uspořádaná v několika řádcích představujících poštovní adresu. Všimněte si, že pole ${4} a ${5} (ta odpovídají ADR1 a ADR2) jsou umístěná na samostatných řádcích bez jakéhokoliv dalšího textu. Pokud aplikace <application>gLabels</application> narazí na pole, které je jediným textem na řádku a toto pole je prázdné, řádek nebude ve výsledku zabírat žádné místo.</para>
+
+      <para>Nyní se můžeme pustit do tisku adresních etiket pomocí volby <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Tisk</guimenuitem></menuchoice> v nabídce. Zobrazí se dialogové okno tisku jako na následujícím obrázku.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-3-fig"> 
+       <title>Tisk etiket s adresami</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Nyní zkontrolujeme, zda vypadají etikety jak mají. Vybereme možnost <guilabel>Tisk obrysů</guilabel> a klikneme na <guibutton>Náhled tisku</guibutton>. Zobrazí se dialogové okno s náhledem tisku, stejně jako na následujícím obrázku.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-4-fig"> 
+       <title>Náhled etiket s adresami</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Vše vypadá dobře a tak můžeme vložit do tiskárny správný list s etiketami, vytisknout adresní štítky a začít rozesílat pozvánky na večírek.</para>
+
+    </sect2>
+
+<sect2 id="merge-ex3">
+      <title>Příklad 3: Adresní štítky s použitím adresáře aplikace <application>Evolution</application></title>
+  
+      <para>Náš předchozí večírek měl velký úspěch a my nyní chceme vytisknout adresní štítky pro pozvánky na další takový. Abychom si to zjednodušili, můžeme použít adresář aplikace <application>Evolution</application>, protože adresy všech našich přátel máme uložené v něm.</para>
+
+      <note>
+       <para>V závislosti na tom, jak byl připravený váš balíček <application>gLabels</application>, nemusí být tato funkčnost dostupná. Podpora pro adresář <application>Evolution</application> je dostupná jen v případě, že byl při překladu aplikace <application>gLabels</application> k dispozici <application>evolution-data-server</application> a k němu vývojářské soubory. Mějte toto na paměti, pokud si aplikaci překládáte sami ze zdrojových kódů.</para>
+       
+       <para>Pokud balíček <application>gLabels</application> ve vaší distribuci tuto podporu postrádá, můžete zkusit kontaktovat správce balíčku nebo to zkusit nahlásit jako chybu.</para>
+      </note>
+
+      <para>V aplikaci <application>glabels</application> vytvoříme nový dokument ze šablony Avery L7162 „Poštovní etikety“. Potom v nabídce zvolíme <menuchoice><guimenu>Objekty</guimenu><guimenuitem>Vlastnosti slučování</guimenuitem></menuchoice>, aby se nám zobrazilo dialogové okno <guilabel>Vlastnosti slučování</guilabel>. V něm vybereme typ zdroje (v našem případě <guilabel>Data z výchozího adresáře Evolution</guilabel>), jak je ukázáno na obrázku.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-1-fig"> 
+       <title>Dialogové okno vlastností slučování</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex3-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Když máme jako zdroj slučování vybráno <guilabel>Data z výchozího adresáře Evolution</guilabel>, obdržíme úplný seznam jeho obsahu. Na začátku jsou zaškrtnuté všechny položky. Předpokládá se, že budeme pořádat opravdu velký večírek a tak bychom mohli ponechat výběr jak je (ale uvědomte si kolik to bude stát). Nyní některé záznamy kliknutím na příslušné zaškrtávací políčko vyřadíme nebo naopak vybereme, případně můžeme použít tlačítka <guibutton>Vybrat vše</guibutton> a <guibutton>Zrušit výběr</guibutton> pro aktivování nebo deaktivování všech záznamů v adresáři.</para>
+      <para>U každého záznamu si také můžeme prohlédnou všechny údaje po jeho rozbalení kliknutím na malý trojúhelníček. Až jsme s výběrem v dialogovém okně spokojení, klikneme na <guibutton>OK</guibutton> a změny se použijí.</para>
+
+      <para>Nyní můžeme začít s přidáváním objektů do svého dokumentu glabels, jak bylo ukázáno dříve.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-2-fig"> 
+       <title>Přidávání objektů</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex3-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>V tomto příkladu máme opět jen jeden textový objekt. Ten obsahuje všechna slučovaná pole uspořádaná v několika řádcích, představujících poštovní adresy.</para>
+
+      <para>Nyní můžeme své etikety s adresami vytisknout volbou položky nabídky <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Tisk</guimenuitem></menuchoice>. Zobrazí se dialogové okno tisku, jak jej můžete vidět níže.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-3-fig"> 
+       <title>Tisk etiket s adresami</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Nyní zkontrolujeme, zda vypadají etikety jak mají. Vybereme možnost <guilabel>Tisk obrysů</guilabel> a klikneme na <guibutton>Náhled tisku</guibutton>. Zobrazí se dialogové okno s náhledem tisku, stejně jako na následujícím obrázku.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-4-fig"> 
+       <title>Náhled etiket s adresami</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Vše vypadá dobře a tak můžeme vložit do tiskárny správný list s etiketami, vytisknout adresní štítky a začít rozesílat pozvánky na večírek.</para>
+
+    </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Creating templates ================================== -->
+  <sect1 id="glabels-manual-create-template"> 
+    <title>Ruční vytváření šablon</title> 
+
+    <para>Předdefinované šablony jsou definované soubory XML umístěnými v <filename>${prefix}/share/glabels/</filename>, kde <filename>${prefix}</filename> je obvykle <filename>/usr/local</filename> nebo <filename>/usr</filename>, v závislosti na volbě nastavení <filename>prefix</filename> při překladu programu. Aplikace <application>gLabels</application> použije všechny soubory s názvem v podobě <filename>*-templates.xml</filename> nebo <filename>*.template</filename>, které nalezne v <filename>${prefix}/share/glabels/</filename> a <filename>${HOME}/.glabels/</filename>. Další šablony si můžete přidat vytvořením dalších souborů <filename>*.template</filename> v jedné z těchto složek.</para>
+
+    <para>Formát těchto souborů je dán v DTD: <ulink url="http://glabels.sourceforge.net/doc/glabels-2.0.dtd.txt" type="http">glabels-2.2.dtd</ulink>. (Toto DTD popisuje i ostatní formáty XML používané v aplikaci <application>gLabels</application>.)</para>
+
+    <sect2 id="template-assumptions">
+      <title>Předpoklady/upozornění</title>
+      <itemizedlist>
+       <listitem>
+         <para>Stránka obsahuje etiketu nebo vizitku pouze jedné velikosti (pokud má stránka obsahovat více než jednu velikost položky, můžete ji rozdělit do více šablon a vytisknout na vícekrát)</para>
+       </listitem>
+       <listitem>
+         <para>Rozměry mohou být uváděny v jednotkách <emphasis>pt</emphasis>, <emphasis>in</emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis> nebo <emphasis>pc</emphasis>. Například: „<literal>1.0in</literal>“ nebo „<literal>2.54cm</literal>“. Pokud není žádná jednotka uvedená, budou předpokládány body <emphasis>pt</emphasis>  (1 <emphasis>pt</emphasis> = 1/72 <emphasis>in</emphasis> = 0,352778 <emphasis>mm</emphasis>).</para>
+       </listitem>
+      </itemizedlist>
+    </sect2>
+
+    <sect2 id="template-file">
+      <title>Soubory šablon</title>
+
+      <programlisting>
+&lt;?xml version="1.0"?&gt;
+&lt;Glabels-templates&gt;
+
+   <replaceable>…šablony…</replaceable>
+
+&lt;/Glabels-templates&gt;
+      </programlisting>
+    </sect2>
+
+
+    <sect2 id="template-example">
+      <title>Příklad šablony</title>
+      <programlisting>
+  &lt;Template brand="Avery" part="8160" size="US-Letter" _description="Mailing Labels"&gt;
+    &lt;Label-rectangle id="0" width="189pt" height="72pt" round="5pt"&gt;
+      &lt;Markup-margin size="5pt"/&gt;
+      &lt;Layout nx="3" ny="10" x0="11.25pt" y0="36pt" dx="200pt" dy="72pt"/&gt;
+    &lt;/Label-rectangle&gt;
+    &lt;Alias brand="Avery" part="5160"/&gt;
+    &lt;Alias brand="Avery" part="6233"/&gt;
+  &lt;/Template&gt;
+      </programlisting>
+    </sect2>
+
+    <sect2 id="template-template-node">
+      <title>Uzel Template</title>
+
+      <para>Uzel <emphasis>Template</emphasis> popisuje jeden pevně daný výrobek. Musí obsahovat jednu instanci libovolného uzlu Label (<emphasis>Label-rectangle</emphasis>, <emphasis>Label-round</emphasis> nebo <emphasis>Label-cd</emphasis>). Tento uzel může být následován žádným nebo více uzly <emphasis>Alias</emphasis>.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>Značka nebo výrobce pevně daného výrobku. Např. "S Label"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>Produktové číslo nebo název pevně daného výrobku. Např. "8160"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>size</para></entry>
+             <entry>
+                <para>Velikost stránky. Např. "A4", "US-Letter"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>description</para></entry>
+             <entry>
+                <para>Popis pevně daného produktu. Např. "Mailing Labels."</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>_description</para></entry>
+             <entry>
+                <para>Popis pevně daného produktu s možností překladu. Např. "Mailing Labels." (Použitelné pouze pro předdefinované šablony)</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry>
+                <para>Šířka stránky. Platné jen v případě, že size="Other"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry>
+                <para>Výška stránky. Platné jen v případě, že size="Other"</para>
+               </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-rectangle-node">
+      <title>Uzel Label-rectangle</title>
+
+      <para>Uzel <emphasis>Label-rectangle</emphasis> popisuje rozměry jedné etikety nebo vizitky, která má obdélníkový tvar (může mít zaoblené rohy).</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Rezervované pro pozdější použití. Vždy by mělo být nastavené  na 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry><para>Šířka etikety/vizitky</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry><para>Výška etikety/vizitky</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>round</para></entry>
+             <entry>
+                <para>Poloměr rohů. Pro položky s ostrými rohy (např. vizitky) by mělo být nastaveno na 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x_waste</para></entry>
+             <entry>
+                <para>Velikost dovoleného vodorovného odsazení (umožňuje přetisk). To je užitečné kvůli zamezení problémům se zarovnáním v situaci, kdy se nepoužívá bílé pozadí, ale např. obrázkové.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y_waste</para></entry>
+             <entry>
+                <para>Velikost dovoleného svislého odsazení (umožňuje přetisk). To je užitečné kvůli zamezení problémům se zarovnáním v situaci, kdy se nepoužívá bílé pozadí, ale např. obrázkové.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-fig"> 
+       <title>Parametry uzlu Label-rectangle</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-label.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-label-round-node">
+      <title>Uzel Label-round</title>
+
+      <para>Uzel <emphasis>Label-round</emphasis> popisuje rozměry jedné zaoblené etikety (ne CD).</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Rezervované pro pozdější použití. Vždy by mělo být nastavené  na 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Poloměr (½ průměru) etikety</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>waste</para></entry>
+             <entry>
+                <para>Velikost dovoleného odsazení (umožňuje přetisk). To je užitečné kvůli zamezení problémům se zarovnáním v situaci, kdy se nepoužívá bílé pozadí, ale např. obrázkové.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-cd-node">
+      <title>Uzel Label-cd</title>
+
+      <para>Uzel <emphasis>Label-cd</emphasis> popisuje rozměry etiket na CD, DVD nebo vizitkové CD.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Rezervované pro pozdější použití. Vždy by mělo být nastavené  na 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Vnější poloměr etikety</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>hole</para></entry>
+             <entry><para>Poloměr středové díry</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry>
+                <para>Pokud je zadáno, bude etiketa oříznuta na uvedenou šířku. (Vhodné pro „vizitková CD“).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry>
+                <para>Pokud je zadáno, bude etiketa oříznuta na uvedenou výšku. (Vhodné pro „vizitková CD“).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>waste</para></entry>
+             <entry>
+                <para>Velikost dovoleného odsazení (umožňuje přetisk). To je užitečné kvůli zamezení problémům se zarovnáním v situaci, kdy se nepoužívá bílé pozadí, ale např. obrázkové.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-cd-fig"> 
+       <title>Parametry etiket na CD</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-cd.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-markup-margin-node">
+      <title>Uzel Markup-margin</title>
+
+      <para>Uzel <emphasis>Markup-margin</emphasis> popisuje okraj podél všech hran etikety.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>size</para></entry>
+             <entry>
+                <para>Velikost okraje. Např. vzdálenost hranice okraje od hrany etikety/vizitky.</para>
+              </entry>
+            </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-line-node">
+      <title>Uzel Markup-line</title>
+
+      <para>Uzel <emphasis>Markup-line</emphasis> popisuje značku v podobě čáry.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>x-ová souřadnice počátku úsečky</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>y-ová souřadnice počátku úsečky</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x2</para></entry>
+             <entry>
+                <para>x-ová souřadnice konce úsečky</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y2</para></entry>
+             <entry>
+                <para>y-ová souřadnice konce úsečky</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-circle-node">
+      <title>Uzel Markup-circle</title>
+
+      <para>Uzel <emphasis>Markup-circle</emphasis> popisuje značku v podobě kruhu.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>x-ová souřadnice středu kruhu</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>y-ová souřadnice středu kruhu</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Poloměr kruhu.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-rect-node">
+      <title>Uzel Markup-rect</title>
+
+      <para>Uzel <emphasis>Markup-rect</emphasis> popisuje značku v podobě obdélníku.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>x-ová souřadnice levého horního rohu obdélníku.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>y-ová souřadnice levého horního rohu obdélníku.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>w</para></entry>
+             <entry>
+                <para>Šířka obdélníku.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>h</para></entry>
+             <entry>
+                <para>Výška obdélníku.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>r</para></entry>
+             <entry><para>Poloměr zakulacených rohů obdélníku.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-layout-node">
+      <title>Uzel Layout</title>
+
+      <para>Uzel typu Label může obsahovat více potomků <emphasis>Layout</emphasis>. V případě, že jsou etikety rozmístěné do jednoduché pravidelné mřížky, postačuje jeden uzel Layout. Pokud ale jsou etikety rozmístěné ve více mřížkách, např. mají podobu cihlové zdi, musí se použít více značek <emphasis>layout</emphasis>. Poznámka: jedna etiketa může být vždy považována za mřížku s jednou buňkou.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>nx</para></entry>
+             <entry>
+                <para>Počet etiket/vizitek v mřížce (vodorovně)</para>
+              </entry>
+            </row>
+           <row valign="top">
+             <entry><para>ny</para></entry>
+             <entry>
+                <para>Počet etiket/vizitek v mřížce (svisle)</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>Vzdálenost od levé hrany stránky k levé hraně levého sloupce etiket/vizitek v rozvržení.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>Vzdálenost od horní hrany stránky k horní hraně horní řady etiket/vizitek v rozvržení.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>dx</para></entry>
+             <entry><para>Vodorovná rozteč mřížky.</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>dy</para></entry>
+             <entry><para>Svislá rozteč mřížky.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-layout-fig"> 
+       <title>Parametry uzlu Layout</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-layout.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-alias-node">
+      <title>Uzel Alias</title>
+
+      <para>Uzel <emphasis>Alias</emphasis> uvádí názvy výrobků se stejnými rozměry a rozvržením, jako má rodičovská šablona.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Vlastnost</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Popis</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>Značka nebo výrobce odpovídajícího výrobku.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>Produktové číslo nebo název odpovídajícího výrobku.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Bugs ================================== -->
+<!-- This section is optional and is commented out by default. 
+     You can use it to describe known bugs and limitations of the 
+         program if there are any - please be frank and list all
+     problems you know of. 
+  
+  <sect1 id="mayapp-bugs">
+  <title>Known Bugs and Limitations</title>
+  <para> </para>
+ </sect1>
+-->
+
+
+
+
+<!-- ============= About ================================== -->
+<!-- This section contains info about the program (not docs), such as
+      author's name(s), web page, license, feedback address. This
+      section is optional: primary place for this info is "About.." box of
+      the program. However, if you do wish to include this info in the
+      manual, this is the place to put it. Alternatively, you can put this information in the title page.-->
+  <sect1 id="glabels-about"> 
+    <title>O aplikaci <application>gLabels</application></title> 
+    <para>Aplikaci <application>gLabels</application> napsal Jim Evins (<email>evins@snaught.com</email>).  Pokud chcete o aplikaci <application>gLabels</application> najít více informací, navštivte prosím <ulink url="http://glabels.sourceforge.net" type="http">webovou stránku gLabels</ulink>.</para>
+    <para>Pokud chcete oznámit chybu nebo navrhnout vylepšení vztahující se k této aplikaci nebo této příručce, postupujte dle instrukcí na <ulink url="http://glabels.sourceforge.net/contact/" type="http">kontaktní stránce <application>gLabels</application></ulink>.</para>
+
+    <para>Tento program je šířen podle ustanovení GNU General Public License, vydávané Free Software Foundation; a to buď verze 2 této licence anebo (podle vlastního uvážení) kterékoliv pozdější verze. Kopii této licence naleznete pod tímto <ulink url="ghelp:gpl" type="help">odkazem</ulink> nebo v souboru COPYING přiloženém ke zdrojovým kódům tohoto programu. </para>
+
+  </sect1> 
+
+
+
+
+
+</article>
diff --git a/help/de/de.po b/help/de/de.po
new file mode 100644 (file)
index 0000000..12f0f96
--- /dev/null
@@ -0,0 +1,2832 @@
+# German translation of the gLabels2 documentation.
+# Mario Blättermann <mariobl@gnome.org>, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels2\n"
+"POT-Creation-Date: 2010-01-09 14:14+0000\n"
+"PO-Revision-Date: 2010-01-16 19:18+0100\n"
+"Last-Translator: Mario Blättermann <mariobl@gnome.org>\n"
+"Language-Team: German <gnome-de@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: German\n"
+"X-Poedit-Country: GERMANY\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:195(None)
+msgid ""
+"@@image: 'figures/main-window-empty.png'; md5=226b58f05f4171531066358a29cda1a7"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:447(None)
+msgid ""
+"@@image: 'figures/print-copies.png'; md5=ebb4d08810a67cc9cd7ec6ddd7b52fb0"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:479(None)
+msgid "@@image: 'figures/print-merge.png'; md5=ffe6027513a10f7ba940c350c1dc5717"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:790(None)
+msgid ""
+"@@image: 'figures/object-editor-sidebar.png'; "
+"md5=14eace177c1f5bfe36022acbbd6a9f0e"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1231(None)
+msgid "@@image: 'figures/merge-ex1-1.png'; md5=55a97963022047cdad6aa198b5ed698e"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1256(None)
+msgid "@@image: 'figures/merge-ex1-2.png'; md5=d03979f010e20e98532258edb20b1bc0"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1284(None)
+msgid "@@image: 'figures/merge-ex1-3.png'; md5=94e382ccdfbc2fe5d320010d2ef10c61"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1302(None)
+msgid "@@image: 'figures/merge-ex1-4.png'; md5=e72810bc3c191df6c8b2ad0cb1131021"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1348(None)
+msgid "@@image: 'figures/merge-ex2-1.png'; md5=4f062158be21bfadc4adfbdcf5d0206f"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1374(None)
+msgid "@@image: 'figures/merge-ex2-2.png'; md5=f69a7e0ae86f66b0d70d39a7757918fa"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1399(None) C/glabels.xml:1513(None)
+msgid "@@image: 'figures/merge-ex2-3.png'; md5=f5134b9e911ebdd17d4a5b36a5ba56d0"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1417(None) C/glabels.xml:1531(None)
+msgid "@@image: 'figures/merge-ex2-4.png'; md5=29a60e970cb026aecf75543203494b00"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1464(None)
+#| msgid ""
+#| "@@image: 'figures/merge-ex2-2.png'; md5=f69a7e0ae86f66b0d70d39a7757918fa"
+msgid "@@image: 'figures/merge-ex3-1.png'; md5=b0c387b5fcfd730b2ae75172895ff5b8"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1492(None)
+#| msgid ""
+#| "@@image: 'figures/merge-ex1-2.png'; md5=d03979f010e20e98532258edb20b1bc0"
+msgid "@@image: 'figures/merge-ex3-2.png'; md5=09f105e133657345e6e478a464e5b49f"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1767(None)
+msgid ""
+"@@image: 'figures/glabels-template-label.png'; "
+"md5=b7db4090373462b8d45feb22d4cd5646"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1888(None)
+msgid ""
+"@@image: 'figures/glabels-template-cd.png'; "
+"md5=145b49a5380de63ffa9451d2bbb81934"
+msgstr "translated"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:2150(None)
+msgid ""
+"@@image: 'figures/glabels-template-layout.png'; "
+"md5=a8adcff0584be1f0275bc2a169a580df"
+msgstr "translated"
+
+#: C/glabels.xml:31(title)
+msgid "<application>gLabels</application> Manual V2.2.6"
+msgstr "<application>gLabels</application>-Handbuch V2.2.6"
+
+#: C/glabels.xml:33(para)
+msgid ""
+"User manual for the <application>gLabels</application> label and business "
+"card creation program"
+msgstr ""
+"Benutzerhandbuch für <application>gLabels</application>, einem Programm zum "
+"Erstellen von Etiketten und Visitenkarten"
+
+#: C/glabels.xml:38(year)
+msgid "2003-2009"
+msgstr "2003-2009"
+
+#: C/glabels.xml:39(holder) C/glabels.xml:42(publishername)
+#: C/glabels.xml:93(para) C/glabels.xml:103(para)
+msgid "Jim Evins"
+msgstr "Jim Evins"
+
+#: C/glabels.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or in "
+"the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Das vorliegende Dokument kann gemäß den Bedingungen der GNU Free "
+"Documentation License (GFDL), Version 1.1 oder jeder späteren, von der Free "
+"Software Foundation veröffentlichten Version ohne unveränderbare Abschnitte "
+"sowie ohne Texte auf dem vorderen und hinteren Buchdeckel kopiert, verteilt "
+"und/oder modifiziert werden. Eine Kopie der GFDL finden Sie unter diesem "
+"<ulink type=\"help\" url=\"ghelp:fdl\">Link</ulink> oder in der mit diesem "
+"Handbuch gelieferten Datei COPYING-DOCS."
+
+#: C/glabels.xml:12(para)
+msgid ""
+"This manual is part of a collection of GNOME manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Dieses Handbuch ist Teil einer Sammlung von GNOME-Handbüchern, die unter der "
+"GFDL veröffentlicht werden. Wenn Sie dieses Handbuch getrennt von der "
+"Sammlung weiterverbreiten möchten, können Sie das tun, indem Sie eine Kopie "
+"der Lizenz zum Handbuch hinzufügen, wie es in Abschnitt 6 der Lizenz "
+"beschrieben ist."
+
+#: C/glabels.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any GNOME "
+"documentation, and the members of the GNOME Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Viele der Namen, die von Unternehmen verwendet werden, um ihre Produkte und "
+"Dienstleistungen von anderen zu unterscheiden, sind eingetragene "
+"Warenzeichen. An den Stellen, an denen diese Namen in einer GNOME-"
+"Dokumentation erscheinen, werden die Namen in Großbuchstaben oder mit einem "
+"großen Anfangsbuchstaben geschrieben, wenn das GNOME-Dokumentationsprojekt "
+"auf diese Warenzeichen hingewiesen wird."
+
+#: C/glabels.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK "
+"AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED "
+"VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION "
+"PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY "
+"CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR "
+"CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS "
+"LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS "
+"AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"DIESES DOKUMENT WIRD »WIE VORLIEGEND« GELIEFERT, OHNE GARANTIEN IRGENDEINER "
+"ART, SOWOHL AUSDRÜCKLICH GENANNTE ALS AUCH ANGEDEUTETE. DIES BEZIEHT SICH "
+"AUCH OHNE EINSCHRÄNKUNG AUF GARANTIEN, DASS DIESES DOKUMENT ODER VERÄNDERTE "
+"FASSUNGEN DIESES DOKUMENTS FREI VON HANDELSDEFEKTEN, FÜR EINEN BESTIMMTEN "
+"ZWECK GEEIGNET IST ODER DASS ES KEINE RECHTE DRITTER VERLETZT. DAS VOLLE "
+"RISIKO WAS QUALITÄT, GENAUIGKEIT UND LEISTUNG DES DOKUMENTS ODER VERÄNDERTE "
+"FASSUNGEN DES DOKUMENTS LIEGT BEI IHNEN. SOLLTE EIN DOKUMENT ODER EINE "
+"VERÄNDERTE FASSUNG DAVON FEHLER IRGENDEINER ART BEINHALTEN, TRAGEN SIE (NICHT "
+"DER URSPRUNGSAUTOR, DER AUTOR ODER EIN MITWIRKENDER) DIE KOSTEN FÜR "
+"NOTWENDIGE DIENSTLEISTUNGEN, REPARATUREN ODER FEHLERKORREKTUREN. DIESER "
+"HAFTUNGSAUSSCHLUSS IST EIN ESSENZIELLER TEIL DIESER LIZENZ. DIE VERWENDUNG "
+"EINES DOKUMENTS ODER EINER VERÄNDERTEN VERSION DES DOKUMENTS IST NICHT "
+"GESTATTET AUßER UNTER BEACHTUNG DIESES HAFTUNGSAUSSCHLUSSES UND"
+
+#: C/glabels.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR "
+"ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY "
+"CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK "
+"STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR "
+"LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"UNTER KEINEN UMSTÄNDEN UND AUF BASIS KEINER RECHTSGRUNDLAGE, EGAL OB DURCH "
+"UNERLAUBTEN HANDLUNGEN (EINSCHLIEßLICH FAHRLÄSSIGKEIT), VERTRAG ODER "
+"ANDERWEITIG KANN DER AUTOR, URSPRUNGSAUTOR, EIN MITWIRKENDER ODER EIN "
+"VERTRIEBSPARTNER DIESES DOKUMENTS ODER EINER VERÄNDERTEN FASSUNG DES "
+"DOKUMENTS ODER EIN ZULIEFERER EINER DIESER PARTEIEN, HAFTBAR GEMACHT WERDEN "
+"FÜR DIREKTE, INDIREKTE, SPEZIELLE, VERSEHENTLICHE ODER FOLGESCHÄDEN JEGLICHER "
+"ART, EINSCHLIEßLICH UND OHNE EINSCHRÄNKUNGEN SCHÄDEN DURCH VERLUST VON "
+"KULANZ, ARBEITSAUSFALL, COMPUTERVERSAGEN ODER COMPUTERFEHLFUNKTIONEN ODER "
+"ALLE ANDEREN SCHÄDEN ODER VERLUSTE, DIE SICH AUS ODER IN VERBINDUNG MIT DER "
+"VERWENDUNG DES DOKUMENTS UND VERÄNDERTER FASSUNGEN DES DOKUMENTS ERGEBEN, "
+"AUCH WENN DIE OBEN GENANNTEN PARTEIEN ÜBER DIE MÖGLICHKEIT SOLCHER SCHÄDEN "
+"INFORMIERT WAREN."
+
+#: C/glabels.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"DAS DOKUMENT UND VERÄNDERTE FASSUNGEN DES DOKUMENTS WERDEN UNTER DEN "
+"BEDINGUNGEN DER GNU FREE DOCUMENTATION LICENSE ZUR VERFÜGUNG GESTELLT MIT DEM "
+"WEITERGEHENDEN VERSTÄNDNIS, DASS: <placeholder-1/>"
+
+#: C/glabels.xml:52(firstname)
+msgid "Jim"
+msgstr "Jim"
+
+#: C/glabels.xml:53(surname)
+msgid "Evins"
+msgstr "Evins"
+
+#: C/glabels.xml:87(revnumber)
+msgid "gLabels Manual V2.2.6"
+msgstr "gLabels-Handbuch V2.2.6"
+
+#: C/glabels.xml:88(date)
+msgid "October 2009"
+msgstr "October 2009"
+
+#: C/glabels.xml:90(para)
+msgid "Mario Blättermann <email>mariobl@gnome.org</email>"
+msgstr "Mario Blättermann <email>mariobl@gnome.org</email>"
+
+#: C/glabels.xml:97(revnumber)
+msgid "gLabels Manual V2.2"
+msgstr "gLabels-Handbuch V2.2"
+
+#: C/glabels.xml:98(date)
+msgid "December 2007"
+msgstr "Dezember 2007"
+
+#: C/glabels.xml:100(para)
+msgid "Jim Evins <email>evins@snaught.com</email>"
+msgstr "Jim Evins <email>evins@snaught.com</email>"
+
+#: C/glabels.xml:108(releaseinfo)
+msgid ""
+"This manual describes version 2.2.6 of <application>gLabels</application>."
+msgstr ""
+"Dieses Handbuch beschreibt Version 2.2.6 von <application>gLabels</"
+"application>."
+
+#: C/glabels.xml:111(title)
+msgid "Feedback"
+msgstr "Rückmeldungen"
+
+#: C/glabels.xml:112(para)
+msgid ""
+"To report a bug or make a suggestion regarding the <application>gLabels</"
+"application> application or this manual, follow the directions in the <ulink "
+"url=\"http://glabels.sourceforge.net/contact/\" type=\"http"
+"\"><application>gLabels</application> Contact Page</ulink>."
+msgstr ""
+"Um einen Fehler zu melden oder einen Vorschlag zur Anwendung "
+"<application>gLabels</application> oder zu diesem Handbuch zu machen, folgen "
+"Sie den Anweisungen auf der <ulink url=\"http://glabels.sourceforge.net/"
+"contact/\" type=\"http\"><application>gLabels</application>-Kontaktseite</"
+"ulink>."
+
+#: C/glabels.xml:121(primary)
+msgid "gLabels"
+msgstr "gLabels"
+
+#: C/glabels.xml:124(primary)
+msgid "glabels"
+msgstr "glabels"
+
+#: C/glabels.xml:135(title)
+msgid "Introduction"
+msgstr "Einführung"
+
+#: C/glabels.xml:137(para)
+msgid ""
+"The <application>gLabels</application> application is a lightweight program "
+"for creating labels and business cards for the <systemitem>GNOME desktop</"
+"systemitem> environment. It is designed to work with various laser/ink-jet "
+"peel-off label and business card sheets that you'll find at most office "
+"supply stores."
+msgstr ""
+"Die Anwendung <application>gLabels</application> ist ein ressourcenschonendes "
+"Programm zum Erstellen von Etiketten und Visitenkarten für die "
+"<systemitem>GNOME</systemitem>-Arbeitsumgebung. Es wurde für die "
+"verschiedensten mit Laser- oder Tintenstrahldruckern bedruckbaren (auch "
+"selbstklebenden) Etiketten sowie Visitenkarten entworfen, so wie Sie sie in "
+"den meisten Schreibwarengeschäften finden."
+
+#: C/glabels.xml:158(title)
+msgid "Getting Started"
+msgstr "Erste Schritte"
+
+#: C/glabels.xml:161(title)
+msgid "To Start <application>gLabels</application>"
+msgstr "<application>gLabels</application> starten"
+
+#: C/glabels.xml:162(para)
+msgid "You can start <application>gLabels</application> in the following ways:"
+msgstr ""
+"Sie können <application>gLabels</application> auf folgende Arten starten:"
+
+#: C/glabels.xml:166(term)
+msgid "<guimenu>Applications</guimenu> menu"
+msgstr "Menü <guimenu>Anwendungen</guimenu>"
+
+#: C/glabels.xml:168(para)
+msgid ""
+"Choose <menuchoice><guisubmenu>Office</guisubmenu><guimenuitem>gLabels</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Wählen Sie <menuchoice><guisubmenu>Büroanwendungen</"
+"guisubmenu><guimenuitem>gLabels</guimenuitem></menuchoice>."
+
+#: C/glabels.xml:176(term)
+msgid "Command line"
+msgstr "Befehlszeile"
+
+#: C/glabels.xml:178(para)
+msgid "Type <command>glabels</command>, then press <keycap>Return</keycap>:"
+msgstr ""
+"Geben Sie <command>glabels</command> ein, und drücken Sie dann die "
+"<keycap>Eingabetaste</keycap>."
+
+#: C/glabels.xml:186(title)
+msgid "When You Start <application>gLabels</application>"
+msgstr "Beim Start von <application>gLabels</application>"
+
+#: C/glabels.xml:187(para)
+msgid ""
+"When you start <application>gLabels</application>, the following window is "
+"displayed."
+msgstr ""
+"Nach dem Start von <application>gLabels</application> erscheint folgendes "
+"Fenster:"
+
+#: C/glabels.xml:191(title)
+msgid "<application>gLabels</application> Start Up Window"
+msgstr "<application>gLabels</application>-Startfenster"
+
+#. for example, the items on the menubar and on the toolbar. This section is optional.
+#: C/glabels.xml:205(para)
+msgid ""
+"The <application>gLabels</application> window contains the following elements:"
+msgstr ""
+"Das <application>gLabels</application>-Fenster enthält folgende Elemente:"
+
+#: C/glabels.xml:209(term)
+msgid "Menubar."
+msgstr "Menüleiste."
+
+#: C/glabels.xml:211(para)
+msgid ""
+"The menus on the menubar contain all of the commands you need to create and "
+"edit labels and business cards in <application>gLabels</application>."
+msgstr ""
+"Die Menüs in der Menüleiste enthalten alle Befehle, die Sie zum Erstellen und "
+"Bearbeiten von Etiketten und Visitenkarten in <application>gLabels</"
+"application> benötigen."
+
+#: C/glabels.xml:217(term)
+msgid "Main toolbar."
+msgstr "Haupt-Werkzeugleiste."
+
+#: C/glabels.xml:219(para)
+msgid ""
+"The main toolbar contains a subset of common File and Edit commands that you "
+"can access from the menubar."
+msgstr ""
+"Die Haupt-Werkzeugleiste enthält eine Auswahl der Befehle, die Sie über die "
+"Menüleiste in den Menüs »Datei« und »Bearbeiten« erreichen."
+
+#: C/glabels.xml:224(term)
+msgid "Drawing toolbar."
+msgstr "Zeichenwerkzeugleiste."
+
+#: C/glabels.xml:226(para)
+msgid ""
+"The drawing toolbar contains a subset of commands for editing the current "
+"<application>gLabels</application> document."
+msgstr ""
+"Die Zeichenwerkzeugleiste enthält eine Auswahl von Befehlen zum Bearbeiten "
+"des aktuellen <application>gLabels</application>-Dokuments."
+
+#: C/glabels.xml:231(term)
+msgid "Display area."
+msgstr "Anzeigebereich."
+
+#: C/glabels.xml:233(para)
+msgid ""
+"The display area is the main drawing interface to <application>gLabels</"
+"application>."
+msgstr ""
+"Der Anzeigebereich ist die Zeichenfläche für <application>gLabels</"
+"application>."
+
+#: C/glabels.xml:238(term)
+msgid "Object sidebar."
+msgstr "Objekt-Seitenleiste."
+
+#: C/glabels.xml:240(para)
+msgid ""
+"The object sidebar provides an interface for viewing and editing all "
+"properties of an individual object."
+msgstr ""
+"Die Objekt-Seitenleiste stellt eine Schnittstelle zum Betrachten und "
+"Bearbeiten der Eigenschaften eines bestimmten Objekts zur Verfügung."
+
+#: C/glabels.xml:245(term)
+msgid "Properties toolbar."
+msgstr "Eingenschaften-Werkzeugleiste."
+
+#: C/glabels.xml:247(para)
+msgid ""
+"The properties toolbar contains a set of tools to manipulate the properties "
+"of selected objects and set default properties for new objects."
+msgstr ""
+"Die Eigenschaften-Werkzeugleiste enthält eine Reihe von Werkzeugen zum "
+"Manipulieren der Eigenschaften ausgewählter Objekte sowie zum Setzen der "
+"Standardeigenschaften für neue Objekte."
+
+#: C/glabels.xml:253(term)
+msgid "Statusbar."
+msgstr "Statusleiste."
+
+#: C/glabels.xml:255(para)
+msgid ""
+"The statusbar displays information about current <application>gLabels</"
+"application> activity and contextual information about the menu items."
+msgstr ""
+"In der Statusleiste werden Informationen über die aktuelle "
+"<application>gLabels</application>-Aktivität und Kontextinformationen über "
+"die Menüpunkte angezeigt."
+
+#: C/glabels.xml:271(title)
+msgid "Usage"
+msgstr "Benutzung"
+
+#: C/glabels.xml:275(title)
+msgid "To Create a New Label or Card"
+msgstr "Erstellen eines neuen Etiketts oder einer neuen Karte"
+
+#: C/glabels.xml:277(para)
+msgid ""
+"To create a new label or business card, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>New</guimenuitem></menuchoice> to display the "
+"<guilabel>New Label or Card</guilabel> dialog. Select the media type and "
+"orientation for the new document, then click <guibutton>OK</guibutton>. A new "
+"document is displayed in the display area of the <application>gLabels</"
+"application> window."
+msgstr ""
+"Um ein neues Etikett oder eine neue Visitenkarte anzulegen, wählen Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Neu</guimenuitem></"
+"menuchoice>, um den Dialog <guilabel>Neues Etikett oder neue Karte</guilabel> "
+"anzuzeigen. Wählen Sie den Medientyp und die Ausrichtung für das neue "
+"Dokument aus und klicken Sie anschließend auf <guibutton>OK</guibutton>. Ein "
+"neues Dokument erscheint im Anzeigebereich des <application>gLabels</"
+"application>-Fensters."
+
+#: C/glabels.xml:286(para)
+msgid ""
+"If your particular media type is missing from this dialog, see <xref linkend="
+"\"glabels-create-template\"/>"
+msgstr ""
+"Falls Ihr spezieller Medientyp in diesem Dialog nicht angezeigt wird, siehe "
+"<xref linkend=\"glabels-create-template\"/>."
+
+#: C/glabels.xml:293(title)
+msgid "To Open a File"
+msgstr "Öffnen einer Datei"
+
+#: C/glabels.xml:295(para)
+msgid ""
+"To open a file, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</"
+"guimenuitem></menuchoice> to display the <guilabel>Open File</guilabel> "
+"dialog. Select the file that you want to open, then click <guibutton>OK</"
+"guibutton>. The file is displayed in the display area of the "
+"<application>gLabels</application> window."
+msgstr ""
+"Um eine Datei zu öffnen, wählen Sie <menuchoice><guimenu>Datei</"
+"guimenu><guimenuitem>Öffnen</guimenuitem></menuchoice>, um den Dialog "
+"<guilabel>Datei öffnen</guilabel> anzuzeigen. Wählen Sie die gewünschte Datei "
+"aus und klicken Sie dann auf <guibutton>Öffnen</guibutton>. Die Datei wird im "
+"Anzeigebereich des <application>gLabels</application>-Fensters geöffnet."
+
+#: C/glabels.xml:302(para)
+msgid ""
+"You can also open multiple files in <application>gLabels</application>. The "
+"application creates a separate application window for each open file."
+msgstr ""
+"Sie können in <application>gLabels</application> auch mehrere Dateien öffnen. "
+"Die Anwendung erzeugt ein separates Fenster für jede geöffnete Datei."
+
+#: C/glabels.xml:306(para)
+msgid ""
+"The application records the paths and filenames of the most recent files that "
+"you have edited and displays the files as menu items on the "
+"<menuchoice><guimenu>File</guimenu><guisubmenu>Recent Files</guisubmenu></"
+"menuchoice> menu."
+msgstr ""
+"Die Anwendung speichert die Pfade und Dateinamen der von Ihnen zuletzt "
+"bearbeiteten Dateien. Diese Dateien werden als Einträge im Menü "
+"<menuchoice><guimenu>Datei</guimenu><guisubmenu>Zuletzt benutzt</guisubmenu></"
+"menuchoice> angezeigt."
+
+#: C/glabels.xml:316(title)
+msgid "To Open Multiple Files from a Command Line"
+msgstr "Öffnen mehrerer Dateien aus einer Befehlszeile"
+
+#: C/glabels.xml:318(para)
+msgid ""
+"You can run <application>gLabels</application> from a command line and open a "
+"single file or multiple files. To open multiple files from a command line, "
+"type the following command, then press <keycap>Return</keycap>:"
+msgstr ""
+"Sie können <application>gLabels</application> aus einer Befehlszeile starten "
+"und eine Datei oder mehrere Dateien öffnen. Um mehrere Dateien aus einer "
+"Befehlszeile zu öffnen, geben Sie den folgenden Befehl ein und drücken dann "
+"die <keycap>Eingabetaste</keycap>:"
+
+#: C/glabels.xml:324(replaceable)
+msgid "file1.glabels file2.glabels file3.glabels"
+msgstr "Datei1.glabels Datei2.glabels Datei3.glabels"
+
+#: C/glabels.xml:323(command)
+msgid "glabels <placeholder-1/>"
+msgstr "glabels <placeholder-1/>"
+
+#: C/glabels.xml:327(para)
+msgid ""
+"When the application starts, the files that you specify are displayed in "
+"separate <application>gLabels</application> windows."
+msgstr ""
+"Wenn die Anwendung startet, werden die von Ihnen angegebenen Dateien in "
+"separaten <application>gLabels</application>-Fenstern angezeigt."
+
+#: C/glabels.xml:334(title)
+msgid "To Save a File"
+msgstr "Speichern einer Datei"
+
+#: C/glabels.xml:336(para)
+msgid "You can save files in the following ways:"
+msgstr "Sie können Dateien auf folgende Arten speichern:"
+
+#: C/glabels.xml:341(para)
+msgid ""
+"To save changes to an existing file, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Save</guimenuitem></menuchoice>."
+msgstr ""
+"Um die Änderungen in der bereits vorhandenen Datei zu speichern, wählen Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Speichern</guimenuitem></"
+"menuchoice>."
+
+#: C/glabels.xml:348(para)
+msgid ""
+"To save a new file or to save an existing file under a new filename, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Save As</guimenuitem></"
+"menuchoice>. Enter a name for the file in the <guilabel>Save As</guilabel> "
+"dialog box, then click <guibutton>OK</guibutton>."
+msgstr ""
+"Um eine neue Datei oder eine bestehende Datei unter einem neuen Dateinamen zu "
+"speichern, wählen Sie <menuchoice><guimenu>Datei</"
+"guimenu><guimenuitem>Speichern unter</guimenuitem></menuchoice>. Geben Sie "
+"einen Namen für die Datei im Dialogfeld <guilabel>Speichern unter</guilabel> "
+"ein und klicken Sie anschließend auf <guibutton>OK</guibutton>. "
+
+#: C/glabels.xml:361(title)
+msgid "To Change Label Properties"
+msgstr "Ändern der Eigenschaften eines Etiketts"
+
+#: C/glabels.xml:363(para)
+msgid ""
+"To change the media type and/or orientation of a label, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Properties</guimenuitem></"
+"menuchoice> to display the <guilabel>Label properties</guilabel> dialog. "
+"Select the new media type and orientation for the document, then click "
+"<guibutton>OK</guibutton>."
+msgstr ""
+"Um den Medientyp oder die Ausrichtung des Etiketts zu ändern, wählen Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Eigenschaften</guimenuitem></"
+"menuchoice>, um den Dialog <guilabel>Etikett-Eigenschaften</guilabel> "
+"anzuzeigen. Wählen Sie den neuen Medientyp für das Dokument aus und klicken "
+"Sie anschließend auf <guibutton>OK</guibutton>."
+
+#: C/glabels.xml:374(title)
+msgid "To Create a Custom Template"
+msgstr "Erstellen einer benutzerdefinierten Vorlage"
+
+#: C/glabels.xml:376(para)
+msgid ""
+"To create a new custom template, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Template Designer ...</guimenuitem></menuchoice> to "
+"display the <guilabel>Template Designer</guilabel> dialog. This dialog will "
+"assist you in creating a custom template for most types of label or card "
+"stationery that you may encounter."
+msgstr ""
+"Um eine neue benutzerdefinierte Vorlage zu erstellen, wählen Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Vorlagen-Designer …</"
+"guimenuitem></menuchoice>, um den <guilabel>Vorlagen-Designer</guilabel>-"
+"Dialog anzuzeigen. Dieser Dialog hilft Ihnen bei der Erstellung einer "
+"benutzerdefinierten Vorlage für die meisten Typen von Etiketten oder "
+"Visitenkarten, die Ihnen in Schreibwarengeschäften begegnen könnten."
+
+#: C/glabels.xml:383(para)
+msgid ""
+"If you prefer, you can create your templates manually. For this option see "
+"<xref linkend=\"glabels-manual-create-template\"/>"
+msgstr ""
+"Falls Sie dies bevorzugen, können Sie Ihre Vorlagen auch manuell erstellen. "
+"Weitere Informationen hierzu finden Sie in <xref linkend=\"glabels-manual-"
+"create-template\"/>."
+
+#: C/glabels.xml:391(title)
+msgid "To Close a File"
+msgstr "Schließen einer Datei"
+
+#: C/glabels.xml:393(para)
+msgid ""
+"To close the current document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice> to close the "
+"application window. If the current document is modified, a confirmation "
+"dialog will be presented, allowing you to save the document or cancel the "
+"command. If the window being closed is the only open window, "
+"<application>gLabels</application> will exit."
+msgstr ""
+"Um das aktuelle Dokument zu schließen, wählen Sie <menuchoice><guimenu>Datei</"
+"guimenu><guimenuitem>Schließen</guimenuitem></menuchoice>, um das "
+"Anwendungsfenster zu schließen. Falls das aktuelle Dokument bearbeitet wurde, "
+"wird ein Bestätigungsdialog geöffnet, in welchem Sie das Dokument speichern "
+"oder den Vorgang abbrechen können. Falls das zu schließende Fenster das "
+"einzige offene Fenster ist, wird <application>gLabels</application> dadurch "
+"beendet."
+
+#: C/glabels.xml:405(title)
+msgid "To Quit <application>gLabels</application>"
+msgstr "<application>gLabels</application> beenden"
+
+#: C/glabels.xml:407(para)
+msgid ""
+"To quit <application>gLabels</application>, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Quit</guimenuitem></menuchoice>. This is equivalent to "
+"closing all open windows. See <xref linkend=\"glabels-close-file\"/>."
+msgstr ""
+"Um <application>gLabels</application> zu beenden, wählen Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Beenden</guimenuitem></"
+"menuchoice>. Dadurch werden alle offenen Fenster geschlossen. Siehe <xref "
+"linkend=\"glabels-close-file\"/>."
+
+#: C/glabels.xml:417(title)
+msgid "To Print Labels or Cards"
+msgstr "Drucken von Etiketten oder Karten"
+
+#: C/glabels.xml:419(para)
+msgid ""
+"To print labels or cards, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice> to display the "
+"<guilabel>Print</guilabel> dialog. Once print options have been selected, "
+"click <guilabel>Print</guilabel> to print the labels or cards. To simply "
+"preview the results, click <guilabel>Print Preview</guilabel> instead."
+msgstr ""
+"Um Etiketten oder Visitenkarten zu drucken, wählen Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Drucken</guimenuitem></"
+"menuchoice>, um den <guilabel>Drucken</guilabel>-Dialog anzuzeigen. Nachdem "
+"Sie die Druckoptionen ausgewählt haben, klicken Sie auf <guilabel>Drucken</"
+"guilabel>, um die Etiketten oder Visitenkarten zu drucken. Um zunächst eine "
+"Vorschau auf die Druckergebnisse zu erhalten, klicken Sie auf "
+"<guilabel>Druckvorschau</guilabel>."
+
+#: C/glabels.xml:426(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog allows you to specify the following "
+"print options:"
+msgstr ""
+"Im Dialog <guilabel>Drucken</guilabel> können Sie die folgenden Optionen zum "
+"Drucken festlegen:"
+
+#: C/glabels.xml:430(title)
+msgid "The Labels Tab of the Print Dialog"
+msgstr "Der Reiter »Etiketten« des Druckdialogs"
+
+#: C/glabels.xml:435(guilabel)
+msgid "Print control (Simple)"
+msgstr "Drucksteuerung (einfach)"
+
+#: C/glabels.xml:438(para)
+msgid ""
+"For simple labels or cards (no document merge), the <guilabel>labels</"
+"guilabel> tabbed section contains the following copy controls."
+msgstr ""
+"Für einfache Etiketten oder Karten (keine Dokumentmischung) enthält der "
+"Reiter »Labels« die folgenden Einstellmöglichkeiten."
+
+#: C/glabels.xml:443(title)
+msgid "Print Copy Controls"
+msgstr "Angeben der Kopien"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:454(para)
+msgid ""
+"The number of copies of the label can be selected by choosing the number of "
+"full sheets to print, or a specific subset of labels on a single sheet."
+msgstr ""
+"Die Anzahl der Kopien können Sie wählen, indem Sie die Anzahl der vollständig "
+"zu druckenden Seiten oder eine Teilmenge von Etiketten auf einer einzelnen "
+"Seite auswählen."
+
+#: C/glabels.xml:458(para)
+msgid ""
+"The mini-preview can also be used to graphically select the subset of labels "
+"by clicking the first label on the mini-preview and dragging to the last "
+"label."
+msgstr ""
+"Die verkleinerte Vorschau können Sie auch dazu verwenden, einen Teil der "
+"Etiketten grafisch auszuwählen, indem Sie auf das erste Etikett klicken und "
+"es auf das letzte Etikett ziehen."
+
+#: C/glabels.xml:466(guilabel)
+msgid "Print control (Merge)"
+msgstr "Drucksteuerung (Mischen)"
+
+#: C/glabels.xml:469(para)
+msgid ""
+"For labels or cards using the document merge (also known as \"mail merge\") "
+"capability, the <guilabel>labels</guilabel> tabbed section contains the "
+"following merge controls instead of copy controls."
+msgstr ""
+"Für Etiketten oder Karten unter Verwendung der Dokumentmischung enthält "
+"dieser Reiter die folgenden Einstellungen zur Mischung von Dokumenten "
+"anstelle der Festlegung der Kopien."
+
+#: C/glabels.xml:475(title)
+msgid "Print Document Merge Controls"
+msgstr "Steuerung der Einmischung von Dokumenten"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:486(para)
+msgid ""
+"The total number of labels or cards printed is the product of the number of "
+"records in the merge source and the number of copies selected. If multiple "
+"copies are selected, these can be either collated (copies of the same record "
+"grouped together) or un-collated (one copy each record is printed before next "
+"copy)."
+msgstr ""
+"Die Gesamtzahl der gedruckten Etiketten oder Karten ergibt sich als Produkt "
+"aus der Anzahl der Datensätze in der Einmischquelle und der Anzahl der "
+"gewählten Kopien. Falls mehrere Kopien gewählt wurden, können diese entweder "
+"zusammengefasst werden (durch Gruppieren der Kopien des gleichen Datensatzes) "
+"oder nicht zusammengefasst (eine Kopie jedes Datensatzes wird immer vor der "
+"nächsten Kopie gedruckt)."
+
+#: C/glabels.xml:493(para)
+msgid ""
+"Printing can begin on any label on the first sheet. This can be selected with "
+"the <guilabel>Start on label</guilabel> spinbutton."
+msgstr ""
+"Der Druck kann mit jedem beliebigen Etikett der ersten Seite begonnen werden. "
+"Dies können Sie im Einstellfeld <guilabel>Start bei Etikett</guilabel> "
+"auswählen."
+
+#: C/glabels.xml:497(para)
+msgid ""
+"The mini-preview can also be used to graphically select this first label, by "
+"clicking on the desired label in the mini-preview."
+msgstr ""
+"In der verkleinerten Vorschau können Sie das erste Etikett grafisch "
+"auswählen, indem Sie das gewünschte Etikett anklicken."
+
+#: C/glabels.xml:504(guilabel)
+msgid "Options"
+msgstr "Optionen"
+
+#: C/glabels.xml:506(para)
+msgid "The following options can also be selected."
+msgstr "Die folgenden Optionen können ebenfalls gewählt werden."
+
+#: C/glabels.xml:509(guilabel)
+msgid "print outlines"
+msgstr "Begrenzungen drucken"
+
+#: C/glabels.xml:510(para)
+msgid ""
+"Print outlines of labels. This option is useful for dry-runs, to test printer "
+"alignment."
+msgstr ""
+"Begrenzungen der Etiketten drucken. Diese Option ist nützlich, wenn Sie die "
+"Lage des Papiers im Drucker prüfen wollen."
+
+#: C/glabels.xml:514(guilabel)
+msgid "print in reverse"
+msgstr "Spiegelbildlich drucken"
+
+#: C/glabels.xml:515(para)
+msgid ""
+"Prints the labels as mirror images. This option is useful for printing on "
+"clear labels that will be viewed from the reverse side (e.g. in a car window)."
+msgstr ""
+"Druckt die Etiketten spiegelbildlich. Diese Option ist nützlich für das "
+"Drucken durchsichtiger Aufkleber, die von der Rückseite aus betrachtet werden "
+"(z.B. hinter Autoscheiben)."
+
+#: C/glabels.xml:520(guilabel)
+msgid "print crop marks"
+msgstr "Schnitt"
+
+#: C/glabels.xml:521(para)
+msgid ""
+"Prints crop marks along the edge of the sheet. This option is useful for "
+"printing on blank stock, to be cut after printing. This option does not work "
+"well with all templates."
+msgstr ""
+"Druckt Schnittmarken entlang der Papierränder. Diese Option ist nützlich zum "
+"Drucken auf Papier, das erst nach dem Druck beschnitten werden soll. Diese "
+"Option funktioniert eventuell nicht mit allen Vorlagen."
+
+#: C/glabels.xml:536(title)
+msgid "To Create New Objects"
+msgstr "Erstellen neuer Objekte"
+
+#: C/glabels.xml:538(para)
+msgid ""
+"Objects are created by choosing the appropriate selection under the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Create Object</"
+"guimenuitem></menuchoice> submenu or the <guilabel>Drawing Toolbar</"
+"guilabel>. This will place the display area into object creation mode as "
+"indicated by its cursor. To return to the default object selection mode "
+"without creating an object, choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Select Mode</guimenuitem></menuchoice>. This will return "
+"the display area's cursor to the default selection arrow."
+msgstr ""
+"Objekte können ausgewählt werden, indem Sie das entsprechende Objekt in "
+"<menuchoice><guimenu>Objekte</guimenu><guimenuitem>Erzeugen</guimenuitem></"
+"menuchoice> auswählen oder über die <guilabel>Zeichenwerkzeugleiste</"
+"guilabel>. Dadurch wird der Anzeigebereich in den Objekterzeugungsmodus "
+"versetzt, was am Mauszeiger erkennbar ist. Um zum vorgegebenen "
+"Objektauswahlmodus zurückzukehren, ohne ein Objekt zu erzeugen, wählen Sie "
+"<menuchoice><guimenu>Objekte</guimenu><guimenuitem>Auswahlmodus</"
+"guimenuitem></menuchoice>. Dadurch wird der Mauszeiger im Anzeigebereich "
+"wieder in den vorgegebenen Auswahlzeiger geändert."
+
+#: C/glabels.xml:548(para)
+msgid "The following describes the object creation mode for each object type:"
+msgstr ""
+"Nachfolgend wird der Modus zur Erstellung der Objekte für jeden Objekttyp "
+"beschrieben:"
+
+#: C/glabels.xml:554(term) C/glabels.xml:1123(guilabel)
+msgid "Text"
+msgstr "Text"
+
+#: C/glabels.xml:556(para)
+msgid ""
+"Click the desired location of the upper left corner of the text object. New "
+"text objects are initialized with the string \"Text.\" To change this text, "
+"or other properties, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Klicken Sie auf die gewünschte Stelle in der linken oberen Ecke des "
+"Textobjekts. Neue Textobjekte erhalten anfänglich den Inhalt »Text«. Wie Sie "
+"diesen Text oder andere Eigenschaften ändern können, finden Sie in <xref "
+"linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:564(term)
+msgid "Box"
+msgstr "Rechteck"
+
+#: C/glabels.xml:566(para)
+msgid ""
+"Click the desired location of the upper left corner of the box object and "
+"drag to the desired location of the lower right corner. If you simply click "
+"in a single location, a square box will be created. To change properties of "
+"the box object, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Klicken Sie auf die gewünschte Stelle für die linke obere Ecke des "
+"Rechteckobjekts und ziehen Sie zur gewünschten rechten unteren Ecke. Wenn Sie "
+"einfach auf eine Stelle klicken, wird ein quadratisches Objekt erzeugt. Wie "
+"Sie die Eigenschaften des Rechteckobjekts ändern können, finden Sie in <xref "
+"linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:575(term) C/glabels.xml:1149(guilabel)
+msgid "Line"
+msgstr "Linie"
+
+#: C/glabels.xml:577(para)
+msgid ""
+"Click the desired location of one end of the line object and drag to the "
+"desired location of the other end. If you simply click in a single location, "
+"a diagonal line will be created. To change properties of the line object, see "
+"<xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Klicken Sie auf die gewünschte Stelle für das Ende des Linienobjekts und "
+"ziehen Sie zur gewünschten Stelle des anderen Endes. Wenn Sie einfach auf "
+"eine Stelle klicken, wird eine diagonale Linie erzeugt. Wie Sie die "
+"Eigenschaften des Linienobjekts ändern können, finden Sie in <xref linkend="
+"\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:586(term)
+msgid "Ellipse"
+msgstr "Ellipse"
+
+#: C/glabels.xml:588(para)
+msgid ""
+"Click the desired location of the upper left corner of the ellipse object and "
+"drag to the desired location of the lower right corner. If you simply click "
+"in a single location, a circle will be created. To change properties of the "
+"ellipse object, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Klicken Sie auf die gewünschte Stelle für die linke obere Ecke des "
+"Ellipsenobjekts und ziehen Sie zur gewünschten rechten unteren Ecke. Wenn Sie "
+"einfach auf eine Stelle klicken, wird ein Kreis erzeugt. Wie Sie die "
+"Eigenschaften des Ellipsenobjekts ändern können, finden Sie in <xref linkend="
+"\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:597(term)
+msgid "Image"
+msgstr "Image"
+
+#: C/glabels.xml:599(para)
+msgid ""
+"Click the desired location of the upper left corner of the image object and "
+"drag to the desired location of the lower right corner. If you simply click "
+"in a single location, a square will be created. New image objects are "
+"initialized with a simple checkerboard image. To change this image, or other "
+"properties of the image object, see <xref linkend=\"glabels-object-properties"
+"\"/>."
+msgstr ""
+"Klicken Sie auf die gewünschte Stelle für die linke obere Ecke des "
+"Bildobjekts und ziehen Sie zur gewünschten rechten unteren Ecke. Wenn Sie "
+"einfach auf eine Stelle klicken, wird ein quadratisches Objekt erzeugt. Neue "
+"Bildobjekte erhalten anfänglich ein Schachbrettmuster. Wie Sie dies oder "
+"andere Eigenschaften des Bildobjekts ändern können, finden Sie in <xref "
+"linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:610(term)
+msgid "Barcode"
+msgstr "Strichcode"
+
+#: C/glabels.xml:612(para)
+msgid ""
+"Click the desired location of the upper left corner of the barcode object. "
+"New barcode objects are initialized to a POSTNET barcode with representative "
+"data. To change data and properties of the barcode object, see <xref linkend="
+"\"glabels-object-properties\"/>."
+msgstr ""
+"Klicken Sie auf die gewünschte Stelle für die linke obere Ecke des "
+"Strichcodeobjekts und ziehen Sie zur gewünschten rechten unteren Ecke. Neue "
+"Objekte erhalten anfänglich einen POSTNET-Strichcode mit Beispieldaten. Wie "
+"Sie die Eigenschaften des Strichcodeobjekts ändern können, finden Sie in "
+"<xref linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:627(title)
+msgid "To Select Objects"
+msgstr "Auswählen von Objekten"
+
+#: C/glabels.xml:629(para)
+msgid ""
+"A prerequisite for performing operations on objects is the selection of "
+"individual objects or groups of objects. The display area must be in the "
+"object selection mode to create new selections, as indicated by an arrow "
+"cursor. The object selection mode is selected by the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Select Mode</guimenuitem></"
+"menuchoice> menu item, or the corresponding command on the <guilabel>Drawing "
+"Toolbar</guilabel>."
+msgstr ""
+"Eine Voraussetzung zum Ausführen von Operationen auf Objekten ist die Auswahl "
+"individueller Objekte oder Gruppen von Objekten. Der Anzeigebereich muss sich "
+"im Objektauswahlmodus befinden, was durch einen pfeilförmigen Mauszeiger "
+"angezeigt wird. Der Objektauswahlmodus wird über den Menüeintrag "
+"<menuchoice><guimenu>Objekte</guimenu><guimenuitem>Auswahlmodus</"
+"guimenuitem></menuchoice> aktiviert oder über das entsprechende Objekt in der "
+"<guilabel>Zeichenwerkzeugleiste</guilabel>."
+
+#: C/glabels.xml:642(term)
+msgid "Selecting a single object"
+msgstr "Auswahl eines einzelnen Objekts"
+
+#: C/glabels.xml:644(para)
+msgid ""
+"A single object can be selected simply by clicking on the desired object in "
+"the display area. Once selected the object will be highlighted with a set of "
+"resizing handles."
+msgstr ""
+"Ein einzelnes Objekt können Sie auswählen, indem Sie das gewünschte Objekt im "
+"Anzeigebereich anklicken. Nach dem Anklicken wird das Objekt durch "
+"Anfasspunkte zur Größenänderung hervorgehoben."
+
+#: C/glabels.xml:652(term)
+msgid "Aggregate object selections"
+msgstr "Auswahl mehrerer Objekte"
+
+#: C/glabels.xml:654(para)
+msgid ""
+"Multiple objects can be selected by first selecting the first object as above "
+"and then by holding the <keycap>Ctrl</keycap> key while selecting additional "
+"objects. Individual objects can be added to an existing selection at any time "
+"by holding the <keycap>Ctrl</keycap> key while selecting the desired objects. "
+"All objects can also be selected by using the <menuchoice><guimenu>Edit</"
+"guimenu><guimenuitem>Select All</guimenuitem></menuchoice> menu item. All "
+"objects in an aggregate object selection will be highlighted."
+msgstr ""
+"Sie können mehrere Objekte auswählen, indem Sie zunächst das erste Objekt "
+"auswählen, wie oben beschrieben. Halten Sie dann bei der Auswahl weiterer "
+"Objekte die <keycap>Strg</keycap>-Taste gedrückt. Zusätzliche Objekte können "
+"Sie jederzeit zur Auswahl hinzufügen, wenn Sie wiederum die <keycap>Strg</"
+"keycap>-Taste gedrückt halten und die gewünschten Objekte auswählen. Alle "
+"Objekte lassen sich über den Menüeintrag <menuchoice><guimenu>Bearbeiten</"
+"guimenu><guimenuitem>Alle auswählen</guimenuitem></menuchoice> auswählen. "
+"Alle Objekte in einer zusammenhängenden Objektauswahl werden hervorgehoben "
+"dargestellt."
+
+#: C/glabels.xml:668(term)
+msgid "Area selections"
+msgstr "Bereichsauswahl"
+
+#: C/glabels.xml:670(para)
+msgid ""
+"Multiple objects can also be selected by clicking an empty area and dragging "
+"to form a rectangular area. When released, all objects contained in the area "
+"will form an aggregate selection. An area selection can be used to add to an "
+"existing selection by holding the <keycap>Ctrl</keycap> key while performing "
+"the selection."
+msgstr ""
+"Sie können auch mehrere Objekte auswählen, indem Sie in einen leeren Bereich "
+"klicken und mit der Maus die Form eines Rechtecks aufziehen. Daraufhin bilden "
+"alle Objekte in diesem Bereich eine zusammenhängende Auswahl. Eine "
+"Bereichsauswahl kann zum Hinzufügen einer vorhandenen Auswahl benutzt werden, "
+"wenn Sie bei der Auswahl die <keycap>Strg</keycap>-Taste gedrückt halten."
+
+#: C/glabels.xml:680(term)
+msgid "Unselecting objects"
+msgstr "Auswahl von Objekten aufheben"
+
+#: C/glabels.xml:682(para)
+msgid ""
+"Individual objects can be removed from an existing selection by holding the "
+"<keycap>Ctrl</keycap> key while clicking on a previously selected object. An "
+"entire selection can be dismissed by using the <menuchoice><guimenu>Edit</"
+"guimenu><guimenuitem>Un-select All</guimenuitem></menuchoice> menu item or by "
+"simply clicking any empty space in the display area. Once an object is "
+"unselected its highlight is removed."
+msgstr ""
+"Sie können individuelle Objekte aus einer vorhandenen Auswahl entfernen, wenn "
+"Sie beim Klicken auf ein zuvor ausgewähltes Objekt die <keycap>Strg</keycap>-"
+"Taste gedrückt halten. Die gesamte Auswahl können Sie rückgängig machen, "
+"indem Sie im Menü <menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Alle "
+"Markierungen löschen</guimenuitem></menuchoice> wählen. Sobald ein Objekt "
+"nicht mehr ausgewählt ist, wird es nicht mehr hervorgehoben dargestellt."
+
+#: C/glabels.xml:699(title)
+msgid "Clipboard Commands"
+msgstr "Befehle für die Zwischenablage"
+
+#: C/glabels.xml:701(para)
+msgid ""
+"Object selections can be manipulated using the standard clipboard operations "
+"<guimenuitem>Cut</guimenuitem>, <guimenuitem>Copy</guimenuitem>, "
+"<guimenuitem>Paste</guimenuitem>, and <guimenuitem>Delete</guimenuitem>."
+msgstr ""
+"Objektauswahlen können durch die Standardoperationen der Zwischenablage "
+"<guimenuitem>Ausschneiden</guimenuitem>, <guimenuitem>Kopieren</guimenuitem>, "
+"<guimenuitem>Einfügen</guimenuitem> und <guimenuitem>Löschen</guimenuitem> "
+"manipuliert werden."
+
+#: C/glabels.xml:712(keycap) C/glabels.xml:728(keycap)
+#: C/glabels.xml:744(keycap)
+msgid "Ctrl"
+msgstr "Strg"
+
+#: C/glabels.xml:712(keycap)
+msgid "X"
+msgstr "X"
+
+#: C/glabels.xml:714(guimenuitem)
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: C/glabels.xml:718(para)
+msgid ""
+"Moves selected objects to the clipboard. The objects are then available for "
+"pasting back into the current document or another document."
+msgstr ""
+"Verschiebt die ausgewählten Objekte in die Zwischenablage. Diese Objekte sind "
+"dann verfügbar, um später in das aktuelle Dokument oder ein anderes Dokument "
+"eingefügt zu werden."
+
+#: C/glabels.xml:728(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/glabels.xml:730(guimenuitem)
+msgid "Copy"
+msgstr "Kopieren"
+
+#: C/glabels.xml:734(para)
+msgid ""
+"Copies selected objects to the clipboard without deleting them. The objects "
+"are then available for pasting back into the current document or another "
+"document."
+msgstr ""
+"Kopiert die ausgewählten Objekte in die Zwischenablage, ohne sie zu "
+"entfernen. Diese Objekte sind dann verfügbar, um später in das aktuelle "
+"Dokument oder ein anderes Dokument eingefügt zu werden."
+
+#: C/glabels.xml:744(keycap)
+msgid "V"
+msgstr "V"
+
+#: C/glabels.xml:746(guimenuitem)
+msgid "Paste"
+msgstr "Einfügen"
+
+#: C/glabels.xml:750(para)
+msgid ""
+"Pastes objects from the clipboard into the current document. "
+"<application>gLabels</application> can only paste objects from another "
+"<application>gLabels</application> document."
+msgstr ""
+"Fügt Objekte aus der Zwischenablage in das aktuelle Dokument ein. "
+"<application>gLabels</application> kann nur Objekte aus anderen "
+"<application>gLabels</application>-Dokumenten einfügen."
+
+#: C/glabels.xml:760(keycap) C/glabels.xml:762(guimenuitem)
+msgid "Delete"
+msgstr "Löschen"
+
+#: C/glabels.xml:766(para)
+msgid "Deletes selected objects without placing them on the clipboard."
+msgstr ""
+"Entfernt die ausgewählten Objekte, ohne sie in die Zwischenablage zu "
+"verschieben."
+
+#: C/glabels.xml:777(title)
+msgid "To Edit Object Properties"
+msgstr "Bearbeiten der Objekteigenschaften"
+
+#: C/glabels.xml:779(para)
+msgid ""
+"Most object properties can be modified through the object editor sidebar, "
+"illustrated below. To use the object editor, a single object must first be "
+"selected. See <xref linkend=\"glabels-select-objects\"/>."
+msgstr ""
+"Die meisten Objekteigenschaften können Sie über die Objekteditor-Seitenleiste "
+"verändern, wie unten illustriert. Um den Objekteditor zu verwenden, muss "
+"zunächst ein einzelnes Objekt ausgewählt werden. Siehe <xref linkend="
+"\"glabels-select-objects\"/>."
+
+#: C/glabels.xml:786(title)
+msgid "Object Editor Sidebar"
+msgstr "Objekteditor-Seitenleiste"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:797(para)
+msgid ""
+"The object editor will contain a subset of the following tabbed sections, "
+"depending on object type:"
+msgstr ""
+"Der Objekteditor bietet eine Auswahl der folgenden Reiter, abhängig vom "
+"Objekttyp:"
+
+#: C/glabels.xml:801(title)
+msgid "Text Tabbed Section (Text objects)"
+msgstr "Text-Reiter (Textobjekte)"
+
+#: C/glabels.xml:803(para)
+msgid ""
+"This section contains a small editor for changing the content of a text "
+"object. It also contains a dropdown menu of available document merge keys, "
+"that can be inserted into text."
+msgstr ""
+"Dieser Abschnitt bietet einen kleinen Editor zum Bearbeiten des Inhalts eines "
+"Textobjekts. Weiterhin ist ein Ausklappmenü mit den verfügbaren Schlüsseln "
+"zur Dokumentmischung enthalten, die in den Text eingefügt werden können."
+
+#: C/glabels.xml:810(title)
+msgid "Image Tabbed Section (Image objecs)"
+msgstr "Bild-Reiter (Bild-Objekte)"
+
+#: C/glabels.xml:812(para)
+msgid ""
+"This section contains a file entry with preview to select image files. The "
+"browse button can be used to easily locate image files. Alternatively, a "
+"document merge key can be used instead to provide a filename at print time."
+msgstr ""
+"Dieser Abschnitt enthält einen Dateiwähler mit Vorschau zur Auswahl von "
+"Bilddateien. Der »Durchsuchen«-Knopf kann zum Suchen von Bilddateien benutzt "
+"werden. Alternativ können Sie einen Schlüssel zur Dokumenteinmischung "
+"anstelle eines Dateinamens angeben, der bei der Ausgabe des Dokuments ersetzt "
+"wird."
+
+#: C/glabels.xml:820(title)
+msgid "Data Tabbed Section (Barcode objecs)"
+msgstr "Daten-Reiter (Strichcode-Objekte)"
+
+#: C/glabels.xml:822(para)
+msgid ""
+"This section contains a text entry to enter literal barcode data. "
+"Alternatively, a document merge key can be used to provide this data at print "
+"time."
+msgstr ""
+"Dieser Abschnitt enthält ein Textfeld zur Eingabe von Strichcode-Daten. "
+"Alternativ kann hier ein Schlüssel zur Dokumentmischung eingetragen werden, "
+"der beim Druck für die Bereitstellung der richtigen Daten sorgt."
+
+#: C/glabels.xml:829(title)
+msgid "Style Tabbed Section (Text objects)"
+msgstr "Stil-Reiter (Text-Objekte)"
+
+#: C/glabels.xml:831(para)
+msgid ""
+"This section contains controls to select text properties, including font "
+"family, font size, font weight, color, and text justification."
+msgstr ""
+"Dieser Abschnitt enthält Einstellmöglichkeiten für die Texteigenschaften, wie "
+"Schriftfamilie, Schriftgröße, Schriftstärke, Schriftfarbe und Ausrichtung des "
+"Texts."
+
+#: C/glabels.xml:838(title)
+msgid "Style Tabbed Section (Barcode objecs)"
+msgstr "Stil-Reiter (Strichcode-Objekte)"
+
+#: C/glabels.xml:840(para)
+msgid ""
+"This section contains controls to select barcode properties, including "
+"barcode style, color, whether to print text, and whether to include a "
+"checksum digit."
+msgstr ""
+"Dieser Abschnitt enthält Einstellmöglichkeiten für die Eigenschaften des "
+"Strichcodes, wie Stil, Farbe, Drucken von Text oder Beinhalten einer "
+"Prüfsumme."
+
+#: C/glabels.xml:847(title)
+msgid "Line Tabbed Section"
+msgstr "Linie-Reiter"
+
+#: C/glabels.xml:849(para)
+msgid ""
+"This section contains controls to select properties of lines and outlines. "
+"These properties include line width and color."
+msgstr ""
+"Dieser Abschnitt enthält Einstellmöglichkeiten für die Auswahl von "
+"Eigenschaften von Linien und Begrenzungen, wie Linienbreite und -farbe."
+
+#: C/glabels.xml:855(title)
+msgid "Fill Tabbed Section"
+msgstr "Füllung-Reiter"
+
+#: C/glabels.xml:857(para)
+msgid ""
+"This section contains controls to select fill properties of box and ellipse "
+"objects. Currently the only fill property is fill color."
+msgstr ""
+"Dieser Abschnitt enthält Einstellmöglichkeiten für die Auswahl der "
+"Füllungseigenschaften von Rechteck- und Ellipsenobjekten. Derzeit ist nur die "
+"Einstellung der Füllungsfarbe möglich."
+
+#: C/glabels.xml:864(title)
+msgid "Size Tabbed Section (All except line objects)"
+msgstr "Reiter »Größe« (alle außer Linienobjekte)"
+
+#: C/glabels.xml:866(para)
+msgid ""
+"This section contains controls to select the width and height of an object. A "
+"checkbox is provided, so that the current aspect ratio can be locked while "
+"manipulating the width and height controls. Image objects also provide a "
+"button to reset the size to the image's natural size (Assumes 72DPI)."
+msgstr ""
+"Dieser Abschnitt enthält Einstellmöglichkeiten für die Höhe und die Breite "
+"eines Objekts. Mit einem Ankreuzfeld können Sie die Werte aneinander koppeln, "
+"so dass das Seitenverhältnis beim Ändern der Höhe oder Breite erhalten "
+"bleibt. Für Bildobjekte gibt es außerdem einen Knopf zum Zurücksetzen des "
+"Bildes auf Originalgröße, wobei eine Auflösung von 72 dpi angenommen wird."
+
+#: C/glabels.xml:875(title)
+msgid "Size Tabbed Section (Line objects)"
+msgstr "Reiter »Größe« (Linienobjekte)"
+
+#: C/glabels.xml:877(para)
+msgid ""
+"This section contains controls to select the length and angle of a line "
+"object."
+msgstr ""
+"Dieser Abschnitt enthält Einstellmöglichkeiten für die Länge und den Winkel "
+"eines Linienobjekts."
+
+#: C/glabels.xml:883(title)
+msgid "Position Tabbed Section"
+msgstr "Reiter »Position«"
+
+#: C/glabels.xml:885(para)
+msgid "This section contains controls to change the position of an object."
+msgstr ""
+"Dieser Abschnitt beschreibt die Möglichkeiten zur Positionierung eines "
+"Objekts."
+
+#: C/glabels.xml:892(title)
+msgid "Shadow Tabbed Section (All except image and barcode objects)"
+msgstr "Reiter »Schattierung« (alle außer Bild- und Strichcodeobjekten)"
+
+#: C/glabels.xml:894(para)
+msgid "This section contains controls to add a shadow to an object."
+msgstr ""
+"Dieser Abschnitt enthält Einstellmöglichkeiten für die Schattierung eines "
+"Objekts."
+
+#: C/glabels.xml:903(title)
+msgid "Other Manipulations of Objects"
+msgstr "Andere Manipulationen von Objekten"
+
+#: C/glabels.xml:905(para)
+msgid "Objects can also be manipulated in the following ways."
+msgstr "Objekte können auf die folgenden Arten manipuliert werden."
+
+#: C/glabels.xml:908(title)
+msgid "Moving and Resizing Objects"
+msgstr "Verschieben und Größenänderung von Objekten"
+
+#: C/glabels.xml:910(para)
+msgid ""
+"Objects can be moved by simply clicking on a selected object and dragging the "
+"object to its new location. If the object is part of an aggregate selection, "
+"all objects in the selection will move with the object being dragged, "
+"maintaining their relative positions to one another. If no object is "
+"selected, clicking on an object will create a new selection containing that "
+"object. See <xref linkend=\"glabels-select-objects\"/>."
+msgstr ""
+"Objekte können Sie durch einfaches Anklicken und Ziehen des ausgewählten "
+"Objekts zur neuen Position verschieben. Falls dieses Objekt Teil einer "
+"Mehrfachauswahl ist, werden durch Ziehen dieses Objektes alle Objekte "
+"verschoben, wobei deren Abstände untereinander erhalten bleiben. Falls kein "
+"Objekt ausgewählt ist, wird durch Anklicken eines Objekts eine neue Auswahl "
+"erzeugt, die dieses Objekt enthält. Siehe <xref linkend=\"glabels-select-"
+"objects\"/>."
+
+#: C/glabels.xml:918(para)
+msgid ""
+"A selected object can be resized by clicking one of its resize handle and "
+"dragging it to obtain the new size."
+msgstr ""
+"Die Größe eines ausgewählten Objekts kann geändert werden, indem Sie auf "
+"einen der Größenänderungs-Anfasspunkte klicken und diesen ziehen, um die "
+"gewünschte Größe zu erreichen."
+
+#: C/glabels.xml:924(title)
+msgid "Changing Stacking Order"
+msgstr "Ändern der Reihenfolge der Ebenen"
+
+#: C/glabels.xml:926(para)
+msgid ""
+"Stacking order refers to relative position in the z-axis of objects. That is "
+"when objects overlap, which object will appear on top of the other. By "
+"default, newer objects will appear above older objects. To change this order, "
+"select one or more objects and choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Order</guimenuitem><guimenuitem>Bring to Front</"
+"guimenuitem></menuchoice> to raise the selection to the top of the stacking "
+"order, or choose <menuchoice><guimenu>Objects</guimenu><guimenuitem>Order</"
+"guimenuitem><guimenuitem>Send to Back</guimenuitem></menuchoice> to lower the "
+"selection to the bottom of the stacking order. These menuitems are also "
+"available by right-clicking the display area when there is a non-empty "
+"selection."
+msgstr ""
+"Die Stapelreihenfolge bezieht sich auf die relative Position in der Z-Achse "
+"von Objekten. Das beschreibt beim Überlappen von Objekten, welches der "
+"Objekte über den anderen erscheint. Per Vorgabe werden neue Objekte immer "
+"oberhalb von bereits vorhandenen Objekten platziert. Um diese Anordnung zu "
+"ändern, wählen Sie <menuchoice><guimenu>Objekte</"
+"guimenu><guimenuitem>Anordnung</guimenuitem><guimenuitem>Ganz nach vorn</"
+"guimenuitem></menuchoice>, um die Auswahl im Stapel nach oben zu verschieben, "
+"oder <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Anordnung</"
+"guimenuitem><guimenuitem>Ganz nach hinten</guimenuitem></menuchoice>, um die "
+"Auswahl im Stapel nach unten zu verschieben. Diese Menüeinträge sind auch "
+"durch einen Klick mit der rechten Maustaste auf den Ansichtsbereich "
+"verfügbar, falls sich dort eine nicht leere Auswahl befindet."
+
+#: C/glabels.xml:944(title)
+msgid "Rotating and Flipping Objects"
+msgstr "Drehen und Spiegeln von Objekten"
+
+#: C/glabels.xml:946(para)
+msgid ""
+"Objects can be rotated 90 degrees in either direction, or flipped "
+"horizontally or vertically, by choosing the appropriate menuitem in the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Rotate/Flip</guimenuitem></"
+"menuchoice> sub-menu. These menuitems are also available by right-clicking "
+"the display area when there is a non-empty selection."
+msgstr ""
+"Objekte können um 90 Grad in jeder Richtung gedreht oder horizontal oder "
+"vertikal gespiegelt werden. Wählen Sie hierzu den entsprechenden Eintrag im "
+"Menü <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Drehen/Spiegeln</"
+"guimenuitem></menuchoice>. Diese Menüeinträge sind auch verfügbar, wenn Sie "
+"mit der rechten Maustaste in eine nicht leere Auswahl im Ansichtsbereich "
+"klicken."
+
+#: C/glabels.xml:956(title)
+msgid "Aligning Objects"
+msgstr "Ausrichten von Objekten"
+
+#: C/glabels.xml:958(para)
+msgid ""
+"Objects can be aligned horizontally or vertically, relative to one another, "
+"or relative to the center line of the label, by choosing the appropriate "
+"menuitem from the <menuchoice><guimenu>Objects</guimenu><guimenuitem>Align "
+"Horizontal</guimenuitem></menuchoice> or <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Align Horizontal</guimenuitem></menuchoice> sub-menus. "
+"These menuitems are also available by right-clicking the display area when "
+"there is a non-empty selection."
+msgstr ""
+"Objekte können horizontal oder vertikal zu einem anderen Objekt oder relativ "
+"zu einer Mittellinie des Etiketts angeordnet werden, indem Sie "
+"<menuchoice><guimenu>Objekte</guimenu><guimenuitem>Horizontal</guimenuitem></"
+"menuchoice> oder <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Vertikal</"
+"guimenuitem></menuchoice> wählen. Diese Menüeinträge sind auch verfügbar, "
+"wenn Sie mit der rechten Maustaste in eine nicht leere Auswahl im "
+"Ansichtsbereich klicken."
+
+#: C/glabels.xml:971(title)
+msgid "Using the Property Bar"
+msgstr "Verwendung der Eigenschaftsleiste"
+
+#: C/glabels.xml:973(para)
+msgid ""
+"The property bar can be used to change some common properties of objects en-"
+"masse. These properties include font family, font size, font weight, text "
+"alignment, text color, fill color, line or outline color, and line width. The "
+"property bar also controls the defaults for these properties for any newly "
+"created objects."
+msgstr ""
+"Mit der Eigenschaftsleiste können Sie einige Eigenschaften von Objekten in "
+"einem Arbeitsgang ändern. Diese Eigenschaften umfassen Schriftfamilie, "
+"Schriftgröße, Schriftstärke, Textausrichtung, Textfarbe, Füllfarbe, Farbe von "
+"Linien oder Begrenzungen sowie Linienbreiten. Die Eigenschaftsleiste regelt "
+"auch die Vorgaben für diese Eigenschaften, wenn neue Objekte erzeugt werden."
+
+#: C/glabels.xml:988(title)
+msgid "Performing a Document Merge"
+msgstr "Ausführung einer Dokumentmischung"
+
+#: C/glabels.xml:990(para)
+msgid ""
+"Document Merge (sometimes called \"Mail Merge\") is a powerful feature that "
+"allows a unique label or card to be printed for each record in an external "
+"data source."
+msgstr ""
+"Dokumentmischung ist ein mächtiges Funktionsmerkmal, das es Ihnen ermöglicht, "
+"ein einzelnes Etikett oder eine einzelne Karte für jeden Datensatz aus einer "
+"externen Datenquelle zu erstellen."
+
+#: C/glabels.xml:994(para)
+msgid ""
+"The first step to performing a document merge is to prepare a source document "
+"that contains your merge data. This data could be mailing addresses or any "
+"other data that you wish to create unique labels or cards for. Currently back-"
+"ends only exist for text files and the evolution data server -- others are "
+"planned. The currently supported text-file format is very simple: each line "
+"is a record; fields are delimited by commas (CSV), tabs, or colons; and "
+"newlines can be embedded into fields by using the \"\\n\" entity. This file "
+"could be created using any text editor or could be created by another program "
+"or script. A common way of creating CSV files is to export them from a "
+"spreadsheet program."
+msgstr ""
+"Der erste Schritt zur Ausführung einer Dokumentmischung ist die Vorbereitung "
+"eines Quelldokuments, welches die Daten zum Mischen enthält. Diese Daten "
+"können aus E-Mail-Adressen oder anderen Daten bestehen, aus denen Sie die "
+"einzelnen Etiketten oder Karten erstellen wollen. Gegenwärtig können als "
+"Datenquellen entweder Textdateien oder die Daten des Evolution-Adressbuchs "
+"verwendet werden, andere sind bereits in Planung. Das derzeit unterstützte "
+"Textformat ist recht einfach: Jede Zeile stellt einen Datensatz dar, wobei "
+"die einzelnen Felder durch Kommata (CSV), Tabulatoren oder Semikola getrennt "
+"werden. Neue Zeilen werden durch einen Zeilenumbruch »\\n« erzeugt. Diese "
+"Datei kann mit einem Texteditor, einem anderen Programm oder einem Skript "
+"erstellt werden. Ein üblicher Weg der Erstellung ist der Export einer CSV-"
+"Datei aus einer Tabellenkalkulation."
+
+#: C/glabels.xml:1006(para)
+msgid ""
+"A label must then be configured to \"point at\" this data file. To configure "
+"the merge properties of a document, choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item to "
+"display the <guilabel>merge properties</guilabel> dialog. This dialog is used "
+"to select the exact data file format and file name (location) of the merge "
+"data."
+msgstr ""
+"Ein Etikett muss erstellt werden, das auf diese Datenquelle »zeigt«. Um die "
+"Mischeigenschaften für ein Dokument festzulegen, wählen Sie "
+"<menuchoice><guimenu>Objekte</guimenu><guimenuitem>Mischeinstellungen</"
+"guimenuitem></menuchoice>. Der Dialog <guilabel>Mischeinstellungen</guilabel> "
+"wird geöffnet. In diesem Dialog wählen Sie das genaue Dateiformat und den "
+"Dateinamen (den Ort) der einzumischenden Daten aus."
+
+#: C/glabels.xml:1014(para)
+msgid ""
+"Finally, once the label has been configured for a data file, field keys can "
+"be inserted into text objects and used as source or data for barcode objects "
+"and image filenames for image objects. See <xref linkend=\"glabels-object-"
+"properties\"/> for more information on using merge data for these object "
+"types."
+msgstr ""
+"Zum Schluss, sobald das Etikett für die Datenquelle eingerichtet wurde, "
+"können die Feldschlüssel in Textobjekte eingefügt werden, um sie als "
+"Datenquelle für Strichcodeobjekte oder Bilder für Bildobjekte zu verwenden. "
+"Weitere Informationen über die Verwendung der Mischdaten für diese "
+"Objekttypen finden Sie in <xref linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:1020(para)
+msgid ""
+"Now that your label is configured, <application>gLabels</application> will "
+"print a unique label for each record in your source document -- substituting "
+"fields from each record for field keys in the all text, barcode, and image "
+"objects."
+msgstr ""
+"Da Ihr Etikett nun konfiguriert ist, druckt <application>gLabels</"
+"application> genau ein Etikett für jeden Datensatz des Quelldokuments, wobei "
+"alle Text-, Bild- und Strichcode-Objekte durch die Einträge der Felder jedes "
+"Datensatzes ersetzt werden."
+
+#: C/glabels.xml:1025(para)
+msgid ""
+"See <xref linkend=\"glabels-merge-tutorial\"/> for a detailed tutorial on the "
+"document merge feature."
+msgstr ""
+"In <xref linkend=\"glabels-merge-tutorial\"/> finden Sie eine ausführliche "
+"Anleitung für dieses Funktionsmerkmal."
+
+#: C/glabels.xml:1040(title)
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: C/glabels.xml:1041(para)
+msgid ""
+"To configure <application>gLabels</application>, choose "
+"<menuchoice><guimenu>Settings</guimenu><guimenuitem>Preferences</"
+"guimenuitem></menuchoice>. The <guilabel>Preferences</guilabel> dialog "
+"contains the following tabbed sections:"
+msgstr ""
+"Um <application>gLabels</application> zu konfigurieren, wählen Sie "
+"<menuchoice><guimenu>Einstellungen</guimenu><guimenuitem>Einstellungen</"
+"guimenuitem></menuchoice>. Der Dialog <guilabel>Einstellungen</guilabel> "
+"enthält die folgenden Reiter:"
+
+#: C/glabels.xml:1062(title)
+msgid "Locale"
+msgstr "Lokale Einstellungen"
+
+#: C/glabels.xml:1066(guilabel)
+msgid "Units"
+msgstr "Einheiten"
+
+#: C/glabels.xml:1068(para)
+msgid ""
+"Use this radio button group to specify your preferred units. Select one of "
+"the following options:"
+msgstr ""
+"Verwenden Sie diese Radioknöpfe, um Ihre bevorzugten Maßeinheiten "
+"festzulegen. Wählen Sie aus den folgenden Optionen:"
+
+#: C/glabels.xml:1073(guilabel)
+msgid "Points"
+msgstr "Punkte"
+
+#: C/glabels.xml:1074(para)
+msgid "Use points (1 point = 1/72 in = 0.352778 mm)."
+msgstr "Punkte verwenden (1 Punkt = 1/72 Zoll = 0.352778 mm)."
+
+#: C/glabels.xml:1078(guilabel)
+msgid "Inches"
+msgstr "Zoll"
+
+#: C/glabels.xml:1079(para)
+msgid "Use inches."
+msgstr "Zoll verwenden."
+
+#: C/glabels.xml:1083(guilabel)
+msgid "Millimeters"
+msgstr "Millimeter"
+
+#: C/glabels.xml:1084(para)
+msgid "Use millimeters."
+msgstr "Millimeter verwenden."
+
+#: C/glabels.xml:1087(para)
+msgid "Default: <guilabel>Inches</guilabel>."
+msgstr "Standard: <guilabel>Zoll</guilabel>."
+
+#: C/glabels.xml:1093(guilabel)
+msgid "Default page size"
+msgstr "Vorgegebene Seitengröße"
+
+#: C/glabels.xml:1095(para)
+msgid ""
+"Use this radio button group to specify your preferred page size. This will "
+"make it quicker for you to locate media types when creating a new label or "
+"card."
+msgstr ""
+"Verwenden Sie diese Radioknöpfe zur Auswahl Ihrer bevorzugten Papiergröße. "
+"Dadurch lassen sich beim Erstellen neuer Etiketten oder Visitenkarten die "
+"entsprechenden Papiertypen schneller finden."
+
+#: C/glabels.xml:1101(guilabel)
+msgid "US Letter"
+msgstr "US-Letter"
+
+#: C/glabels.xml:1102(para)
+msgid "Most of your media will be of the US Letter page size (8.5 x 11 inches)."
+msgstr "Die meisten Ihrer Medien haben das US-Letter-Format (8.5 x 11 inches)."
+
+#: C/glabels.xml:1106(guilabel)
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: C/glabels.xml:1107(para)
+msgid "Most of your media will be of the ISO A4 page size (210 x 297 mm)."
+msgstr "Die meisten Ihrer Medien haben das ISO-A4-Format (210 x 297 mm)."
+
+#: C/glabels.xml:1110(para)
+msgid "Default: <guilabel>US Letter</guilabel>."
+msgstr "Standard: <guilabel>US-Letter</guilabel>."
+
+#: C/glabels.xml:1119(title)
+msgid "Object defaults"
+msgstr "Objekt-Voreinstellungen"
+
+#: C/glabels.xml:1125(para)
+msgid ""
+"Use these controls to set the default properties of new text objects. These "
+"properties are"
+msgstr ""
+"Verwenden Sie diese Einstellmöglichkeiten, um die Standardeigenschaften neuer "
+"Textobjekte festzulegen. Diese Eigenschaften sind"
+
+#: C/glabels.xml:1130(guilabel)
+msgid "Font"
+msgstr "Schrift"
+
+#: C/glabels.xml:1131(para)
+msgid ""
+"These controls are used to select font family and font size, and whether the "
+"font should bold or in italics."
+msgstr ""
+"Verwenden Sie diese Einstellmöglichkeiten, um die Schriftfamilie und -größe "
+"festzulegen, sowie um anzugeben, ob die Schrift fett oder kursiv dargestellt "
+"werden soll."
+
+#: C/glabels.xml:1136(guilabel) C/glabels.xml:1161(guilabel)
+#: C/glabels.xml:1176(guilabel)
+msgid "Color"
+msgstr "Farbe"
+
+#: C/glabels.xml:1137(para)
+msgid "This control selects the default text color."
+msgstr "Diese Einstellung wählt die Standard-Textfarbe aus."
+
+#: C/glabels.xml:1141(guilabel)
+msgid "Alignment"
+msgstr "Ausrichtung"
+
+#: C/glabels.xml:1142(para)
+msgid ""
+"These controls are used to select the default text alignment (left, center or "
+"right)."
+msgstr ""
+"Mit diesen Einstellungen wählen Sie die vorgegebene Textausrichtung (links, "
+"mittig oder rechts)."
+
+#: C/glabels.xml:1151(para)
+msgid ""
+"Use these controls to set the default properties of lines and outlines of new "
+"objects. These properties are"
+msgstr ""
+"Verwenden sie diese Einstellmöglichkeiten, um die Standardeigenschaften von "
+"Begrenzungen und neuen Objekten festzulegen. Diese Eigenschaften sind"
+
+#: C/glabels.xml:1156(guilabel)
+msgid "Width"
+msgstr "Breite"
+
+#: C/glabels.xml:1157(para)
+msgid "This control selects the default line width."
+msgstr "Diese Einstellung wählt die Standard-Linienbreite aus."
+
+#: C/glabels.xml:1162(para)
+msgid "This control selects the default line color."
+msgstr "Diese Einstellung wählt die Standard-Linienfarbe aus."
+
+#: C/glabels.xml:1169(guilabel)
+msgid "Fill"
+msgstr "Füllen"
+
+#: C/glabels.xml:1171(para)
+msgid ""
+"Use these controls to set the default fill properties of new objects. These "
+"properties are"
+msgstr ""
+"Verwenden Sie diese Einstellmöglichkeiten zum Angeben der "
+"Füllungseigenschaften eines neuen Objekts. Diese Eigenschaften sind"
+
+#: C/glabels.xml:1177(para)
+msgid "This control selects the default fill color."
+msgstr "Diese Einstellung wählt die Standard-Füllfarbe aus."
+
+#: C/glabels.xml:1191(title)
+msgid "Document Merge Tutorial"
+msgstr "Anleitung zur Dokumentmischung"
+
+#: C/glabels.xml:1193(para)
+msgid ""
+"Document Merge (sometimes called \"Mail Merge\") is a powerful feature that "
+"allows a unique label or card to be printed for each record in an external "
+"data source. It is however, the most mis-understood feature of "
+"<application>gLabels</application>. The following examples will step through "
+"a couple of common tasks using the document merge feature."
+msgstr ""
+"Dokumentmischung ist ein mächtiges Funktionsmerkmal, das es Ihnen ermöglicht, "
+"ein einzelnes Etikett oder eine einzelne Karte für jeden Datensatz aus einer "
+"externen Datenquelle zu erstellen. Es ist allerdings die am häufigsten "
+"missverstandene Funktion in <application>gLabels</application>. Die folgenden "
+"Beispiele führen Sie schrittweise durch viele der Aufgaben, die Sie mit der "
+"Dokumentmischung ausführen können."
+
+#: C/glabels.xml:1201(title)
+msgid "Example 1: Name Tags Using a CSV File"
+msgstr "Beispiel 1: Namensschilder unter Nutzung einer CSV-Datei"
+
+#: C/glabels.xml:1203(para)
+msgid ""
+"In this example we are organizing an orientation party for the new crew "
+"members of our ship. We have a list of freshman crew members that we created "
+"in <application>gnumeric</application> and exported as the following CSV "
+"file. We could have created this file by using a text editor, but heck it is "
+"the 23rd century."
+msgstr ""
+"In diesem Beispiel organisieren Sie eine Orientierungsparty für die neuen "
+"Mannschaftsmitglieder Ihres Schiffes. Eine Liste der neuen Mitglieder haben "
+"Sie in <application>gnumeric</application> erstellt und in die folgende CSV-"
+"Datei exportiert. Sie könnten diese Datei auch in einem Texteditor erstellen, "
+"aber schließlich leben wir im 23. Jahrhundert..."
+
+#: C/glabels.xml:1209(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"Name,Department,SN\n"
+"\"Jim Kirk\",Management,\"SC937-0176 CEC\"\n"
+"\"Mr. Spock\",Sciences,S179-276SP\n"
+"\"Leonard McCoy\",Medicine,unknown\n"
+"\"Montgomery Scott\",Engineering,SE-197-54T\n"
+"      "
+msgstr ""
+"\n"
+"Name,Department,SN\n"
+"\"Jim Kirk\",Management,\"SC937-0176 CEC\"\n"
+"\"Mr. Spock\",Sciences,S179-276SP\n"
+"\"Leonard McCoy\",Medicine,unknown\n"
+"\"Montgomery Scott\",Engineering,SE-197-54T\n"
+"      "
+
+#: C/glabels.xml:1217(para)
+msgid ""
+"In <application>gLabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5395 \"Name Badge "
+"Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item to "
+"display the <guilabel>merge properties</guilabel> dialog. We use this dialog "
+"to select the source type (in our case CSV) and the merge source (filename) "
+"as shown."
+msgstr ""
+"In <application>glabels</application> haben Sie ein neues Dokument unter "
+"Verwendung der Dokumentvorlage »Avery 5395 Namensschild-Etiketten« erzeugt. "
+"Zunächst öffnen Sie mittels <menuchoice><guimenu>Objekte</"
+"guimenu><guimenuitem>Mischeinstellungen</guimenuitem></menuchoice> den Dialog "
+"<guilabel>Mischeinstellungen</guilabel>. In diesem Dialog wählen Sie wie "
+"gezeigt die Datenquelle aus, in diesem Fall CSV, sowie die Mischquelle "
+"(Dateiname)."
+
+#: C/glabels.xml:1227(title) C/glabels.xml:1344(title)
+#: C/glabels.xml:1460(title)
+msgid "Merge properties dialog"
+msgstr "Mischeinstellungen-Dialog"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1238(para)
+msgid ""
+"Before applying the merge source, we uncheck the first record since it is "
+"only column headers from our original <application>gnumeric</application> "
+"spreadsheet and would simply waste our first label. We could also unselect "
+"any other records that we didn't want to print a label for."
+msgstr ""
+"Bevor Sie eine neue Einmischquelle anwenden, sollten Sie den ersten Datensatz "
+"deaktivieren, weil dieser nur Spaltenköpfe aus der originalen "
+"<application>gnumeric</application>-Tabelle enthält. Dadurch würde nur das "
+"erste Etikett verschwendet. Weiterhin können Sie alle anderen Datensätze "
+"entfernen, die Sie nicht für ein Etikett verwenden wollen."
+
+#: C/glabels.xml:1243(para) C/glabels.xml:1361(para)
+msgid ""
+"We can also view each record in more detail by clicking on the appropriate "
+"expander (the little triangles) as shown. Once we are satisfied with the "
+"selections in this dialog we click <guibutton>OK</guibutton> to accept the "
+"changes."
+msgstr ""
+"Sie können jeden Datensatz detailliert betrachten, indem Sie auf die kleinen "
+"Dreiecke klicken. Sobald Sie mit der Auswahl zufrieden sind, klicken Sie auf "
+"<guibutton>OK</guibutton>, um die Änderungen anzuwenden."
+
+#: C/glabels.xml:1248(para) C/glabels.xml:1366(para)
+msgid ""
+"Now we start adding objects to our <application>gLabels</application> "
+"document as shown."
+msgstr ""
+"Nun beginnen wir mit dem Hinzufügen von Objekten zu unserem "
+"<application>gLabels</application>-Dokument, wie gezeigt."
+
+#: C/glabels.xml:1252(title) C/glabels.xml:1370(title)
+#: C/glabels.xml:1488(title)
+msgid "Adding objects"
+msgstr "Hinzufügen von Objekten"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1263(para)
+msgid ""
+"In this example we have added three text objects and a barcode object. The "
+"first text object contains only simple literal text (\"Hello, my name is\"). "
+"The second text object contains a single merge field (\"${1}\") corresponding "
+"to the first field of a record (first column of a line) which contains the "
+"new crew member's full name. The third text field contains both literal text "
+"(\"Department: \") followed by a single merge field (\"${2}\") corresponding "
+"to the second field or the crew member's department. The barcode object is "
+"configured to use field (or key) \"3\" which contains our crew member's "
+"starfleet serial number."
+msgstr ""
+"In diesem Beispiel haben Sie drei Textobjekte und ein Strichcodeobjekt "
+"hinzugefügt. Das erste Textobjekt enthält nur einfachen Text (»Hello, my name "
+"is«). Das zweite Textobjekt enthält ein einfaches Mischfeld (»${1}«), welches "
+"zum ersten Feld eines Datensatzes (erste Spalte einer Zeile) korrespondiert, "
+"die den vollen Namen eines Mannschaftsmitglieds enthält. Das dritte Feld "
+"enthält sowohl einfachen Text (»Department:«) als auch ein einzelnes Mischfeld "
+"(»${2}«), welches zum zweiten Feld oder zum Arbeitsgebiet eines "
+"Mannschaftsmitglieds korrespondiert. Das Strichcodefeld ist so eingestellt, "
+"das Feld (oder den Schlüssel) »3« zu verwenden, das die Sternenflotten-"
+"Seriennummer des Mannschaftsmitglieds enthält."
+
+#: C/glabels.xml:1273(para)
+msgid ""
+"Now we can print our name tags by selecting the <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu item. This will "
+"display print dialog as shown below."
+msgstr ""
+"Nun können Sie Ihre Namensschilder drucken, indem Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Drucken</guimenuitem></"
+"menuchoice> wählen. Der unten angezeigte Druckdialog wird geöffnet."
+
+#: C/glabels.xml:1280(title)
+msgid "Printing name tags"
+msgstr "Drucken der Namensschilder"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1291(para) C/glabels.xml:1406(para) C/glabels.xml:1520(para)
+msgid ""
+"Just to make sure our labels are going to look okay, we select the "
+"<guilabel>Print outlines</guilabel> option and click <guibutton>Print "
+"Preview</guibutton>. This will display a print preview dialog as shown below."
+msgstr ""
+"Um sicher zu stellen, dass Ihre Etiketten gut aussehen, wählen Sie die Option "
+"<guilabel>Begrenzungen drucken</guilabel> und klicken auf "
+"<guibutton>Druckvorschau</guibutton>. Der Druckvorschaudialog wird geöffnet, "
+"wie unten angezeigt."
+
+#: C/glabels.xml:1298(title)
+msgid "Name tags preview"
+msgstr "Vorschau der Namensschilder"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1309(para)
+msgid ""
+"Everything looks good, so we can now load up our printer with the appropriate "
+"label stock, print our name tags and start beaming our guests aboard."
+msgstr ""
+"Alles sieht gut aus, also können wir jetzt den Drucker mit den entsprechenden "
+"Etiketten bestücken, die Namensschilder drucken und die Gäste an Bord beamen."
+
+#: C/glabels.xml:1316(title)
+msgid "Example 2: Address Labels Using a CSV File"
+msgstr "Beispiel 2: Adressetiketten unter Nutzung einer CSV-Datei"
+
+#: C/glabels.xml:1318(para)
+msgid ""
+"In this example we are going to throw a party and need to print mailing "
+"address labels for our invitations. We have a list of our closest friends "
+"that we created in <application>gnumeric</application> and exported as the "
+"following CSV file. It should be noted that not everyone has a middle initial "
+"or a two line address."
+msgstr ""
+"In diesem Beispiel planen Sie eine Party. Dafür benötigen Sie Adressetiketten "
+"für die Einladungen. Sie haben eine Liste Ihrer besten Freunde in "
+"<application>gnumeric</application> erstellt, die Sie in die folgende CSV-"
+"Datei exportiert haben. Es ist zu beachten, dass nicht jeder einen zweiten "
+"Vornamen oder eine zweizeilige Adresse hat."
+
+#: C/glabels.xml:1324(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"LAST,FIRST,MI,ADDR1,ADDR2,CITY,STATE,ZIP\n"
+",,,,,,,\n"
+"Critter,Ess,S,\"123 Faux St.\",,Alexandria,VA,22310\n"
+"Doe,John,,\"Apt 1X\",\"451 Mystery St.\",Trenton,NJ,08601\n"
+"Summers,Joyce,,\"1630 Revello Dr\",,Sunnydale,CA,95037\n"
+"McGarret,Steve,O,\"404 Piikoi Street\",,Honolulu,HI,96813\n"
+"Kramer,Cosmo,,\"Apt 5B\",\"129 W. 81 St.\",\"New York\",NY,10024-7207\n"
+"      "
+msgstr ""
+"\n"
+"LAST,FIRST,MI,ADDR1,ADDR2,CITY,STATE,ZIP\n"
+",,,,,,,\n"
+"Critter,Ess,S,\"123 Faux St.\",,Alexandria,VA,22310\n"
+"Doe,John,,\"Apt 1X\",\"451 Mystery St.\",Trenton,NJ,08601\n"
+"Summers,Joyce,,\"1630 Revello Dr\",,Sunnydale,CA,95037\n"
+"McGarret,Steve,O,\"404 Piikoi Street\",,Honolulu,HI,96813\n"
+"Kramer,Cosmo,,\"Apt 5B\",\"129 W. 81 St.\",\"New York\",NY,10024-7207\n"
+"      "
+
+#: C/glabels.xml:1334(para)
+msgid ""
+"In <application>gLabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5512 \"Address "
+"Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item to "
+"display the <guilabel>merge properties</guilabel> dialog. We use this dialog "
+"to select the source type (in our case CSV) and the merge source (filename) "
+"as shown."
+msgstr ""
+"In <application>glabels</application> haben Sie ein neues Dokument unter "
+"Verwendung der Dokumentvorlage »Avery 5512 Adressetiketten« erzeugt. Zunächst "
+"öffnen Sie mittels <menuchoice><guimenu>Objekte</"
+"guimenu><guimenuitem>Mischeinstellungen</guimenuitem></menuchoice> den Dialog "
+"<guilabel>Mischeinstellungen</guilabel>. In diesem Dialog wählen Sie wie "
+"gezeigt die Datenquelle aus, in diesem Fall CSV, sowie die Mischquelle "
+"(Dateiname)."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1355(para)
+msgid ""
+"Before applying the merge source, we uncheck the first record since it is "
+"only column headers from our original <application>gnumeric</application> "
+"spreadsheet and would simply waste our first label. We also unselect the "
+"second record which is empty (an artifact of our original spreadsheet). We "
+"could also unselect any other records that we didn't want to print a label "
+"for."
+msgstr ""
+"Bevor Sie eine neue Einmischquelle anwenden, sollten Sie den ersten Datensatz "
+"deaktivieren, weil dieser nur Spaltenköpfe aus der originalen "
+"<application>gnumeric</application>-Tabelle enthält. Dadurch würde nur das "
+"erste Etikett verschwendet. Weiterhin können Sie alle anderen Datensätze "
+"entfernen, die Sie nicht für ein Etikett verwenden wollen."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1381(para)
+msgid ""
+"In this example we have a single text object. This text object contains all "
+"of our merge fields organized on multiple lines as a mailing address. Notice "
+"that fields ${4} and ${5} (corresponding to ADDR1 and ADDR2) are each located "
+"with no other text on their own lines. When <application>gLabels</"
+"application> encounters a field as the only text on a line, it will not "
+"expand the line if the field is empty."
+msgstr ""
+"In diesem Beispiel haben Sie ein einzelnes Textobjekt. Dieses Textobjekt "
+"enthält alle Einmischfelder, angeordnet in mehreren Zeilen wie eine "
+"Versandadresse. Beachten Sie, dass die Felder ${4} und ${5} (korrespondierend "
+"zu ADDR1 und ADDR2) jeweils keinen weiteren Text in deren Zeilen enthalten. "
+"Wenn <application>glabels</application> ein solches Feld als »nur Text« in "
+"einer Zeile erkennt, wird die Zeile nicht expandiert, falls das Feld leer ist."
+
+#: C/glabels.xml:1388(para)
+msgid ""
+"Now we can print our address labels by selecting the "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></"
+"menuchoice> menu item. This will display print dialog as shown below."
+msgstr ""
+"Nun können Sie Ihre Adressetiketten drucken, indem Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Drucken</guimenuitem></"
+"menuchoice> wählen. Der unten angezeigte Druckdialog wird geöffnet."
+
+#: C/glabels.xml:1395(title) C/glabels.xml:1509(title)
+msgid "Printing address labels"
+msgstr "Adressetiketten drucken"
+
+#: C/glabels.xml:1413(title) C/glabels.xml:1527(title)
+msgid "Address labels preview"
+msgstr "Adressetiketten-Vorschau"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1424(para) C/glabels.xml:1538(para)
+msgid ""
+"Everything looks good, so we can now load up our printer with the appropriate "
+"label stock, print our address labels and start mailing our party invitations."
+msgstr ""
+"Alles sieht gut aus, also können wir jetzt den Drucker mit den entsprechenden "
+"Etiketten bestücken, die Adressetiketten drucken und die Einladungen zur "
+"Party versenden."
+
+#: C/glabels.xml:1431(title)
+msgid ""
+"Example 3: Address Labels Using the <application>Evolution</application> "
+"Addressbook"
+msgstr ""
+"Beispiel 3: Adressetiketten unter Nutzung des <application>Evolution</"
+"application>-Adressbuchs"
+
+#: C/glabels.xml:1433(para)
+msgid ""
+"Our last party was a great success, and now we need to print mailing address "
+"labels for the invitations to a new one. To simplify this, we can use the "
+"<application>Evolution</application> addressbook, because the address data of "
+"all our friends is stored there."
+msgstr ""
+"Ihre letzte Party war ein voller Erfolg. Nun benötigen Sie wieder "
+"Adressetiketten für die Einladung zu einer neuen Party. Um dies zu "
+"vereinfachen, können Sie das <application>Evolution</application>-Adressbuch "
+"nutzen, denn die Adressdaten aller Ihrer Freunde sind dort gespeichert."
+
+#: C/glabels.xml:1439(para)
+msgid ""
+"Depending on how your copy of <application>gLabels</application> was "
+"packaged, this option could be unavailable. Support for the "
+"<application>Evolution</application> addressbook will only be available if "
+"the <application>evolution-data-server</application> and its development "
+"files were present when <application>gLabels</application> was built. Please "
+"keep this in mind if you build <application>gLabels</application> directly "
+"from source."
+msgstr ""
+"Abhängig davon, wie das von Ihnen genutzte <application>gLabels</application>-"
+"Paket erstellt wurde, könnte diese Option nicht verfügbar sein. Die "
+"Unterstützung für das <application>Evolution</application>-Adressbuch ist nur "
+"vorhanden, wenn bei der Erstellung von <application>gLabels</application> das "
+"Paket <application>evolution-data-server</application> sowie dessen "
+"Entwicklerdateien verfügbar waren. Bitte berücksichtigen dies auch dann, wenn "
+"Sie <application>gLabels</application> direkt aus den Quellen erstellen."
+
+#: C/glabels.xml:1445(para)
+msgid ""
+"If the <application>gLabels</application> package from your distribution "
+"lacks this support, you may wish to contact the package maintainer or file a "
+"bug against the package to request it."
+msgstr ""
+"Falls das <application>gLabels</application>-Paket Ihrer Distribution diese "
+"Unterstützung nicht bieten sollte, kontaktieren Sie bitte den Ersteller des "
+"Pakets oder senden Sie einen Fehlerbericht, um dies einzufordern."
+
+#: C/glabels.xml:1450(para)
+msgid ""
+"In <application>glabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5512 \"Address "
+"Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item to "
+"display the <guilabel>Merge properties</guilabel> dialog. We use this dialog "
+"to select the source type (in our case <guilabel>Data from default Evolution "
+"addressbook</guilabel>) as shown."
+msgstr ""
+"In <application>glabels</application> haben Sie ein neues Dokument unter "
+"Verwendung der Dokumentvorlage »Avery 5512 Adressetiketten« erzeugt. Zunächst "
+"öffnen Sie mittels <menuchoice><guimenu>Objekte</"
+"guimenu><guimenuitem>Mischeinstellungen</guimenuitem></menuchoice> den Dialog "
+"<guilabel>Mischeinstellungen</guilabel>. In diesem Dialog wählen Sie wie "
+"gezeigt die Datenquelle aus, in diesem Fall <guilabel>Daten aus dem "
+"vorgegebenen Evolution-Adressbuch</guilabel>, wie gezeigt."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1471(para)
+msgid ""
+"Once we have chosen <guilabel>Data from default Evolution addressbook </"
+"guilabel> as our merge source, we will get a full list of its content. "
+"Initially, all entries are checked. Assuming we were planning a really big "
+"party, we could leave this selection untouched (but let's keep our budget in "
+"mind). We will now select or unselect certain entries by clicking on the "
+"appropriate checkboxes, or we could use the <guibutton>Select all</guibutton> "
+"and <guibutton>Unselect all </guibutton> buttons to activate or deactivate "
+"all entries in the address book."
+msgstr ""
+"Sobald  Sie <guilabel>Daten aus dem vorgegebenem Evolution-Adressbuch</"
+"guilabel> als Mischquelle gewählt haben, wird eine vollständige Liste des "
+"Inhalts angezeigt. Anfänglich sind alle Einträge ausgewählt. Angenommen, Sie "
+"planen eine wirklich große Party, können Sie die Auswahl unverändert "
+"belassen. Behalten Sie jedoch dabei Ihre finanziellen Möglichkeiten im Auge. "
+"Sie können bestimmte Einträge auswählen oder wieder abwählen, indem Sie die "
+"entsprechenden Ankreuzfelder anklicken. Alternativ können Sie durch Anklicken "
+"der Knöpfe <guibutton>Alle markieren</guibutton> oder <guibutton>Markierung "
+"aufheben</guibutton> alle Einträge des Adressbuchs aktivieren oder "
+"deaktivieren. "
+
+#: C/glabels.xml:1479(para)
+msgid ""
+"We can also view each entry in more detail by clicking on the appropriate "
+"expander (the little triangles) as shown. Once we are satisfied with the "
+"selections in this dialog, we will click the <guibutton>OK</guibutton> button "
+"to accept the changes."
+msgstr ""
+"Sie können jeden Datensatz detailliert betrachten, indem Sie auf die kleinen "
+"Dreiecke klicken. Sobald Sie mit der Auswahl zufrieden sind, klicken Sie auf "
+"<guibutton>OK</guibutton>, um die Änderungen anzuwenden."
+
+#: C/glabels.xml:1484(para)
+msgid "Now we start adding objects to our glabels document as shown."
+msgstr ""
+"Nun beginnen wir mit dem Hinzufügen von Objekten zu unserem "
+"<application>gLabels</application>-Dokument, wie gezeigt."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1499(para)
+msgid ""
+"In this example we have a single text object again. This text object contains "
+"all of our merge fields organized on multiple lines as a mailing address."
+msgstr ""
+"In diesem Beispiel haben Sie ein einzelnes Textobjekt. Dieses Textobjekt "
+"enthält alle Einmischfelder, angeordnet in mehreren Zeilen wie eine "
+"Versandadresse."
+
+#: C/glabels.xml:1502(para)
+msgid ""
+"Now we can print our address labels by selecting the "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></"
+"menuchoice> menu item. This will display the print dialog as shown below."
+msgstr ""
+"Nun können Sie Ihre Adressetiketten drucken, indem Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Drucken</guimenuitem></"
+"menuchoice> wählen. Der unten angezeigte Druckdialog wird geöffnet."
+
+#: C/glabels.xml:1551(title)
+msgid "Manually Creating New Templates"
+msgstr "Manuelles Erstellen neuer Vorlagen"
+
+#: C/glabels.xml:1553(para)
+msgid ""
+"Predefined templates are defined by XML files located in <filename>${prefix}/"
+"share/glabels/</filename>, where <filename>${prefix}</filename> is usually "
+"something like <filename>/usr/local</filename> or <filename>/usr</filename> "
+"depending on the configuration option <filename>prefix</filename>. "
+"<application>gLabels</application> will use all files of the form <filename>*-"
+"templates.xml</filename> or <filename>*.template</filename>, that it finds in "
+"<filename>${prefix}/share/glabels/</filename> and <filename>${HOME}/.glabels/"
+"</filename>. Additional templates can be added by creating additional "
+"<filename>*.template</filename> files in either of these directories."
+msgstr ""
+"Vordefinierte Vorlagen sind als XML-Dateien verfügbar, die in <filename>"
+"${prefix}/share/glabels/</filename> gespeichert sind, wobei <filename>"
+"${prefix}</filename> üblicherweise <filename>/usr/local</filename> oder "
+"<filename>/usr</filename> ist, abhängig von der Konfigurationsoption "
+"<filename>prefix</filename>. <application>gLabels</application> verwendet "
+"alle Dateien der Form <filename>*-templates.xml</filename> oder <filename>*."
+"template</filename>, die es in <filename>${prefix}/share/glabels/</filename> "
+"und <filename>${HOME}/.glabels/</filename> findet. Zusätzliche Vorlagen "
+"können unter Verwendung der Dateiendung <filename>*.template</filename> in "
+"einem dieser Ordner gespeichert werden."
+
+#: C/glabels.xml:1566(para)
+msgid ""
+"The format for these files is defined in the DTD: <ulink url=\"http://glabels."
+"sourceforge.net/doc/glabels-2.0.dtd.txt\" type=\"http\">glabels-2.2.dtd</"
+"ulink>. (This DTD also describes other XML formats used by "
+"<application>gLabels</application>.)"
+msgstr ""
+"Das Format dieser Dateien ist in einer DTD definiert: <ulink url=\"http://"
+"glabels.sourceforge.net/doc/glabels-2.0.dtd.txt\" type=\"http\">glabels-2.2."
+"dtd</ulink>. Diese DTD beschreibt außerdem weitere von gLabels benutzte XML-"
+"Formate."
+
+#: C/glabels.xml:1572(title)
+msgid "Assumptions/caveats"
+msgstr "Voraussetzungen"
+
+#: C/glabels.xml:1575(para)
+msgid ""
+"A sheet contains only one size of label or card (if a sheet contains more "
+"than one size of item, it can be split into multiple templates for multiple "
+"pass printing)"
+msgstr ""
+"Eine Seite enthält nur eine Etiketten- oder Kartengröße. Falls eine Seite "
+"mehrere Größen enthält, kann sie für das Drucken in mehreren Durchläufen über "
+"mehrere Vorlagen verteilt werden."
+
+#: C/glabels.xml:1580(para)
+msgid ""
+"Distances can be expressed in units of <emphasis>pt</emphasis>, <emphasis>in</"
+"emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis>, or <emphasis>pc</"
+"emphasis>. For example: \"<literal>1.0in</literal>\" or \"<literal>2.54cm</"
+"literal>\". If no units are specified, computer points (<emphasis>pt</"
+"emphasis>) will be assumed (1 <emphasis>pt</emphasis> = 1/72 <emphasis>in</"
+"emphasis> = 0.352778 <emphasis>mm</emphasis>)."
+msgstr ""
+"Abstände können in den Einheiten <emphasis>pt</emphasis>, <emphasis>in</"
+"emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis> oder "
+"<emphasis>pc</emphasis> ausgedrückt werden. Beispiel: »<literal>1.0in</"
+"literal>« oder »<literal>2.54cm</literal>«. Falls keine Einheiten angegeben "
+"werden, nimmt der Rechner Punkt an. ein Punkt (<emphasis>pt</emphasis>) "
+"entspricht = 1/72 <emphasis>in</emphasis> = 0.352778 <emphasis>mm</emphasis>."
+
+#: C/glabels.xml:1593(title)
+msgid "Template Files"
+msgstr "Vorlagedateien"
+
+#: C/glabels.xml:1595(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"&lt;?xml version=\"1.0\"?&gt;\n"
+"&lt;Glabels-templates&gt;\n"
+"\n"
+"   <replaceable>...templates...</replaceable>\n"
+"\n"
+"&lt;/Glabels-templates&gt;\n"
+"      "
+msgstr ""
+"\n"
+"&lt;?xml version=\"1.0\"?&gt;\n"
+"&lt;Glabels-templates&gt;\n"
+"\n"
+"   <replaceable>...Vorlagen...</replaceable>\n"
+"\n"
+"&lt;/Glabels-templates&gt;\n"
+"      "
+
+#: C/glabels.xml:1607(title)
+msgid "Example Template"
+msgstr "Beispielvorlage"
+
+#: C/glabels.xml:1608(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"  &lt;Template brand=\"Avery\" part=\"8160\" size=\"US-Letter\" description=\"Mailing Labels\"&gt;\n"
+"    &lt;Label-rectangle id=\"0\" width=\"189pt\" height=\"72pt\" round=\"5pt\"&gt;\n"
+"      &lt;Markup-margin size=\"5pt\"/&gt;\n"
+"      &lt;Layout nx=\"3\" ny=\"10\" x0=\"11.25pt\" y0=\"36pt\" dx=\"200pt\" dy=\"72pt\"/&gt;\n"
+"    &lt;/Label-rectangle&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"5160\"/&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"6233\"/&gt;\n"
+"  &lt;/Template&gt;\n"
+"      "
+msgstr ""
+"\n"
+"  &lt;Template brand=\"Avery\" part=\"8160\" size=\"US-Letter\" description=\"Mailing Labels\"&gt;\n"
+"    &lt;Label-rectangle id=\"0\" width=\"189pt\" height=\"72pt\" round=\"5pt\"&gt;\n"
+"      &lt;Markup-margin size=\"5pt\"/&gt;\n"
+"      &lt;Layout nx=\"3\" ny=\"10\" x0=\"11.25pt\" y0=\"36pt\" dx=\"200pt\" dy=\"72pt\"/&gt;\n"
+"    &lt;/Label-rectangle&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"5160\"/&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"6233\"/&gt;\n"
+"  &lt;/Template&gt;\n"
+"      "
+
+#: C/glabels.xml:1621(title)
+msgid "Template Node"
+msgstr "Knoten »Template«"
+
+#: C/glabels.xml:1623(para)
+msgid ""
+"A <emphasis>Template</emphasis> node describes a single stationary product. "
+"It must contain one instance of any type of Label node (<emphasis>Label-"
+"rectangle</emphasis>, <emphasis>Label-round</emphasis>, or <emphasis>Label-"
+"cd</emphasis>). This node can be followed by zero or more <emphasis>Alias</"
+"emphasis> nodes."
+msgstr ""
+"Ein <emphasis>Template</emphasis>-Knoten beschreibt ein einzelnes Produkt. Es "
+"muss eine Instanz eines der anderen Label-Knoten (<emphasis>Label-rectangle</"
+"emphasis>, <emphasis>Label-round</emphasis>, or <emphasis>Label-cd</"
+"emphasis>) enthalten. Auf diesen Knoten können einer, mehrere oder kein "
+"<emphasis>Alias</emphasis>-Knoten folgen."
+
+#: C/glabels.xml:1637(para) C/glabels.xml:1712(para) C/glabels.xml:1789(para)
+#: C/glabels.xml:1834(para) C/glabels.xml:1910(para) C/glabels.xml:1943(para)
+#: C/glabels.xml:1994(para) C/glabels.xml:2037(para) C/glabels.xml:2096(para)
+#: C/glabels.xml:2173(para)
+msgid "Property"
+msgstr "Eigenschaft"
+
+#: C/glabels.xml:1640(para) C/glabels.xml:1715(para) C/glabels.xml:1792(para)
+#: C/glabels.xml:1837(para) C/glabels.xml:1913(para) C/glabels.xml:1946(para)
+#: C/glabels.xml:1997(para) C/glabels.xml:2040(para) C/glabels.xml:2099(para)
+#: C/glabels.xml:2176(para)
+msgid "Description"
+msgstr "Beschreibung"
+
+#: C/glabels.xml:1646(para) C/glabels.xml:2182(para)
+msgid "brand"
+msgstr "brand"
+
+#: C/glabels.xml:1648(para)
+msgid "Brand or manufacturer of stationary product. E.g. \"Avery\""
+msgstr "Marke oder Hersteller des Produkts, z.B. »Avery«"
+
+#: C/glabels.xml:1653(para) C/glabels.xml:2188(para)
+msgid "part"
+msgstr "part"
+
+#: C/glabels.xml:1655(para)
+msgid "Part number or name of stationary product. E.g. \"8160\""
+msgstr "Bestellnummer oder Name des Produkts, z.B. »8160«"
+
+#: C/glabels.xml:1660(para) C/glabels.xml:1919(para)
+msgid "size"
+msgstr "size"
+
+#: C/glabels.xml:1662(para)
+msgid "Size of sheet. E.g., \"US-Letter,\" \"A4\", ..."
+msgstr "Größe des Papiers, z.B.  »US-Letter«, »A4«, …"
+
+#: C/glabels.xml:1666(para)
+msgid "description"
+msgstr "description"
+
+#: C/glabels.xml:1668(para)
+msgid "Description of stationary product. E.g, \"Mailing Labels.\""
+msgstr "Beschreibung des Produkts, z.B. »Mailing Labels«."
+
+#: C/glabels.xml:1673(para)
+msgid "_description"
+msgstr "_description"
+
+#: C/glabels.xml:1675(para)
+msgid ""
+"Translatable description of stationary product. E.g, \"Mailing Labels."
+"\" (Only useful for predefined templates)"
+msgstr ""
+"Übersetzbare Beschreibung des Produkts, z.B. »Mailing Labels« (nur sinnvoll "
+"für vordefinierte Vorlagen)"
+
+#: C/glabels.xml:1681(para) C/glabels.xml:1727(para) C/glabels.xml:1857(para)
+msgid "width"
+msgstr "width"
+
+#: C/glabels.xml:1683(para)
+msgid "Page width. Only valid if size=\"Other\""
+msgstr "Seitenbreite. Nur gültig, wenn als Größe »Other« festgelegt ist."
+
+#: C/glabels.xml:1687(para) C/glabels.xml:1731(para) C/glabels.xml:1864(para)
+msgid "height"
+msgstr "height"
+
+#: C/glabels.xml:1689(para)
+msgid "Page height. Only valid if size=\"Other\""
+msgstr "Seitenhöhe. Nur gültig, wenn als Größe »Other« festgelegt ist."
+
+#: C/glabels.xml:1699(title)
+msgid "Label-rectangle Node"
+msgstr "Knoten »Label-rectangle«"
+
+#: C/glabels.xml:1701(para)
+msgid ""
+"A <emphasis>Label-rectangle</emphasis> node describes the dimensions of a "
+"single label or business card that is rectangular in shape (may have rounded "
+"edges)."
+msgstr ""
+"Ein <emphasis>Label-rectangle</emphasis>-Knoten beschreibt die Abmessungen "
+"eines einzelnen Etiketts oder einer einzelnen Karte in rechteckiger Form, "
+"wobei abgerundete Ecken möglich sind."
+
+#: C/glabels.xml:1721(para) C/glabels.xml:1798(para) C/glabels.xml:1843(para)
+msgid "id"
+msgstr "id"
+
+#: C/glabels.xml:1723(para) C/glabels.xml:1800(para) C/glabels.xml:1845(para)
+msgid "Reserved for future use. Should always be 0."
+msgstr "Für zukünftige Verwendung reserviert. Sollte immer 0 sein."
+
+#: C/glabels.xml:1728(para)
+msgid "Width of label/card"
+msgstr "Breite des Etiketts oder der Karte"
+
+#: C/glabels.xml:1732(para)
+msgid "Height of label/card"
+msgstr "Höhe des Etiketts oder der Karte"
+
+#: C/glabels.xml:1735(para)
+msgid "round"
+msgstr "round"
+
+#: C/glabels.xml:1737(para)
+msgid ""
+"Radius of corners. For items with square edges (business cards), the radius "
+"should be 0."
+msgstr ""
+"Radius der Ecken. Für Objekte mit nicht abgerundeten Ecken (Visitenkarten) "
+"sollte der Radius 0 sein."
+
+#: C/glabels.xml:1742(para)
+msgid "x_waste"
+msgstr "x_waste"
+
+#: C/glabels.xml:1744(para)
+msgid ""
+"Amount of horizontal waste (over-print) to allow. This is useful for "
+"minimizing alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+"Erlaubte Breite des horizontalen Überdruckens. Dies minimiert "
+"Ausrichtungsprobleme auf anderen als weißen Hintergründen (z.B. Bilder)."
+
+#: C/glabels.xml:1750(para)
+msgid "y_waste"
+msgstr "y_waste"
+
+#: C/glabels.xml:1752(para)
+msgid ""
+"Amount of vertical waste (over-print) to allow. This is useful for minimizing "
+"alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+"Erlaubte Breite des vertikalen Überdruckens. Dies minimiert "
+"Ausrichtungsprobleme auf anderen als weißen Hintergründen (z.B. Bilder)."
+
+#: C/glabels.xml:1763(title)
+msgid "Label-rectangle Parameters"
+msgstr "Parameter zu Label-rectangle "
+
+#: C/glabels.xml:1777(title)
+msgid "Label-round Node"
+msgstr "Knoten »Label-round«"
+
+#: C/glabels.xml:1779(para)
+msgid ""
+"A <emphasis>Label-round</emphasis> node describes the dimensions of a simple "
+"round label (not a CD)."
+msgstr ""
+"Ein <emphasis>Label-round</emphasis>-Knoten beschreibt die Abmessungen eines "
+"einfachen Rundetiketts (nicht einer CD)."
+
+#: C/glabels.xml:1804(para) C/glabels.xml:1849(para) C/glabels.xml:2015(para)
+msgid "radius"
+msgstr "radius"
+
+#: C/glabels.xml:1805(para)
+msgid "Radius (1/2 diameter) of label"
+msgstr "Radius (halber Durchmesser) des Etiketts"
+
+#: C/glabels.xml:1808(para) C/glabels.xml:1871(para)
+msgid "waste"
+msgstr "waste"
+
+#: C/glabels.xml:1810(para) C/glabels.xml:1873(para)
+msgid ""
+"Amount of waste (over-print) to allow. This is useful for minimizing "
+"alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+"Erlaubte Breite des Überdruckens. Dies minimiert Ausrichtungsprobleme auf "
+"anderen als weißen Hintergründen (z.B. Bilder)."
+
+#: C/glabels.xml:1822(title)
+msgid "Label-cd Node"
+msgstr "Knoten »Label-cd«"
+
+#: C/glabels.xml:1824(para)
+msgid ""
+"A <emphasis>Label-cd</emphasis> node describes the dimensions of a CD, DVD, "
+"or business card CD."
+msgstr ""
+"Ein <emphasis>Label-cd</emphasis>-Knoten beschreibt die Abmessungen einer CD, "
+"DVD oder Visitenkarten-CD."
+
+#: C/glabels.xml:1850(para)
+msgid "Outer radius of label"
+msgstr "Äußerer Radius des Etiketts"
+
+#: C/glabels.xml:1853(para)
+msgid "hole"
+msgstr "hole"
+
+#: C/glabels.xml:1854(para)
+msgid "Radius of concentric hole"
+msgstr "Radius des Mittellochs"
+
+#: C/glabels.xml:1859(para)
+msgid ""
+"If present, the label is clipped to the given width. (Useful for \"business "
+"card CDs\")."
+msgstr ""
+"Falls vorhanden, wird das Etikett auf die angegebene Größe begrenzt (nützlich "
+"für »Visitenkarten-CDs«)"
+
+#: C/glabels.xml:1866(para)
+msgid ""
+"If present, the label is clipped to the given height. (Useful for \"business "
+"card CDs\")."
+msgstr ""
+"Falls vorhanden, wird das Etikett auf die angegebene Höhe begrenzt (nützlich "
+"für »Visitenkarten-CDs«)"
+
+#: C/glabels.xml:1884(title)
+msgid "CD Label Parameters"
+msgstr "CD-Label-Parameter"
+
+#: C/glabels.xml:1898(title)
+msgid "Markup-margin Node"
+msgstr "Knoten »Markup-margin«"
+
+#: C/glabels.xml:1900(para)
+msgid ""
+"A <emphasis>Markup-margin</emphasis> describes a margin along all edges of a "
+"label."
+msgstr ""
+"Ein <emphasis>Markup-margin</emphasis>-Knoten beschreibt die Ränder entlang "
+"der Seiten eines Etiketts."
+
+#: C/glabels.xml:1921(para)
+msgid ""
+"Size of the margin. I.e. the distance of the margin line from the edge of the "
+"card/label."
+msgstr ""
+"Randbreite. Die Breite des Bereichs zwischen der Randlinie und dem Rand des "
+"Etiketts/der Karte."
+
+#: C/glabels.xml:1932(title)
+msgid "Markup-line Node"
+msgstr "Knoten »Markup-line«"
+
+#: C/glabels.xml:1934(para)
+msgid "A <emphasis>Markup-line</emphasis> describes a markup line."
+msgstr ""
+"Ein <emphasis>Markup-line</emphasis>-Knoten beschreibt eine Markierungslinie."
+
+#: C/glabels.xml:1952(para) C/glabels.xml:2046(para)
+msgid "x1"
+msgstr "x1"
+
+#: C/glabels.xml:1954(para)
+msgid "x coordinate of 1st endpoint of the line segment."
+msgstr "x-Koordinate des Anfangspunkts des Linienabschnitts."
+
+#: C/glabels.xml:1958(para) C/glabels.xml:2052(para)
+msgid "y1"
+msgstr "y1"
+
+#: C/glabels.xml:1960(para)
+msgid "y coordinate of 1st endpoint of the line segment."
+msgstr "y-Koordinate des Anfangspunkts des Linienabschnitts."
+
+#: C/glabels.xml:1964(para)
+msgid "x2"
+msgstr "x2"
+
+#: C/glabels.xml:1966(para)
+msgid "x coordinate of 2nd endpoint of the line segment."
+msgstr "x-Koordinate des Endpunkts des Linienabschnitts."
+
+#: C/glabels.xml:1970(para)
+msgid "y2"
+msgstr "y2"
+
+#: C/glabels.xml:1972(para)
+msgid "y coordinate of 2nd endpoint of the line segment."
+msgstr "y-Koordinate des Endpunkts des Linienabschnitts."
+
+#: C/glabels.xml:1982(title)
+msgid "Markup-circle Node"
+msgstr "Knoten »Markup-circle«"
+
+#: C/glabels.xml:1984(para)
+msgid "A <emphasis>Markup-circle</emphasis> describes a markup circle."
+msgstr ""
+"Ein <emphasis>Markup-circle</emphasis>-Knoten beschreibt einen "
+"Markierungskreis."
+
+#: C/glabels.xml:2003(para) C/glabels.xml:2119(para)
+msgid "x0"
+msgstr "x0"
+
+#: C/glabels.xml:2005(para)
+msgid "x coordinate of circle origin (center)."
+msgstr "x-Koordinate des Kreismittelpunkts."
+
+#: C/glabels.xml:2009(para) C/glabels.xml:2126(para)
+msgid "y0"
+msgstr "y0"
+
+#: C/glabels.xml:2011(para)
+msgid "y coordinate of circle origin (center)."
+msgstr "y-Koordinate des Kreismittelpunkts."
+
+#: C/glabels.xml:2016(para)
+msgid "Radius of circle."
+msgstr "Radius des Kreises."
+
+#: C/glabels.xml:2025(title)
+msgid "Markup-rect Node"
+msgstr "Knoten »Markup-rect«"
+
+#: C/glabels.xml:2027(para)
+msgid "A <emphasis>Markup-rect</emphasis> describes a markup rectangle."
+msgstr ""
+"Ein <emphasis>Markup-rect</emphasis>-Knoten beschreibt ein "
+"Markierungsrechteck."
+
+#: C/glabels.xml:2048(para)
+msgid "x coordinate of upper left corner of rectangle."
+msgstr "x-Koordinate der oberen linken Ecke des Rechtecks."
+
+#: C/glabels.xml:2054(para)
+msgid "y coordinate of upper left corner of rectangle."
+msgstr "y-Koordinate der oberen linken Ecke des Rechtecks."
+
+#: C/glabels.xml:2058(para)
+msgid "w"
+msgstr "w"
+
+#: C/glabels.xml:2060(para)
+msgid "Width of rectangle."
+msgstr "Breite des Rechtecks."
+
+#: C/glabels.xml:2064(para)
+msgid "h"
+msgstr "h"
+
+#: C/glabels.xml:2066(para)
+msgid "Height of rectangle."
+msgstr "Höhe des Rechtecks."
+
+#: C/glabels.xml:2070(para)
+msgid "r"
+msgstr "r"
+
+#: C/glabels.xml:2071(para)
+msgid "Radius of rounded corners of rectangle."
+msgstr "Radius der abgerundeten Ecken des Rechtecks."
+
+#: C/glabels.xml:2080(title)
+msgid "Layout Node"
+msgstr "Knoten »Layout«"
+
+#: C/glabels.xml:2082(para)
+msgid ""
+"A label node may contain multiple <emphasis>Layout</emphasis> children. If "
+"labels are arranged in a simple grid pattern, only one layout is needed. "
+"However, if labels are arranged in multiple grids, such as a running bond "
+"pattern, multiple <emphasis>layout</emphasis> tags can be used. Note: a "
+"single label can always be treated as a grid of one."
+msgstr ""
+"Ein Label-Knoten kann mehrere <emphasis>Layout</emphasis>-Unterknoten "
+"enthalten. Wenn die Etiketten in einem einfachen rechteckigen Raster "
+"angeordnet sind, dann wird nur ein Layout benötigt. Falls die Etiketten "
+"jedoch in komplizierteren Rasteranordnungen vorliegen, können mehrere "
+"<emphasis>Layout</emphasis>-Unterknoten verwendet werden. Beachten Sie, dass "
+"ein einzelnes Etikett immer auch als ein Raster aus Etiketten betrachtet "
+"werden kann."
+
+#: C/glabels.xml:2105(para)
+msgid "nx"
+msgstr "nx"
+
+#: C/glabels.xml:2107(para)
+msgid "Number of labels/cards across in the grid (horizontal)"
+msgstr "Anzahl der Etiketten/Karten im Raster in horizontaler Richtung"
+
+#: C/glabels.xml:2112(para)
+msgid "ny"
+msgstr "ny"
+
+#: C/glabels.xml:2114(para)
+msgid "Number of labels/cards up and down in the grid (vertical)"
+msgstr "Anzahl der Etiketten/Karten im Raster in vertikaler Richtung"
+
+#: C/glabels.xml:2121(para)
+msgid ""
+"Distance from left edge of sheet to the left edge of the left column of cards/"
+"labels in the layout."
+msgstr ""
+"Abstand von linken Rand des Papiers zum linken Rand der linken Reihe der "
+"Karten/Etiketten im Layout."
+
+#: C/glabels.xml:2128(para)
+msgid ""
+"Distance from the top edge of sheet to the top edge of the top row of labels/"
+"cards in the layout."
+msgstr ""
+"Abstand von oberen Rand des Papiers zum oberen Rand der oberen Reihe der "
+"Karten/Etiketten im Layout."
+
+#: C/glabels.xml:2133(para)
+msgid "dx"
+msgstr "dx"
+
+#: C/glabels.xml:2134(para)
+msgid "Horizontal pitch of grid."
+msgstr "Horizontaler Rasterabstand des Zeichengitters."
+
+#: C/glabels.xml:2137(para)
+msgid "dy"
+msgstr "dy"
+
+#: C/glabels.xml:2138(para)
+msgid "Vertical pitch of grid."
+msgstr "Vertikaler Rasterabstand des Zeichengitters."
+
+#: C/glabels.xml:2146(title)
+msgid "Layout Parameters"
+msgstr "Layout-Parameter"
+
+#: C/glabels.xml:2160(title)
+msgid "Alias Node"
+msgstr "Knoten »Alias«"
+
+#: C/glabels.xml:2162(para)
+msgid ""
+"An <emphasis>Alias</emphasis> node provides the name of a product with the "
+"same size and layout characteristics as the parent template."
+msgstr ""
+"Ein <emphasis>Alias</emphasis>-Knoten beschreibt den Namen eines Produkts mit "
+"der gleichen Größe und dem gleichen Layout einer anderen Vorlage."
+
+#: C/glabels.xml:2184(para)
+msgid "The brand or manufacturer of the equivalent product."
+msgstr "Die Marke oder der Hersteller des entsprechenden Produkts."
+
+#: C/glabels.xml:2190(para)
+msgid "The part number or name of the equivalent product."
+msgstr "Die Bestellnummer oder der Name des entsprechenden Produkts."
+
+#: C/glabels.xml:2226(title)
+msgid "About <application>gLabels</application>"
+msgstr "Info zu <application>gLabels</application>"
+
+#: C/glabels.xml:2227(para)
+msgid ""
+"<application>gLabels</application> was written by Jim Evins "
+"(<email>evins@snaught.com</email>). To find more information about "
+"<application>gLabels</application>, please visit the <ulink url=\"http://"
+"glabels.sourceforge.net\" type=\"http\">gLabels Web page</ulink>."
+msgstr ""
+"<application>gLabels</application> wurde von Jim Evins (<email>evins@snaught."
+"com</email>) geschrieben. Weitere Informationen zu <application>gLabels</"
+"application> finden Sie auf der <ulink url=\"http://glabels.sourceforge.net\" "
+"type=\"http\">gLabels-Webseite</ulink>."
+
+#: C/glabels.xml:2232(para)
+msgid ""
+"To report a bug or make a suggestion regarding this application or this "
+"manual, follow the directions at the <ulink url=\"http://glabels.sourceforge."
+"net/contact/\" type=\"http\"><application>gLabels</application> Contact Page</"
+"ulink>."
+msgstr ""
+"Um einen Fehler zu melden oder einen Vorschlag zu dieser Anwendung oder zu "
+"diesem Handbuch zu machen, folgen Sie den Anweisungen auf der <ulink url="
+"\"http://glabels.sourceforge.net/contact/\" type=\"http"
+"\"><application>gLabels</application>-Kontaktseite</ulink>."
+
+#: C/glabels.xml:2238(para)
+msgid ""
+"This program is distributed 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. A copy of this license can be "
+"found at this <ulink url=\"ghelp:gpl\" type=\"help\">link</ulink>, or in the "
+"file COPYING included with the source code of this program."
+msgstr ""
+"Dieses Programm ist freie Software. Sie können es unter den Bedingungen der "
+"<citetitle>GNU General Public License</citetitle>, wie von der Free Software "
+"Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß "
+"Version 2 der Lizenz oder (nach Ihrer Option) jeder späteren Version. Eine "
+"Kopie der <citetitle>GNU General Public License</citetitle> finden Sie unter "
+"diesem <ulink url=\"ghelp:gpl\" type=\"help\">Link</ulink>, oder in der Datei "
+"COPYING, die im Quellcode dieses Programms enthalten ist."
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: C/glabels.xml:0(None)
+msgid "translator-credits"
+msgstr "Mario Blättermann <mariobl@gnome.org>, 2008, 2009"
+
+#~ msgid ""
+#~ "@@image: 'figures/merge-ex3-1.png'; md5=32fa57781b819430f19cd3cac6807622"
+#~ msgstr "translated"
+
+#~ msgid ""
+#~ "@@image: 'figures/merge-ex3-2.png'; md5=1d49763e4006ea07792d7d1b805002ce"
+#~ msgstr "translated"
+
+#~ msgid ""
+#~ "@@image: 'figures/merge-ex2-1.png'; md5=d48a99d65408584eae2603a0c07610da"
+#~ msgstr "translated"
+
+#~ msgid ""
+#~ "@@image: 'figures/merge-ex2-3.png'; md5=59a1dc5ff94656877a6220f73fe25b3c"
+#~ msgstr "translated"
+
+#~ msgid ""
+#~ "@@image: 'figures/merge-ex2-4.png'; md5=67391b05421901a36d276736c1f664dd"
+#~ msgstr "translated"
diff --git a/help/de/figures/main-window-empty.png b/help/de/figures/main-window-empty.png
new file mode 100644 (file)
index 0000000..b7ad788
Binary files /dev/null and b/help/de/figures/main-window-empty.png differ
diff --git a/help/de/figures/merge-ex1-1.png b/help/de/figures/merge-ex1-1.png
new file mode 100644 (file)
index 0000000..2e539fc
Binary files /dev/null and b/help/de/figures/merge-ex1-1.png differ
diff --git a/help/de/figures/merge-ex1-2.png b/help/de/figures/merge-ex1-2.png
new file mode 100644 (file)
index 0000000..c60b3be
Binary files /dev/null and b/help/de/figures/merge-ex1-2.png differ
diff --git a/help/de/figures/merge-ex1-3.png b/help/de/figures/merge-ex1-3.png
new file mode 100644 (file)
index 0000000..01b345d
Binary files /dev/null and b/help/de/figures/merge-ex1-3.png differ
diff --git a/help/de/figures/merge-ex1-4.png b/help/de/figures/merge-ex1-4.png
new file mode 100644 (file)
index 0000000..814c73d
Binary files /dev/null and b/help/de/figures/merge-ex1-4.png differ
diff --git a/help/de/figures/merge-ex2-1.png b/help/de/figures/merge-ex2-1.png
new file mode 100644 (file)
index 0000000..8cb4999
Binary files /dev/null and b/help/de/figures/merge-ex2-1.png differ
diff --git a/help/de/figures/merge-ex2-2.png b/help/de/figures/merge-ex2-2.png
new file mode 100644 (file)
index 0000000..0fc1b06
Binary files /dev/null and b/help/de/figures/merge-ex2-2.png differ
diff --git a/help/de/figures/merge-ex2-3.png b/help/de/figures/merge-ex2-3.png
new file mode 100644 (file)
index 0000000..8ea450a
Binary files /dev/null and b/help/de/figures/merge-ex2-3.png differ
diff --git a/help/de/figures/merge-ex2-4.png b/help/de/figures/merge-ex2-4.png
new file mode 100644 (file)
index 0000000..0bc3c6b
Binary files /dev/null and b/help/de/figures/merge-ex2-4.png differ
diff --git a/help/de/figures/merge-ex3-1.png b/help/de/figures/merge-ex3-1.png
new file mode 100644 (file)
index 0000000..c391048
Binary files /dev/null and b/help/de/figures/merge-ex3-1.png differ
diff --git a/help/de/figures/merge-ex3-2.png b/help/de/figures/merge-ex3-2.png
new file mode 100644 (file)
index 0000000..a539cff
Binary files /dev/null and b/help/de/figures/merge-ex3-2.png differ
diff --git a/help/de/figures/object-editor-sidebar.png b/help/de/figures/object-editor-sidebar.png
new file mode 100644 (file)
index 0000000..94ad234
Binary files /dev/null and b/help/de/figures/object-editor-sidebar.png differ
diff --git a/help/de/figures/print-copies.png b/help/de/figures/print-copies.png
new file mode 100644 (file)
index 0000000..7e53944
Binary files /dev/null and b/help/de/figures/print-copies.png differ
diff --git a/help/de/figures/print-merge.png b/help/de/figures/print-merge.png
new file mode 100644 (file)
index 0000000..3a9efc3
Binary files /dev/null and b/help/de/figures/print-merge.png differ
diff --git a/help/de/glabels.xml b/help/de/glabels.xml
new file mode 100644 (file)
index 0000000..b38c3dd
--- /dev/null
@@ -0,0 +1,1776 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY legal SYSTEM "legal.xml">
+<!ENTITY appversion "2.2.6">
+<!ENTITY manrevision "2.2.6">
+<!ENTITY date "December 2007">
+<!ENTITY app "<application>gLabels</application>">
+<!-- Information about the entities
+       The legal.xml file contains legal information, there is no need to edit the file. 
+       Use the appversion entity to specify the version of the application.
+       Use the manrevision entity to specify the revision number of this manual.
+       Use the date entity to specify the release date of this manual.
+       Use the app entity to specify the name of the application. -->]>
+<!-- 
+      (Do not remove this comment block.)
+  Maintained by the GNOME Documentation Project
+  http://developer.gnome.org/projects/gdp
+  Template version: 2.0 beta
+  Template last modified Apr 11, 2002
+-->
+<!-- =============Document Header ============================= -->
+<article id="index" lang="de">
+<!-- please do not change the id; for translations, change lang to -->
+<!-- appropriate code -->
+  <articleinfo> 
+    <title><application>gLabels</application>-Handbuch V2.2.6</title>       
+       <abstract role="description">
+       <para>Benutzerhandbuch für <application>gLabels</application>, einem Programm zum Erstellen von Etiketten und Visitenkarten</para>
+    </abstract>
+    <copyright> 
+      <year>2003-2009</year> 
+      <holder>Jim Evins</holder> 
+    </copyright><copyright><year>2008, 2009</year><holder>Mario Blättermann (mariobl@gnome.org)</holder></copyright>
+       <publisher> 
+               <publishername>Jim Evins</publishername> 
+       </publisher> 
+
+     <legalnotice id="legalnotice">
+       <para>Das vorliegende Dokument kann gemäß den Bedingungen der GNU Free Documentation License (GFDL), Version 1.1 oder jeder späteren, von der Free Software Foundation veröffentlichten Version ohne unveränderbare Abschnitte sowie ohne Texte auf dem vorderen und hinteren Buchdeckel kopiert, verteilt und/oder modifiziert werden. Eine Kopie der GFDL finden Sie unter diesem <ulink type="help" url="ghelp:fdl">Link</ulink> oder in der mit diesem Handbuch gelieferten Datei COPYING-DOCS.</para>
+         <para>Dieses Handbuch ist Teil einer Sammlung von GNOME-Handbüchern, die unter der GFDL veröffentlicht werden. Wenn Sie dieses Handbuch getrennt von der Sammlung weiterverbreiten möchten, können Sie das tun, indem Sie eine Kopie der Lizenz zum Handbuch hinzufügen, wie es in Abschnitt 6 der Lizenz beschrieben ist.</para>
+
+       <para>Viele der Namen, die von Unternehmen verwendet werden, um ihre Produkte und Dienstleistungen von anderen zu unterscheiden, sind eingetragene Warenzeichen. An den Stellen, an denen diese Namen in einer GNOME-Dokumentation erscheinen, werden die Namen in Großbuchstaben oder mit einem großen Anfangsbuchstaben geschrieben, wenn das GNOME-Dokumentationsprojekt auf diese Warenzeichen hingewiesen wird.</para>
+
+       <para>DAS DOKUMENT UND VERÄNDERTE FASSUNGEN DES DOKUMENTS WERDEN UNTER DEN BEDINGUNGEN DER GNU FREE DOCUMENTATION LICENSE ZUR VERFÜGUNG GESTELLT MIT DEM WEITERGEHENDEN VERSTÄNDNIS, DASS: <orderedlist>
+               <listitem>
+                 <para>DIESES DOKUMENT WIRD »WIE VORLIEGEND« GELIEFERT, OHNE GARANTIEN IRGENDEINER ART, SOWOHL AUSDRÜCKLICH GENANNTE ALS AUCH ANGEDEUTETE. DIES BEZIEHT SICH AUCH OHNE EINSCHRÄNKUNG AUF GARANTIEN, DASS DIESES DOKUMENT ODER VERÄNDERTE FASSUNGEN DIESES DOKUMENTS FREI VON HANDELSDEFEKTEN, FÜR EINEN BESTIMMTEN ZWECK GEEIGNET IST ODER DASS ES KEINE RECHTE DRITTER VERLETZT. DAS VOLLE RISIKO WAS QUALITÄT, GENAUIGKEIT UND LEISTUNG DES DOKUMENTS ODER VERÄNDERTE FASSUNGEN DES DOKUMENTS LIEGT BEI IHNEN. SOLLTE EIN DOKUMENT ODER EINE VERÄNDERTE FASSUNG DAVON FEHLER IRGENDEINER ART BEINHALTEN, TRAGEN SIE (NICHT DER URSPRUNGSAUTOR, DER AUTOR ODER EIN MITWIRKENDER) DIE KOSTEN FÜR NOTWENDIGE DIENSTLEISTUNGEN, REPARATUREN ODER FEHLERKORREKTUREN. DIESER HAFTUNGSAUSSCHLUSS IST EIN ESSENZIELLER TEIL DIESER LIZENZ. DIE VERWENDUNG EINES DOKUMENTS ODER EINER VERÄNDERTEN VERSION DES DOKUMENTS IST NICHT GESTATTET AUßER UNTER BEACHTUNG DIESES HAFTUNGSAUSSCHLUSSES UND</para>
+               </listitem>
+               <listitem>
+                 <para>UNTER KEINEN UMSTÄNDEN UND AUF BASIS KEINER RECHTSGRUNDLAGE, EGAL OB DURCH UNERLAUBTEN HANDLUNGEN (EINSCHLIEßLICH FAHRLÄSSIGKEIT), VERTRAG ODER ANDERWEITIG KANN DER AUTOR, URSPRUNGSAUTOR, EIN MITWIRKENDER ODER EIN VERTRIEBSPARTNER DIESES DOKUMENTS ODER EINER VERÄNDERTEN FASSUNG DES DOKUMENTS ODER EIN ZULIEFERER EINER DIESER PARTEIEN, HAFTBAR GEMACHT WERDEN FÜR DIREKTE, INDIREKTE, SPEZIELLE, VERSEHENTLICHE ODER FOLGESCHÄDEN JEGLICHER ART, EINSCHLIEßLICH UND OHNE EINSCHRÄNKUNGEN SCHÄDEN DURCH VERLUST VON KULANZ, ARBEITSAUSFALL, COMPUTERVERSAGEN ODER COMPUTERFEHLFUNKTIONEN ODER ALLE ANDEREN SCHÄDEN ODER VERLUSTE, DIE SICH AUS ODER IN VERBINDUNG MIT DER VERWENDUNG DES DOKUMENTS UND VERÄNDERTER FASSUNGEN DES DOKUMENTS ERGEBEN, AUCH WENN DIE OBEN GENANNTEN PARTEIEN ÜBER DIE MÖGLICHKEIT SOLCHER SCHÄDEN INFORMIERT WAREN.</para>
+               </listitem>
+         </orderedlist></para>
+  </legalnotice>
+
+
+   <!-- This file  contains link to license for the documentation (GNU FDL), and 
+        other legal stuff such as "NO WARRANTY" statement. Please do not change 
+       any of this. -->
+
+    <authorgroup> 
+      <author role="maintainer"> 
+               <firstname>Jim</firstname> 
+               <surname>Evins</surname> 
+      </author> 
+      
+<!-- This is appropriate place for other contributors: translators,
+     maintainers,  etc. Commented out by default.
+     
+      <othercredit role="translator">
+               <firstname>Latin</firstname> 
+               <surname>Translator 1</surname> 
+               <affiliation> 
+                       <orgname>Latin Translation Team</orgname> 
+                       <address> <email>translator@gnome.org</email> </address> 
+               </affiliation>
+               <contrib>Latin translation</contrib>
+      </othercredit>
+-->
+    </authorgroup>
+
+
+<!-- According to GNU FDL, revision history is mandatory if you are -->
+<!-- modifying/reusing someone else's document.  If not, you can omit it. -->
+<!-- Remember to remove the &manrevision; entity from the revision entries other
+-->
+<!-- than the current revision. -->
+<!-- The revision numbering system for GNOME manuals is as follows: -->
+<!-- * the revision number consists of two components -->
+<!-- * the first component of the revision number reflects the release version of the GNOME desktop. -->
+<!-- * the second component of the revision number is a decimal unit that is incremented with each revision of the manual. -->
+<!-- For example, if the GNOME desktop release is V2.x, the first version of the manual that -->
+<!-- is written in that desktop timeframe is V2.0, the second version of the manual is V2.1, etc. -->
+<!-- When the desktop release version changes to V3.x, the revision number of the manual changes -->
+<!-- to V3.0, and so on. -->  
+    <revhistory>
+      <revision> 
+               <revnumber>gLabels-Handbuch V2.2.6</revnumber> 
+               <date>October 2009</date> 
+               <revdescription> 
+                       <para role="author">Mario Blättermann <email>mariobl@gnome.org</email></para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+      <revision> 
+               <revnumber>gLabels-Handbuch V2.2</revnumber> 
+               <date>Dezember 2007</date> 
+               <revdescription> 
+                       <para role="author">Jim Evins <email>evins@snaught.com</email></para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+    </revhistory> 
+
+    <releaseinfo>Dieses Handbuch beschreibt Version 2.2.6 von <application>gLabels</application>.</releaseinfo> 
+    <legalnotice> 
+      <title>Rückmeldungen</title> 
+      <para>Um einen Fehler zu melden oder einen Vorschlag zur Anwendung <application>gLabels</application> oder zu diesem Handbuch zu machen, folgen Sie den Anweisungen auf der <ulink url="http://glabels.sourceforge.net/contact/" type="http"><application>gLabels</application>-Kontaktseite</ulink>.</para>
+<!-- Translators may also add here feedback address for translations -->
+    </legalnotice> 
+  </articleinfo> 
+
+  <indexterm zone="index"> 
+    <primary>gLabels</primary> 
+  </indexterm> 
+  <indexterm zone="index"> 
+    <primary>glabels</primary> 
+  </indexterm>
+
+
+
+
+<!-- ============= Document Body ============================= -->
+<!-- ============= Introduction ============================== -->
+<!-- Use the Introduction section to give a brief overview of what
+     the application is and what it does. -->
+  <sect1 id="glabels-introduction"> 
+    <title>Einführung</title> 
+
+    <para>Die Anwendung <application>gLabels</application> ist ein ressourcenschonendes Programm zum Erstellen von Etiketten und Visitenkarten für die <systemitem>GNOME</systemitem>-Arbeitsumgebung. Es wurde für die verschiedensten mit Laser- oder Tintenstrahldruckern bedruckbaren (auch selbstklebenden) Etiketten sowie Visitenkarten entworfen, so wie Sie sie in den meisten Schreibwarengeschäften finden.</para>
+
+  </sect1>
+
+
+
+
+<!-- =========== Getting Started ============================== -->
+<!-- Use the Getting Started section to describe the steps required
+     to start the application and to describe the user interface components
+     of the application. If there is other information that it is important
+     for readers to know before they start using the application, you should
+     also include this information here. 
+     If the information about how to get started is very short, you can 
+     include it in the Introduction and omit this section. -->
+
+  <sect1 id="glabels-getting-started"> 
+    <title>Erste Schritte</title> 
+
+    <sect2 id="glabels-start">
+    <title><application>gLabels</application> starten</title>
+    <para>Sie können <application>gLabels</application> auf folgende Arten starten:</para> 
+    <variablelist>
+       <varlistentry>
+               <term>Menü <guimenu>Anwendungen</guimenu></term>
+               <listitem>
+               <para>Wählen Sie <menuchoice><guisubmenu>Büroanwendungen</guisubmenu><guimenuitem>gLabels</guimenuitem></menuchoice>.</para>
+               </listitem>
+       </varlistentry>
+       <varlistentry>
+               <term>Befehlszeile</term>
+               <listitem>
+               <para>Geben Sie <command>glabels</command> ein, und drücken Sie dann die <keycap>Eingabetaste</keycap>.</para>
+               </listitem>
+       </varlistentry>
+    </variablelist>
+    </sect2>
+
+    <sect2 id="glabels-when-start">
+    <title>Beim Start von <application>gLabels</application></title>
+    <para>Nach dem Start von <application>gLabels</application> erscheint folgendes Fenster:</para>
+
+    <!-- ==== Figure ==== -->
+      <figure id="mainwindow-fig"> 
+       <title><application>gLabels</application>-Startfenster</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/main-window-empty.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+    <!-- ==== End of Figure ==== -->
+
+    <!-- Include any descriptions of the GUI immediately after the screenshot of the main UI, -->
+    <!-- for example, the items on the menubar and on the toolbar. This section is optional. -->
+
+    <para>Das <application>gLabels</application>-Fenster enthält folgende Elemente:</para>
+      <variablelist>
+       <varlistentry>
+       <term>Menüleiste.</term>
+       <listitem>
+           <para>Die Menüs in der Menüleiste enthalten alle Befehle, die Sie zum Erstellen und Bearbeiten von Etiketten und Visitenkarten in <application>gLabels</application> benötigen.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Haupt-Werkzeugleiste.</term>
+       <listitem>
+           <para>Die Haupt-Werkzeugleiste enthält eine Auswahl der Befehle, die Sie über die Menüleiste in den Menüs »Datei« und »Bearbeiten« erreichen.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Zeichenwerkzeugleiste.</term>
+       <listitem>
+           <para>Die Zeichenwerkzeugleiste enthält eine Auswahl von Befehlen zum Bearbeiten des aktuellen <application>gLabels</application>-Dokuments.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Anzeigebereich.</term>
+       <listitem>
+           <para>Der Anzeigebereich ist die Zeichenfläche für <application>gLabels</application>.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Objekt-Seitenleiste.</term>
+       <listitem>
+           <para>Die Objekt-Seitenleiste stellt eine Schnittstelle zum Betrachten und Bearbeiten der Eigenschaften eines bestimmten Objekts zur Verfügung.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Eingenschaften-Werkzeugleiste.</term>
+       <listitem>
+           <para>Die Eigenschaften-Werkzeugleiste enthält eine Reihe von Werkzeugen zum Manipulieren der Eigenschaften ausgewählter Objekte sowie zum Setzen der Standardeigenschaften für neue Objekte.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Statusleiste.</term>
+       <listitem>
+           <para>In der Statusleiste werden Informationen über die aktuelle <application>gLabels</application>-Aktivität und Kontextinformationen über die Menüpunkte angezeigt.</para>
+       </listitem>
+       </varlistentry>
+       </variablelist>
+    </sect2>
+  </sect1>
+
+
+
+
+<!-- ================ Usage ================================ -->
+<!-- Use this section to describe how to use the application to perform the tasks for 
+  which the application is designed. -->
+  <sect1 id="glabels-usage"> 
+    <title>Benutzung</title> 
+
+<!-- ============= To create a new file ============================= -->
+    <sect2 id="glabels-open-new"> 
+      <title>Erstellen eines neuen Etiketts oder einer neuen Karte</title>
+
+      <para>Um ein neues Etikett oder eine neue Visitenkarte anzulegen, wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Neu</guimenuitem></menuchoice>, um den Dialog <guilabel>Neues Etikett oder neue Karte</guilabel> anzuzeigen. Wählen Sie den Medientyp und die Ausrichtung für das neue Dokument aus und klicken Sie anschließend auf <guibutton>OK</guibutton>. Ein neues Dokument erscheint im Anzeigebereich des <application>gLabels</application>-Fensters.</para>
+
+      <para>Falls Ihr spezieller Medientyp in diesem Dialog nicht angezeigt wird, siehe <xref linkend="glabels-create-template"/>.</para>
+
+    </sect2>
+
+<!-- ============= To Open a File ============================= -->
+    <sect2 id="glabels-open-file"> 
+      <title>Öffnen einer Datei</title>
+
+      <para>Um eine Datei zu öffnen, wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Öffnen</guimenuitem></menuchoice>, um den Dialog <guilabel>Datei öffnen</guilabel> anzuzeigen. Wählen Sie die gewünschte Datei aus und klicken Sie dann auf <guibutton>Öffnen</guibutton>. Die Datei wird im Anzeigebereich des <application>gLabels</application>-Fensters geöffnet.</para>
+
+      <para>Sie können in <application>gLabels</application> auch mehrere Dateien öffnen. Die Anwendung erzeugt ein separates Fenster für jede geöffnete Datei.</para>
+
+      <para>Die Anwendung speichert die Pfade und Dateinamen der von Ihnen zuletzt bearbeiteten Dateien. Diese Dateien werden als Einträge im Menü <menuchoice><guimenu>Datei</guimenu><guisubmenu>Zuletzt benutzt</guisubmenu></menuchoice> angezeigt.</para>
+
+    </sect2>
+
+<!-- ============= To Open Multiple Files from the Command Line ========= -->
+    <sect2 id="glabels-run-from-cmd-line"> 
+      <title>Öffnen mehrerer Dateien aus einer Befehlszeile</title>
+
+      <para>Sie können <application>gLabels</application> aus einer Befehlszeile starten und eine Datei oder mehrere Dateien öffnen. Um mehrere Dateien aus einer Befehlszeile zu öffnen, geben Sie den folgenden Befehl ein und drücken dann die <keycap>Eingabetaste</keycap>:</para>
+
+      <para><command>glabels <replaceable>Datei1.glabels Datei2.glabels Datei3.glabels</replaceable></command></para>
+
+      <para>Wenn die Anwendung startet, werden die von Ihnen angegebenen Dateien in separaten <application>gLabels</application>-Fenstern angezeigt.</para>
+
+    </sect2>
+
+<!-- ============= To Save a File ========= -->
+    <sect2 id="glabels-save-file"> 
+      <title>Speichern einer Datei</title>
+
+      <para>Sie können Dateien auf folgende Arten speichern:</para>
+
+      <itemizedlist> 
+       <listitem>
+
+         <para>Um die Änderungen in der bereits vorhandenen Datei zu speichern, wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Speichern</guimenuitem></menuchoice>.</para>
+
+       </listitem>
+       <listitem>
+
+         <para>Um eine neue Datei oder eine bestehende Datei unter einem neuen Dateinamen zu speichern, wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Speichern unter</guimenuitem></menuchoice>. Geben Sie einen Namen für die Datei im Dialogfeld <guilabel>Speichern unter</guilabel> ein und klicken Sie anschließend auf <guibutton>OK</guibutton>. </para>
+
+       </listitem>
+      </itemizedlist>
+
+    </sect2>
+
+<!-- ============= To Change Label Properties ========= -->
+    <sect2 id="glabels-label-properties"> 
+      <title>Ändern der Eigenschaften eines Etiketts</title>
+
+      <para>Um den Medientyp oder die Ausrichtung des Etiketts zu ändern, wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Eigenschaften</guimenuitem></menuchoice>, um den Dialog <guilabel>Etikett-Eigenschaften</guilabel> anzuzeigen. Wählen Sie den neuen Medientyp für das Dokument aus und klicken Sie anschließend auf <guibutton>OK</guibutton>.</para>
+
+    </sect2>
+
+<!-- ============= To create a custom template ======================= -->
+    <sect2 id="glabels-create-template"> 
+      <title>Erstellen einer benutzerdefinierten Vorlage</title>
+
+      <para>Um eine neue benutzerdefinierte Vorlage zu erstellen, wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Vorlagen-Designer …</guimenuitem></menuchoice>, um den <guilabel>Vorlagen-Designer</guilabel>-Dialog anzuzeigen. Dieser Dialog hilft Ihnen bei der Erstellung einer benutzerdefinierten Vorlage für die meisten Typen von Etiketten oder Visitenkarten, die Ihnen in Schreibwarengeschäften begegnen könnten.</para>
+
+      <para>Falls Sie dies bevorzugen, können Sie Ihre Vorlagen auch manuell erstellen. Weitere Informationen hierzu finden Sie in <xref linkend="glabels-manual-create-template"/>.</para>
+
+    </sect2>
+
+<!-- ============= To Close a File ========= -->
+    <sect2 id="glabels-close-file"> 
+      <title>Schließen einer Datei</title>
+
+      <para>Um das aktuelle Dokument zu schließen, wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Schließen</guimenuitem></menuchoice>, um das Anwendungsfenster zu schließen. Falls das aktuelle Dokument bearbeitet wurde, wird ein Bestätigungsdialog geöffnet, in welchem Sie das Dokument speichern oder den Vorgang abbrechen können. Falls das zu schließende Fenster das einzige offene Fenster ist, wird <application>gLabels</application> dadurch beendet.</para>
+
+    </sect2>
+
+<!-- ============= To Quit ========= -->
+    <sect2 id="glabels-quit"> 
+      <title><application>gLabels</application> beenden</title>
+
+      <para>Um <application>gLabels</application> zu beenden, wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Beenden</guimenuitem></menuchoice>. Dadurch werden alle offenen Fenster geschlossen. Siehe <xref linkend="glabels-close-file"/>.</para>
+
+    </sect2>
+
+<!-- ============= To Print Labels and Cards ========= -->
+    <sect2 id="glabels-print-file"> 
+      <title>Drucken von Etiketten oder Karten</title>
+
+      <para>Um Etiketten oder Visitenkarten zu drucken, wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Drucken</guimenuitem></menuchoice>, um den <guilabel>Drucken</guilabel>-Dialog anzuzeigen. Nachdem Sie die Druckoptionen ausgewählt haben, klicken Sie auf <guilabel>Drucken</guilabel>, um die Etiketten oder Visitenkarten zu drucken. Um zunächst eine Vorschau auf die Druckergebnisse zu erhalten, klicken Sie auf <guilabel>Druckvorschau</guilabel>.</para>
+
+      <para>Im Dialog <guilabel>Drucken</guilabel> können Sie die folgenden Optionen zum Drucken festlegen:</para>
+               
+      <sect3 id="print-dialog-job">
+       <title>Der Reiter »Etiketten« des Druckdialogs</title>
+
+       <variablelist>
+
+         <varlistentry>
+            <term><guilabel>Drucksteuerung (einfach)</guilabel></term>
+           <listitem> 
+
+             <para>Für einfache Etiketten oder Karten (keine Dokumentmischung) enthält der Reiter »Labels« die folgenden Einstellmöglichkeiten.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-copies-fig"> 
+               <title>Angeben der Kopien</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata fileref="figures/print-copies.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>Die Anzahl der Kopien können Sie wählen, indem Sie die Anzahl der vollständig zu druckenden Seiten oder eine Teilmenge von Etiketten auf einer einzelnen Seite auswählen.</para>
+
+             <para>Die verkleinerte Vorschau können Sie auch dazu verwenden, einen Teil der Etiketten grafisch auszuwählen, indem Sie auf das erste Etikett klicken und es auf das letzte Etikett ziehen.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry>
+            <term><guilabel>Drucksteuerung (Mischen)</guilabel></term>
+           <listitem> 
+
+             <para>Für Etiketten oder Karten unter Verwendung der Dokumentmischung enthält dieser Reiter die folgenden Einstellungen zur Mischung von Dokumenten anstelle der Festlegung der Kopien.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-merge-fig"> 
+               <title>Steuerung der Einmischung von Dokumenten</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata fileref="figures/print-merge.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>Die Gesamtzahl der gedruckten Etiketten oder Karten ergibt sich als Produkt aus der Anzahl der Datensätze in der Einmischquelle und der Anzahl der gewählten Kopien. Falls mehrere Kopien gewählt wurden, können diese entweder zusammengefasst werden (durch Gruppieren der Kopien des gleichen Datensatzes) oder nicht zusammengefasst (eine Kopie jedes Datensatzes wird immer vor der nächsten Kopie gedruckt).</para>
+
+             <para>Der Druck kann mit jedem beliebigen Etikett der ersten Seite begonnen werden. Dies können Sie im Einstellfeld <guilabel>Start bei Etikett</guilabel> auswählen.</para>
+
+             <para>In der verkleinerten Vorschau können Sie das erste Etikett grafisch auswählen, indem Sie das gewünschte Etikett anklicken.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry> <term><guilabel>Optionen</guilabel> </term> 
+           <listitem> 
+             <para>Die folgenden Optionen können ebenfalls gewählt werden.</para>
+             <itemizedlist>
+               <listitem>
+                 <para><guilabel>Begrenzungen drucken</guilabel></para>
+                 <para>Begrenzungen der Etiketten drucken. Diese Option ist nützlich, wenn Sie die Lage des Papiers im Drucker prüfen wollen.</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>Spiegelbildlich drucken</guilabel></para>
+                 <para>Druckt die Etiketten spiegelbildlich. Diese Option ist nützlich für das Drucken durchsichtiger Aufkleber, die von der Rückseite aus betrachtet werden (z.B. hinter Autoscheiben).</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>Schnitt</guilabel></para>
+                 <para>Druckt Schnittmarken entlang der Papierränder. Diese Option ist nützlich zum Drucken auf Papier, das erst nach dem Druck beschnitten werden soll. Diese Option funktioniert eventuell nicht mit allen Vorlagen.</para>
+               </listitem>
+             </itemizedlist>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+      </sect3>
+               
+    </sect2>
+
+<!-- ============= To Create New Objects ========= -->
+    <sect2 id="glabels-new-objects"> 
+      <title>Erstellen neuer Objekte</title>
+
+      <para>Objekte können ausgewählt werden, indem Sie das entsprechende Objekt in <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Erzeugen</guimenuitem></menuchoice> auswählen oder über die <guilabel>Zeichenwerkzeugleiste</guilabel>. Dadurch wird der Anzeigebereich in den Objekterzeugungsmodus versetzt, was am Mauszeiger erkennbar ist. Um zum vorgegebenen Objektauswahlmodus zurückzukehren, ohne ein Objekt zu erzeugen, wählen Sie <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Auswahlmodus</guimenuitem></menuchoice>. Dadurch wird der Mauszeiger im Anzeigebereich wieder in den vorgegebenen Auswahlzeiger geändert.</para>
+
+      <para>Nachfolgend wird der Modus zur Erstellung der Objekte für jeden Objekttyp beschrieben:</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Text</term>
+         <listitem>
+           <para>Klicken Sie auf die gewünschte Stelle in der linken oberen Ecke des Textobjekts. Neue Textobjekte erhalten anfänglich den Inhalt »Text«. Wie Sie diesen Text oder andere Eigenschaften ändern können, finden Sie in <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Rechteck</term>
+         <listitem>
+           <para>Klicken Sie auf die gewünschte Stelle für die linke obere Ecke des Rechteckobjekts und ziehen Sie zur gewünschten rechten unteren Ecke. Wenn Sie einfach auf eine Stelle klicken, wird ein quadratisches Objekt erzeugt. Wie Sie die Eigenschaften des Rechteckobjekts ändern können, finden Sie in <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Linie</term>
+         <listitem>
+           <para>Klicken Sie auf die gewünschte Stelle für das Ende des Linienobjekts und ziehen Sie zur gewünschten Stelle des anderen Endes. Wenn Sie einfach auf eine Stelle klicken, wird eine diagonale Linie erzeugt. Wie Sie die Eigenschaften des Linienobjekts ändern können, finden Sie in <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Ellipse</term>
+         <listitem>
+           <para>Klicken Sie auf die gewünschte Stelle für die linke obere Ecke des Ellipsenobjekts und ziehen Sie zur gewünschten rechten unteren Ecke. Wenn Sie einfach auf eine Stelle klicken, wird ein Kreis erzeugt. Wie Sie die Eigenschaften des Ellipsenobjekts ändern können, finden Sie in <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Image</term>
+         <listitem>
+           <para>Klicken Sie auf die gewünschte Stelle für die linke obere Ecke des Bildobjekts und ziehen Sie zur gewünschten rechten unteren Ecke. Wenn Sie einfach auf eine Stelle klicken, wird ein quadratisches Objekt erzeugt. Neue Bildobjekte erhalten anfänglich ein Schachbrettmuster. Wie Sie dies oder andere Eigenschaften des Bildobjekts ändern können, finden Sie in <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Strichcode</term>
+         <listitem>
+           <para>Klicken Sie auf die gewünschte Stelle für die linke obere Ecke des Strichcodeobjekts und ziehen Sie zur gewünschten rechten unteren Ecke. Neue Objekte erhalten anfänglich einen POSTNET-Strichcode mit Beispieldaten. Wie Sie die Eigenschaften des Strichcodeobjekts ändern können, finden Sie in <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+
+    </sect2>
+
+<!-- ============= To Select Objects ========= -->
+    <sect2 id="glabels-select-objects"> 
+      <title>Auswählen von Objekten</title>
+
+      <para>Eine Voraussetzung zum Ausführen von Operationen auf Objekten ist die Auswahl individueller Objekte oder Gruppen von Objekten. Der Anzeigebereich muss sich im Objektauswahlmodus befinden, was durch einen pfeilförmigen Mauszeiger angezeigt wird. Der Objektauswahlmodus wird über den Menüeintrag <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Auswahlmodus</guimenuitem></menuchoice> aktiviert oder über das entsprechende Objekt in der <guilabel>Zeichenwerkzeugleiste</guilabel>.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Auswahl eines einzelnen Objekts</term>
+         <listitem>
+           <para>Ein einzelnes Objekt können Sie auswählen, indem Sie das gewünschte Objekt im Anzeigebereich anklicken. Nach dem Anklicken wird das Objekt durch Anfasspunkte zur Größenänderung hervorgehoben.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Auswahl mehrerer Objekte</term>
+         <listitem>
+           <para>Sie können mehrere Objekte auswählen, indem Sie zunächst das erste Objekt auswählen, wie oben beschrieben. Halten Sie dann bei der Auswahl weiterer Objekte die <keycap>Strg</keycap>-Taste gedrückt. Zusätzliche Objekte können Sie jederzeit zur Auswahl hinzufügen, wenn Sie wiederum die <keycap>Strg</keycap>-Taste gedrückt halten und die gewünschten Objekte auswählen. Alle Objekte lassen sich über den Menüeintrag <menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Alle auswählen</guimenuitem></menuchoice> auswählen. Alle Objekte in einer zusammenhängenden Objektauswahl werden hervorgehoben dargestellt.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Bereichsauswahl</term>
+         <listitem>
+           <para>Sie können auch mehrere Objekte auswählen, indem Sie in einen leeren Bereich klicken und mit der Maus die Form eines Rechtecks aufziehen. Daraufhin bilden alle Objekte in diesem Bereich eine zusammenhängende Auswahl. Eine Bereichsauswahl kann zum Hinzufügen einer vorhandenen Auswahl benutzt werden, wenn Sie bei der Auswahl die <keycap>Strg</keycap>-Taste gedrückt halten.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Auswahl von Objekten aufheben</term>
+         <listitem>
+           <para>Sie können individuelle Objekte aus einer vorhandenen Auswahl entfernen, wenn Sie beim Klicken auf ein zuvor ausgewähltes Objekt die <keycap>Strg</keycap>-Taste gedrückt halten. Die gesamte Auswahl können Sie rückgängig machen, indem Sie im Menü <menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Alle Markierungen löschen</guimenuitem></menuchoice> wählen. Sobald ein Objekt nicht mehr ausgewählt ist, wird es nicht mehr hervorgehoben dargestellt.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= Clipboard Commands ========= -->
+    <sect2 id="glabels-clipboard"> 
+      <title>Befehle für die Zwischenablage</title>
+
+      <para>Objektauswahlen können durch die Standardoperationen der Zwischenablage <guimenuitem>Ausschneiden</guimenuitem>, <guimenuitem>Kopieren</guimenuitem>, <guimenuitem>Einfügen</guimenuitem> und <guimenuitem>Löschen</guimenuitem> manipuliert werden.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Strg</keycap><keycap>X</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Ausschneiden</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Verschiebt die ausgewählten Objekte in die Zwischenablage. Diese Objekte sind dann verfügbar, um später in das aktuelle Dokument oder ein anderes Dokument eingefügt zu werden.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Strg</keycap><keycap>C</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Kopieren</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Kopiert die ausgewählten Objekte in die Zwischenablage, ohne sie zu entfernen. Diese Objekte sind dann verfügbar, um später in das aktuelle Dokument oder ein anderes Dokument eingefügt zu werden.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Strg</keycap><keycap>V</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Einfügen</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Fügt Objekte aus der Zwischenablage in das aktuelle Dokument ein. <application>gLabels</application> kann nur Objekte aus anderen <application>gLabels</application>-Dokumenten einfügen.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycap>Löschen</keycap>
+             </shortcut>
+             <guimenuitem>Löschen</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Entfernt die ausgewählten Objekte, ohne sie in die Zwischenablage zu verschieben.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= To Edit object Properties ========= -->
+    <sect2 id="glabels-object-properties"> 
+      <title>Bearbeiten der Objekteigenschaften</title>
+
+      <para>Die meisten Objekteigenschaften können Sie über die Objekteditor-Seitenleiste verändern, wie unten illustriert. Um den Objekteditor zu verwenden, muss zunächst ein einzelnes Objekt ausgewählt werden. Siehe <xref linkend="glabels-select-objects"/>.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="object-editor-sidebar-fig"> 
+       <title>Objekteditor-Seitenleiste</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/object-editor-sidebar.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Der Objekteditor bietet eine Auswahl der folgenden Reiter, abhängig vom Objekttyp:</para>
+
+      <sect3 id="object-editor-text">
+       <title>Text-Reiter (Textobjekte)</title>
+
+       <para>Dieser Abschnitt bietet einen kleinen Editor zum Bearbeiten des Inhalts eines Textobjekts. Weiterhin ist ein Ausklappmenü mit den verfügbaren Schlüsseln zur Dokumentmischung enthalten, die in den Text eingefügt werden können.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-image">
+       <title>Bild-Reiter (Bild-Objekte)</title>
+
+       <para>Dieser Abschnitt enthält einen Dateiwähler mit Vorschau zur Auswahl von Bilddateien. Der »Durchsuchen«-Knopf kann zum Suchen von Bilddateien benutzt werden. Alternativ können Sie einen Schlüssel zur Dokumenteinmischung anstelle eines Dateinamens angeben, der bei der Ausgabe des Dokuments ersetzt wird.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-data">
+       <title>Daten-Reiter (Strichcode-Objekte)</title>
+
+       <para>Dieser Abschnitt enthält ein Textfeld zur Eingabe von Strichcode-Daten. Alternativ kann hier ein Schlüssel zur Dokumentmischung eingetragen werden, der beim Druck für die Bereitstellung der richtigen Daten sorgt.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-style">
+       <title>Stil-Reiter (Text-Objekte)</title>
+
+       <para>Dieser Abschnitt enthält Einstellmöglichkeiten für die Texteigenschaften, wie Schriftfamilie, Schriftgröße, Schriftstärke, Schriftfarbe und Ausrichtung des Texts.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-barcode">
+       <title>Stil-Reiter (Strichcode-Objekte)</title>
+
+       <para>Dieser Abschnitt enthält Einstellmöglichkeiten für die Eigenschaften des Strichcodes, wie Stil, Farbe, Drucken von Text oder Beinhalten einer Prüfsumme.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-line">
+       <title>Linie-Reiter</title>
+
+       <para>Dieser Abschnitt enthält Einstellmöglichkeiten für die Auswahl von Eigenschaften von Linien und Begrenzungen, wie Linienbreite und -farbe.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-fill">
+       <title>Füllung-Reiter</title>
+
+       <para>Dieser Abschnitt enthält Einstellmöglichkeiten für die Auswahl der Füllungseigenschaften von Rechteck- und Ellipsenobjekten. Derzeit ist nur die Einstellung der Füllungsfarbe möglich.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size">
+       <title>Reiter »Größe« (alle außer Linienobjekte)</title>
+
+       <para>Dieser Abschnitt enthält Einstellmöglichkeiten für die Höhe und die Breite eines Objekts. Mit einem Ankreuzfeld können Sie die Werte aneinander koppeln, so dass das Seitenverhältnis beim Ändern der Höhe oder Breite erhalten bleibt. Für Bildobjekte gibt es außerdem einen Knopf zum Zurücksetzen des Bildes auf Originalgröße, wobei eine Auflösung von 72 dpi angenommen wird.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size-line">
+       <title>Reiter »Größe« (Linienobjekte)</title>
+
+       <para>Dieser Abschnitt enthält Einstellmöglichkeiten für die Länge und den Winkel eines Linienobjekts.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-position">
+       <title>Reiter »Position«</title>
+
+       <para>Dieser Abschnitt beschreibt die Möglichkeiten zur Positionierung eines Objekts.</para>
+
+      </sect3>
+
+
+      <sect3 id="object-editor-shadow">
+       <title>Reiter »Schattierung« (alle außer Bild- und Strichcodeobjekten)</title>
+
+       <para>Dieser Abschnitt enthält Einstellmöglichkeiten für die Schattierung eines Objekts.</para>
+
+      </sect3>
+
+
+    </sect2>
+
+<!-- ============= Other Manipulations of Objects ========= -->
+    <sect2 id="glabels-object-manipulation"> 
+      <title>Andere Manipulationen von Objekten</title>
+
+      <para>Objekte können auf die folgenden Arten manipuliert werden.</para>
+
+      <sect3 id="other-moving-resizing">
+       <title>Verschieben und Größenänderung von Objekten</title>
+
+       <para>Objekte können Sie durch einfaches Anklicken und Ziehen des ausgewählten Objekts zur neuen Position verschieben. Falls dieses Objekt Teil einer Mehrfachauswahl ist, werden durch Ziehen dieses Objektes alle Objekte verschoben, wobei deren Abstände untereinander erhalten bleiben. Falls kein Objekt ausgewählt ist, wird durch Anklicken eines Objekts eine neue Auswahl erzeugt, die dieses Objekt enthält. Siehe <xref linkend="glabels-select-objects"/>.</para>
+
+       <para>Die Größe eines ausgewählten Objekts kann geändert werden, indem Sie auf einen der Größenänderungs-Anfasspunkte klicken und diesen ziehen, um die gewünschte Größe zu erreichen.</para>
+
+      </sect3>
+
+      <sect3 id="other-stacking-order">
+       <title>Ändern der Reihenfolge der Ebenen</title>
+
+       <para>Die Stapelreihenfolge bezieht sich auf die relative Position in der Z-Achse von Objekten. Das beschreibt beim Überlappen von Objekten, welches der Objekte über den anderen erscheint. Per Vorgabe werden neue Objekte immer oberhalb von bereits vorhandenen Objekten platziert. Um diese Anordnung zu ändern, wählen Sie <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Anordnung</guimenuitem><guimenuitem>Ganz nach vorn</guimenuitem></menuchoice>, um die Auswahl im Stapel nach oben zu verschieben, oder <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Anordnung</guimenuitem><guimenuitem>Ganz nach hinten</guimenuitem></menuchoice>, um die Auswahl im Stapel nach unten zu verschieben. Diese Menüeinträge sind auch durch einen Klick mit der rechten Maustaste auf den Ansichtsbereich verfügbar, falls sich dort eine nicht leere Auswahl befindet.</para>
+
+      </sect3>
+
+      <sect3 id="other-rotating-flipping">
+       <title>Drehen und Spiegeln von Objekten</title>
+
+       <para>Objekte können um 90 Grad in jeder Richtung gedreht oder horizontal oder vertikal gespiegelt werden. Wählen Sie hierzu den entsprechenden Eintrag im Menü <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Drehen/Spiegeln</guimenuitem></menuchoice>. Diese Menüeinträge sind auch verfügbar, wenn Sie mit der rechten Maustaste in eine nicht leere Auswahl im Ansichtsbereich klicken.</para>
+
+      </sect3>
+
+      <sect3 id="other-alignment">
+       <title>Ausrichten von Objekten</title>
+
+       <para>Objekte können horizontal oder vertikal zu einem anderen Objekt oder relativ zu einer Mittellinie des Etiketts angeordnet werden, indem Sie <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Horizontal</guimenuitem></menuchoice> oder <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Vertikal</guimenuitem></menuchoice> wählen. Diese Menüeinträge sind auch verfügbar, wenn Sie mit der rechten Maustaste in eine nicht leere Auswahl im Ansichtsbereich klicken.</para>
+
+      </sect3>
+
+      <sect3 id="other-property-bar">
+       <title>Verwendung der Eigenschaftsleiste</title>
+
+       <para>Mit der Eigenschaftsleiste können Sie einige Eigenschaften von Objekten in einem Arbeitsgang ändern. Diese Eigenschaften umfassen Schriftfamilie, Schriftgröße, Schriftstärke, Textausrichtung, Textfarbe, Füllfarbe, Farbe von Linien oder Begrenzungen sowie Linienbreiten. Die Eigenschaftsleiste regelt auch die Vorgaben für diese Eigenschaften, wenn neue Objekte erzeugt werden.</para>
+
+      </sect3>
+
+
+
+    </sect2>
+
+<!-- ============= Document Merge Features ========= -->
+    <sect2 id="glabels-merge"> 
+      <title>Ausführung einer Dokumentmischung</title>
+
+      <para>Dokumentmischung ist ein mächtiges Funktionsmerkmal, das es Ihnen ermöglicht, ein einzelnes Etikett oder eine einzelne Karte für jeden Datensatz aus einer externen Datenquelle zu erstellen.</para>
+
+      <para>Der erste Schritt zur Ausführung einer Dokumentmischung ist die Vorbereitung eines Quelldokuments, welches die Daten zum Mischen enthält. Diese Daten können aus E-Mail-Adressen oder anderen Daten bestehen, aus denen Sie die einzelnen Etiketten oder Karten erstellen wollen. Gegenwärtig können als Datenquellen entweder Textdateien oder die Daten des Evolution-Adressbuchs verwendet werden, andere sind bereits in Planung. Das derzeit unterstützte Textformat ist recht einfach: Jede Zeile stellt einen Datensatz dar, wobei die einzelnen Felder durch Kommata (CSV), Tabulatoren oder Semikola getrennt werden. Neue Zeilen werden durch einen Zeilenumbruch »\n« erzeugt. Diese Datei kann mit einem Texteditor, einem anderen Programm oder einem Skript erstellt werden. Ein üblicher Weg der Erstellung ist der Export einer CSV-Datei aus einer Tabellenkalkulation.</para>
+
+      <para>Ein Etikett muss erstellt werden, das auf diese Datenquelle »zeigt«. Um die Mischeigenschaften für ein Dokument festzulegen, wählen Sie <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Mischeinstellungen</guimenuitem></menuchoice>. Der Dialog <guilabel>Mischeinstellungen</guilabel> wird geöffnet. In diesem Dialog wählen Sie das genaue Dateiformat und den Dateinamen (den Ort) der einzumischenden Daten aus.</para>
+
+      <para>Zum Schluss, sobald das Etikett für die Datenquelle eingerichtet wurde, können die Feldschlüssel in Textobjekte eingefügt werden, um sie als Datenquelle für Strichcodeobjekte oder Bilder für Bildobjekte zu verwenden. Weitere Informationen über die Verwendung der Mischdaten für diese Objekttypen finden Sie in <xref linkend="glabels-object-properties"/>.</para>
+
+      <para>Da Ihr Etikett nun konfiguriert ist, druckt <application>gLabels</application> genau ein Etikett für jeden Datensatz des Quelldokuments, wobei alle Text-, Bild- und Strichcode-Objekte durch die Einträge der Felder jedes Datensatzes ersetzt werden.</para>
+
+      <para>In <xref linkend="glabels-merge-tutorial"/> finden Sie eine ausführliche Anleitung für dieses Funktionsmerkmal.</para>
+
+
+    </sect2>
+
+
+  </sect1>
+
+
+
+
+  <!-- ============= Customization ============================= -->
+  <!-- Use this section to describe how to customize the application. -->
+  <sect1 id="glabels-prefs"> 
+    <title>Einstellungen</title> 
+    <para>Um <application>gLabels</application> zu konfigurieren, wählen Sie <menuchoice><guimenu>Einstellungen</guimenu><guimenuitem>Einstellungen</guimenuitem></menuchoice>. Der Dialog <guilabel>Einstellungen</guilabel> enthält die folgenden Reiter:</para> 
+    <itemizedlist> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-locale"/></para> 
+      </listitem> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-object-defaults"/></para> 
+      </listitem> 
+    </itemizedlist>
+<!-- =============== Customization Subsection ================ -->
+<!-- Use a new section to describe different tabbed sections on the Settings or Preferences
+            dialog. -->
+    <sect2 id="glabels-prefs-locale"> 
+      <title>Lokale Einstellungen</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Einheiten</guilabel> </term> 
+         <listitem> 
+           <para>Verwenden Sie diese Radioknöpfe, um Ihre bevorzugten Maßeinheiten festzulegen. Wählen Sie aus den folgenden Optionen:</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Punkte</guilabel> </para> 
+               <para>Punkte verwenden (1 Punkt = 1/72 Zoll = 0.352778 mm).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Zoll</guilabel> </para> 
+               <para>Zoll verwenden.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Millimeter</guilabel> </para> 
+               <para>Millimeter verwenden.</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Standard: <guilabel>Zoll</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Vorgegebene Seitengröße</guilabel> </term> 
+         <listitem> 
+           <para>Verwenden Sie diese Radioknöpfe zur Auswahl Ihrer bevorzugten Papiergröße. Dadurch lassen sich beim Erstellen neuer Etiketten oder Visitenkarten die entsprechenden Papiertypen schneller finden.</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>US-Letter</guilabel> </para> 
+               <para>Die meisten Ihrer Medien haben das US-Letter-Format (8.5 x 11 inches).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>ISO A4</guilabel> </para> 
+               <para>Die meisten Ihrer Medien haben das ISO-A4-Format (210 x 297 mm).</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Standard: <guilabel>US-Letter</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2>
+    <!-- ============= Customization Subsection ===================== -->
+    <!-- Another tabbed section on the Preferences dialog. -->
+    <sect2 id="glabels-prefs-object-defaults"> 
+      <title>Objekt-Voreinstellungen</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Text</guilabel> </term> 
+         <listitem> 
+           <para>Verwenden Sie diese Einstellmöglichkeiten, um die Standardeigenschaften neuer Textobjekte festzulegen. Diese Eigenschaften sind</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Schrift</guilabel> </para> 
+               <para>Verwenden Sie diese Einstellmöglichkeiten, um die Schriftfamilie und -größe festzulegen, sowie um anzugeben, ob die Schrift fett oder kursiv dargestellt werden soll.</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Farbe</guilabel> </para> 
+               <para>Diese Einstellung wählt die Standard-Textfarbe aus.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Ausrichtung</guilabel> </para> 
+               <para>Mit diesen Einstellungen wählen Sie die vorgegebene Textausrichtung (links, mittig oder rechts).</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Linie</guilabel> </term> 
+         <listitem> 
+           <para>Verwenden sie diese Einstellmöglichkeiten, um die Standardeigenschaften von Begrenzungen und neuen Objekten festzulegen. Diese Eigenschaften sind</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Breite</guilabel> </para> 
+               <para>Diese Einstellung wählt die Standard-Linienbreite aus.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Farbe</guilabel> </para> 
+               <para>Diese Einstellung wählt die Standard-Linienfarbe aus.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Füllen</guilabel> </term> 
+         <listitem> 
+           <para>Verwenden Sie diese Einstellmöglichkeiten zum Angeben der Füllungseigenschaften eines neuen Objekts. Diese Eigenschaften sind</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Farbe</guilabel> </para> 
+               <para>Diese Einstellung wählt die Standard-Füllfarbe aus.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2> 
+  </sect1>
+
+
+
+
+<!-- ============= Document Merge Tutorial ================================== -->
+  <sect1 id="glabels-merge-tutorial"> 
+    <title>Anleitung zur Dokumentmischung</title>
+
+    <para>Dokumentmischung ist ein mächtiges Funktionsmerkmal, das es Ihnen ermöglicht, ein einzelnes Etikett oder eine einzelne Karte für jeden Datensatz aus einer externen Datenquelle zu erstellen. Es ist allerdings die am häufigsten missverstandene Funktion in <application>gLabels</application>. Die folgenden Beispiele führen Sie schrittweise durch viele der Aufgaben, die Sie mit der Dokumentmischung ausführen können.</para>
+
+    <sect2 id="merge-ex1">
+      <title>Beispiel 1: Namensschilder unter Nutzung einer CSV-Datei</title>
+  
+      <para>In diesem Beispiel organisieren Sie eine Orientierungsparty für die neuen Mannschaftsmitglieder Ihres Schiffes. Eine Liste der neuen Mitglieder haben Sie in <application>gnumeric</application> erstellt und in die folgende CSV-Datei exportiert. Sie könnten diese Datei auch in einem Texteditor erstellen, aber schließlich leben wir im 23. Jahrhundert...</para>
+
+      <programlisting>
+Name,Department,SN
+"Jim Kirk",Management,"SC937-0176 CEC"
+"Mr. Spock",Sciences,S179-276SP
+"Leonard McCoy",Medicine,unknown
+"Montgomery Scott",Engineering,SE-197-54T
+      </programlisting>
+
+      <para>In <application>glabels</application> haben Sie ein neues Dokument unter Verwendung der Dokumentvorlage »Avery 5395 Namensschild-Etiketten« erzeugt. Zunächst öffnen Sie mittels <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Mischeinstellungen</guimenuitem></menuchoice> den Dialog <guilabel>Mischeinstellungen</guilabel>. In diesem Dialog wählen Sie wie gezeigt die Datenquelle aus, in diesem Fall CSV, sowie die Mischquelle (Dateiname).</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-1-fig"> 
+       <title>Mischeinstellungen-Dialog</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Bevor Sie eine neue Einmischquelle anwenden, sollten Sie den ersten Datensatz deaktivieren, weil dieser nur Spaltenköpfe aus der originalen <application>gnumeric</application>-Tabelle enthält. Dadurch würde nur das erste Etikett verschwendet. Weiterhin können Sie alle anderen Datensätze entfernen, die Sie nicht für ein Etikett verwenden wollen.</para>
+
+      <para>Sie können jeden Datensatz detailliert betrachten, indem Sie auf die kleinen Dreiecke klicken. Sobald Sie mit der Auswahl zufrieden sind, klicken Sie auf <guibutton>OK</guibutton>, um die Änderungen anzuwenden.</para>
+
+      <para>Nun beginnen wir mit dem Hinzufügen von Objekten zu unserem <application>gLabels</application>-Dokument, wie gezeigt.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-2-fig"> 
+       <title>Hinzufügen von Objekten</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>In diesem Beispiel haben Sie drei Textobjekte und ein Strichcodeobjekt hinzugefügt. Das erste Textobjekt enthält nur einfachen Text (»Hello, my name is«). Das zweite Textobjekt enthält ein einfaches Mischfeld (»${1}«), welches zum ersten Feld eines Datensatzes (erste Spalte einer Zeile) korrespondiert, die den vollen Namen eines Mannschaftsmitglieds enthält. Das dritte Feld enthält sowohl einfachen Text (»Department:«) als auch ein einzelnes Mischfeld (»${2}«), welches zum zweiten Feld oder zum Arbeitsgebiet eines Mannschaftsmitglieds korrespondiert. Das Strichcodefeld ist so eingestellt, das Feld (oder den Schlüssel) »3« zu verwenden, das die Sternenflotten-Seriennummer des Mannschaftsmitglieds enthält.</para>
+
+      <para>Nun können Sie Ihre Namensschilder drucken, indem Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Drucken</guimenuitem></menuchoice> wählen. Der unten angezeigte Druckdialog wird geöffnet.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-3-fig"> 
+       <title>Drucken der Namensschilder</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Um sicher zu stellen, dass Ihre Etiketten gut aussehen, wählen Sie die Option <guilabel>Begrenzungen drucken</guilabel> und klicken auf <guibutton>Druckvorschau</guibutton>. Der Druckvorschaudialog wird geöffnet, wie unten angezeigt.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-4-fig"> 
+       <title>Vorschau der Namensschilder</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Alles sieht gut aus, also können wir jetzt den Drucker mit den entsprechenden Etiketten bestücken, die Namensschilder drucken und die Gäste an Bord beamen.</para>
+
+    </sect2>
+
+    <sect2 id="merge-ex2">
+      <title>Beispiel 2: Adressetiketten unter Nutzung einer CSV-Datei</title>
+  
+      <para>In diesem Beispiel planen Sie eine Party. Dafür benötigen Sie Adressetiketten für die Einladungen. Sie haben eine Liste Ihrer besten Freunde in <application>gnumeric</application> erstellt, die Sie in die folgende CSV-Datei exportiert haben. Es ist zu beachten, dass nicht jeder einen zweiten Vornamen oder eine zweizeilige Adresse hat.</para>
+
+      <programlisting>
+LAST,FIRST,MI,ADDR1,ADDR2,CITY,STATE,ZIP
+,,,,,,,
+Critter,Ess,S,"123 Faux St.",,Alexandria,VA,22310
+Doe,John,,"Apt 1X","451 Mystery St.",Trenton,NJ,08601
+Summers,Joyce,,"1630 Revello Dr",,Sunnydale,CA,95037
+McGarret,Steve,O,"404 Piikoi Street",,Honolulu,HI,96813
+Kramer,Cosmo,,"Apt 5B","129 W. 81 St.","New York",NY,10024-7207
+      </programlisting>
+
+      <para>In <application>glabels</application> haben Sie ein neues Dokument unter Verwendung der Dokumentvorlage »Avery 5512 Adressetiketten« erzeugt. Zunächst öffnen Sie mittels <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Mischeinstellungen</guimenuitem></menuchoice> den Dialog <guilabel>Mischeinstellungen</guilabel>. In diesem Dialog wählen Sie wie gezeigt die Datenquelle aus, in diesem Fall CSV, sowie die Mischquelle (Dateiname).</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-1-fig"> 
+       <title>Mischeinstellungen-Dialog</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Bevor Sie eine neue Einmischquelle anwenden, sollten Sie den ersten Datensatz deaktivieren, weil dieser nur Spaltenköpfe aus der originalen <application>gnumeric</application>-Tabelle enthält. Dadurch würde nur das erste Etikett verschwendet. Weiterhin können Sie alle anderen Datensätze entfernen, die Sie nicht für ein Etikett verwenden wollen.</para>
+
+      <para>Sie können jeden Datensatz detailliert betrachten, indem Sie auf die kleinen Dreiecke klicken. Sobald Sie mit der Auswahl zufrieden sind, klicken Sie auf <guibutton>OK</guibutton>, um die Änderungen anzuwenden.</para>
+
+      <para>Nun beginnen wir mit dem Hinzufügen von Objekten zu unserem <application>gLabels</application>-Dokument, wie gezeigt.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-2-fig"> 
+       <title>Hinzufügen von Objekten</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>In diesem Beispiel haben Sie ein einzelnes Textobjekt. Dieses Textobjekt enthält alle Einmischfelder, angeordnet in mehreren Zeilen wie eine Versandadresse. Beachten Sie, dass die Felder ${4} und ${5} (korrespondierend zu ADDR1 und ADDR2) jeweils keinen weiteren Text in deren Zeilen enthalten. Wenn <application>glabels</application> ein solches Feld als »nur Text« in einer Zeile erkennt, wird die Zeile nicht expandiert, falls das Feld leer ist.</para>
+
+      <para>Nun können Sie Ihre Adressetiketten drucken, indem Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Drucken</guimenuitem></menuchoice> wählen. Der unten angezeigte Druckdialog wird geöffnet.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-3-fig"> 
+       <title>Adressetiketten drucken</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Um sicher zu stellen, dass Ihre Etiketten gut aussehen, wählen Sie die Option <guilabel>Begrenzungen drucken</guilabel> und klicken auf <guibutton>Druckvorschau</guibutton>. Der Druckvorschaudialog wird geöffnet, wie unten angezeigt.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-4-fig"> 
+       <title>Adressetiketten-Vorschau</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Alles sieht gut aus, also können wir jetzt den Drucker mit den entsprechenden Etiketten bestücken, die Adressetiketten drucken und die Einladungen zur Party versenden.</para>
+
+    </sect2>
+
+<sect2 id="merge-ex3">
+      <title>Beispiel 3: Adressetiketten unter Nutzung des <application>Evolution</application>-Adressbuchs</title>
+  
+      <para>Ihre letzte Party war ein voller Erfolg. Nun benötigen Sie wieder Adressetiketten für die Einladung zu einer neuen Party. Um dies zu vereinfachen, können Sie das <application>Evolution</application>-Adressbuch nutzen, denn die Adressdaten aller Ihrer Freunde sind dort gespeichert.</para>
+
+      <note>
+       <para>Abhängig davon, wie das von Ihnen genutzte <application>gLabels</application>-Paket erstellt wurde, könnte diese Option nicht verfügbar sein. Die Unterstützung für das <application>Evolution</application>-Adressbuch ist nur vorhanden, wenn bei der Erstellung von <application>gLabels</application> das Paket <application>evolution-data-server</application> sowie dessen Entwicklerdateien verfügbar waren. Bitte berücksichtigen dies auch dann, wenn Sie <application>gLabels</application> direkt aus den Quellen erstellen.</para>
+       
+       <para>Falls das <application>gLabels</application>-Paket Ihrer Distribution diese Unterstützung nicht bieten sollte, kontaktieren Sie bitte den Ersteller des Pakets oder senden Sie einen Fehlerbericht, um dies einzufordern.</para>
+      </note>
+
+      <para>In <application>glabels</application> haben Sie ein neues Dokument unter Verwendung der Dokumentvorlage »Avery 5512 Adressetiketten« erzeugt. Zunächst öffnen Sie mittels <menuchoice><guimenu>Objekte</guimenu><guimenuitem>Mischeinstellungen</guimenuitem></menuchoice> den Dialog <guilabel>Mischeinstellungen</guilabel>. In diesem Dialog wählen Sie wie gezeigt die Datenquelle aus, in diesem Fall <guilabel>Daten aus dem vorgegebenen Evolution-Adressbuch</guilabel>, wie gezeigt.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-1-fig"> 
+       <title>Mischeinstellungen-Dialog</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex3-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Sobald  Sie <guilabel>Daten aus dem vorgegebenem Evolution-Adressbuch</guilabel> als Mischquelle gewählt haben, wird eine vollständige Liste des Inhalts angezeigt. Anfänglich sind alle Einträge ausgewählt. Angenommen, Sie planen eine wirklich große Party, können Sie die Auswahl unverändert belassen. Behalten Sie jedoch dabei Ihre finanziellen Möglichkeiten im Auge. Sie können bestimmte Einträge auswählen oder wieder abwählen, indem Sie die entsprechenden Ankreuzfelder anklicken. Alternativ können Sie durch Anklicken der Knöpfe <guibutton>Alle markieren</guibutton> oder <guibutton>Markierung aufheben</guibutton> alle Einträge des Adressbuchs aktivieren oder deaktivieren. </para>
+      <para>Sie können jeden Datensatz detailliert betrachten, indem Sie auf die kleinen Dreiecke klicken. Sobald Sie mit der Auswahl zufrieden sind, klicken Sie auf <guibutton>OK</guibutton>, um die Änderungen anzuwenden.</para>
+
+      <para>Nun beginnen wir mit dem Hinzufügen von Objekten zu unserem <application>gLabels</application>-Dokument, wie gezeigt.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-2-fig"> 
+       <title>Hinzufügen von Objekten</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex3-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>In diesem Beispiel haben Sie ein einzelnes Textobjekt. Dieses Textobjekt enthält alle Einmischfelder, angeordnet in mehreren Zeilen wie eine Versandadresse.</para>
+
+      <para>Nun können Sie Ihre Adressetiketten drucken, indem Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Drucken</guimenuitem></menuchoice> wählen. Der unten angezeigte Druckdialog wird geöffnet.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-3-fig"> 
+       <title>Adressetiketten drucken</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Um sicher zu stellen, dass Ihre Etiketten gut aussehen, wählen Sie die Option <guilabel>Begrenzungen drucken</guilabel> und klicken auf <guibutton>Druckvorschau</guibutton>. Der Druckvorschaudialog wird geöffnet, wie unten angezeigt.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-4-fig"> 
+       <title>Adressetiketten-Vorschau</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Alles sieht gut aus, also können wir jetzt den Drucker mit den entsprechenden Etiketten bestücken, die Adressetiketten drucken und die Einladungen zur Party versenden.</para>
+
+    </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Creating templates ================================== -->
+  <sect1 id="glabels-manual-create-template"> 
+    <title>Manuelles Erstellen neuer Vorlagen</title> 
+
+    <para>Vordefinierte Vorlagen sind als XML-Dateien verfügbar, die in <filename>${prefix}/share/glabels/</filename> gespeichert sind, wobei <filename>${prefix}</filename> üblicherweise <filename>/usr/local</filename> oder <filename>/usr</filename> ist, abhängig von der Konfigurationsoption <filename>prefix</filename>. <application>gLabels</application> verwendet alle Dateien der Form <filename>*-templates.xml</filename> oder <filename>*.template</filename>, die es in <filename>${prefix}/share/glabels/</filename> und <filename>${HOME}/.glabels/</filename> findet. Zusätzliche Vorlagen können unter Verwendung der Dateiendung <filename>*.template</filename> in einem dieser Ordner gespeichert werden.</para>
+
+    <para>Das Format dieser Dateien ist in einer DTD definiert: <ulink url="http://glabels.sourceforge.net/doc/glabels-2.0.dtd.txt" type="http">glabels-2.2.dtd</ulink>. Diese DTD beschreibt außerdem weitere von gLabels benutzte XML-Formate.</para>
+
+    <sect2 id="template-assumptions">
+      <title>Voraussetzungen</title>
+      <itemizedlist>
+       <listitem>
+         <para>Eine Seite enthält nur eine Etiketten- oder Kartengröße. Falls eine Seite mehrere Größen enthält, kann sie für das Drucken in mehreren Durchläufen über mehrere Vorlagen verteilt werden.</para>
+       </listitem>
+       <listitem>
+         <para>Abstände können in den Einheiten <emphasis>pt</emphasis>, <emphasis>in</emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis> oder <emphasis>pc</emphasis> ausgedrückt werden. Beispiel: »<literal>1.0in</literal>« oder »<literal>2.54cm</literal>«. Falls keine Einheiten angegeben werden, nimmt der Rechner Punkt an. ein Punkt (<emphasis>pt</emphasis>) entspricht = 1/72 <emphasis>in</emphasis> = 0.352778 <emphasis>mm</emphasis>.</para>
+       </listitem>
+      </itemizedlist>
+    </sect2>
+
+    <sect2 id="template-file">
+      <title>Vorlagedateien</title>
+
+      <programlisting>
+&lt;?xml version="1.0"?&gt;
+&lt;Glabels-templates&gt;
+
+   <replaceable>...Vorlagen...</replaceable>
+
+&lt;/Glabels-templates&gt;
+      </programlisting>
+    </sect2>
+
+
+    <sect2 id="template-example">
+      <title>Beispielvorlage</title>
+      <programlisting>
+  &lt;Template brand="Avery" part="8160" size="US-Letter" description="Mailing Labels"&gt;
+    &lt;Label-rectangle id="0" width="189pt" height="72pt" round="5pt"&gt;
+      &lt;Markup-margin size="5pt"/&gt;
+      &lt;Layout nx="3" ny="10" x0="11.25pt" y0="36pt" dx="200pt" dy="72pt"/&gt;
+    &lt;/Label-rectangle&gt;
+    &lt;Alias brand="Avery" part="5160"/&gt;
+    &lt;Alias brand="Avery" part="6233"/&gt;
+  &lt;/Template&gt;
+      </programlisting>
+    </sect2>
+
+    <sect2 id="template-template-node">
+      <title>Knoten »Template«</title>
+
+      <para>Ein <emphasis>Template</emphasis>-Knoten beschreibt ein einzelnes Produkt. Es muss eine Instanz eines der anderen Label-Knoten (<emphasis>Label-rectangle</emphasis>, <emphasis>Label-round</emphasis>, or <emphasis>Label-cd</emphasis>) enthalten. Auf diesen Knoten können einer, mehrere oder kein <emphasis>Alias</emphasis>-Knoten folgen.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>Marke oder Hersteller des Produkts, z.B. »Avery«</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>Bestellnummer oder Name des Produkts, z.B. »8160«</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>size</para></entry>
+             <entry>
+                <para>Größe des Papiers, z.B.  »US-Letter«, »A4«, …</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>description</para></entry>
+             <entry>
+                <para>Beschreibung des Produkts, z.B. »Mailing Labels«.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>_description</para></entry>
+             <entry>
+                <para>Übersetzbare Beschreibung des Produkts, z.B. »Mailing Labels« (nur sinnvoll für vordefinierte Vorlagen)</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry>
+                <para>Seitenbreite. Nur gültig, wenn als Größe »Other« festgelegt ist.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry>
+                <para>Seitenhöhe. Nur gültig, wenn als Größe »Other« festgelegt ist.</para>
+               </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-rectangle-node">
+      <title>Knoten »Label-rectangle«</title>
+
+      <para>Ein <emphasis>Label-rectangle</emphasis>-Knoten beschreibt die Abmessungen eines einzelnen Etiketts oder einer einzelnen Karte in rechteckiger Form, wobei abgerundete Ecken möglich sind.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Für zukünftige Verwendung reserviert. Sollte immer 0 sein.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry><para>Breite des Etiketts oder der Karte</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry><para>Höhe des Etiketts oder der Karte</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>round</para></entry>
+             <entry>
+                <para>Radius der Ecken. Für Objekte mit nicht abgerundeten Ecken (Visitenkarten) sollte der Radius 0 sein.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x_waste</para></entry>
+             <entry>
+                <para>Erlaubte Breite des horizontalen Überdruckens. Dies minimiert Ausrichtungsprobleme auf anderen als weißen Hintergründen (z.B. Bilder).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y_waste</para></entry>
+             <entry>
+                <para>Erlaubte Breite des vertikalen Überdruckens. Dies minimiert Ausrichtungsprobleme auf anderen als weißen Hintergründen (z.B. Bilder).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-fig"> 
+       <title>Parameter zu Label-rectangle </title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-label.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-label-round-node">
+      <title>Knoten »Label-round«</title>
+
+      <para>Ein <emphasis>Label-round</emphasis>-Knoten beschreibt die Abmessungen eines einfachen Rundetiketts (nicht einer CD).</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Für zukünftige Verwendung reserviert. Sollte immer 0 sein.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Radius (halber Durchmesser) des Etiketts</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>waste</para></entry>
+             <entry>
+                <para>Erlaubte Breite des Überdruckens. Dies minimiert Ausrichtungsprobleme auf anderen als weißen Hintergründen (z.B. Bilder).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-cd-node">
+      <title>Knoten »Label-cd«</title>
+
+      <para>Ein <emphasis>Label-cd</emphasis>-Knoten beschreibt die Abmessungen einer CD, DVD oder Visitenkarten-CD.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Für zukünftige Verwendung reserviert. Sollte immer 0 sein.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Äußerer Radius des Etiketts</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>hole</para></entry>
+             <entry><para>Radius des Mittellochs</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry>
+                <para>Falls vorhanden, wird das Etikett auf die angegebene Größe begrenzt (nützlich für »Visitenkarten-CDs«)</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry>
+                <para>Falls vorhanden, wird das Etikett auf die angegebene Höhe begrenzt (nützlich für »Visitenkarten-CDs«)</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>waste</para></entry>
+             <entry>
+                <para>Erlaubte Breite des Überdruckens. Dies minimiert Ausrichtungsprobleme auf anderen als weißen Hintergründen (z.B. Bilder).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-cd-fig"> 
+       <title>CD-Label-Parameter</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-cd.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-markup-margin-node">
+      <title>Knoten »Markup-margin«</title>
+
+      <para>Ein <emphasis>Markup-margin</emphasis>-Knoten beschreibt die Ränder entlang der Seiten eines Etiketts.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>size</para></entry>
+             <entry>
+                <para>Randbreite. Die Breite des Bereichs zwischen der Randlinie und dem Rand des Etiketts/der Karte.</para>
+              </entry>
+            </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-line-node">
+      <title>Knoten »Markup-line«</title>
+
+      <para>Ein <emphasis>Markup-line</emphasis>-Knoten beschreibt eine Markierungslinie.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>x-Koordinate des Anfangspunkts des Linienabschnitts.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>y-Koordinate des Anfangspunkts des Linienabschnitts.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x2</para></entry>
+             <entry>
+                <para>x-Koordinate des Endpunkts des Linienabschnitts.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y2</para></entry>
+             <entry>
+                <para>y-Koordinate des Endpunkts des Linienabschnitts.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-circle-node">
+      <title>Knoten »Markup-circle«</title>
+
+      <para>Ein <emphasis>Markup-circle</emphasis>-Knoten beschreibt einen Markierungskreis.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>x-Koordinate des Kreismittelpunkts.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>y-Koordinate des Kreismittelpunkts.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Radius des Kreises.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-rect-node">
+      <title>Knoten »Markup-rect«</title>
+
+      <para>Ein <emphasis>Markup-rect</emphasis>-Knoten beschreibt ein Markierungsrechteck.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>x-Koordinate der oberen linken Ecke des Rechtecks.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>y-Koordinate der oberen linken Ecke des Rechtecks.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>w</para></entry>
+             <entry>
+                <para>Breite des Rechtecks.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>h</para></entry>
+             <entry>
+                <para>Höhe des Rechtecks.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>r</para></entry>
+             <entry><para>Radius der abgerundeten Ecken des Rechtecks.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-layout-node">
+      <title>Knoten »Layout«</title>
+
+      <para>Ein Label-Knoten kann mehrere <emphasis>Layout</emphasis>-Unterknoten enthalten. Wenn die Etiketten in einem einfachen rechteckigen Raster angeordnet sind, dann wird nur ein Layout benötigt. Falls die Etiketten jedoch in komplizierteren Rasteranordnungen vorliegen, können mehrere <emphasis>Layout</emphasis>-Unterknoten verwendet werden. Beachten Sie, dass ein einzelnes Etikett immer auch als ein Raster aus Etiketten betrachtet werden kann.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>nx</para></entry>
+             <entry>
+                <para>Anzahl der Etiketten/Karten im Raster in horizontaler Richtung</para>
+              </entry>
+            </row>
+           <row valign="top">
+             <entry><para>ny</para></entry>
+             <entry>
+                <para>Anzahl der Etiketten/Karten im Raster in vertikaler Richtung</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>Abstand von linken Rand des Papiers zum linken Rand der linken Reihe der Karten/Etiketten im Layout.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>Abstand von oberen Rand des Papiers zum oberen Rand der oberen Reihe der Karten/Etiketten im Layout.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>dx</para></entry>
+             <entry><para>Horizontaler Rasterabstand des Zeichengitters.</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>dy</para></entry>
+             <entry><para>Vertikaler Rasterabstand des Zeichengitters.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-layout-fig"> 
+       <title>Layout-Parameter</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-layout.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-alias-node">
+      <title>Knoten »Alias«</title>
+
+      <para>Ein <emphasis>Alias</emphasis>-Knoten beschreibt den Namen eines Produkts mit der gleichen Größe und dem gleichen Layout einer anderen Vorlage.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Eigenschaft</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Beschreibung</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>Die Marke oder der Hersteller des entsprechenden Produkts.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>Die Bestellnummer oder der Name des entsprechenden Produkts.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Bugs ================================== -->
+<!-- This section is optional and is commented out by default. 
+     You can use it to describe known bugs and limitations of the 
+         program if there are any - please be frank and list all
+     problems you know of. 
+  
+  <sect1 id="mayapp-bugs">
+  <title>Known Bugs and Limitations</title>
+  <para> </para>
+ </sect1>
+-->
+
+
+
+
+<!-- ============= About ================================== -->
+<!-- This section contains info about the program (not docs), such as
+      author's name(s), web page, license, feedback address. This
+      section is optional: primary place for this info is "About.." box of
+      the program. However, if you do wish to include this info in the
+      manual, this is the place to put it. Alternatively, you can put this information in the title page.-->
+  <sect1 id="glabels-about"> 
+    <title>Info zu <application>gLabels</application></title> 
+    <para><application>gLabels</application> wurde von Jim Evins (<email>evins@snaught.com</email>) geschrieben. Weitere Informationen zu <application>gLabels</application> finden Sie auf der <ulink url="http://glabels.sourceforge.net" type="http">gLabels-Webseite</ulink>.</para>
+    <para>Um einen Fehler zu melden oder einen Vorschlag zu dieser Anwendung oder zu diesem Handbuch zu machen, folgen Sie den Anweisungen auf der <ulink url="http://glabels.sourceforge.net/contact/" type="http"><application>gLabels</application>-Kontaktseite</ulink>.</para>
+
+    <para>Dieses Programm ist freie Software. Sie können es unter den Bedingungen der <citetitle>GNU General Public License</citetitle>, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder (nach Ihrer Option) jeder späteren Version. Eine Kopie der <citetitle>GNU General Public License</citetitle> finden Sie unter diesem <ulink url="ghelp:gpl" type="help">Link</ulink>, oder in der Datei COPYING, die im Quellcode dieses Programms enthalten ist.</para>
+
+  </sect1> 
+
+
+
+
+
+</article>
diff --git a/help/es/es.po b/help/es/es.po
new file mode 100644 (file)
index 0000000..5b32a8b
--- /dev/null
@@ -0,0 +1,2268 @@
+# translation of glabels.help.glabels_2_2.po to Español
+# Spanish translation for glabels.
+# Copyright (C) 2010 glabels's COPYRIGHT HOLDER
+# This file is distributed under the same license as the glabels package.
+# Jorge González <jorgegonz@svn.gnome.org>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels.help.glabels_2_2\n"
+"POT-Creation-Date: 2010-02-18 17:31+0000\n"
+"PO-Revision-Date: 2010-02-19 12:52+0100\n"
+"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
+"Language-Team: Español <gnome-es-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:195(None)
+msgid ""
+"@@image: 'figures/main-window-empty.png'; "
+"md5=226b58f05f4171531066358a29cda1a7"
+msgstr ""
+"@@image: 'figures/main-window-empty.png'; "
+"md5=226b58f05f4171531066358a29cda1a7"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:447(None)
+msgid ""
+"@@image: 'figures/print-copies.png'; md5=ebb4d08810a67cc9cd7ec6ddd7b52fb0"
+msgstr ""
+"@@image: 'figures/print-copies.png'; md5=ebb4d08810a67cc9cd7ec6ddd7b52fb0"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:479(None)
+msgid ""
+"@@image: 'figures/print-merge.png'; md5=ffe6027513a10f7ba940c350c1dc5717"
+msgstr ""
+"@@image: 'figures/print-merge.png'; md5=ffe6027513a10f7ba940c350c1dc5717"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:790(None)
+msgid ""
+"@@image: 'figures/object-editor-sidebar.png'; "
+"md5=14eace177c1f5bfe36022acbbd6a9f0e"
+msgstr ""
+"@@image: 'figures/object-editor-sidebar.png'; "
+"md5=14eace177c1f5bfe36022acbbd6a9f0e"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1231(None)
+msgid ""
+"@@image: 'figures/merge-ex1-1.png'; md5=55a97963022047cdad6aa198b5ed698e"
+msgstr ""
+"@@image: 'figures/merge-ex1-1.png'; md5=55a97963022047cdad6aa198b5ed698e"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1256(None)
+msgid ""
+"@@image: 'figures/merge-ex1-2.png'; md5=d03979f010e20e98532258edb20b1bc0"
+msgstr ""
+"@@image: 'figures/merge-ex1-2.png'; md5=d03979f010e20e98532258edb20b1bc0"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1284(None)
+msgid ""
+"@@image: 'figures/merge-ex1-3.png'; md5=94e382ccdfbc2fe5d320010d2ef10c61"
+msgstr ""
+"@@image: 'figures/merge-ex1-3.png'; md5=94e382ccdfbc2fe5d320010d2ef10c61"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1302(None)
+msgid ""
+"@@image: 'figures/merge-ex1-4.png'; md5=e72810bc3c191df6c8b2ad0cb1131021"
+msgstr ""
+"@@image: 'figures/merge-ex1-4.png'; md5=e72810bc3c191df6c8b2ad0cb1131021"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1348(None)
+msgid ""
+"@@image: 'figures/merge-ex2-1.png'; md5=4f062158be21bfadc4adfbdcf5d0206f"
+msgstr ""
+"@@image: 'figures/merge-ex2-1.png'; md5=4f062158be21bfadc4adfbdcf5d0206f"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1374(None)
+msgid ""
+"@@image: 'figures/merge-ex2-2.png'; md5=f69a7e0ae86f66b0d70d39a7757918fa"
+msgstr ""
+"@@image: 'figures/merge-ex2-2.png'; md5=f69a7e0ae86f66b0d70d39a7757918fa"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1399(None) C/glabels.xml:1513(None)
+msgid ""
+"@@image: 'figures/merge-ex2-3.png'; md5=f5134b9e911ebdd17d4a5b36a5ba56d0"
+msgstr ""
+"@@image: 'figures/merge-ex2-3.png'; md5=f5134b9e911ebdd17d4a5b36a5ba56d0"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1417(None) C/glabels.xml:1531(None)
+msgid ""
+"@@image: 'figures/merge-ex2-4.png'; md5=29a60e970cb026aecf75543203494b00"
+msgstr ""
+"@@image: 'figures/merge-ex2-4.png'; md5=29a60e970cb026aecf75543203494b00"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1464(None)
+msgid ""
+"@@image: 'figures/merge-ex3-1.png'; md5=b0c387b5fcfd730b2ae75172895ff5b8"
+msgstr ""
+"@@image: 'figures/merge-ex3-1.png'; md5=b0c387b5fcfd730b2ae75172895ff5b8"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1492(None)
+msgid ""
+"@@image: 'figures/merge-ex3-2.png'; md5=09f105e133657345e6e478a464e5b49f"
+msgstr ""
+"@@image: 'figures/merge-ex3-2.png'; md5=09f105e133657345e6e478a464e5b49f"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1767(None)
+msgid ""
+"@@image: 'figures/glabels-template-label.png'; "
+"md5=b7db4090373462b8d45feb22d4cd5646"
+msgstr ""
+"@@image: 'figures/glabels-template-label.png'; "
+"md5=b7db4090373462b8d45feb22d4cd5646"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1888(None)
+msgid ""
+"@@image: 'figures/glabels-template-cd.png'; "
+"md5=145b49a5380de63ffa9451d2bbb81934"
+msgstr ""
+"@@image: 'figures/glabels-template-cd.png'; "
+"md5=145b49a5380de63ffa9451d2bbb81934"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:2150(None)
+msgid ""
+"@@image: 'figures/glabels-template-layout.png'; "
+"md5=a8adcff0584be1f0275bc2a169a580df"
+msgstr ""
+"@@image: 'figures/glabels-template-layout.png'; "
+"md5=a8adcff0584be1f0275bc2a169a580df"
+
+#: C/glabels.xml:31(title)
+msgid "<application>gLabels</application> Manual V2.2.6"
+msgstr "Manual de <application>gLabels</application> V2.2.6"
+
+#: C/glabels.xml:33(para)
+msgid ""
+"User manual for the <application>gLabels</application> label and business "
+"card creation program"
+msgstr ""
+"Manual de usuario para el programa de creación de etiquetas y tarjetas de "
+"visita <application>gLabels</application>"
+
+#: C/glabels.xml:38(year)
+msgid "2003-2009"
+msgstr "2003-2009"
+
+#: C/glabels.xml:39(holder) C/glabels.xml:42(publishername)
+#: C/glabels.xml:93(para) C/glabels.xml:103(para)
+msgid "Jim Evins"
+msgstr "Jim Evins"
+
+#: C/glabels.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Se otorga permiso para copiar, distribuir y/o modificar este documento bajo "
+"los términos de la Licencia de Documentación Libre de GNU, Versión 1.1 o "
+"cualquier otra versión posterior publicada por la Free Software Foundation; "
+"sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de "
+"Cubierta Trasera. Puede encontrar una copia de la licencia GFDL en este "
+"<ulink type=\"help\" url=\"ghelp:fdl\">enlace</ulink> o en el archivo "
+"COPYING-DOCS distribuido con este manual."
+
+#: C/glabels.xml:12(para)
+msgid ""
+"This manual is part of a collection of GNOME manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Este manual es parte de una colección de manuales de GNOME distribuido bajo "
+"la GFDL. Si quiere distribuir este manual por separado de la colección, "
+"puede hacerlo añadiendo una copia de la licencia al manual, tal como se "
+"describe en la sección 6 de la licencia."
+
+#: C/glabels.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any GNOME "
+"documentation, and the members of the GNOME Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Muchos de los nombres utilizados por las empresas para distinguir sus "
+"productos y servicios se consideran marcas comerciales. Cuando estos nombres "
+"aparezcan en la documentación de GNOME, y siempre que se haya informado a "
+"los miembros del Proyecto de documentación de GNOME de dichas marcas "
+"comerciales, los nombres aparecerán en mayúsculas o con las iniciales en "
+"mayúsculas."
+
+#: C/glabels.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"EL DOCUMENTO SE OFRECE «TAL CUAL», SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O "
+"IMPLÍCITA, INCLUYENDO, PERO SIN LIMITARSE A ELLA, LA GARANTÍA DE QUE EL "
+"DOCUMENTO O LA VERSIÓN MODIFICADA DEL MISMO ESTÉ LIBRE DE DEFECTOS, GARANTÍA "
+"DE COMERCIALIZACIÓN, APTITUD PARA UN USO EN PARTICULAR O INCUMPLIMIENTO. "
+"TODOS LOS RIESGOS RELATIVOS A LA CALIDAD, EXACTITUD O RENDIMIENTO DEL "
+"DOCUMENTO O LA VERSIÓN MODIFICADA DEL MISMO SON ASUMIDOS POR VD. EN CASO DE "
+"QUE EL DOCUMENTO O LA VERSIÓN MODIFICADA SEAN DEFECTUOSOS, VD. (NO EL "
+"ESCRITOR ORIGINAL NI EL AUTOR NI NINGUNO DE LOS COLABORADORES) ASUMIRÁ EL "
+"COSTE DE CUALQUIER MANTENIMIENTO, REPARACIÓN O CORRECCIÓN QUE SEAN "
+"NECESARIOS. ESTA RENUNCIA DE GARANTÍA CONSTITUYE UNA PARTE ESENCIAL DE ESTA "
+"LICENCIA NO SE AUTORIZA EL USO DE NINGÚN DOCUMENTO NI VERSIÓN MODIFICADA DEL "
+"MISMO, SALVO EN LAS CONDICIONES ESPECIFICADAS EN ESTA RENUNCIA; Y "
+
+#: C/glabels.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"EN NINGUNA CIRCUNSTANCIA NI SEGÚN NINGÚN ARGUMENTO LEGAL, SEA POR MOTIVOS "
+"CULPOSOS (INCLUIDA LA NEGLIGENCIA), CONTRACTUALES O DE OTRO TIPO, NI EL "
+"AUTOR, NI EL REDACTOR INICIAL, NI CUALQUIER COLABORADOR, NI CUALQUIER "
+"DISTRIBUIDOR DEL DOCUMENTO O VERSIÓN MODIFICADA DEL MISMO, NI CUALQUIER "
+"PROVEEDOR DE CUALQUIERA DE DICHAS PARTES, SERÁN RESPONSABLES, ANTE NINGÚN "
+"TERCERO, DE NINGÚN DAÑO O PERJUICIO DIRECTO, INDIRECTO, ESPECIAL, INCIDENTAL "
+"O CONSIGUIENTE DE NINGÚN TIPO, INCLUIDOS, SIN LIMITACIÓN, LOS DAÑOS POR "
+"PÉRDIDA DE FONDO DE COMERCIO, INTERRUPCIÓN DEL TRABAJO, FALLO O MAL "
+"FUNCIONAMIENTO INFORMÁTICO, NI CUALQUIER OTRO DAÑO O PÉRDIDA DERIVADOS DEL "
+"USO DEL DOCUMENTO Y LAS VERSIONES MODIFICADAS DEL MISMO, O RELACIONADO CON "
+"ELLO, INCLUSO SI SE HABÍA COMUNICADO A AQUELLA PARTE LA POSIBILIDAD DE TALES "
+"DAÑOS."
+
+#: C/glabels.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"ESTE DOCUMENTO Y LAS VERSIONES MODIFICADAS DEL MISMO SE PROPORCIONAN SEGÚN "
+"LAS CONDICIONES ESTABLECIDAS EN LA LICENCIA DE DOCUMENTACIÓN LIBRE DE GNU "
+"(GFDL) Y TENIENDO EN CUENTA QUE: <placeholder-1/>"
+
+#: C/glabels.xml:52(firstname)
+msgid "Jim"
+msgstr "Jim"
+
+#: C/glabels.xml:53(surname)
+msgid "Evins"
+msgstr "Evins"
+
+#: C/glabels.xml:87(revnumber)
+msgid "gLabels Manual V2.2.6"
+msgstr "Manual de gLabels V2.2.6"
+
+#: C/glabels.xml:88(date)
+msgid "October 2009"
+msgstr "Octubre de 2009"
+
+#: C/glabels.xml:90(para)
+msgid "Mario Blättermann <email>mariobl@gnome.org</email>"
+msgstr "Mario Blättermann <email>mariobl@gnome.org</email>"
+
+#: C/glabels.xml:97(revnumber)
+msgid "gLabels Manual V2.2"
+msgstr "Manual de gLabels V2.2"
+
+#: C/glabels.xml:98(date)
+msgid "December 2007"
+msgstr "Diciembre de 2007"
+
+#: C/glabels.xml:100(para)
+msgid "Jim Evins <email>evins@snaught.com</email>"
+msgstr "Jim Evins <email>evins@snaught.com</email>"
+
+#: C/glabels.xml:108(releaseinfo)
+msgid ""
+"This manual describes version 2.2.6 of <application>gLabels</application>."
+msgstr ""
+"Este manual describe la versión 2.2.6 de <application>gLabels</application>."
+
+#: C/glabels.xml:111(title)
+msgid "Feedback"
+msgstr "Comentarios"
+
+#: C/glabels.xml:112(para)
+msgid ""
+"To report a bug or make a suggestion regarding the <application>gLabels</"
+"application> application or this manual, follow the directions in the <ulink "
+"url=\"http://glabels.sourceforge.net/contact/\" type=\"http"
+"\"><application>gLabels</application> Contact Page</ulink>."
+msgstr ""
+
+#: C/glabels.xml:121(primary)
+msgid "gLabels"
+msgstr "gLabels"
+
+#: C/glabels.xml:124(primary)
+msgid "glabels"
+msgstr "glabels"
+
+#: C/glabels.xml:135(title)
+msgid "Introduction"
+msgstr "Introducción"
+
+#: C/glabels.xml:137(para)
+msgid ""
+"The <application>gLabels</application> application is a lightweight program "
+"for creating labels and business cards for the <systemitem>GNOME desktop</"
+"systemitem> environment. It is designed to work with various laser/ink-jet "
+"peel-off label and business card sheets that you'll find at most office "
+"supply stores."
+msgstr ""
+
+#: C/glabels.xml:158(title)
+msgid "Getting Started"
+msgstr "Inicio"
+
+#: C/glabels.xml:161(title)
+msgid "To Start <application>gLabels</application>"
+msgstr "Para iniciar <application>gLabels</application>"
+
+#: C/glabels.xml:162(para)
+msgid "You can start <application>gLabels</application> in the following ways:"
+msgstr ""
+
+#: C/glabels.xml:166(term)
+msgid "<guimenu>Applications</guimenu> menu"
+msgstr "Menú <guimenu>Aplicaciones</guimenu>"
+
+#: C/glabels.xml:168(para)
+msgid ""
+"Choose <menuchoice><guisubmenu>Office</guisubmenu><guimenuitem>gLabels</"
+"guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/glabels.xml:176(term)
+msgid "Command line"
+msgstr "Línea de comandos"
+
+#: C/glabels.xml:178(para)
+msgid "Type <command>glabels</command>, then press <keycap>Return</keycap>:"
+msgstr ""
+
+#: C/glabels.xml:186(title)
+msgid "When You Start <application>gLabels</application>"
+msgstr ""
+
+#: C/glabels.xml:187(para)
+msgid ""
+"When you start <application>gLabels</application>, the following window is "
+"displayed."
+msgstr ""
+
+#: C/glabels.xml:191(title)
+msgid "<application>gLabels</application> Start Up Window"
+msgstr "Ventana de inicio de <application>gLabels</application>"
+
+#. for example, the items on the menubar and on the toolbar. This section is optional.
+#: C/glabels.xml:205(para)
+msgid ""
+"The <application>gLabels</application> window contains the following "
+"elements:"
+msgstr ""
+
+#: C/glabels.xml:209(term)
+msgid "Menubar."
+msgstr "Barra de menú."
+
+#: C/glabels.xml:211(para)
+msgid ""
+"The menus on the menubar contain all of the commands you need to create and "
+"edit labels and business cards in <application>gLabels</application>."
+msgstr ""
+
+#: C/glabels.xml:217(term)
+msgid "Main toolbar."
+msgstr "Barra de herramientas principal."
+
+#: C/glabels.xml:219(para)
+msgid ""
+"The main toolbar contains a subset of common File and Edit commands that you "
+"can access from the menubar."
+msgstr ""
+
+#: C/glabels.xml:224(term)
+msgid "Drawing toolbar."
+msgstr ""
+
+#: C/glabels.xml:226(para)
+msgid ""
+"The drawing toolbar contains a subset of commands for editing the current "
+"<application>gLabels</application> document."
+msgstr ""
+
+#: C/glabels.xml:231(term)
+msgid "Display area."
+msgstr "Área de visualización."
+
+#: C/glabels.xml:233(para)
+msgid ""
+"The display area is the main drawing interface to <application>gLabels</"
+"application>."
+msgstr ""
+
+#: C/glabels.xml:238(term)
+msgid "Object sidebar."
+msgstr ""
+
+#: C/glabels.xml:240(para)
+msgid ""
+"The object sidebar provides an interface for viewing and editing all "
+"properties of an individual object."
+msgstr ""
+
+#: C/glabels.xml:245(term)
+msgid "Properties toolbar."
+msgstr "Barra de herramientas de propiedades."
+
+#: C/glabels.xml:247(para)
+msgid ""
+"The properties toolbar contains a set of tools to manipulate the properties "
+"of selected objects and set default properties for new objects."
+msgstr ""
+
+#: C/glabels.xml:253(term)
+msgid "Statusbar."
+msgstr "Barra de estado."
+
+#: C/glabels.xml:255(para)
+msgid ""
+"The statusbar displays information about current <application>gLabels</"
+"application> activity and contextual information about the menu items."
+msgstr ""
+
+#: C/glabels.xml:271(title)
+msgid "Usage"
+msgstr "Uso"
+
+#: C/glabels.xml:275(title)
+msgid "To Create a New Label or Card"
+msgstr ""
+
+#: C/glabels.xml:277(para)
+msgid ""
+"To create a new label or business card, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>New</guimenuitem></menuchoice> to display the "
+"<guilabel>New Label or Card</guilabel> dialog. Select the media type and "
+"orientation for the new document, then click <guibutton>OK</guibutton>. A "
+"new document is displayed in the display area of the <application>gLabels</"
+"application> window."
+msgstr ""
+
+#: C/glabels.xml:286(para)
+msgid ""
+"If your particular media type is missing from this dialog, see <xref linkend="
+"\"glabels-create-template\"/>"
+msgstr ""
+
+#: C/glabels.xml:293(title)
+msgid "To Open a File"
+msgstr "Abrir un archivo"
+
+#: C/glabels.xml:295(para)
+msgid ""
+"To open a file, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</"
+"guimenuitem></menuchoice> to display the <guilabel>Open File</guilabel> "
+"dialog. Select the file that you want to open, then click <guibutton>OK</"
+"guibutton>. The file is displayed in the display area of the "
+"<application>gLabels</application> window."
+msgstr ""
+
+#: C/glabels.xml:302(para)
+msgid ""
+"You can also open multiple files in <application>gLabels</application>. The "
+"application creates a separate application window for each open file."
+msgstr ""
+
+#: C/glabels.xml:306(para)
+msgid ""
+"The application records the paths and filenames of the most recent files "
+"that you have edited and displays the files as menu items on the "
+"<menuchoice><guimenu>File</guimenu><guisubmenu>Recent Files</guisubmenu></"
+"menuchoice> menu."
+msgstr ""
+
+#: C/glabels.xml:316(title)
+msgid "To Open Multiple Files from a Command Line"
+msgstr ""
+
+#: C/glabels.xml:318(para)
+msgid ""
+"You can run <application>gLabels</application> from a command line and open "
+"a single file or multiple files. To open multiple files from a command line, "
+"type the following command, then press <keycap>Return</keycap>:"
+msgstr ""
+
+#: C/glabels.xml:324(replaceable)
+msgid "file1.glabels file2.glabels file3.glabels"
+msgstr ""
+
+#: C/glabels.xml:323(command)
+msgid "glabels <placeholder-1/>"
+msgstr ""
+
+#: C/glabels.xml:327(para)
+msgid ""
+"When the application starts, the files that you specify are displayed in "
+"separate <application>gLabels</application> windows."
+msgstr ""
+
+#: C/glabels.xml:334(title)
+msgid "To Save a File"
+msgstr "Guardar un archivo"
+
+#: C/glabels.xml:336(para)
+msgid "You can save files in the following ways:"
+msgstr "Puede guardar archivos de cualquiera de estas maneras:"
+
+#: C/glabels.xml:341(para)
+msgid ""
+"To save changes to an existing file, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Save</guimenuitem></menuchoice>."
+msgstr ""
+"Para guardar los cambios a un archivo existente, elija "
+"<menuchoice><guimenu>Archivo</guimenu><guimenuitem>Guardar</guimenuitem></"
+"menuchoice>."
+
+#: C/glabels.xml:348(para)
+msgid ""
+"To save a new file or to save an existing file under a new filename, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Save As</guimenuitem></"
+"menuchoice>. Enter a name for the file in the <guilabel>Save As</guilabel> "
+"dialog box, then click <guibutton>OK</guibutton>."
+msgstr ""
+
+#: C/glabels.xml:361(title)
+msgid "To Change Label Properties"
+msgstr "Cambiar las propiedades de una etiqueta"
+
+#: C/glabels.xml:363(para)
+msgid ""
+"To change the media type and/or orientation of a label, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Properties</guimenuitem></"
+"menuchoice> to display the <guilabel>Label properties</guilabel> dialog. "
+"Select the new media type and orientation for the document, then click "
+"<guibutton>OK</guibutton>."
+msgstr ""
+
+#: C/glabels.xml:374(title)
+msgid "To Create a Custom Template"
+msgstr ""
+
+#: C/glabels.xml:376(para)
+msgid ""
+"To create a new custom template, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Template Designer ...</guimenuitem></menuchoice> to "
+"display the <guilabel>Template Designer</guilabel> dialog. This dialog will "
+"assist you in creating a custom template for most types of label or card "
+"stationery that you may encounter."
+msgstr ""
+
+#: C/glabels.xml:383(para)
+msgid ""
+"If you prefer, you can create your templates manually. For this option see "
+"<xref linkend=\"glabels-manual-create-template\"/>"
+msgstr ""
+
+#: C/glabels.xml:391(title)
+msgid "To Close a File"
+msgstr "Cerrar un archivo"
+
+#: C/glabels.xml:393(para)
+msgid ""
+"To close the current document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice> to close the "
+"application window. If the current document is modified, a confirmation "
+"dialog will be presented, allowing you to save the document or cancel the "
+"command. If the window being closed is the only open window, "
+"<application>gLabels</application> will exit."
+msgstr ""
+
+#: C/glabels.xml:405(title)
+msgid "To Quit <application>gLabels</application>"
+msgstr ""
+
+#: C/glabels.xml:407(para)
+msgid ""
+"To quit <application>gLabels</application>, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Quit</guimenuitem></"
+"menuchoice>. This is equivalent to closing all open windows. See <xref "
+"linkend=\"glabels-close-file\"/>."
+msgstr ""
+
+#: C/glabels.xml:417(title)
+msgid "To Print Labels or Cards"
+msgstr ""
+
+#: C/glabels.xml:419(para)
+msgid ""
+"To print labels or cards, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice> to display the "
+"<guilabel>Print</guilabel> dialog. Once print options have been selected, "
+"click <guilabel>Print</guilabel> to print the labels or cards. To simply "
+"preview the results, click <guilabel>Print Preview</guilabel> instead."
+msgstr ""
+
+#: C/glabels.xml:426(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog allows you to specify the following "
+"print options:"
+msgstr ""
+
+#: C/glabels.xml:430(title)
+msgid "The Labels Tab of the Print Dialog"
+msgstr ""
+
+#: C/glabels.xml:435(guilabel)
+msgid "Print control (Simple)"
+msgstr ""
+
+#: C/glabels.xml:438(para)
+msgid ""
+"For simple labels or cards (no document merge), the <guilabel>labels</"
+"guilabel> tabbed section contains the following copy controls."
+msgstr ""
+
+#: C/glabels.xml:443(title)
+msgid "Print Copy Controls"
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:454(para)
+msgid ""
+"The number of copies of the label can be selected by choosing the number of "
+"full sheets to print, or a specific subset of labels on a single sheet."
+msgstr ""
+
+#: C/glabels.xml:458(para)
+msgid ""
+"The mini-preview can also be used to graphically select the subset of labels "
+"by clicking the first label on the mini-preview and dragging to the last "
+"label."
+msgstr ""
+
+#: C/glabels.xml:466(guilabel)
+msgid "Print control (Merge)"
+msgstr ""
+
+#: C/glabels.xml:469(para)
+msgid ""
+"For labels or cards using the document merge (also known as \"mail merge\") "
+"capability, the <guilabel>labels</guilabel> tabbed section contains the "
+"following merge controls instead of copy controls."
+msgstr ""
+
+#: C/glabels.xml:475(title)
+msgid "Print Document Merge Controls"
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:486(para)
+msgid ""
+"The total number of labels or cards printed is the product of the number of "
+"records in the merge source and the number of copies selected. If multiple "
+"copies are selected, these can be either collated (copies of the same record "
+"grouped together) or un-collated (one copy each record is printed before "
+"next copy)."
+msgstr ""
+
+#: C/glabels.xml:493(para)
+msgid ""
+"Printing can begin on any label on the first sheet. This can be selected "
+"with the <guilabel>Start on label</guilabel> spinbutton."
+msgstr ""
+
+#: C/glabels.xml:497(para)
+msgid ""
+"The mini-preview can also be used to graphically select this first label, by "
+"clicking on the desired label in the mini-preview."
+msgstr ""
+
+#: C/glabels.xml:504(guilabel)
+msgid "Options"
+msgstr "Opciones"
+
+#: C/glabels.xml:506(para)
+msgid "The following options can also be selected."
+msgstr ""
+
+#: C/glabels.xml:509(guilabel)
+msgid "print outlines"
+msgstr ""
+
+#: C/glabels.xml:510(para)
+msgid ""
+"Print outlines of labels. This option is useful for dry-runs, to test "
+"printer alignment."
+msgstr ""
+
+#: C/glabels.xml:514(guilabel)
+msgid "print in reverse"
+msgstr ""
+
+#: C/glabels.xml:515(para)
+msgid ""
+"Prints the labels as mirror images. This option is useful for printing on "
+"clear labels that will be viewed from the reverse side (e.g. in a car "
+"window)."
+msgstr ""
+
+#: C/glabels.xml:520(guilabel)
+msgid "print crop marks"
+msgstr ""
+
+#: C/glabels.xml:521(para)
+msgid ""
+"Prints crop marks along the edge of the sheet. This option is useful for "
+"printing on blank stock, to be cut after printing. This option does not work "
+"well with all templates."
+msgstr ""
+
+#: C/glabels.xml:536(title)
+msgid "To Create New Objects"
+msgstr ""
+
+#: C/glabels.xml:538(para)
+msgid ""
+"Objects are created by choosing the appropriate selection under the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Create Object</"
+"guimenuitem></menuchoice> submenu or the <guilabel>Drawing Toolbar</"
+"guilabel>. This will place the display area into object creation mode as "
+"indicated by its cursor. To return to the default object selection mode "
+"without creating an object, choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Select Mode</guimenuitem></menuchoice>. This will "
+"return the display area's cursor to the default selection arrow."
+msgstr ""
+
+#: C/glabels.xml:548(para)
+msgid "The following describes the object creation mode for each object type:"
+msgstr ""
+
+#: C/glabels.xml:554(term) C/glabels.xml:1123(guilabel)
+msgid "Text"
+msgstr "Texto"
+
+#: C/glabels.xml:556(para)
+msgid ""
+"Click the desired location of the upper left corner of the text object. New "
+"text objects are initialized with the string \"Text.\" To change this text, "
+"or other properties, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+
+#: C/glabels.xml:564(term)
+msgid "Box"
+msgstr "Caja"
+
+#: C/glabels.xml:566(para)
+msgid ""
+"Click the desired location of the upper left corner of the box object and "
+"drag to the desired location of the lower right corner. If you simply click "
+"in a single location, a square box will be created. To change properties of "
+"the box object, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+
+#: C/glabels.xml:575(term) C/glabels.xml:1149(guilabel)
+msgid "Line"
+msgstr "Línea"
+
+#: C/glabels.xml:577(para)
+msgid ""
+"Click the desired location of one end of the line object and drag to the "
+"desired location of the other end. If you simply click in a single location, "
+"a diagonal line will be created. To change properties of the line object, "
+"see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+
+#: C/glabels.xml:586(term)
+msgid "Ellipse"
+msgstr "Elipse"
+
+#: C/glabels.xml:588(para)
+msgid ""
+"Click the desired location of the upper left corner of the ellipse object "
+"and drag to the desired location of the lower right corner. If you simply "
+"click in a single location, a circle will be created. To change properties "
+"of the ellipse object, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+
+#: C/glabels.xml:597(term)
+msgid "Image"
+msgstr "Imagen"
+
+#: C/glabels.xml:599(para)
+msgid ""
+"Click the desired location of the upper left corner of the image object and "
+"drag to the desired location of the lower right corner. If you simply click "
+"in a single location, a square will be created. New image objects are "
+"initialized with a simple checkerboard image. To change this image, or other "
+"properties of the image object, see <xref linkend=\"glabels-object-properties"
+"\"/>."
+msgstr ""
+
+#: C/glabels.xml:610(term)
+msgid "Barcode"
+msgstr ""
+
+#: C/glabels.xml:612(para)
+msgid ""
+"Click the desired location of the upper left corner of the barcode object. "
+"New barcode objects are initialized to a POSTNET barcode with representative "
+"data. To change data and properties of the barcode object, see <xref linkend="
+"\"glabels-object-properties\"/>."
+msgstr ""
+
+#: C/glabels.xml:627(title)
+msgid "To Select Objects"
+msgstr ""
+
+#: C/glabels.xml:629(para)
+msgid ""
+"A prerequisite for performing operations on objects is the selection of "
+"individual objects or groups of objects. The display area must be in the "
+"object selection mode to create new selections, as indicated by an arrow "
+"cursor. The object selection mode is selected by the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Select Mode</"
+"guimenuitem></menuchoice> menu item, or the corresponding command on the "
+"<guilabel>Drawing Toolbar</guilabel>."
+msgstr ""
+
+#: C/glabels.xml:642(term)
+msgid "Selecting a single object"
+msgstr ""
+
+#: C/glabels.xml:644(para)
+msgid ""
+"A single object can be selected simply by clicking on the desired object in "
+"the display area. Once selected the object will be highlighted with a set of "
+"resizing handles."
+msgstr ""
+
+#: C/glabels.xml:652(term)
+msgid "Aggregate object selections"
+msgstr ""
+
+#: C/glabels.xml:654(para)
+msgid ""
+"Multiple objects can be selected by first selecting the first object as "
+"above and then by holding the <keycap>Ctrl</keycap> key while selecting "
+"additional objects. Individual objects can be added to an existing selection "
+"at any time by holding the <keycap>Ctrl</keycap> key while selecting the "
+"desired objects. All objects can also be selected by using the "
+"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Select All</guimenuitem></"
+"menuchoice> menu item. All objects in an aggregate object selection will be "
+"highlighted."
+msgstr ""
+
+#: C/glabels.xml:668(term)
+msgid "Area selections"
+msgstr ""
+
+#: C/glabels.xml:670(para)
+msgid ""
+"Multiple objects can also be selected by clicking an empty area and dragging "
+"to form a rectangular area. When released, all objects contained in the area "
+"will form an aggregate selection. An area selection can be used to add to an "
+"existing selection by holding the <keycap>Ctrl</keycap> key while performing "
+"the selection."
+msgstr ""
+
+#: C/glabels.xml:680(term)
+msgid "Unselecting objects"
+msgstr ""
+
+#: C/glabels.xml:682(para)
+msgid ""
+"Individual objects can be removed from an existing selection by holding the "
+"<keycap>Ctrl</keycap> key while clicking on a previously selected object. An "
+"entire selection can be dismissed by using the <menuchoice><guimenu>Edit</"
+"guimenu><guimenuitem>Un-select All</guimenuitem></menuchoice> menu item or "
+"by simply clicking any empty space in the display area. Once an object is "
+"unselected its highlight is removed."
+msgstr ""
+
+#: C/glabels.xml:699(title)
+msgid "Clipboard Commands"
+msgstr ""
+
+#: C/glabels.xml:701(para)
+msgid ""
+"Object selections can be manipulated using the standard clipboard operations "
+"<guimenuitem>Cut</guimenuitem>, <guimenuitem>Copy</guimenuitem>, "
+"<guimenuitem>Paste</guimenuitem>, and <guimenuitem>Delete</guimenuitem>."
+msgstr ""
+
+#: C/glabels.xml:712(keycap) C/glabels.xml:728(keycap)
+#: C/glabels.xml:744(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/glabels.xml:712(keycap)
+msgid "X"
+msgstr "X"
+
+#: C/glabels.xml:714(guimenuitem)
+msgid "Cut"
+msgstr "Cortar"
+
+#: C/glabels.xml:718(para)
+msgid ""
+"Moves selected objects to the clipboard. The objects are then available for "
+"pasting back into the current document or another document."
+msgstr ""
+
+#: C/glabels.xml:728(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/glabels.xml:730(guimenuitem)
+msgid "Copy"
+msgstr "Copiar"
+
+#: C/glabels.xml:734(para)
+msgid ""
+"Copies selected objects to the clipboard without deleting them. The objects "
+"are then available for pasting back into the current document or another "
+"document."
+msgstr ""
+
+#: C/glabels.xml:744(keycap)
+msgid "V"
+msgstr "V"
+
+#: C/glabels.xml:746(guimenuitem)
+msgid "Paste"
+msgstr "Pegar"
+
+#: C/glabels.xml:750(para)
+msgid ""
+"Pastes objects from the clipboard into the current document. "
+"<application>gLabels</application> can only paste objects from another "
+"<application>gLabels</application> document."
+msgstr ""
+
+#: C/glabels.xml:760(keycap) C/glabels.xml:762(guimenuitem)
+msgid "Delete"
+msgstr "Borrar"
+
+#: C/glabels.xml:766(para)
+msgid "Deletes selected objects without placing them on the clipboard."
+msgstr ""
+
+#: C/glabels.xml:777(title)
+msgid "To Edit Object Properties"
+msgstr ""
+
+#: C/glabels.xml:779(para)
+msgid ""
+"Most object properties can be modified through the object editor sidebar, "
+"illustrated below. To use the object editor, a single object must first be "
+"selected. See <xref linkend=\"glabels-select-objects\"/>."
+msgstr ""
+
+#: C/glabels.xml:786(title)
+msgid "Object Editor Sidebar"
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:797(para)
+msgid ""
+"The object editor will contain a subset of the following tabbed sections, "
+"depending on object type:"
+msgstr ""
+
+#: C/glabels.xml:801(title)
+msgid "Text Tabbed Section (Text objects)"
+msgstr ""
+
+#: C/glabels.xml:803(para)
+msgid ""
+"This section contains a small editor for changing the content of a text "
+"object. It also contains a dropdown menu of available document merge keys, "
+"that can be inserted into text."
+msgstr ""
+
+#: C/glabels.xml:810(title)
+msgid "Image Tabbed Section (Image objecs)"
+msgstr ""
+
+#: C/glabels.xml:812(para)
+msgid ""
+"This section contains a file entry with preview to select image files. The "
+"browse button can be used to easily locate image files. Alternatively, a "
+"document merge key can be used instead to provide a filename at print time."
+msgstr ""
+
+#: C/glabels.xml:820(title)
+msgid "Data Tabbed Section (Barcode objecs)"
+msgstr ""
+
+#: C/glabels.xml:822(para)
+msgid ""
+"This section contains a text entry to enter literal barcode data. "
+"Alternatively, a document merge key can be used to provide this data at "
+"print time."
+msgstr ""
+
+#: C/glabels.xml:829(title)
+msgid "Style Tabbed Section (Text objects)"
+msgstr ""
+
+#: C/glabels.xml:831(para)
+msgid ""
+"This section contains controls to select text properties, including font "
+"family, font size, font weight, color, and text justification."
+msgstr ""
+
+#: C/glabels.xml:838(title)
+msgid "Style Tabbed Section (Barcode objecs)"
+msgstr ""
+
+#: C/glabels.xml:840(para)
+msgid ""
+"This section contains controls to select barcode properties, including "
+"barcode style, color, whether to print text, and whether to include a "
+"checksum digit."
+msgstr ""
+
+#: C/glabels.xml:847(title)
+msgid "Line Tabbed Section"
+msgstr ""
+
+#: C/glabels.xml:849(para)
+msgid ""
+"This section contains controls to select properties of lines and outlines. "
+"These properties include line width and color."
+msgstr ""
+
+#: C/glabels.xml:855(title)
+msgid "Fill Tabbed Section"
+msgstr ""
+
+#: C/glabels.xml:857(para)
+msgid ""
+"This section contains controls to select fill properties of box and ellipse "
+"objects. Currently the only fill property is fill color."
+msgstr ""
+
+#: C/glabels.xml:864(title)
+msgid "Size Tabbed Section (All except line objects)"
+msgstr ""
+
+#: C/glabels.xml:866(para)
+msgid ""
+"This section contains controls to select the width and height of an object. "
+"A checkbox is provided, so that the current aspect ratio can be locked while "
+"manipulating the width and height controls. Image objects also provide a "
+"button to reset the size to the image's natural size (Assumes 72DPI)."
+msgstr ""
+
+#: C/glabels.xml:875(title)
+msgid "Size Tabbed Section (Line objects)"
+msgstr ""
+
+#: C/glabels.xml:877(para)
+msgid ""
+"This section contains controls to select the length and angle of a line "
+"object."
+msgstr ""
+
+#: C/glabels.xml:883(title)
+msgid "Position Tabbed Section"
+msgstr ""
+
+#: C/glabels.xml:885(para)
+msgid "This section contains controls to change the position of an object."
+msgstr ""
+
+#: C/glabels.xml:892(title)
+msgid "Shadow Tabbed Section (All except image and barcode objects)"
+msgstr ""
+
+#: C/glabels.xml:894(para)
+msgid "This section contains controls to add a shadow to an object."
+msgstr ""
+
+#: C/glabels.xml:903(title)
+msgid "Other Manipulations of Objects"
+msgstr ""
+
+#: C/glabels.xml:905(para)
+msgid "Objects can also be manipulated in the following ways."
+msgstr ""
+
+#: C/glabels.xml:908(title)
+msgid "Moving and Resizing Objects"
+msgstr ""
+
+#: C/glabels.xml:910(para)
+msgid ""
+"Objects can be moved by simply clicking on a selected object and dragging "
+"the object to its new location. If the object is part of an aggregate "
+"selection, all objects in the selection will move with the object being "
+"dragged, maintaining their relative positions to one another. If no object "
+"is selected, clicking on an object will create a new selection containing "
+"that object. See <xref linkend=\"glabels-select-objects\"/>."
+msgstr ""
+
+#: C/glabels.xml:918(para)
+msgid ""
+"A selected object can be resized by clicking one of its resize handle and "
+"dragging it to obtain the new size."
+msgstr ""
+
+#: C/glabels.xml:924(title)
+msgid "Changing Stacking Order"
+msgstr ""
+
+#: C/glabels.xml:926(para)
+msgid ""
+"Stacking order refers to relative position in the z-axis of objects. That is "
+"when objects overlap, which object will appear on top of the other. By "
+"default, newer objects will appear above older objects. To change this "
+"order, select one or more objects and choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Order</guimenuitem><guimenuitem>Bring to Front</"
+"guimenuitem></menuchoice> to raise the selection to the top of the stacking "
+"order, or choose <menuchoice><guimenu>Objects</guimenu><guimenuitem>Order</"
+"guimenuitem><guimenuitem>Send to Back</guimenuitem></menuchoice> to lower "
+"the selection to the bottom of the stacking order. These menuitems are also "
+"available by right-clicking the display area when there is a non-empty "
+"selection."
+msgstr ""
+
+#: C/glabels.xml:944(title)
+msgid "Rotating and Flipping Objects"
+msgstr ""
+
+#: C/glabels.xml:946(para)
+msgid ""
+"Objects can be rotated 90 degrees in either direction, or flipped "
+"horizontally or vertically, by choosing the appropriate menuitem in the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Rotate/Flip</"
+"guimenuitem></menuchoice> sub-menu. These menuitems are also available by "
+"right-clicking the display area when there is a non-empty selection."
+msgstr ""
+
+#: C/glabels.xml:956(title)
+msgid "Aligning Objects"
+msgstr ""
+
+#: C/glabels.xml:958(para)
+msgid ""
+"Objects can be aligned horizontally or vertically, relative to one another, "
+"or relative to the center line of the label, by choosing the appropriate "
+"menuitem from the <menuchoice><guimenu>Objects</guimenu><guimenuitem>Align "
+"Horizontal</guimenuitem></menuchoice> or <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Align Horizontal</guimenuitem></menuchoice> sub-menus. "
+"These menuitems are also available by right-clicking the display area when "
+"there is a non-empty selection."
+msgstr ""
+
+#: C/glabels.xml:971(title)
+msgid "Using the Property Bar"
+msgstr ""
+
+#: C/glabels.xml:973(para)
+msgid ""
+"The property bar can be used to change some common properties of objects en-"
+"masse. These properties include font family, font size, font weight, text "
+"alignment, text color, fill color, line or outline color, and line width. "
+"The property bar also controls the defaults for these properties for any "
+"newly created objects."
+msgstr ""
+
+#: C/glabels.xml:988(title)
+msgid "Performing a Document Merge"
+msgstr ""
+
+#: C/glabels.xml:990(para)
+msgid ""
+"Document Merge (sometimes called \"Mail Merge\") is a powerful feature that "
+"allows a unique label or card to be printed for each record in an external "
+"data source."
+msgstr ""
+
+#: C/glabels.xml:994(para)
+msgid ""
+"The first step to performing a document merge is to prepare a source "
+"document that contains your merge data. This data could be mailing addresses "
+"or any other data that you wish to create unique labels or cards for. "
+"Currently back-ends only exist for text files and the evolution data server "
+"-- others are planned. The currently supported text-file format is very "
+"simple: each line is a record; fields are delimited by commas (CSV), tabs, "
+"or colons; and newlines can be embedded into fields by using the \"\\n\" "
+"entity. This file could be created using any text editor or could be created "
+"by another program or script. A common way of creating CSV files is to "
+"export them from a spreadsheet program."
+msgstr ""
+
+#: C/glabels.xml:1006(para)
+msgid ""
+"A label must then be configured to \"point at\" this data file. To configure "
+"the merge properties of a document, choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>merge properties</guilabel> dialog. This dialog is "
+"used to select the exact data file format and file name (location) of the "
+"merge data."
+msgstr ""
+
+#: C/glabels.xml:1014(para)
+msgid ""
+"Finally, once the label has been configured for a data file, field keys can "
+"be inserted into text objects and used as source or data for barcode objects "
+"and image filenames for image objects. See <xref linkend=\"glabels-object-"
+"properties\"/> for more information on using merge data for these object "
+"types."
+msgstr ""
+
+#: C/glabels.xml:1020(para)
+msgid ""
+"Now that your label is configured, <application>gLabels</application> will "
+"print a unique label for each record in your source document -- substituting "
+"fields from each record for field keys in the all text, barcode, and image "
+"objects."
+msgstr ""
+
+#: C/glabels.xml:1025(para)
+msgid ""
+"See <xref linkend=\"glabels-merge-tutorial\"/> for a detailed tutorial on "
+"the document merge feature."
+msgstr ""
+
+#: C/glabels.xml:1040(title)
+msgid "Settings"
+msgstr "Configuración"
+
+#: C/glabels.xml:1041(para)
+msgid ""
+"To configure <application>gLabels</application>, choose "
+"<menuchoice><guimenu>Settings</guimenu><guimenuitem>Preferences</"
+"guimenuitem></menuchoice>. The <guilabel>Preferences</guilabel> dialog "
+"contains the following tabbed sections:"
+msgstr ""
+
+#: C/glabels.xml:1062(title)
+msgid "Locale"
+msgstr "Región"
+
+#: C/glabels.xml:1066(guilabel)
+msgid "Units"
+msgstr "Unidades"
+
+#: C/glabels.xml:1068(para)
+msgid ""
+"Use this radio button group to specify your preferred units. Select one of "
+"the following options:"
+msgstr ""
+
+#: C/glabels.xml:1073(guilabel)
+msgid "Points"
+msgstr "Puntos"
+
+#: C/glabels.xml:1074(para)
+msgid "Use points (1 point = 1/72 in = 0.352778 mm)."
+msgstr ""
+
+#: C/glabels.xml:1078(guilabel)
+msgid "Inches"
+msgstr "Pulgadas"
+
+#: C/glabels.xml:1079(para)
+msgid "Use inches."
+msgstr ""
+
+#: C/glabels.xml:1083(guilabel)
+msgid "Millimeters"
+msgstr "Milímetros"
+
+#: C/glabels.xml:1084(para)
+msgid "Use millimeters."
+msgstr ""
+
+#: C/glabels.xml:1087(para)
+msgid "Default: <guilabel>Inches</guilabel>."
+msgstr ""
+
+#: C/glabels.xml:1093(guilabel)
+msgid "Default page size"
+msgstr ""
+
+#: C/glabels.xml:1095(para)
+msgid ""
+"Use this radio button group to specify your preferred page size. This will "
+"make it quicker for you to locate media types when creating a new label or "
+"card."
+msgstr ""
+
+#: C/glabels.xml:1101(guilabel)
+msgid "US Letter"
+msgstr "US Letter"
+
+#: C/glabels.xml:1102(para)
+msgid ""
+"Most of your media will be of the US Letter page size (8.5 x 11 inches)."
+msgstr ""
+
+#: C/glabels.xml:1106(guilabel)
+msgid "ISO A4"
+msgstr ""
+
+#: C/glabels.xml:1107(para)
+msgid "Most of your media will be of the ISO A4 page size (210 x 297 mm)."
+msgstr ""
+
+#: C/glabels.xml:1110(para)
+msgid "Default: <guilabel>US Letter</guilabel>."
+msgstr ""
+
+#: C/glabels.xml:1119(title)
+msgid "Object defaults"
+msgstr "Opciones predeterminadas para el objeto"
+
+#: C/glabels.xml:1125(para)
+msgid ""
+"Use these controls to set the default properties of new text objects. These "
+"properties are"
+msgstr ""
+
+#: C/glabels.xml:1130(guilabel)
+msgid "Font"
+msgstr "Tipografía"
+
+#: C/glabels.xml:1131(para)
+msgid ""
+"These controls are used to select font family and font size, and whether the "
+"font should bold or in italics."
+msgstr ""
+
+#: C/glabels.xml:1136(guilabel) C/glabels.xml:1161(guilabel)
+#: C/glabels.xml:1176(guilabel)
+msgid "Color"
+msgstr "Color"
+
+#: C/glabels.xml:1137(para)
+msgid "This control selects the default text color."
+msgstr ""
+
+#: C/glabels.xml:1141(guilabel)
+msgid "Alignment"
+msgstr "Alineación"
+
+#: C/glabels.xml:1142(para)
+msgid ""
+"These controls are used to select the default text alignment (left, center "
+"or right)."
+msgstr ""
+
+#: C/glabels.xml:1151(para)
+msgid ""
+"Use these controls to set the default properties of lines and outlines of "
+"new objects. These properties are"
+msgstr ""
+
+#: C/glabels.xml:1156(guilabel)
+msgid "Width"
+msgstr "Anchura"
+
+#: C/glabels.xml:1157(para)
+msgid "This control selects the default line width."
+msgstr ""
+
+#: C/glabels.xml:1162(para)
+msgid "This control selects the default line color."
+msgstr ""
+
+#: C/glabels.xml:1169(guilabel)
+msgid "Fill"
+msgstr "Relleno"
+
+#: C/glabels.xml:1171(para)
+msgid ""
+"Use these controls to set the default fill properties of new objects. These "
+"properties are"
+msgstr ""
+
+#: C/glabels.xml:1177(para)
+msgid "This control selects the default fill color."
+msgstr ""
+
+#: C/glabels.xml:1191(title)
+msgid "Document Merge Tutorial"
+msgstr ""
+
+#: C/glabels.xml:1193(para)
+msgid ""
+"Document Merge (sometimes called \"Mail Merge\") is a powerful feature that "
+"allows a unique label or card to be printed for each record in an external "
+"data source. It is however, the most mis-understood feature of "
+"<application>gLabels</application>. The following examples will step through "
+"a couple of common tasks using the document merge feature."
+msgstr ""
+
+#: C/glabels.xml:1201(title)
+msgid "Example 1: Name Tags Using a CSV File"
+msgstr ""
+
+#: C/glabels.xml:1203(para)
+msgid ""
+"In this example we are organizing an orientation party for the new crew "
+"members of our ship. We have a list of freshman crew members that we created "
+"in <application>gnumeric</application> and exported as the following CSV "
+"file. We could have created this file by using a text editor, but heck it is "
+"the 23rd century."
+msgstr ""
+
+#: C/glabels.xml:1209(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"Name,Department,SN\n"
+"\"Jim Kirk\",Management,\"SC937-0176 CEC\"\n"
+"\"Mr. Spock\",Sciences,S179-276SP\n"
+"\"Leonard McCoy\",Medicine,unknown\n"
+"\"Montgomery Scott\",Engineering,SE-197-54T\n"
+"      "
+msgstr ""
+
+#: C/glabels.xml:1217(para)
+msgid ""
+"In <application>gLabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5395 \"Name "
+"Badge Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>merge properties</guilabel> dialog. We use this "
+"dialog to select the source type (in our case CSV) and the merge source "
+"(filename) as shown."
+msgstr ""
+
+#: C/glabels.xml:1227(title) C/glabels.xml:1344(title)
+#: C/glabels.xml:1460(title)
+msgid "Merge properties dialog"
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1238(para)
+msgid ""
+"Before applying the merge source, we uncheck the first record since it is "
+"only column headers from our original <application>gnumeric</application> "
+"spreadsheet and would simply waste our first label. We could also unselect "
+"any other records that we didn't want to print a label for."
+msgstr ""
+
+#: C/glabels.xml:1243(para) C/glabels.xml:1361(para)
+msgid ""
+"We can also view each record in more detail by clicking on the appropriate "
+"expander (the little triangles) as shown. Once we are satisfied with the "
+"selections in this dialog we click <guibutton>OK</guibutton> to accept the "
+"changes."
+msgstr ""
+
+#: C/glabels.xml:1248(para) C/glabels.xml:1366(para)
+msgid ""
+"Now we start adding objects to our <application>gLabels</application> "
+"document as shown."
+msgstr ""
+
+#: C/glabels.xml:1252(title) C/glabels.xml:1370(title)
+#: C/glabels.xml:1488(title)
+msgid "Adding objects"
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1263(para)
+msgid ""
+"In this example we have added three text objects and a barcode object. The "
+"first text object contains only simple literal text (\"Hello, my name is\"). "
+"The second text object contains a single merge field (\"${1}\") "
+"corresponding to the first field of a record (first column of a line) which "
+"contains the new crew member's full name. The third text field contains both "
+"literal text (\"Department: \") followed by a single merge field (\"${2}\") "
+"corresponding to the second field or the crew member's department. The "
+"barcode object is configured to use field (or key) \"3\" which contains our "
+"crew member's starfleet serial number."
+msgstr ""
+
+#: C/glabels.xml:1273(para)
+msgid ""
+"Now we can print our name tags by selecting the <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu item. This will "
+"display print dialog as shown below."
+msgstr ""
+
+#: C/glabels.xml:1280(title)
+msgid "Printing name tags"
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1291(para) C/glabels.xml:1406(para) C/glabels.xml:1520(para)
+msgid ""
+"Just to make sure our labels are going to look okay, we select the "
+"<guilabel>Print outlines</guilabel> option and click <guibutton>Print "
+"Preview</guibutton>. This will display a print preview dialog as shown below."
+msgstr ""
+
+#: C/glabels.xml:1298(title)
+msgid "Name tags preview"
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1309(para)
+msgid ""
+"Everything looks good, so we can now load up our printer with the "
+"appropriate label stock, print our name tags and start beaming our guests "
+"aboard."
+msgstr ""
+
+#: C/glabels.xml:1316(title)
+msgid "Example 2: Address Labels Using a CSV File"
+msgstr ""
+
+#: C/glabels.xml:1318(para)
+msgid ""
+"In this example we are going to throw a party and need to print mailing "
+"address labels for our invitations. We have a list of our closest friends "
+"that we created in <application>gnumeric</application> and exported as the "
+"following CSV file. It should be noted that not everyone has a middle "
+"initial or a two line address."
+msgstr ""
+
+#: C/glabels.xml:1324(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"LAST,FIRST,MI,ADDR1,ADDR2,CITY,STATE,ZIP\n"
+",,,,,,,\n"
+"Critter,Ess,S,\"123 Faux St.\",,Alexandria,VA,22310\n"
+"Doe,John,,\"Apt 1X\",\"451 Mystery St.\",Trenton,NJ,08601\n"
+"Summers,Joyce,,\"1630 Revello Dr\",,Sunnydale,CA,95037\n"
+"McGarret,Steve,O,\"404 Piikoi Street\",,Honolulu,HI,96813\n"
+"Kramer,Cosmo,,\"Apt 5B\",\"129 W. 81 St.\",\"New York\",NY,10024-7207\n"
+"      "
+msgstr ""
+
+#: C/glabels.xml:1334(para)
+msgid ""
+"In <application>gLabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5512 \"Address "
+"Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>merge properties</guilabel> dialog. We use this "
+"dialog to select the source type (in our case CSV) and the merge source "
+"(filename) as shown."
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1355(para)
+msgid ""
+"Before applying the merge source, we uncheck the first record since it is "
+"only column headers from our original <application>gnumeric</application> "
+"spreadsheet and would simply waste our first label. We also unselect the "
+"second record which is empty (an artifact of our original spreadsheet). We "
+"could also unselect any other records that we didn't want to print a label "
+"for."
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1381(para)
+msgid ""
+"In this example we have a single text object. This text object contains all "
+"of our merge fields organized on multiple lines as a mailing address. Notice "
+"that fields ${4} and ${5} (corresponding to ADDR1 and ADDR2) are each "
+"located with no other text on their own lines. When <application>gLabels</"
+"application> encounters a field as the only text on a line, it will not "
+"expand the line if the field is empty."
+msgstr ""
+
+#: C/glabels.xml:1388(para)
+msgid ""
+"Now we can print our address labels by selecting the "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></"
+"menuchoice> menu item. This will display print dialog as shown below."
+msgstr ""
+
+#: C/glabels.xml:1395(title) C/glabels.xml:1509(title)
+msgid "Printing address labels"
+msgstr ""
+
+#: C/glabels.xml:1413(title) C/glabels.xml:1527(title)
+msgid "Address labels preview"
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1424(para) C/glabels.xml:1538(para)
+msgid ""
+"Everything looks good, so we can now load up our printer with the "
+"appropriate label stock, print our address labels and start mailing our "
+"party invitations."
+msgstr ""
+
+#: C/glabels.xml:1431(title)
+msgid ""
+"Example 3: Address Labels Using the <application>Evolution</application> "
+"Addressbook"
+msgstr ""
+
+#: C/glabels.xml:1433(para)
+msgid ""
+"Our last party was a great success, and now we need to print mailing address "
+"labels for the invitations to a new one. To simplify this, we can use the "
+"<application>Evolution</application> addressbook, because the address data "
+"of all our friends is stored there."
+msgstr ""
+
+#: C/glabels.xml:1439(para)
+msgid ""
+"Depending on how your copy of <application>gLabels</application> was "
+"packaged, this option could be unavailable. Support for the "
+"<application>Evolution</application> addressbook will only be available if "
+"the <application>evolution-data-server</application> and its development "
+"files were present when <application>gLabels</application> was built. Please "
+"keep this in mind if you build <application>gLabels</application> directly "
+"from source."
+msgstr ""
+
+#: C/glabels.xml:1445(para)
+msgid ""
+"If the <application>gLabels</application> package from your distribution "
+"lacks this support, you may wish to contact the package maintainer or file a "
+"bug against the package to request it."
+msgstr ""
+
+#: C/glabels.xml:1450(para)
+msgid ""
+"In <application>glabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5512 \"Address "
+"Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>Merge properties</guilabel> dialog. We use this "
+"dialog to select the source type (in our case <guilabel>Data from default "
+"Evolution addressbook</guilabel>) as shown."
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1471(para)
+msgid ""
+"Once we have chosen <guilabel>Data from default Evolution addressbook </"
+"guilabel> as our merge source, we will get a full list of its content. "
+"Initially, all entries are checked. Assuming we were planning a really big "
+"party, we could leave this selection untouched (but let's keep our budget in "
+"mind). We will now select or unselect certain entries by clicking on the "
+"appropriate checkboxes, or we could use the <guibutton>Select all</"
+"guibutton> and <guibutton>Unselect all </guibutton> buttons to activate or "
+"deactivate all entries in the address book."
+msgstr ""
+
+#: C/glabels.xml:1479(para)
+msgid ""
+"We can also view each entry in more detail by clicking on the appropriate "
+"expander (the little triangles) as shown. Once we are satisfied with the "
+"selections in this dialog, we will click the <guibutton>OK</guibutton> "
+"button to accept the changes."
+msgstr ""
+
+#: C/glabels.xml:1484(para)
+msgid "Now we start adding objects to our glabels document as shown."
+msgstr ""
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1499(para)
+msgid ""
+"In this example we have a single text object again. This text object "
+"contains all of our merge fields organized on multiple lines as a mailing "
+"address."
+msgstr ""
+
+#: C/glabels.xml:1502(para)
+msgid ""
+"Now we can print our address labels by selecting the "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></"
+"menuchoice> menu item. This will display the print dialog as shown below."
+msgstr ""
+
+#: C/glabels.xml:1551(title)
+msgid "Manually Creating New Templates"
+msgstr ""
+
+#: C/glabels.xml:1553(para)
+msgid ""
+"Predefined templates are defined by XML files located in <filename>${prefix}/"
+"share/glabels/</filename>, where <filename>${prefix}</filename> is usually "
+"something like <filename>/usr/local</filename> or <filename>/usr</filename> "
+"depending on the configuration option <filename>prefix</filename>. "
+"<application>gLabels</application> will use all files of the form "
+"<filename>*-templates.xml</filename> or <filename>*.template</filename>, "
+"that it finds in <filename>${prefix}/share/glabels/</filename> and <filename>"
+"${HOME}/.glabels/</filename>. Additional templates can be added by creating "
+"additional <filename>*.template</filename> files in either of these "
+"directories."
+msgstr ""
+
+#: C/glabels.xml:1566(para)
+msgid ""
+"The format for these files is defined in the DTD: <ulink url=\"http://"
+"glabels.sourceforge.net/doc/glabels-2.0.dtd.txt\" type=\"http\">glabels-2.2."
+"dtd</ulink>. (This DTD also describes other XML formats used by "
+"<application>gLabels</application>.)"
+msgstr ""
+
+#: C/glabels.xml:1572(title)
+msgid "Assumptions/caveats"
+msgstr ""
+
+#: C/glabels.xml:1575(para)
+msgid ""
+"A sheet contains only one size of label or card (if a sheet contains more "
+"than one size of item, it can be split into multiple templates for multiple "
+"pass printing)"
+msgstr ""
+
+#: C/glabels.xml:1580(para)
+msgid ""
+"Distances can be expressed in units of <emphasis>pt</emphasis>, "
+"<emphasis>in</emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis>, "
+"or <emphasis>pc</emphasis>. For example: \"<literal>1.0in</literal>\" or "
+"\"<literal>2.54cm</literal>\". If no units are specified, computer points "
+"(<emphasis>pt</emphasis>) will be assumed (1 <emphasis>pt</emphasis> = 1/72 "
+"<emphasis>in</emphasis> = 0.352778 <emphasis>mm</emphasis>)."
+msgstr ""
+
+#: C/glabels.xml:1593(title)
+msgid "Template Files"
+msgstr ""
+
+#: C/glabels.xml:1595(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"&lt;?xml version=\"1.0\"?&gt;\n"
+"&lt;Glabels-templates&gt;\n"
+"\n"
+"   <replaceable>...templates...</replaceable>\n"
+"\n"
+"&lt;/Glabels-templates&gt;\n"
+"      "
+msgstr ""
+
+#: C/glabels.xml:1607(title)
+msgid "Example Template"
+msgstr ""
+
+#: C/glabels.xml:1608(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"  &lt;Template brand=\"Avery\" part=\"8160\" size=\"US-Letter\" description=\"Mailing Labels\"&gt;\n"
+"    &lt;Label-rectangle id=\"0\" width=\"189pt\" height=\"72pt\" round=\"5pt\"&gt;\n"
+"      &lt;Markup-margin size=\"5pt\"/&gt;\n"
+"      &lt;Layout nx=\"3\" ny=\"10\" x0=\"11.25pt\" y0=\"36pt\" dx=\"200pt\" dy=\"72pt\"/&gt;\n"
+"    &lt;/Label-rectangle&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"5160\"/&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"6233\"/&gt;\n"
+"  &lt;/Template&gt;\n"
+"      "
+msgstr ""
+
+#: C/glabels.xml:1621(title)
+msgid "Template Node"
+msgstr ""
+
+#: C/glabels.xml:1623(para)
+msgid ""
+"A <emphasis>Template</emphasis> node describes a single stationary product. "
+"It must contain one instance of any type of Label node (<emphasis>Label-"
+"rectangle</emphasis>, <emphasis>Label-round</emphasis>, or <emphasis>Label-"
+"cd</emphasis>). This node can be followed by zero or more <emphasis>Alias</"
+"emphasis> nodes."
+msgstr ""
+
+#: C/glabels.xml:1637(para) C/glabels.xml:1712(para) C/glabels.xml:1789(para)
+#: C/glabels.xml:1834(para) C/glabels.xml:1910(para) C/glabels.xml:1943(para)
+#: C/glabels.xml:1994(para) C/glabels.xml:2037(para) C/glabels.xml:2096(para)
+#: C/glabels.xml:2173(para)
+msgid "Property"
+msgstr "Propiedad"
+
+#: C/glabels.xml:1640(para) C/glabels.xml:1715(para) C/glabels.xml:1792(para)
+#: C/glabels.xml:1837(para) C/glabels.xml:1913(para) C/glabels.xml:1946(para)
+#: C/glabels.xml:1997(para) C/glabels.xml:2040(para) C/glabels.xml:2099(para)
+#: C/glabels.xml:2176(para)
+msgid "Description"
+msgstr "Descripción"
+
+#: C/glabels.xml:1646(para) C/glabels.xml:2182(para)
+msgid "brand"
+msgstr ""
+
+#: C/glabels.xml:1648(para)
+msgid "Brand or manufacturer of stationary product. E.g. \"Avery\""
+msgstr ""
+
+#: C/glabels.xml:1653(para) C/glabels.xml:2188(para)
+msgid "part"
+msgstr "part"
+
+#: C/glabels.xml:1655(para)
+msgid "Part number or name of stationary product. E.g. \"8160\""
+msgstr ""
+
+#: C/glabels.xml:1660(para) C/glabels.xml:1919(para)
+msgid "size"
+msgstr "tamaño"
+
+#: C/glabels.xml:1662(para)
+msgid "Size of sheet. E.g., \"US-Letter,\" \"A4\", ..."
+msgstr ""
+
+#: C/glabels.xml:1666(para)
+msgid "description"
+msgstr "descripción"
+
+#: C/glabels.xml:1668(para)
+msgid "Description of stationary product. E.g, \"Mailing Labels.\""
+msgstr ""
+
+#: C/glabels.xml:1673(para)
+msgid "_description"
+msgstr ""
+
+#: C/glabels.xml:1675(para)
+msgid ""
+"Translatable description of stationary product. E.g, \"Mailing Labels."
+"\" (Only useful for predefined templates)"
+msgstr ""
+
+#: C/glabels.xml:1681(para) C/glabels.xml:1727(para) C/glabels.xml:1857(para)
+msgid "width"
+msgstr "anchura"
+
+#: C/glabels.xml:1683(para)
+msgid "Page width. Only valid if size=\"Other\""
+msgstr ""
+
+#: C/glabels.xml:1687(para) C/glabels.xml:1731(para) C/glabels.xml:1864(para)
+msgid "height"
+msgstr "altura"
+
+#: C/glabels.xml:1689(para)
+msgid "Page height. Only valid if size=\"Other\""
+msgstr ""
+
+#: C/glabels.xml:1699(title)
+msgid "Label-rectangle Node"
+msgstr ""
+
+#: C/glabels.xml:1701(para)
+msgid ""
+"A <emphasis>Label-rectangle</emphasis> node describes the dimensions of a "
+"single label or business card that is rectangular in shape (may have rounded "
+"edges)."
+msgstr ""
+
+#: C/glabels.xml:1721(para) C/glabels.xml:1798(para) C/glabels.xml:1843(para)
+msgid "id"
+msgstr "id"
+
+#: C/glabels.xml:1723(para) C/glabels.xml:1800(para) C/glabels.xml:1845(para)
+msgid "Reserved for future use. Should always be 0."
+msgstr ""
+
+#: C/glabels.xml:1728(para)
+msgid "Width of label/card"
+msgstr ""
+
+#: C/glabels.xml:1732(para)
+msgid "Height of label/card"
+msgstr ""
+
+#: C/glabels.xml:1735(para)
+msgid "round"
+msgstr "redondo"
+
+#: C/glabels.xml:1737(para)
+msgid ""
+"Radius of corners. For items with square edges (business cards), the radius "
+"should be 0."
+msgstr ""
+
+#: C/glabels.xml:1742(para)
+msgid "x_waste"
+msgstr ""
+
+#: C/glabels.xml:1744(para)
+msgid ""
+"Amount of horizontal waste (over-print) to allow. This is useful for "
+"minimizing alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+
+#: C/glabels.xml:1750(para)
+msgid "y_waste"
+msgstr ""
+
+#: C/glabels.xml:1752(para)
+msgid ""
+"Amount of vertical waste (over-print) to allow. This is useful for "
+"minimizing alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+
+#: C/glabels.xml:1763(title)
+msgid "Label-rectangle Parameters"
+msgstr ""
+
+#: C/glabels.xml:1777(title)
+msgid "Label-round Node"
+msgstr ""
+
+#: C/glabels.xml:1779(para)
+msgid ""
+"A <emphasis>Label-round</emphasis> node describes the dimensions of a simple "
+"round label (not a CD)."
+msgstr ""
+
+#: C/glabels.xml:1804(para) C/glabels.xml:1849(para) C/glabels.xml:2015(para)
+msgid "radius"
+msgstr ""
+
+#: C/glabels.xml:1805(para)
+msgid "Radius (1/2 diameter) of label"
+msgstr ""
+
+#: C/glabels.xml:1808(para) C/glabels.xml:1871(para)
+msgid "waste"
+msgstr "basura"
+
+#: C/glabels.xml:1810(para) C/glabels.xml:1873(para)
+msgid ""
+"Amount of waste (over-print) to allow. This is useful for minimizing "
+"alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+
+#: C/glabels.xml:1822(title)
+msgid "Label-cd Node"
+msgstr ""
+
+#: C/glabels.xml:1824(para)
+msgid ""
+"A <emphasis>Label-cd</emphasis> node describes the dimensions of a CD, DVD, "
+"or business card CD."
+msgstr ""
+
+#: C/glabels.xml:1850(para)
+msgid "Outer radius of label"
+msgstr ""
+
+#: C/glabels.xml:1853(para)
+msgid "hole"
+msgstr ""
+
+#: C/glabels.xml:1854(para)
+msgid "Radius of concentric hole"
+msgstr ""
+
+#: C/glabels.xml:1859(para)
+msgid ""
+"If present, the label is clipped to the given width. (Useful for \"business "
+"card CDs\")."
+msgstr ""
+
+#: C/glabels.xml:1866(para)
+msgid ""
+"If present, the label is clipped to the given height. (Useful for \"business "
+"card CDs\")."
+msgstr ""
+
+#: C/glabels.xml:1884(title)
+msgid "CD Label Parameters"
+msgstr ""
+
+#: C/glabels.xml:1898(title)
+msgid "Markup-margin Node"
+msgstr ""
+
+#: C/glabels.xml:1900(para)
+msgid ""
+"A <emphasis>Markup-margin</emphasis> describes a margin along all edges of a "
+"label."
+msgstr ""
+
+#: C/glabels.xml:1921(para)
+msgid ""
+"Size of the margin. I.e. the distance of the margin line from the edge of "
+"the card/label."
+msgstr ""
+
+#: C/glabels.xml:1932(title)
+msgid "Markup-line Node"
+msgstr ""
+
+#: C/glabels.xml:1934(para)
+msgid "A <emphasis>Markup-line</emphasis> describes a markup line."
+msgstr ""
+
+#: C/glabels.xml:1952(para) C/glabels.xml:2046(para)
+msgid "x1"
+msgstr "x1"
+
+#: C/glabels.xml:1954(para)
+msgid "x coordinate of 1st endpoint of the line segment."
+msgstr ""
+
+#: C/glabels.xml:1958(para) C/glabels.xml:2052(para)
+msgid "y1"
+msgstr "y1"
+
+#: C/glabels.xml:1960(para)
+msgid "y coordinate of 1st endpoint of the line segment."
+msgstr ""
+
+#: C/glabels.xml:1964(para)
+msgid "x2"
+msgstr "x2"
+
+#: C/glabels.xml:1966(para)
+msgid "x coordinate of 2nd endpoint of the line segment."
+msgstr ""
+
+#: C/glabels.xml:1970(para)
+msgid "y2"
+msgstr ""
+
+#: C/glabels.xml:1972(para)
+msgid "y coordinate of 2nd endpoint of the line segment."
+msgstr ""
+
+#: C/glabels.xml:1982(title)
+msgid "Markup-circle Node"
+msgstr ""
+
+#: C/glabels.xml:1984(para)
+msgid "A <emphasis>Markup-circle</emphasis> describes a markup circle."
+msgstr ""
+
+#: C/glabels.xml:2003(para) C/glabels.xml:2119(para)
+msgid "x0"
+msgstr "x0"
+
+#: C/glabels.xml:2005(para)
+msgid "x coordinate of circle origin (center)."
+msgstr ""
+
+#: C/glabels.xml:2009(para) C/glabels.xml:2126(para)
+msgid "y0"
+msgstr "y0"
+
+#: C/glabels.xml:2011(para)
+msgid "y coordinate of circle origin (center)."
+msgstr ""
+
+#: C/glabels.xml:2016(para)
+msgid "Radius of circle."
+msgstr ""
+
+#: C/glabels.xml:2025(title)
+msgid "Markup-rect Node"
+msgstr ""
+
+#: C/glabels.xml:2027(para)
+msgid "A <emphasis>Markup-rect</emphasis> describes a markup rectangle."
+msgstr ""
+
+#: C/glabels.xml:2048(para)
+msgid "x coordinate of upper left corner of rectangle."
+msgstr ""
+
+#: C/glabels.xml:2054(para)
+msgid "y coordinate of upper left corner of rectangle."
+msgstr ""
+
+#: C/glabels.xml:2058(para)
+msgid "w"
+msgstr "w"
+
+#: C/glabels.xml:2060(para)
+msgid "Width of rectangle."
+msgstr ""
+
+#: C/glabels.xml:2064(para)
+msgid "h"
+msgstr "h"
+
+#: C/glabels.xml:2066(para)
+msgid "Height of rectangle."
+msgstr ""
+
+#: C/glabels.xml:2070(para)
+msgid "r"
+msgstr "r"
+
+#: C/glabels.xml:2071(para)
+msgid "Radius of rounded corners of rectangle."
+msgstr ""
+
+#: C/glabels.xml:2080(title)
+msgid "Layout Node"
+msgstr ""
+
+#: C/glabels.xml:2082(para)
+msgid ""
+"A label node may contain multiple <emphasis>Layout</emphasis> children. If "
+"labels are arranged in a simple grid pattern, only one layout is needed. "
+"However, if labels are arranged in multiple grids, such as a running bond "
+"pattern, multiple <emphasis>layout</emphasis> tags can be used. Note: a "
+"single label can always be treated as a grid of one."
+msgstr ""
+
+#: C/glabels.xml:2105(para)
+msgid "nx"
+msgstr ""
+
+#: C/glabels.xml:2107(para)
+msgid "Number of labels/cards across in the grid (horizontal)"
+msgstr ""
+
+#: C/glabels.xml:2112(para)
+msgid "ny"
+msgstr ""
+
+#: C/glabels.xml:2114(para)
+msgid "Number of labels/cards up and down in the grid (vertical)"
+msgstr ""
+
+#: C/glabels.xml:2121(para)
+msgid ""
+"Distance from left edge of sheet to the left edge of the left column of "
+"cards/labels in the layout."
+msgstr ""
+
+#: C/glabels.xml:2128(para)
+msgid ""
+"Distance from the top edge of sheet to the top edge of the top row of labels/"
+"cards in the layout."
+msgstr ""
+
+#: C/glabels.xml:2133(para)
+msgid "dx"
+msgstr ""
+
+#: C/glabels.xml:2134(para)
+msgid "Horizontal pitch of grid."
+msgstr ""
+
+#: C/glabels.xml:2137(para)
+msgid "dy"
+msgstr ""
+
+#: C/glabels.xml:2138(para)
+msgid "Vertical pitch of grid."
+msgstr ""
+
+#: C/glabels.xml:2146(title)
+msgid "Layout Parameters"
+msgstr ""
+
+#: C/glabels.xml:2160(title)
+msgid "Alias Node"
+msgstr ""
+
+#: C/glabels.xml:2162(para)
+msgid ""
+"An <emphasis>Alias</emphasis> node provides the name of a product with the "
+"same size and layout characteristics as the parent template."
+msgstr ""
+
+#: C/glabels.xml:2184(para)
+msgid "The brand or manufacturer of the equivalent product."
+msgstr ""
+
+#: C/glabels.xml:2190(para)
+msgid "The part number or name of the equivalent product."
+msgstr ""
+
+#: C/glabels.xml:2226(title)
+msgid "About <application>gLabels</application>"
+msgstr ""
+
+#: C/glabels.xml:2227(para)
+msgid ""
+"<application>gLabels</application> was written by Jim Evins "
+"(<email>evins@snaught.com</email>). To find more information about "
+"<application>gLabels</application>, please visit the <ulink url=\"http://"
+"glabels.sourceforge.net\" type=\"http\">gLabels Web page</ulink>."
+msgstr ""
+
+#: C/glabels.xml:2232(para)
+msgid ""
+"To report a bug or make a suggestion regarding this application or this "
+"manual, follow the directions at the <ulink url=\"http://glabels.sourceforge."
+"net/contact/\" type=\"http\"><application>gLabels</application> Contact "
+"Page</ulink>."
+msgstr ""
+
+#: C/glabels.xml:2238(para)
+msgid ""
+"This program is distributed 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. A copy of this license "
+"can be found at this <ulink url=\"ghelp:gpl\" type=\"help\">link</ulink>, or "
+"in the file COPYING included with the source code of this program."
+msgstr ""
+"Este programa se distribuye bajo los términos de la Licencia Pública General "
+"GNU tal como la publica la Free Software Foundation; en cualquiera de las "
+"versiones 2 de la Licencia o (a su elección) cualquier versión posterior. "
+"Puede encontrar una copia de esta licencia en este <ulink url=\"ghelp:gpl\" "
+"type=\"help\">enlace</ulink>, o en el archivo COPYING incluido con el código "
+"fuente de este programa."
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: C/glabels.xml:0(None)
+msgid "translator-credits"
+msgstr "Jorge González <jorgegonz@svn.gnome.org>, 2010"
diff --git a/help/es/glabels.xml b/help/es/glabels.xml
new file mode 100644 (file)
index 0000000..50b0c28
--- /dev/null
@@ -0,0 +1,2227 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY legal SYSTEM "legal.xml">
+<!ENTITY appversion "2.2.6">
+<!ENTITY manrevision "2.2.6">
+<!ENTITY date "December 2007">
+<!ENTITY app "<application>gLabels</application>">
+<!-- Information about the entities
+       The legal.xml file contains legal information, there is no need to edit the file. 
+       Use the appversion entity to specify the version of the application.
+       Use the manrevision entity to specify the revision number of this manual.
+       Use the date entity to specify the release date of this manual.
+       Use the app entity to specify the name of the application. -->]>
+<!-- 
+      (Do not remove this comment block.)
+  Maintained by the GNOME Documentation Project
+  http://developer.gnome.org/projects/gdp
+  Template version: 2.0 beta
+  Template last modified Apr 11, 2002
+-->
+<!-- =============Document Header ============================= -->
+<article id="index" lang="es">
+<!-- please do not change the id; for translations, change lang to -->
+<!-- appropriate code -->
+  <articleinfo> 
+    <title>Manual de <application>gLabels</application> V2.2.6</title>       
+       <abstract role="description">
+       <para>Manual de usuario para el programa de creación de etiquetas y tarjetas de visita <application>gLabels</application></para>
+    </abstract>
+    <copyright> 
+      <year>2003-2009</year> 
+      <holder>Jim Evins</holder> 
+    </copyright><copyright><year>2010</year><holder>Jorge González (jorgegonz@svn.gnome.org)</holder></copyright>
+       <publisher> 
+               <publishername>Jim Evins</publishername> 
+       </publisher> 
+
+     <legalnotice id="legalnotice">
+       <para>Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre de GNU, Versión 1.1 o cualquier otra versión posterior publicada por la Free Software Foundation; sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de Cubierta Trasera. Puede encontrar una copia de la licencia GFDL en este <ulink type="help" url="ghelp:fdl">enlace</ulink> o en el archivo COPYING-DOCS distribuido con este manual.</para>
+         <para>Este manual es parte de una colección de manuales de GNOME distribuido bajo la GFDL. Si quiere distribuir este manual por separado de la colección, puede hacerlo añadiendo una copia de la licencia al manual, tal como se describe en la sección 6 de la licencia.</para>
+
+       <para>Muchos de los nombres utilizados por las empresas para distinguir sus productos y servicios se consideran marcas comerciales. Cuando estos nombres aparezcan en la documentación de GNOME, y siempre que se haya informado a los miembros del Proyecto de documentación de GNOME de dichas marcas comerciales, los nombres aparecerán en mayúsculas o con las iniciales en mayúsculas.</para>
+
+       <para>ESTE DOCUMENTO Y LAS VERSIONES MODIFICADAS DEL MISMO SE PROPORCIONAN SEGÚN LAS CONDICIONES ESTABLECIDAS EN LA LICENCIA DE DOCUMENTACIÓN LIBRE DE GNU (GFDL) Y TENIENDO EN CUENTA QUE: <orderedlist>
+               <listitem>
+                 <para>EL DOCUMENTO SE OFRECE «TAL CUAL», SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO SIN LIMITARSE A ELLA, LA GARANTÍA DE QUE EL DOCUMENTO O LA VERSIÓN MODIFICADA DEL MISMO ESTÉ LIBRE DE DEFECTOS, GARANTÍA DE COMERCIALIZACIÓN, APTITUD PARA UN USO EN PARTICULAR O INCUMPLIMIENTO. TODOS LOS RIESGOS RELATIVOS A LA CALIDAD, EXACTITUD O RENDIMIENTO DEL DOCUMENTO O LA VERSIÓN MODIFICADA DEL MISMO SON ASUMIDOS POR VD. EN CASO DE QUE EL DOCUMENTO O LA VERSIÓN MODIFICADA SEAN DEFECTUOSOS, VD. (NO EL ESCRITOR ORIGINAL NI EL AUTOR NI NINGUNO DE LOS COLABORADORES) ASUMIRÁ EL COSTE DE CUALQUIER MANTENIMIENTO, REPARACIÓN O CORRECCIÓN QUE SEAN NECESARIOS. ESTA RENUNCIA DE GARANTÍA CONSTITUYE UNA PARTE ESENCIAL DE ESTA LICENCIA NO SE AUTORIZA EL USO DE NINGÚN DOCUMENTO NI VERSIÓN MODIFICADA DEL MISMO, SALVO EN LAS CONDICIONES ESPECIFICADAS EN ESTA RENUNCIA; Y </para>
+               </listitem>
+               <listitem>
+                 <para>EN NINGUNA CIRCUNSTANCIA NI SEGÚN NINGÚN ARGUMENTO LEGAL, SEA POR MOTIVOS CULPOSOS (INCLUIDA LA NEGLIGENCIA), CONTRACTUALES O DE OTRO TIPO, NI EL AUTOR, NI EL REDACTOR INICIAL, NI CUALQUIER COLABORADOR, NI CUALQUIER DISTRIBUIDOR DEL DOCUMENTO O VERSIÓN MODIFICADA DEL MISMO, NI CUALQUIER PROVEEDOR DE CUALQUIERA DE DICHAS PARTES, SERÁN RESPONSABLES, ANTE NINGÚN TERCERO, DE NINGÚN DAÑO O PERJUICIO DIRECTO, INDIRECTO, ESPECIAL, INCIDENTAL O CONSIGUIENTE DE NINGÚN TIPO, INCLUIDOS, SIN LIMITACIÓN, LOS DAÑOS POR PÉRDIDA DE FONDO DE COMERCIO, INTERRUPCIÓN DEL TRABAJO, FALLO O MAL FUNCIONAMIENTO INFORMÁTICO, NI CUALQUIER OTRO DAÑO O PÉRDIDA DERIVADOS DEL USO DEL DOCUMENTO Y LAS VERSIONES MODIFICADAS DEL MISMO, O RELACIONADO CON ELLO, INCLUSO SI SE HABÍA COMUNICADO A AQUELLA PARTE LA POSIBILIDAD DE TALES DAÑOS.</para>
+               </listitem>
+         </orderedlist></para>
+  </legalnotice>
+
+
+   <!-- This file  contains link to license for the documentation (GNU FDL), and 
+        other legal stuff such as "NO WARRANTY" statement. Please do not change 
+       any of this. -->
+
+    <authorgroup> 
+      <author role="maintainer"> 
+               <firstname>Jim</firstname> 
+               <surname>Evins</surname> 
+      </author> 
+      
+<!-- This is appropriate place for other contributors: translators,
+     maintainers,  etc. Commented out by default.
+     
+      <othercredit role="translator">
+               <firstname>Latin</firstname> 
+               <surname>Translator 1</surname> 
+               <affiliation> 
+                       <orgname>Latin Translation Team</orgname> 
+                       <address> <email>translator@gnome.org</email> </address> 
+               </affiliation>
+               <contrib>Latin translation</contrib>
+      </othercredit>
+-->
+    </authorgroup>
+
+
+<!-- According to GNU FDL, revision history is mandatory if you are -->
+<!-- modifying/reusing someone else's document.  If not, you can omit it. -->
+<!-- Remember to remove the &manrevision; entity from the revision entries other
+-->
+<!-- than the current revision. -->
+<!-- The revision numbering system for GNOME manuals is as follows: -->
+<!-- * the revision number consists of two components -->
+<!-- * the first component of the revision number reflects the release version of the GNOME desktop. -->
+<!-- * the second component of the revision number is a decimal unit that is incremented with each revision of the manual. -->
+<!-- For example, if the GNOME desktop release is V2.x, the first version of the manual that -->
+<!-- is written in that desktop timeframe is V2.0, the second version of the manual is V2.1, etc. -->
+<!-- When the desktop release version changes to V3.x, the revision number of the manual changes -->
+<!-- to V3.0, and so on. -->  
+    <revhistory>
+      <revision> 
+               <revnumber>Manual de gLabels V2.2.6</revnumber> 
+               <date>Octubre de 2009</date> 
+               <revdescription> 
+                       <para role="author">Mario Blättermann <email>mariobl@gnome.org</email></para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+      <revision> 
+               <revnumber>Manual de gLabels V2.2</revnumber> 
+               <date>Diciembre de 2007</date> 
+               <revdescription> 
+                       <para role="author">Jim Evins <email>evins@snaught.com</email></para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+    </revhistory> 
+
+    <releaseinfo>Este manual describe la versión 2.2.6 de <application>gLabels</application>.</releaseinfo> 
+    <legalnotice> 
+      <title>Comentarios</title> 
+      <para>To report a bug or make a suggestion regarding the <application>gLabels</application> application or
+      this manual, follow the directions in the <ulink url="http://glabels.sourceforge.net/contact/" type="http"><application>gLabels</application> Contact Page</ulink>. 
+      </para>
+<!-- Translators may also add here feedback address for translations -->
+    </legalnotice> 
+  </articleinfo> 
+
+  <indexterm zone="index"> 
+    <primary>gLabels</primary> 
+  </indexterm> 
+  <indexterm zone="index"> 
+    <primary>glabels</primary> 
+  </indexterm>
+
+
+
+
+<!-- ============= Document Body ============================= -->
+<!-- ============= Introduction ============================== -->
+<!-- Use the Introduction section to give a brief overview of what
+     the application is and what it does. -->
+  <sect1 id="glabels-introduction"> 
+    <title>Introducción</title> 
+
+    <para>The <application>gLabels</application> application is a lightweight program for creating labels
+      and business cards for the <systemitem>GNOME desktop</systemitem>
+      environment.  It is designed to work with various laser/ink-jet
+      peel-off label and business card sheets that you'll find at most
+      office supply stores.</para>
+
+  </sect1>
+
+
+
+
+<!-- =========== Getting Started ============================== -->
+<!-- Use the Getting Started section to describe the steps required
+     to start the application and to describe the user interface components
+     of the application. If there is other information that it is important
+     for readers to know before they start using the application, you should
+     also include this information here. 
+     If the information about how to get started is very short, you can 
+     include it in the Introduction and omit this section. -->
+
+  <sect1 id="glabels-getting-started"> 
+    <title>Inicio</title> 
+
+    <sect2 id="glabels-start">
+    <title>Para iniciar <application>gLabels</application></title>
+    <para>You can start <application>gLabels</application> in the following ways:
+    </para> 
+    <variablelist>
+       <varlistentry>
+               <term>Menú <guimenu>Aplicaciones</guimenu></term>
+               <listitem>
+               <para>Choose 
+               <menuchoice>
+               <guisubmenu>Office</guisubmenu>
+               <guimenuitem>gLabels</guimenuitem>
+               </menuchoice>. </para>
+               </listitem>
+       </varlistentry>
+       <varlistentry>
+               <term>Línea de comandos</term>
+               <listitem>
+               <para>Type <command>glabels</command>,
+                then press <keycap>Return</keycap>:</para>
+               </listitem>
+       </varlistentry>
+    </variablelist>
+    </sect2>
+
+    <sect2 id="glabels-when-start">
+    <title>When You Start <application>gLabels</application></title>
+    <para>When you start <application>gLabels</application>, the following window is displayed.</para>
+
+    <!-- ==== Figure ==== -->
+      <figure id="mainwindow-fig"> 
+       <title>Ventana de inicio de <application>gLabels</application></title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/main-window-empty.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+    <!-- ==== End of Figure ==== -->
+
+    <!-- Include any descriptions of the GUI immediately after the screenshot of the main UI, -->
+    <!-- for example, the items on the menubar and on the toolbar. This section is optional. -->
+
+    <para>The <application>gLabels</application> window contains the following elements:
+    </para>
+      <variablelist>
+       <varlistentry>
+       <term>Barra de menú.</term>
+       <listitem>
+           <para>The menus on the menubar contain all of the commands you
+              need to create and edit labels and business cards in 
+             <application>gLabels</application>.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Barra de herramientas principal.</term>
+       <listitem>
+           <para>The main toolbar contains a subset of common File and Edit
+              commands that you can access from the menubar.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Drawing toolbar.</term>
+       <listitem>
+           <para>The drawing toolbar contains a subset of commands for
+              editing the current <application>gLabels</application> document.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Área de visualización.</term>
+       <listitem>
+           <para>The display area is the main drawing interface to
+              <application>gLabels</application>.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Object sidebar.</term>
+       <listitem>
+           <para>The object sidebar provides an interface for viewing and
+              editing all properties of an individual object. </para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Barra de herramientas de propiedades.</term>
+       <listitem>
+           <para>The properties toolbar contains a set of tools to
+              manipulate the properties of selected objects and set default
+              properties for new objects.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Barra de estado.</term>
+       <listitem>
+           <para>The statusbar displays information about current
+              <application>gLabels</application> activity and contextual
+              information about the menu items. </para>
+       </listitem>
+       </varlistentry>
+       </variablelist>
+    </sect2>
+  </sect1>
+
+
+
+
+<!-- ================ Usage ================================ -->
+<!-- Use this section to describe how to use the application to perform the tasks for 
+  which the application is designed. -->
+  <sect1 id="glabels-usage"> 
+    <title>Uso</title> 
+
+<!-- ============= To create a new file ============================= -->
+    <sect2 id="glabels-open-new"> 
+      <title>To Create a New Label or Card</title>
+
+      <para>To create a new label or business card, choose 
+        <menuchoice> <guimenu>File</guimenu> <guimenuitem>New</guimenuitem>
+       </menuchoice>
+       to display the <guilabel>New Label or Card</guilabel> dialog. Select
+        the media type and orientation for the new document,
+       then click <guibutton>OK</guibutton>. A new document is
+       displayed in the display area of the <application>gLabels</application>
+        window. </para>
+
+      <para>If your particular media type is missing from this dialog,
+        see <xref linkend="glabels-create-template"/></para>
+
+    </sect2>
+
+<!-- ============= To Open a File ============================= -->
+    <sect2 id="glabels-open-file"> 
+      <title>Abrir un archivo</title>
+
+      <para>To open a file, choose 
+        <menuchoice> <guimenu>File</guimenu> <guimenuitem>Open</guimenuitem>
+       </menuchoice> to display the <guilabel>Open File</guilabel> dialog.
+        Select the file that you want to open, then click
+        <guibutton>OK</guibutton>. The file is displayed in the display area
+        of the <application>gLabels</application> window. </para>
+
+      <para>You can also open multiple files in
+        <application>gLabels</application>. The application creates a separate
+        application window for each open file.</para>
+
+      <para>The application records the paths and filenames of the
+        most recent files that you have edited and displays the files as menu
+        items on the <menuchoice>
+        <guimenu>File</guimenu><guisubmenu>Recent Files</guisubmenu>
+        </menuchoice> menu.</para>
+
+    </sect2>
+
+<!-- ============= To Open Multiple Files from the Command Line ========= -->
+    <sect2 id="glabels-run-from-cmd-line"> 
+      <title>To Open Multiple Files from a Command Line</title>
+
+      <para>You can run <application>gLabels</application> from a command line
+       and open a single file or multiple files. To open multiple files from
+        a command line, type the following command, then press
+        <keycap>Return</keycap>:</para>
+
+      <para><command>glabels
+      <replaceable>file1.glabels file2.glabels file3.glabels</replaceable>
+      </command></para>
+
+      <para>When the application starts, the files that you specify are
+       displayed in separate <application>gLabels</application> windows.</para>
+
+    </sect2>
+
+<!-- ============= To Save a File ========= -->
+    <sect2 id="glabels-save-file"> 
+      <title>Guardar un archivo</title>
+
+      <para>Puede guardar archivos de cualquiera de estas maneras:</para>
+
+      <itemizedlist> 
+       <listitem>
+
+         <para>Para guardar los cambios a un archivo existente, elija <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Guardar</guimenuitem></menuchoice>.</para>
+
+       </listitem>
+       <listitem>
+
+         <para>To save a new file or to save an existing file under a new
+            filename, choose <menuchoice> <guimenu>File</guimenu>
+            <guimenuitem>Save As</guimenuitem> </menuchoice>. Enter a name
+            for the file in the <guilabel>Save As</guilabel> dialog box,
+            then click <guibutton>OK</guibutton>.</para>
+
+       </listitem>
+      </itemizedlist>
+
+    </sect2>
+
+<!-- ============= To Change Label Properties ========= -->
+    <sect2 id="glabels-label-properties"> 
+      <title>Cambiar las propiedades de una etiqueta</title>
+
+      <para>To change the media type and/or orientation of a label, choose
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Properties</guimenuitem> </menuchoice> to display the
+        <guilabel>Label properties</guilabel> dialog.  Select the
+        new media type and orientation for the document, then click
+        <guibutton>OK</guibutton>.</para>
+
+    </sect2>
+
+<!-- ============= To create a custom template ======================= -->
+    <sect2 id="glabels-create-template"> 
+      <title>To Create a Custom Template</title>
+
+      <para>To create a new custom template, choose 
+        <menuchoice> <guimenu>File</guimenu>
+       <guimenuitem>Template Designer ...</guimenuitem> </menuchoice>
+       to display the <guilabel>Template Designer</guilabel> dialog.
+        This dialog will assist you in creating a custom template for
+        most types of label or card stationery that you may encounter.</para>
+
+      <para>If you prefer, you can create your templates manually.
+        For this option see <xref linkend="glabels-manual-create-template"/>
+      </para>
+
+    </sect2>
+
+<!-- ============= To Close a File ========= -->
+    <sect2 id="glabels-close-file"> 
+      <title>Cerrar un archivo</title>
+
+      <para>To close the current document, choose
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Close</guimenuitem> </menuchoice> to close the application
+        window.  If the current document is modified, a confirmation dialog
+        will be presented, allowing you to save the document or cancel
+        the command.  If the window being closed is the only open window,
+        <application>gLabels</application> will exit.</para>
+
+    </sect2>
+
+<!-- ============= To Quit ========= -->
+    <sect2 id="glabels-quit"> 
+      <title>To Quit <application>gLabels</application></title>
+
+      <para>To quit <application>gLabels</application>, choose
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Quit</guimenuitem> </menuchoice>. This is equivalent
+        to closing all open windows.  See
+        <xref linkend="glabels-close-file"/>.</para>
+
+    </sect2>
+
+<!-- ============= To Print Labels and Cards ========= -->
+    <sect2 id="glabels-print-file"> 
+      <title>To Print Labels or Cards</title>
+
+      <para>To print labels or cards, choose
+        <menuchoice> <guimenu>File</guimenu> <guimenuitem>Print</guimenuitem>
+       </menuchoice> to display the <guilabel>Print</guilabel> dialog.
+        Once print options have been selected, click <guilabel>Print</guilabel>
+        to print the labels or cards.  To simply preview the results,
+        click <guilabel>Print Preview</guilabel> instead.</para>
+
+      <para>The <guilabel>Print</guilabel> dialog allows you to specify the
+        following print options:</para>
+               
+      <sect3 id="print-dialog-job">
+       <title>The Labels Tab of the Print Dialog</title>
+
+       <variablelist>
+
+         <varlistentry>
+            <term><guilabel>Print control (Simple)</guilabel></term>
+           <listitem> 
+
+             <para>For simple labels or cards (no document merge), the <guilabel>labels</guilabel>
+                tabbed section contains the following copy controls.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-copies-fig"> 
+               <title>Print Copy Controls</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata fileref="figures/print-copies.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>The number of copies of the label can be selected by
+                choosing the number of full sheets to print, or a specific
+                subset of labels on a single sheet.</para>
+
+             <para>The mini-preview can also be used to graphically select
+                the subset of labels by clicking the first label on the
+                mini-preview and dragging to the last label.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry>
+            <term><guilabel>Print control (Merge)</guilabel></term>
+           <listitem> 
+
+             <para>For labels or cards using the document merge (also known
+                as "mail merge") capability, the <guilabel>labels</guilabel> tabbed section contains
+                the following merge controls instead of copy controls.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-merge-fig"> 
+               <title>Print Document Merge Controls</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata fileref="figures/print-merge.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>The total number of labels or cards printed is the
+                product of the number of records in the merge source and
+                the number of copies selected.  If multiple copies are
+                selected, these can be either collated (copies of the
+                same record grouped together) or un-collated (one copy
+                each record is printed before next copy).</para>
+
+             <para>Printing can begin on any label on the first sheet.
+                This can be selected with the <guilabel>Start on
+                label</guilabel> spinbutton.</para>
+
+             <para>The mini-preview can also be used to graphically select
+                this first label, by clicking on the desired label in the
+                mini-preview.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry> <term><guilabel>Opciones</guilabel> </term> 
+           <listitem> 
+             <para>The following options can also be selected.</para>
+             <itemizedlist>
+               <listitem>
+                 <para><guilabel>print outlines</guilabel></para>
+                 <para>Print outlines of labels.  This option is useful for
+                    dry-runs, to test printer alignment.</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>print in reverse</guilabel></para>
+                 <para>Prints the labels as mirror images.  This option is
+                    useful for printing on clear labels that will be viewed
+                    from the reverse side (e.g. in a car window).</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>print crop marks</guilabel></para>
+                 <para>Prints crop marks along the edge of the sheet.
+                    This option is useful for printing on blank stock, to
+                    be cut after printing.  This option does not work well
+                    with all templates.</para>
+               </listitem>
+             </itemizedlist>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+      </sect3>
+               
+    </sect2>
+
+<!-- ============= To Create New Objects ========= -->
+    <sect2 id="glabels-new-objects"> 
+      <title>To Create New Objects</title>
+
+      <para>Objects are created by choosing the appropriate selection under
+        the <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Create Object</guimenuitem> </menuchoice> submenu or
+        the <guilabel>Drawing Toolbar</guilabel>.  This will place the
+        display area into object creation mode as indicated by its cursor.
+        To return to the default object selection mode without creating
+        an object, choose <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Select Mode</guimenuitem> </menuchoice>.  This will
+        return the display area's cursor to the default selection arrow.</para>
+
+      <para>The following describes the object creation mode for each object
+        type:</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Texto</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              text object.  New text objects are initialized with the
+              string "Text."  To change this text, or other properties, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Caja</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              box object and drag to the desired location of the lower right
+              corner.  If you simply click in a single location, a square
+              box will be created. To change properties of the box object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Línea</term>
+         <listitem>
+           <para>Click the desired location of one end of the
+              line object and drag to the desired location of the other end.
+              If you simply click in a single location, a diagonal line
+              will be created. To change properties of the line object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Elipse</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              ellipse object and drag to the desired location of the lower
+              right corner.  If you simply click in a single location, a circle
+              will be created. To change properties of the ellipse object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Imagen</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              image object and drag to the desired location of the lower
+              right corner.  If you simply click in a single location, a square
+              will be created.  New image objects are initialized with a
+              simple checkerboard image.  To change this image, or other
+              properties of the image object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Barcode</term>
+         <listitem>
+           <para>Click the desired location of the upper left corner of the
+              barcode object.  New barcode objects are initialized to a
+              POSTNET barcode with representative data.  To change data
+              and properties of the barcode object, see
+              <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+
+    </sect2>
+
+<!-- ============= To Select Objects ========= -->
+    <sect2 id="glabels-select-objects"> 
+      <title>To Select Objects</title>
+
+      <para>A prerequisite for performing operations on objects is the
+        selection of individual objects or groups of objects.  The
+        display area must be in the object selection mode to create new
+        selections, as indicated by an arrow cursor.  The object
+        selection mode is selected by the
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Select Mode</guimenuitem> </menuchoice> menu item,
+        or the corresponding command on the <guilabel>Drawing
+        Toolbar</guilabel>.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Selecting a single object</term>
+         <listitem>
+           <para>A single object can be selected simply by clicking
+             on the desired object in the display area.
+             Once selected the object will be highlighted with a set of
+             resizing handles.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Aggregate object selections</term>
+         <listitem>
+           <para>Multiple objects can be selected by first selecting the first
+              object as above and then by holding the <keycap>Ctrl</keycap>
+              key while selecting additional objects.
+              Individual objects can be added to an existing selection
+              at any time by holding the <keycap>Ctrl</keycap> key while
+              selecting the desired objects.  All objects can also be
+              selected by using the <menuchoice> <guimenu>Edit</guimenu>
+              <guimenuitem>Select All</guimenuitem> </menuchoice>
+              menu item.  All objects in an aggregate object selection will be
+              highlighted.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Area selections</term>
+         <listitem>
+           <para>Multiple objects can also be selected by clicking an empty
+              area and dragging to form a rectangular area.  When released,
+              all objects contained in the area will form an aggregate
+              selection.  An area selection can be used to add to an existing
+              selection by holding the <keycap>Ctrl</keycap> key while
+              performing the selection.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Unselecting objects</term>
+         <listitem>
+           <para>Individual objects can be removed from an existing
+              selection by holding the <keycap>Ctrl</keycap> key while
+              clicking on a previously selected object.  An entire selection
+              can be dismissed by using the <menuchoice>
+             <guimenu>Edit</guimenu> <guimenuitem>Un-select All</guimenuitem>
+              </menuchoice> menu item
+              or by simply clicking any empty space in the display area.
+              Once an object is unselected its highlight is removed.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= Clipboard Commands ========= -->
+    <sect2 id="glabels-clipboard"> 
+      <title>Clipboard Commands</title>
+
+      <para>Object selections can be manipulated using the standard clipboard
+        operations <guimenuitem>Cut</guimenuitem>,
+        <guimenuitem>Copy</guimenuitem>, <guimenuitem>Paste</guimenuitem>,
+        and <guimenuitem>Delete</guimenuitem>.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>X</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Cortar</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Moves selected objects to the clipboard.  The objects are
+              then available for pasting back into the current document or
+              another document.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Copiar</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Copies selected objects to the clipboard without deleting
+              them.  The objects are then available for pasting back into
+              the current document or another document.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>V</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Pegar</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Pastes objects from the clipboard into the current document.
+              <application>gLabels</application> can only paste objects from
+              another <application>gLabels</application> document.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycap>Borrar</keycap>
+             </shortcut>
+             <guimenuitem>Borrar</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Deletes selected objects without placing them on the
+              clipboard.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= To Edit object Properties ========= -->
+    <sect2 id="glabels-object-properties"> 
+      <title>To Edit Object Properties</title>
+
+      <para>Most object properties can be modified through the object
+        editor sidebar, illustrated below.  To use the object editor,
+        a single object must first be selected.  See
+        <xref linkend="glabels-select-objects"/>.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="object-editor-sidebar-fig"> 
+       <title>Object Editor Sidebar</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/object-editor-sidebar.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>The object editor will contain a subset of the following
+        tabbed sections, depending on object type:</para>
+
+      <sect3 id="object-editor-text">
+       <title>Text Tabbed Section (Text objects)</title>
+
+       <para>This section contains a small editor for changing the content
+          of a text object.  It also contains a dropdown menu of available
+          document merge keys, that can be inserted into text.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-image">
+       <title>Image Tabbed Section (Image objecs)</title>
+
+       <para>This section contains a file entry with preview to select
+          image files.  The browse button can be used to easily locate
+          image files.  Alternatively, a document merge key can be used
+          instead to provide a filename at print time.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-data">
+       <title>Data Tabbed Section (Barcode objecs)</title>
+
+       <para>This section contains a text entry to enter literal barcode
+          data. Alternatively, a document merge key can be used to
+          provide this data at print time.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-style">
+       <title>Style Tabbed Section (Text objects)</title>
+
+       <para>This section contains controls to select text properties,
+          including font family, font size, font weight, color, and
+          text justification.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-barcode">
+       <title>Style Tabbed Section (Barcode objecs)</title>
+
+       <para>This section contains controls to select barcode properties,
+          including barcode style, color, whether to print text, and whether
+          to include a checksum digit.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-line">
+       <title>Line Tabbed Section</title>
+
+       <para>This section contains controls to select properties of lines
+          and outlines.  These properties include line width and color.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-fill">
+       <title>Fill Tabbed Section</title>
+
+       <para>This section contains controls to select fill properties of box
+          and ellipse objects.  Currently the only fill property is fill
+          color.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size">
+       <title>Size Tabbed Section (All except line objects)</title>
+
+       <para>This section contains controls to select the width and height
+          of an object.  A checkbox is provided, so that the current aspect
+          ratio can be locked while manipulating the width and height controls.
+          Image objects also provide a button to reset the size to the
+          image's natural size (Assumes 72DPI).</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size-line">
+       <title>Size Tabbed Section (Line objects)</title>
+
+       <para>This section contains controls to select the length and angle
+          of a line object.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-position">
+       <title>Position Tabbed Section</title>
+
+       <para>This section contains controls to change the position of an
+          object.</para>
+
+      </sect3>
+
+
+      <sect3 id="object-editor-shadow">
+       <title>Shadow Tabbed Section (All except image and barcode objects)</title>
+
+       <para>This section contains controls to add a shadow to an object.</para>
+
+      </sect3>
+
+
+    </sect2>
+
+<!-- ============= Other Manipulations of Objects ========= -->
+    <sect2 id="glabels-object-manipulation"> 
+      <title>Other Manipulations of Objects</title>
+
+      <para>Objects can also be manipulated in the following ways.</para>
+
+      <sect3 id="other-moving-resizing">
+       <title>Moving and Resizing Objects</title>
+
+       <para>Objects can be moved by simply clicking on a selected
+          object and dragging the object to its new location.  If the object
+          is part of an aggregate selection, all objects in the selection
+          will move with the object being dragged, maintaining their relative
+          positions to one another.  If no object is selected, clicking on
+          an object will create a new selection containing that object.
+          See <xref linkend="glabels-select-objects"/>.</para>
+
+       <para>A selected object can be resized by clicking one of its resize
+          handle and dragging it to obtain the new size.</para>
+
+      </sect3>
+
+      <sect3 id="other-stacking-order">
+       <title>Changing Stacking Order</title>
+
+       <para>Stacking order refers to relative position in the z-axis of
+          objects.  That is when objects overlap, which object will appear
+          on top of the other.  By default, newer objects will appear above
+          older objects.  To change this order, select one or more objects
+          and choose <menuchoice> <guimenu>Objects</guimenu>
+          <guimenuitem>Order</guimenuitem>
+          <guimenuitem>Bring to Front</guimenuitem> </menuchoice>
+          to raise the selection to the top of the stacking
+          order, or choose <menuchoice> <guimenu>Objects</guimenu>
+          <guimenuitem>Order</guimenuitem>
+          <guimenuitem>Send to Back</guimenuitem> </menuchoice>
+          to lower the selection to the bottom of the
+          stacking order.  These menuitems are also available by right-clicking
+          the display area when there is a non-empty selection.</para>
+
+      </sect3>
+
+      <sect3 id="other-rotating-flipping">
+       <title>Rotating and Flipping Objects</title>
+
+       <para>Objects can be rotated 90 degrees in either direction, or flipped
+          horizontally or vertically, by choosing the appropriate menuitem
+          in the  <menuchoice> <guimenu>Objects</guimenu>
+          <guimenuitem>Rotate/Flip</guimenuitem> </menuchoice> sub-menu.  These
+          menuitems are also available by right-clicking
+          the display area when there is a non-empty selection.</para>
+
+      </sect3>
+
+      <sect3 id="other-alignment">
+       <title>Aligning Objects</title>
+
+       <para>Objects can be aligned horizontally or vertically, relative to
+          one another, or relative to the center line of the label, by
+          choosing the appropriate menuitem from the  <menuchoice>
+          <guimenu>Objects</guimenu>
+          <guimenuitem>Align Horizontal</guimenuitem>
+          </menuchoice> or  <menuchoice> <guimenu>Objects</guimenu>
+          <guimenuitem>Align Horizontal</guimenuitem> </menuchoice> sub-menus.
+          These menuitems are also available by right-clicking
+          the display area when there is a non-empty selection.</para>
+
+      </sect3>
+
+      <sect3 id="other-property-bar">
+       <title>Using the Property Bar</title>
+
+       <para>The property bar can be used to change some common properties
+          of objects en-masse.  These properties include font family, font
+          size, font weight, text alignment, text color, fill color, line
+          or outline color, and line width.  The property bar also controls
+          the defaults for these properties for any newly created objects.
+          </para>
+
+      </sect3>
+
+
+
+    </sect2>
+
+<!-- ============= Document Merge Features ========= -->
+    <sect2 id="glabels-merge"> 
+      <title>Performing a Document Merge</title>
+
+      <para>Document Merge (sometimes called "Mail Merge") is a powerful
+        feature that allows a unique label or card to be printed for each
+        record in an external data source.</para>
+
+      <para>The first step to performing a document merge is to prepare
+        a source document that contains your merge data.  This data could
+        be mailing addresses or any other data that you wish to create
+        unique labels or cards for.  Currently back-ends only exist for
+        text files and the evolution data server -- others are planned.  The currently
+        supported text-file format is very simple:  each line is a record;
+        fields are delimited by commas (CSV), tabs, or colons; and newlines
+        can be embedded into fields by using the "\n" entity.  This file
+        could be created using any text editor or could be created by
+        another program or script.  A common way of creating CSV files is
+       to export them from a spreadsheet program.</para>
+
+      <para>A label must then be configured to "point at" this data file.
+        To configure the merge properties of a document, choose
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Merge Properties</guimenuitem> </menuchoice> menu item
+        to display the <guilabel>merge properties</guilabel> dialog.  This
+        dialog is used to select the exact data file format and file
+        name (location) of the merge data.</para>
+
+      <para>Finally, once the label has been configured for a data file,
+        field keys can be inserted into text objects and used as source
+        or data for barcode objects and image filenames for image objects.
+        See <xref linkend="glabels-object-properties"/> for more information
+        on using merge data for these object types.</para>
+
+      <para>Now that your label is configured, <application>gLabels</application> will print a unique
+        label for each record in your source document -- substituting fields
+        from each record for field keys in the all text, barcode, and
+        image objects.</para>
+
+      <para>See <xref linkend="glabels-merge-tutorial"/> for a detailed
+        tutorial on the document merge feature.</para>
+
+
+    </sect2>
+
+
+  </sect1>
+
+
+
+
+  <!-- ============= Customization ============================= -->
+  <!-- Use this section to describe how to customize the application. -->
+  <sect1 id="glabels-prefs"> 
+    <title>Configuración</title> 
+    <para>To configure <application>gLabels</application>, choose 
+      <menuchoice> 
+       <guimenu>Settings</guimenu> 
+       <guimenuitem>Preferences</guimenuitem> 
+      </menuchoice>. The 
+      <guilabel>Preferences</guilabel> dialog contains the following tabbed
+      sections:</para> 
+    <itemizedlist> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-locale"/></para> 
+      </listitem> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-object-defaults"/></para> 
+      </listitem> 
+    </itemizedlist>
+<!-- =============== Customization Subsection ================ -->
+<!-- Use a new section to describe different tabbed sections on the Settings or Preferences
+            dialog. -->
+    <sect2 id="glabels-prefs-locale"> 
+      <title>Región</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Unidades</guilabel> </term> 
+         <listitem> 
+           <para>Use this radio button group to specify your preferred units.
+              Select one of the following options:</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Puntos</guilabel> </para> 
+               <para>Use points (1 point = 1/72 in = 0.352778 mm).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Pulgadas</guilabel> </para> 
+               <para>Use inches.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Milímetros</guilabel> </para> 
+               <para>Use millimeters.</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Default: 
+             <guilabel>Inches</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Default page size</guilabel> </term> 
+         <listitem> 
+           <para>Use this radio button group to specify your preferred page size.
+              This will make it quicker for you to locate media types when creating a new
+              label or card.</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>US Letter</guilabel> </para> 
+               <para>Most of your media will be of the US Letter page size (8.5 x 11 inches).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>ISO A4</guilabel> </para> 
+               <para>Most of your media will be of the ISO A4 page size (210 x 297 mm).</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Default: 
+             <guilabel>US Letter</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2>
+    <!-- ============= Customization Subsection ===================== -->
+    <!-- Another tabbed section on the Preferences dialog. -->
+    <sect2 id="glabels-prefs-object-defaults"> 
+      <title>Opciones predeterminadas para el objeto</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Texto</guilabel> </term> 
+         <listitem> 
+           <para>Use these controls to set the default properties of new text objects.
+              These properties are</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Tipografía</guilabel> </para> 
+               <para>These controls are used to select font family and font size, and
+                  whether the font should bold or in italics.</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Color</guilabel> </para> 
+               <para>This control selects the default text color.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Alineación</guilabel> </para> 
+               <para>These controls are used to select the default text alignment (left, center or right).</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Línea</guilabel> </term> 
+         <listitem> 
+           <para>Use these controls to set the default properties of lines and outlines of
+              new objects.  These properties are</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Anchura</guilabel> </para> 
+               <para>This control selects the default line width.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Color</guilabel> </para> 
+               <para>This control selects the default line color.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Relleno</guilabel> </term> 
+         <listitem> 
+           <para>Use these controls to set the default fill properties of
+              new objects.  These properties are</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Color</guilabel> </para> 
+               <para>This control selects the default fill color.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2> 
+  </sect1>
+
+
+
+
+<!-- ============= Document Merge Tutorial ================================== -->
+  <sect1 id="glabels-merge-tutorial"> 
+    <title>Document Merge Tutorial</title>
+
+    <para>Document Merge (sometimes called "Mail Merge") is a powerful
+      feature that allows a unique label or card to be printed for each
+      record in an external data source.  It is however, the most mis-understood
+      feature of <application>gLabels</application>.  The following examples
+      will step through a couple of common tasks using the document merge
+      feature.</para>
+
+    <sect2 id="merge-ex1">
+      <title>Example 1: Name Tags Using a CSV File</title>
+  
+      <para>In this example we are organizing an orientation party for the new
+        crew members of our ship.  We have a list of freshman crew members that we
+        created in <application>gnumeric</application> and exported as the following
+        CSV file.  We could have created this file by using a text editor, but heck it
+        is the 23rd century.</para>
+
+      <programlisting>
+Name,Department,SN
+"Jim Kirk",Management,"SC937-0176 CEC"
+"Mr. Spock",Sciences,S179-276SP
+"Leonard McCoy",Medicine,unknown
+"Montgomery Scott",Engineering,SE-197-54T
+      </programlisting>
+
+      <para>In <application>gLabels</application> we have created a new <application>gLabels</application>
+        document using the Avery 5395 "Name Badge Labels" template.  Next we use the
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Merge Properties</guimenuitem> </menuchoice> menu item to display
+        the <guilabel>merge properties</guilabel> dialog.  We use this dialog to
+        select the source type (in our case CSV) and the merge source (filename) as
+        shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-1-fig"> 
+       <title>Merge properties dialog</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Before applying the merge source, we uncheck the first record since it is only
+        column headers from our original <application>gnumeric</application> spreadsheet
+        and would simply waste our first label.  We could also unselect any other records
+        that we didn't want to print a label for.</para>
+
+      <para>We can also view each record in more detail by clicking on the appropriate
+        expander (the little triangles) as shown.  Once we are satisfied with the
+        selections in this dialog we click <guibutton>OK</guibutton> to accept the
+        changes.</para>
+
+      <para>Now we start adding objects to our <application>gLabels</application> document as shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-2-fig"> 
+       <title>Adding objects</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>In this example we have added three text objects and a barcode object.  The
+        first text object contains only simple literal text ("Hello, my name is").  The
+        second text object contains a single merge field ("${1}") corresponding to the
+        first field of a record (first column of a line) which contains the new crew
+        member's full name.  The third text field contains both literal text
+        ("Department: ") followed by a single merge field ("${2}") corresponding to
+        the second field or the crew member's department.  The barcode object is
+        configured to use field (or key) "3" which contains our crew member's
+        starfleet serial number.</para>
+
+      <para>Now we can print our name tags by selecting the
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Print</guimenuitem> </menuchoice> menu item.  This will display
+        print dialog as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-3-fig"> 
+       <title>Printing name tags</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Just to make sure our labels are going to look okay, we select the
+        <guilabel>Print outlines</guilabel> option and click
+        <guibutton>Print Preview</guibutton>.  This will display a print preview dialog
+        as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-4-fig"> 
+       <title>Name tags preview</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Everything looks good, so we can now load up our printer with
+        the appropriate label stock, print our name tags and start beaming our guests
+        aboard.</para>
+
+    </sect2>
+
+    <sect2 id="merge-ex2">
+      <title>Example 2: Address Labels Using a CSV File</title>
+  
+      <para>In this example we are going to throw a party and need to print mailing
+        address labels for our invitations.  We have a list of our closest friends
+        that we created in <application>gnumeric</application> and exported as the
+        following CSV file.  It should be noted that not everyone has a middle initial or
+        a two line address.</para>
+
+      <programlisting>
+LAST,FIRST,MI,ADDR1,ADDR2,CITY,STATE,ZIP
+,,,,,,,
+Critter,Ess,S,"123 Faux St.",,Alexandria,VA,22310
+Doe,John,,"Apt 1X","451 Mystery St.",Trenton,NJ,08601
+Summers,Joyce,,"1630 Revello Dr",,Sunnydale,CA,95037
+McGarret,Steve,O,"404 Piikoi Street",,Honolulu,HI,96813
+Kramer,Cosmo,,"Apt 5B","129 W. 81 St.","New York",NY,10024-7207
+      </programlisting>
+
+      <para>In <application>gLabels</application> we have created a new <application>gLabels</application>
+        document using the Avery 5512 "Address Labels" template.  Next we use the
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Merge Properties</guimenuitem> </menuchoice> menu item to display
+        the <guilabel>merge properties</guilabel> dialog.  We use this dialog to
+        select the source type (in our case CSV) and the merge source (filename) as
+        shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-1-fig"> 
+       <title>Merge properties dialog</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Before applying the merge source, we uncheck the first record since it is only
+        column headers from our original <application>gnumeric</application> spreadsheet
+        and would simply waste our first label.  We also unselect the second record
+        which is empty (an artifact of our original spreadsheet).  We could also unselect
+        any other records that we didn't want to print a label for.</para>
+
+      <para>We can also view each record in more detail by clicking on the appropriate
+        expander (the little triangles) as shown.  Once we are satisfied with the
+        selections in this dialog we click <guibutton>OK</guibutton> to accept the
+        changes.</para>
+
+      <para>Now we start adding objects to our <application>gLabels</application> document as shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-2-fig"> 
+       <title>Adding objects</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>In this example we have a single text object.  This text object contains
+        all of our merge fields organized on multiple lines as a mailing address.
+        Notice that fields ${4} and ${5} (corresponding to ADDR1 and ADDR2) are each
+        located with no other text on their own lines.  When
+        <application>gLabels</application> encounters a field as the only text on
+        a line, it will not expand the line if the field is empty.</para>
+
+      <para>Now we can print our address labels by selecting the
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Print</guimenuitem> </menuchoice> menu item.  This will display
+        print dialog as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-3-fig"> 
+       <title>Printing address labels</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Just to make sure our labels are going to look okay, we select the
+        <guilabel>Print outlines</guilabel> option and click
+        <guibutton>Print Preview</guibutton>.  This will display a print preview dialog
+        as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-4-fig"> 
+       <title>Address labels preview</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Everything looks good, so we can now load up our printer with
+        the appropriate label stock, print our address labels and start mailing
+        our party invitations.</para>
+
+    </sect2>
+
+<sect2 id="merge-ex3">
+      <title>Example 3: Address Labels Using the <application>Evolution</application> Addressbook</title>
+  
+      <para>Our last party was a great success, and now we need to print mailing
+        address labels for the invitations to a new one. To simplify this, we can use
+       the <application>Evolution</application> addressbook, because the address
+       data of all our friends is stored there.</para>
+
+      <note>
+       <para>Depending on how your copy of <application>gLabels</application> was packaged, this option could be unavailable.
+         Support for the <application>Evolution</application> addressbook will only be available
+         if the <application>evolution-data-server</application> and its development files
+         were present when <application>gLabels</application> was built. Please keep this in mind if you build <application>gLabels</application>
+         directly from source.</para>
+       
+       <para>If the <application>gLabels</application> package from your distribution lacks this support,
+         you may wish to contact the package maintainer or file a bug against the package
+         to request it.</para>
+      </note>
+
+      <para>In <application>glabels</application> we have created a new <application>gLabels</application>
+        document using the Avery 5512 "Address Labels" template. Next we use the
+        <menuchoice> <guimenu>Objects</guimenu>
+        <guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item to display
+        the <guilabel>Merge properties</guilabel> dialog. We use this dialog to
+        select the source type (in our case <guilabel>Data from default Evolution
+       addressbook</guilabel>) as shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-1-fig"> 
+       <title>Merge properties dialog</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex3-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Once we have chosen <guilabel>Data from default Evolution addressbook
+       </guilabel> as our merge source, we will get a full list of its content. Initially,
+       all entries are checked. Assuming we were planning a really big party, we could
+       leave this selection untouched (but let's keep our budget in mind). We will now select or
+       unselect certain entries by clicking on the appropriate checkboxes, or we could use
+       the <guibutton>Select all</guibutton> and <guibutton>Unselect all
+       </guibutton> buttons to activate or deactivate all entries in the address book.</para>
+      <para>We can also view each entry in more detail by clicking on the appropriate
+        expander (the little triangles) as shown. Once we are satisfied with the
+        selections in this dialog, we will click the <guibutton>OK</guibutton> button to
+       accept the changes.</para>
+
+      <para>Now we start adding objects to our glabels document as shown.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-2-fig"> 
+       <title>Adding objects</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex3-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>In this example we have a single text object again. This text object contains
+        all of our merge fields organized on multiple lines as a mailing address.</para>
+
+      <para>Now we can print our address labels by selecting the
+        <menuchoice> <guimenu>File</guimenu>
+        <guimenuitem>Print</guimenuitem> </menuchoice> menu item. This will display
+        the print dialog as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-3-fig"> 
+       <title>Printing address labels</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Just to make sure our labels are going to look okay, we select the
+        <guilabel>Print outlines</guilabel> option and click
+        <guibutton>Print Preview</guibutton>. This will display a print preview dialog
+        as shown below.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-4-fig"> 
+       <title>Address labels preview</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Everything looks good, so we can now load up our printer with
+        the appropriate label stock, print our address labels and start mailing
+        our party invitations.</para>
+
+    </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Creating templates ================================== -->
+  <sect1 id="glabels-manual-create-template"> 
+    <title>Manually Creating New Templates</title> 
+
+    <para>Predefined templates are defined by XML files located in
+      <filename>${prefix}/share/glabels/</filename>,
+      where <filename>${prefix}</filename> is usually something like
+      <filename>/usr/local</filename> or <filename>/usr</filename> depending
+      on the configuration option <filename>prefix</filename>.  <application>gLabels</application> will
+      use all files of the form <filename>*-templates.xml</filename>
+      or <filename>*.template</filename>, that it finds in
+      <filename>${prefix}/share/glabels/</filename> and
+      <filename>${HOME}/.glabels/</filename>.
+      Additional templates can be added by creating additional
+      <filename>*.template</filename> files in either of these directories.
+      </para>
+
+    <para>The format for these files is defined in the DTD:
+      <ulink url="http://glabels.sourceforge.net/doc/glabels-2.0.dtd.txt" type="http">glabels-2.2.dtd</ulink>. (This DTD also describes other
+       XML formats used by <application>gLabels</application>.)</para>
+
+    <sect2 id="template-assumptions">
+      <title>Assumptions/caveats</title>
+      <itemizedlist>
+       <listitem>
+         <para>A sheet contains only one size of label or card (if a sheet
+            contains more than one size of item, it can be split into
+             multiple templates for multiple pass printing)</para>
+       </listitem>
+       <listitem>
+         <para>Distances can be expressed in units of <emphasis>pt</emphasis>,
+            <emphasis>in</emphasis>, <emphasis>mm</emphasis>,
+            <emphasis>cm</emphasis>, or <emphasis>pc</emphasis>.  For example:
+            "<literal>1.0in</literal>" or "<literal>2.54cm</literal>".  If no
+            units are specified, computer points (<emphasis>pt</emphasis>) will
+            be assumed (1 <emphasis>pt</emphasis> =
+            1/72 <emphasis>in</emphasis> = 0.352778 <emphasis>mm</emphasis>).
+            </para>
+       </listitem>
+      </itemizedlist>
+    </sect2>
+
+    <sect2 id="template-file">
+      <title>Template Files</title>
+
+      <programlisting>
+&lt;?xml version="1.0"?&gt;
+&lt;Glabels-templates&gt;
+
+   <replaceable>...templates...</replaceable>
+
+&lt;/Glabels-templates&gt;
+      </programlisting>
+    </sect2>
+
+
+    <sect2 id="template-example">
+      <title>Example Template</title>
+      <programlisting>
+  &lt;Template brand="Avery" part="8160" size="US-Letter" description="Mailing Labels"&gt;
+    &lt;Label-rectangle id="0" width="189pt" height="72pt" round="5pt"&gt;
+      &lt;Markup-margin size="5pt"/&gt;
+      &lt;Layout nx="3" ny="10" x0="11.25pt" y0="36pt" dx="200pt" dy="72pt"/&gt;
+    &lt;/Label-rectangle&gt;
+    &lt;Alias brand="Avery" part="5160"/&gt;
+    &lt;Alias brand="Avery" part="6233"/&gt;
+  &lt;/Template&gt;
+      </programlisting>
+    </sect2>
+
+    <sect2 id="template-template-node">
+      <title>Template Node</title>
+
+      <para>A <emphasis>Template</emphasis> node describes a single stationary
+        product.  It must contain one instance of any type of Label node
+        (<emphasis>Label-rectangle</emphasis>,
+        <emphasis>Label-round</emphasis>, or <emphasis>Label-cd</emphasis>).
+        This node can be followed by zero or more 
+        <emphasis>Alias</emphasis> nodes.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>Brand or manufacturer of stationary product.
+                  E.g. "Avery"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>Part number or name of stationary product.
+                  E.g. "8160"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>tamaño</para></entry>
+             <entry>
+                <para>Size of sheet.  E.g., "US-Letter," "A4", ...</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>descripción</para></entry>
+             <entry>
+                <para>Description of stationary product.  E.g,
+                   "Mailing Labels."</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>_description</para></entry>
+             <entry>
+                <para>Translatable description of stationary product.
+                  E.g, "Mailing Labels." (Only useful for predefined
+                  templates)</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>anchura</para></entry>
+             <entry>
+                <para>Page width.  Only valid if size="Other"</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>altura</para></entry>
+             <entry>
+                <para>Page height.  Only valid if size="Other"</para>
+               </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-rectangle-node">
+      <title>Label-rectangle Node</title>
+
+      <para>A <emphasis>Label-rectangle</emphasis> node describes the
+        dimensions of a single label or business card that is rectangular
+        in shape (may have rounded edges).</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Reserved for future use.  Should always be 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>anchura</para></entry>
+             <entry><para>Width of label/card</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>altura</para></entry>
+             <entry><para>Height of label/card</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>redondo</para></entry>
+             <entry>
+                <para>Radius of corners.  For items with square edges
+                  (business cards), the radius should be 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x_waste</para></entry>
+             <entry>
+                <para>Amount of horizontal waste (over-print) to allow.  This is useful
+                  for minimizing alignment problems when using non-white
+                  backgrounds (e.g. images).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y_waste</para></entry>
+             <entry>
+                <para>Amount of vertical waste (over-print) to allow.  This is useful
+                  for minimizing alignment problems when using non-white
+                  backgrounds (e.g. images).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-fig"> 
+       <title>Label-rectangle Parameters</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-label.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-label-round-node">
+      <title>Label-round Node</title>
+
+      <para>A <emphasis>Label-round</emphasis> node describes the dimensions
+        of a simple round label (not a CD).</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Reserved for future use.  Should always be 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Radius (1/2 diameter) of label</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>basura</para></entry>
+             <entry>
+                <para>Amount of waste (over-print) to allow.  This is useful
+                  for minimizing alignment problems when using non-white
+                  backgrounds (e.g. images).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-cd-node">
+      <title>Label-cd Node</title>
+
+      <para>A <emphasis>Label-cd</emphasis> node describes the dimensions
+        of a CD, DVD, or business card CD.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Reserved for future use.  Should always be 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Outer radius of label</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>hole</para></entry>
+             <entry><para>Radius of concentric hole</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>anchura</para></entry>
+             <entry>
+                <para>If present, the label is clipped to the given width.
+                  (Useful for "business card CDs").</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>altura</para></entry>
+             <entry>
+                <para>If present, the label is clipped to the given height.
+                  (Useful for "business card CDs").</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>basura</para></entry>
+             <entry>
+                <para>Amount of waste (over-print) to allow.  This is useful
+                  for minimizing alignment problems when using non-white
+                  backgrounds (e.g. images).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-cd-fig"> 
+       <title>CD Label Parameters</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-cd.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-markup-margin-node">
+      <title>Markup-margin Node</title>
+
+      <para>A <emphasis>Markup-margin</emphasis> describes a margin along
+        all edges of a label.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>tamaño</para></entry>
+             <entry>
+                <para>Size of the margin.  I.e. the distance of the margin
+                  line from the edge of the card/label.</para>
+              </entry>
+            </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-line-node">
+      <title>Markup-line Node</title>
+
+      <para>A <emphasis>Markup-line</emphasis> describes a markup line.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>x coordinate of 1st endpoint of the line segment.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>y coordinate of 1st endpoint of the line segment.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x2</para></entry>
+             <entry>
+                <para>x coordinate of 2nd endpoint of the line segment.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y2</para></entry>
+             <entry>
+                <para>y coordinate of 2nd endpoint of the line segment.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-circle-node">
+      <title>Markup-circle Node</title>
+
+      <para>A <emphasis>Markup-circle</emphasis> describes a markup circle.
+        </para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>x coordinate of circle origin (center).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>y coordinate of circle origin (center).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Radius of circle.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-rect-node">
+      <title>Markup-rect Node</title>
+
+      <para>A <emphasis>Markup-rect</emphasis> describes a markup rectangle.
+        </para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>x coordinate of upper left corner of rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>y coordinate of upper left corner of rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>w</para></entry>
+             <entry>
+                <para>Width of rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>h</para></entry>
+             <entry>
+                <para>Height of rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>r</para></entry>
+             <entry><para>Radius of rounded corners of rectangle.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-layout-node">
+      <title>Layout Node</title>
+
+      <para>A label node may contain multiple <emphasis>Layout</emphasis>
+        children.  If labels are arranged in a simple grid pattern, only
+        one layout is needed.  However, if labels are arranged in multiple
+        grids, such as a running bond pattern, multiple
+        <emphasis>layout</emphasis> tags can be used.  Note: a single label
+        can always be treated as a grid of one.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>nx</para></entry>
+             <entry>
+                <para>Number of labels/cards across in the grid
+                  (horizontal)</para>
+              </entry>
+            </row>
+           <row valign="top">
+             <entry><para>ny</para></entry>
+             <entry>
+                <para>Number of labels/cards up and down in the grid
+                  (vertical)</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>Distance from left edge of sheet to the left edge of
+                  the left column of cards/labels in the layout.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>Distance from the top edge of sheet to the top edge of
+                  the top row of labels/cards in the layout.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>dx</para></entry>
+             <entry><para>Horizontal pitch of grid.</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>dy</para></entry>
+             <entry><para>Vertical pitch of grid.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-layout-fig"> 
+       <title>Layout Parameters</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-layout.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-alias-node">
+      <title>Alias Node</title>
+
+      <para>An <emphasis>Alias</emphasis> node provides the name of a
+        product with the same size and layout characteristics as the
+        parent template.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propiedad</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Descripción</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>The brand or manufacturer of the equivalent product.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>The part number or name of the equivalent product.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Bugs ================================== -->
+<!-- This section is optional and is commented out by default. 
+     You can use it to describe known bugs and limitations of the 
+         program if there are any - please be frank and list all
+     problems you know of. 
+  
+  <sect1 id="mayapp-bugs">
+  <title>Known Bugs and Limitations</title>
+  <para> </para>
+ </sect1>
+-->
+
+
+
+
+<!-- ============= About ================================== -->
+<!-- This section contains info about the program (not docs), such as
+      author's name(s), web page, license, feedback address. This
+      section is optional: primary place for this info is "About.." box of
+      the program. However, if you do wish to include this info in the
+      manual, this is the place to put it. Alternatively, you can put this information in the title page.-->
+  <sect1 id="glabels-about"> 
+    <title>About <application>gLabels</application></title> 
+    <para> <application>gLabels</application> was written by Jim Evins
+      (<email>evins@snaught.com</email>). To find more information about
+      <application>gLabels</application>, please visit the 
+      <ulink url="http://glabels.sourceforge.net" type="http">gLabels Web
+       page</ulink>. </para>
+    <para>
+      To report a bug or make a suggestion regarding this application or
+      this manual, follow the directions at the
+      <ulink url="http://glabels.sourceforge.net/contact/" type="http"><application>gLabels</application> Contact Page</ulink>.
+    </para>
+
+    <para>Este programa se distribuye bajo los términos de la Licencia Pública General GNU tal como la publica la Free Software Foundation; en cualquiera de las versiones 2 de la Licencia o (a su elección) cualquier versión posterior. Puede encontrar una copia de esta licencia en este <ulink url="ghelp:gpl" type="help">enlace</ulink>, o en el archivo COPYING incluido con el código fuente de este programa.</para>
+
+  </sect1> 
+
+
+
+
+
+</article>
diff --git a/help/fr/figures/main-window-empty.png b/help/fr/figures/main-window-empty.png
new file mode 100644 (file)
index 0000000..7b97362
Binary files /dev/null and b/help/fr/figures/main-window-empty.png differ
diff --git a/help/fr/figures/merge-ex1-1.png b/help/fr/figures/merge-ex1-1.png
new file mode 100644 (file)
index 0000000..0eb7db8
Binary files /dev/null and b/help/fr/figures/merge-ex1-1.png differ
diff --git a/help/fr/figures/merge-ex1-2.png b/help/fr/figures/merge-ex1-2.png
new file mode 100644 (file)
index 0000000..42145f6
Binary files /dev/null and b/help/fr/figures/merge-ex1-2.png differ
diff --git a/help/fr/figures/merge-ex1-3.png b/help/fr/figures/merge-ex1-3.png
new file mode 100644 (file)
index 0000000..84918ea
Binary files /dev/null and b/help/fr/figures/merge-ex1-3.png differ
diff --git a/help/fr/figures/merge-ex1-4.png b/help/fr/figures/merge-ex1-4.png
new file mode 100644 (file)
index 0000000..49a0aae
Binary files /dev/null and b/help/fr/figures/merge-ex1-4.png differ
diff --git a/help/fr/figures/merge-ex2-1.png b/help/fr/figures/merge-ex2-1.png
new file mode 100644 (file)
index 0000000..06225c7
Binary files /dev/null and b/help/fr/figures/merge-ex2-1.png differ
diff --git a/help/fr/figures/merge-ex2-2.png b/help/fr/figures/merge-ex2-2.png
new file mode 100644 (file)
index 0000000..699168d
Binary files /dev/null and b/help/fr/figures/merge-ex2-2.png differ
diff --git a/help/fr/figures/merge-ex2-3.png b/help/fr/figures/merge-ex2-3.png
new file mode 100644 (file)
index 0000000..960777d
Binary files /dev/null and b/help/fr/figures/merge-ex2-3.png differ
diff --git a/help/fr/figures/merge-ex2-4.png b/help/fr/figures/merge-ex2-4.png
new file mode 100644 (file)
index 0000000..dee26f3
Binary files /dev/null and b/help/fr/figures/merge-ex2-4.png differ
diff --git a/help/fr/figures/object-editor-sidebar.png b/help/fr/figures/object-editor-sidebar.png
new file mode 100644 (file)
index 0000000..e9a6a4a
Binary files /dev/null and b/help/fr/figures/object-editor-sidebar.png differ
diff --git a/help/fr/figures/print-copies.png b/help/fr/figures/print-copies.png
new file mode 100644 (file)
index 0000000..4ecdcca
Binary files /dev/null and b/help/fr/figures/print-copies.png differ
diff --git a/help/fr/figures/print-merge.png b/help/fr/figures/print-merge.png
new file mode 100644 (file)
index 0000000..aaaf534
Binary files /dev/null and b/help/fr/figures/print-merge.png differ
diff --git a/help/fr/fr.po b/help/fr/fr.po
new file mode 100644 (file)
index 0000000..c86103d
--- /dev/null
@@ -0,0 +1,2831 @@
+# French translation for glabels.
+# Copyright (C) 2009 glabels's COPYRIGHT HOLDER
+# This file is distributed under the same license as the glabels package.
+#
+# Alain Lojewski <allomervan@gmail.com>, 2009.
+# Claude Paroz <claude@2xlibre.net>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels glabels_2_2\n"
+"POT-Creation-Date: 2009-12-14 19:24+0000\n"
+"PO-Revision-Date: 2010-01-09 15:05+0100\n"
+"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
+"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:195(None)
+msgid ""
+"@@image: 'figures/main-window-empty.png'; "
+"md5=226b58f05f4171531066358a29cda1a7"
+msgstr ""
+"@@image: 'figures/main-window-empty.png'; "
+"md5=226b58f05f4171531066358a29cda1a7"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:447(None)
+msgid ""
+"@@image: 'figures/print-copies.png'; md5=ebb4d08810a67cc9cd7ec6ddd7b52fb0"
+msgstr ""
+"@@image: 'figures/print-copies.png'; md5=ebb4d08810a67cc9cd7ec6ddd7b52fb0"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:479(None)
+msgid ""
+"@@image: 'figures/print-merge.png'; md5=ffe6027513a10f7ba940c350c1dc5717"
+msgstr ""
+"@@image: 'figures/print-merge.png'; md5=ffe6027513a10f7ba940c350c1dc5717"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:790(None)
+msgid ""
+"@@image: 'figures/object-editor-sidebar.png'; "
+"md5=14eace177c1f5bfe36022acbbd6a9f0e"
+msgstr ""
+"@@image: 'figures/object-editor-sidebar.png'; "
+"md5=14eace177c1f5bfe36022acbbd6a9f0e"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1231(None)
+msgid ""
+"@@image: 'figures/merge-ex1-1.png'; md5=55a97963022047cdad6aa198b5ed698e"
+msgstr ""
+"@@image: 'figures/merge-ex1-1.png'; md5=55a97963022047cdad6aa198b5ed698e"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1256(None)
+msgid ""
+"@@image: 'figures/merge-ex1-2.png'; md5=d03979f010e20e98532258edb20b1bc0"
+msgstr ""
+"@@image: 'figures/merge-ex1-2.png'; md5=d03979f010e20e98532258edb20b1bc0"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1284(None)
+msgid ""
+"@@image: 'figures/merge-ex1-3.png'; md5=94e382ccdfbc2fe5d320010d2ef10c61"
+msgstr ""
+"@@image: 'figures/merge-ex1-3.png'; md5=94e382ccdfbc2fe5d320010d2ef10c61"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1302(None)
+msgid ""
+"@@image: 'figures/merge-ex1-4.png'; md5=e72810bc3c191df6c8b2ad0cb1131021"
+msgstr ""
+"@@image: 'figures/merge-ex1-4.png'; md5=e72810bc3c191df6c8b2ad0cb1131021"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1348(None)
+msgid ""
+"@@image: 'figures/merge-ex2-1.png'; md5=4f062158be21bfadc4adfbdcf5d0206f"
+msgstr ""
+"@@image: 'figures/merge-ex2-1.png'; md5=4f062158be21bfadc4adfbdcf5d0206f"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1374(None)
+msgid ""
+"@@image: 'figures/merge-ex2-2.png'; md5=f69a7e0ae86f66b0d70d39a7757918fa"
+msgstr ""
+"@@image: 'figures/merge-ex2-2.png'; md5=f69a7e0ae86f66b0d70d39a7757918fa"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1399(None) C/glabels.xml:1513(None)
+msgid ""
+"@@image: 'figures/merge-ex2-3.png'; md5=f5134b9e911ebdd17d4a5b36a5ba56d0"
+msgstr ""
+"@@image: 'figures/merge-ex2-3.png'; md5=f5134b9e911ebdd17d4a5b36a5ba56d0"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1417(None) C/glabels.xml:1531(None)
+msgid ""
+"@@image: 'figures/merge-ex2-4.png'; md5=29a60e970cb026aecf75543203494b00"
+msgstr ""
+"@@image: 'figures/merge-ex2-4.png'; md5=29a60e970cb026aecf75543203494b00"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1464(None)
+msgid ""
+"@@image: 'figures/merge-ex3-1.png'; md5=b0c387b5fcfd730b2ae75172895ff5b8"
+msgstr ""
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1492(None)
+msgid ""
+"@@image: 'figures/merge-ex3-2.png'; md5=09f105e133657345e6e478a464e5b49f"
+msgstr ""
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1767(None)
+msgid ""
+"@@image: 'figures/glabels-template-label.png'; "
+"md5=b7db4090373462b8d45feb22d4cd5646"
+msgstr ""
+"@@image: 'figures/glabels-template-label.png'; "
+"md5=b7db4090373462b8d45feb22d4cd5646"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:1888(None)
+msgid ""
+"@@image: 'figures/glabels-template-cd.png'; "
+"md5=145b49a5380de63ffa9451d2bbb81934"
+msgstr ""
+"@@image: 'figures/glabels-template-cd.png'; "
+"md5=145b49a5380de63ffa9451d2bbb81934"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/glabels.xml:2150(None)
+msgid ""
+"@@image: 'figures/glabels-template-layout.png'; "
+"md5=a8adcff0584be1f0275bc2a169a580df"
+msgstr ""
+"@@image: 'figures/glabels-template-layout.png'; "
+"md5=a8adcff0584be1f0275bc2a169a580df"
+
+#: C/glabels.xml:31(title)
+msgid "<application>gLabels</application> Manual V2.2.6"
+msgstr "Manuel <application>gLabels</application> v2.2.6"
+
+#: C/glabels.xml:33(para)
+msgid ""
+"User manual for the <application>gLabels</application> label and business "
+"card creation program"
+msgstr ""
+"Manuel d'utilisation de <application>gLabels</application>, utilitaire de "
+"création d'étiquettes et de cartes de visite"
+
+#: C/glabels.xml:38(year)
+msgid "2003-2009"
+msgstr "2003-2009"
+
+#: C/glabels.xml:39(holder) C/glabels.xml:42(publishername)
+#: C/glabels.xml:93(para) C/glabels.xml:103(para)
+msgid "Jim Evins"
+msgstr "Jim Evins"
+
+#: C/glabels.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Permission vous est donnée de copier, distribuer et/ou modifier ce document "
+"selon les termes de la licence de documentation libre GNU, Version 1.1 ou "
+"ultérieure publiée par la Free Software Foundation sans section inaltérable, "
+"sans texte de première page de couverture ni texte de dernière page de "
+"couverture. Vous trouverez un exemplaire de cette licence en suivant ce "
+"<ulink type=\"help\" url=\"ghelp:fdl\">lien</ulink> ou dans le fichier "
+"COPYING-DOCS fourni avec le présent manuel."
+
+#: C/glabels.xml:12(para)
+msgid ""
+"This manual is part of a collection of GNOME manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Ce manuel fait partie de la collection de manuels GNOME distribués selon les "
+"termes de la licence de documentation libre GNU. Si vous souhaitez "
+"distribuer ce manuel indépendamment de la collection, vous devez joindre un "
+"exemplaire de la licence au document, comme indiqué dans la section 6 de "
+"celle-ci."
+
+#: C/glabels.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any GNOME "
+"documentation, and the members of the GNOME Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"La plupart des noms utilisés par les entreprises pour distinguer leurs "
+"produits et services sont des marques déposées. Lorsque ces noms "
+"apparaissent dans la documentation GNOME et que les membres du projet de "
+"Documentation GNOME sont informés de l'existence de ces marques déposées, "
+"soit ces noms entiers, soit leur première lettre est en majuscule."
+
+#: C/glabels.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"LE PRÉSENT DOCUMENT EST FOURNI « TEL QUEL », SANS AUCUNE GARANTIE, EXPRESSE "
+"OU IMPLICITE, Y COMPRIS, ET SANS LIMITATION, LES GARANTIES DE "
+"MARCHANDABILITÉ, D'ADÉQUATION À UN OBJECTIF PARTICULIER OU DE NON INFRACTION "
+"DU DOCUMENT OU DE SA VERSION MODIFIÉE. L'UTILISATEUR ASSUME TOUT RISQUE "
+"RELATIF À LA QUALITÉ, À LA PERTINENCE ET À LA PERFORMANCE DU DOCUMENT OU DE "
+"SA VERSION DE MISE À JOUR. SI LE DOCUMENT OU SA VERSION MODIFIÉE S'AVÉRAIT "
+"DÉFECTUEUSE, L'UTILISATEUR (ET NON LE RÉDACTEUR INITIAL, L'AUTEUR, NI TOUT "
+"AUTRE PARTICIPANT) ENDOSSERA LES COÛTS DE TOUTE INTERVENTION, RÉPARATION OU "
+"CORRECTION NÉCESSAIRE. CETTE DÉNÉGATION DE RESPONSABILITÉ CONSTITUE UNE "
+"PARTIE ESSENTIELLE DE CETTE LICENCE. AUCUNE UTILISATION DE CE DOCUMENT OU DE "
+"SA VERSION MODIFIÉE N'EST AUTORISÉE AUX TERMES DU PRÉSENT ACCORD, EXCEPTÉ "
+"SOUS CETTE DÉNÉGATION DE RESPONSABILITÉ ; "
+
+#: C/glabels.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"EN AUCUNE CIRCONSTANCE ET SOUS AUCUNE INTERPRÉTATION DE LA LOI, QU'IL "
+"S'AGISSE D'UN DÉLIT CIVIL (Y COMPRIS LA NÉGLIGENCE), CONTRACTUEL OU AUTRE, "
+"L'AUTEUR, LE RÉDACTEUR INITIAL, TOUT PARTICIPANT OU TOUT DISTRIBUTEUR DE CE "
+"DOCUMENT OU DE SA VERSION MODIFIÉE, OU TOUT FOURNISSEUR DE L'UNE DE CES "
+"PARTIES NE POURRA ÊTRE TENU RESPONSABLE À L'ÉGARD DE QUICONQUE POUR TOUT "
+"DOMMAGE DIRECT, INDIRECT, PARTICULIER, OU ACCIDENTEL DE TOUT TYPE Y COMPRIS, "
+"SANS LIMITATION, LES DOMMAGES LIÉS À LA PERTE DE CLIENTÈLE, À UN ARRÊT DE "
+"TRAVAIL, À UNE DÉFAILLANCE OU UN MAUVAIS FONCTIONNEMENT INFORMATIQUE, OU À "
+"TOUT AUTRE DOMMAGE OU PERTE LIÉE À L'UTILISATION DU DOCUMENT ET DE SES "
+"VERSIONS MODIFIÉES, MÊME SI LADITE PARTIE A ÉTÉ INFORMÉE DE L'ÉVENTUALITÉ DE "
+"TELS DOMMAGES."
+
+#: C/glabels.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"LE PRÉSENT DOCUMENT ET SES VERSIONS MODIFIÉES SONT FOURNIS SELON LES TERMES "
+"DE LA LICENCE DE DOCUMENTATION LIBRE GNU SACHANT QUE : <placeholder-1/>"
+
+#: C/glabels.xml:52(firstname)
+msgid "Jim"
+msgstr "Jim"
+
+#: C/glabels.xml:53(surname)
+msgid "Evins"
+msgstr "Evins"
+
+#: C/glabels.xml:87(revnumber)
+msgid "gLabels Manual V2.2.6"
+msgstr "Manuel glabels v2.2.6"
+
+#: C/glabels.xml:88(date)
+msgid "October 2009"
+msgstr "Octobre 2009"
+
+#: C/glabels.xml:90(para)
+msgid "Mario Blättermann <email>mariobl@gnome.org</email>"
+msgstr "Mario Blättermann <email>mariobl@gnome.org</email>"
+
+#: C/glabels.xml:97(revnumber)
+msgid "gLabels Manual V2.2"
+msgstr "Manuel glabels v2.2"
+
+#: C/glabels.xml:98(date)
+msgid "December 2007"
+msgstr "Décembre 2007"
+
+#: C/glabels.xml:100(para)
+msgid "Jim Evins <email>evins@snaught.com</email>"
+msgstr "Jim Evins <email>evins@snaught.com</email>"
+
+#: C/glabels.xml:108(releaseinfo)
+msgid ""
+"This manual describes version 2.2.6 of <application>gLabels</application>."
+msgstr ""
+"Ce manuel documente la version 2.2.6 de <application>gLabels</application>."
+
+#: C/glabels.xml:111(title)
+msgid "Feedback"
+msgstr "Votre avis"
+
+#: C/glabels.xml:112(para)
+msgid ""
+"To report a bug or make a suggestion regarding the <application>gLabels</"
+"application> application or this manual, follow the directions in the <ulink "
+"url=\"http://glabels.sourceforge.net/contact/\" type=\"http"
+"\"><application>gLabels</application> Contact Page</ulink>."
+msgstr ""
+"Pour signaler une anomalie ou émettre une suggestion concernant l'application "
+"<application>gLabels</application> ou ce manuel, procédez comme indiqué sur "
+"la <ulink url=\"http://glabels.sourceforge.net/contact/\" type=\"http\">Page "
+"de contact de <application>gLabels</application></ulink>."
+
+#: C/glabels.xml:121(primary)
+msgid "gLabels"
+msgstr "glabels"
+
+#: C/glabels.xml:124(primary)
+msgid "glabels"
+msgstr "glabels"
+
+#: C/glabels.xml:135(title)
+msgid "Introduction"
+msgstr "Introduction"
+
+#: C/glabels.xml:137(para)
+msgid ""
+"The <application>gLabels</application> application is a lightweight program "
+"for creating labels and business cards for the <systemitem>GNOME desktop</"
+"systemitem> environment. It is designed to work with various laser/ink-jet "
+"peel-off label and business card sheets that you'll find at most office "
+"supply stores."
+msgstr ""
+"L'application <application>gLabels</application> est un petit utilitaire "
+"capable de créer des étiquettes et des cartes de visite sous l'environnement "
+"de bureau GNOME. Avec une simple imprimante laser ou à jet d'encre, il peut "
+"gérer une multitude de matrices standards que vous trouverez dans la plupart "
+"des magasins spécialisés."
+
+#: C/glabels.xml:158(title)
+msgid "Getting Started"
+msgstr "Premiers pas"
+
+#: C/glabels.xml:161(title)
+msgid "To Start <application>gLabels</application>"
+msgstr "Démarrage de <application>gLabels</application>"
+
+#: C/glabels.xml:162(para)
+msgid "You can start <application>gLabels</application> in the following ways:"
+msgstr "Vous pouvez lancer <application>gLabels</application> de deux façons :"
+
+#: C/glabels.xml:166(term)
+msgid "<guimenu>Applications</guimenu> menu"
+msgstr "Menu <guimenu>Applications</guimenu>"
+
+#: C/glabels.xml:168(para)
+msgid ""
+"Choose <menuchoice><guisubmenu>Office</guisubmenu><guimenuitem>gLabels</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Choisissez <menuchoice><guisubmenu>Bureautique</guisubmenu><guimenuitem>gLabels</"
+"guimenuitem></menuchoice>."
+
+#: C/glabels.xml:176(term)
+msgid "Command line"
+msgstr "En ligne de commande"
+
+#: C/glabels.xml:178(para)
+msgid "Type <command>glabels</command>, then press <keycap>Return</keycap>:"
+msgstr ""
+"Saisissez <command>glabels</command>, puis appuyez sur <keycap>Entrée</keycap> :"
+
+#: C/glabels.xml:186(title)
+msgid "When You Start <application>gLabels</application>"
+msgstr "Au démarrage de <application>gLabels</application>"
+
+#: C/glabels.xml:187(para)
+msgid ""
+"When you start <application>gLabels</application>, the following window is "
+"displayed."
+msgstr ""
+"Lorsque vous lancez <application>gLabels</application>, la fenêtre ci-dessous "
+"apparaît."
+
+#: C/glabels.xml:191(title)
+msgid "<application>gLabels</application> Start Up Window"
+msgstr "Fenêtre de démarrage de <application>gLabels</application>"
+
+#. for example, the items on the menubar and on the toolbar. This section is optional.
+#: C/glabels.xml:205(para)
+msgid ""
+"The <application>gLabels</application> window contains the following "
+"elements:"
+msgstr "Contenu de la fenêtre <application>gLabels</application> :"
+
+#: C/glabels.xml:209(term)
+msgid "Menubar."
+msgstr "La barre des menus"
+
+#: C/glabels.xml:211(para)
+msgid ""
+"The menus on the menubar contain all of the commands you need to create and "
+"edit labels and business cards in <application>gLabels</application>."
+msgstr ""
+"Les options de cette barre de menus montrent toutes les commandes à votre "
+"disposition pour créer et éditer des étiquettes et cartes de visite avec "
+"<application>gLabels</application>."
+
+#: C/glabels.xml:217(term)
+msgid "Main toolbar."
+msgstr "Barre d'outils principale"
+
+#: C/glabels.xml:219(para)
+msgid ""
+"The main toolbar contains a subset of common File and Edit commands that you "
+"can access from the menubar."
+msgstr ""
+"La barre d'outils principale contient un sous-ensemble des commandes les plus "
+"utilisées des menus Fichier et Édition de la barre de menus."
+
+#: C/glabels.xml:224(term)
+msgid "Drawing toolbar."
+msgstr "Barre d'outils Dessin"
+
+#: C/glabels.xml:226(para)
+msgid ""
+"The drawing toolbar contains a subset of commands for editing the current "
+"<application>gLabels</application> document."
+msgstr ""
+"La barre d'outils Dessin contient un choix de commandes pour la modification "
+"du document <application>gLabels</application> actif."
+
+#: C/glabels.xml:231(term)
+msgid "Display area."
+msgstr "Zone d'affichage"
+
+#: C/glabels.xml:233(para)
+msgid ""
+"The display area is the main drawing interface to <application>gLabels</"
+"application>."
+msgstr ""
+"La zone d'affichage est la principale interface de conception de "
+"<application>gLabels</application>."
+
+#: C/glabels.xml:238(term)
+msgid "Object sidebar."
+msgstr "Barre latérale Objet"
+
+#: C/glabels.xml:240(para)
+msgid ""
+"The object sidebar provides an interface for viewing and editing all "
+"properties of an individual object."
+msgstr ""
+"La barre latérale Objet fournit une interface pour afficher et modifier "
+"toutes les propriétés d'un objet."
+
+#: C/glabels.xml:245(term)
+msgid "Properties toolbar."
+msgstr "Barre d'outils Propriétés"
+
+#: C/glabels.xml:247(para)
+msgid ""
+"The properties toolbar contains a set of tools to manipulate the properties "
+"of selected objects and set default properties for new objects."
+msgstr ""
+"La barre d'outils Propriétés met à disposition un choix d'outils pour modifier "
+"les propriétés de l'objet sélectionné, et pour définir les propriétés par défaut "
+"pour de nouveaux objets."
+
+#: C/glabels.xml:253(term)
+msgid "Statusbar."
+msgstr "Barre d'état"
+
+#: C/glabels.xml:255(para)
+msgid ""
+"The statusbar displays information about current <application>gLabels</"
+"application> activity and contextual information about the menu items."
+msgstr ""
+"La barre d'état affiche des informations sur l'activité actuelle de "
+"<application>gLabels</application>, ainsi que des informations contextuelles "
+"au sujet des éléments du menu."
+
+#: C/glabels.xml:271(title)
+msgid "Usage"
+msgstr "Utilisation"
+
+#: C/glabels.xml:275(title)
+msgid "To Create a New Label or Card"
+msgstr "Création d'une nouvelle étiquette ou d'une nouvelle carte de visite"
+
+#: C/glabels.xml:277(para)
+msgid ""
+"To create a new label or business card, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>New</guimenuitem></menuchoice> to display the "
+"<guilabel>New Label or Card</guilabel> dialog. Select the media type and "
+"orientation for the new document, then click <guibutton>OK</guibutton>. A "
+"new document is displayed in the display area of the <application>gLabels</"
+"application> window."
+msgstr ""
+"Pour créer une nouvelle étiquette ou une nouvelle carte de visite, choisissez "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Nouveau</guimenuitem></"
+"menuchoice> pour afficher la boîte de dialogue <guilabel>Nouvelle étiquette/"
+"carte</guilabel>. Sélectionnez le type de support et l'orientation, puis "
+"cliquez sur <guibutton>Valider</guibutton>. Un nouveau document apparaît dans la "
+"zone d'affichage de <application>gLabels</application>."
+
+#: C/glabels.xml:286(para)
+msgid ""
+"If your particular media type is missing from this dialog, see <xref linkend="
+"\"glabels-create-template\"/>"
+msgstr ""
+"Si le type de votre support n'apparaît pas dans la liste, consultez <xref linkend="
+"\"glabels-create-template\"/>"
+
+#: C/glabels.xml:293(title)
+msgid "To Open a File"
+msgstr "Ouverture d'un fichier"
+
+#: C/glabels.xml:295(para)
+msgid ""
+"To open a file, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</"
+"guimenuitem></menuchoice> to display the <guilabel>Open File</guilabel> "
+"dialog. Select the file that you want to open, then click <guibutton>OK</"
+"guibutton>. The file is displayed in the display area of the "
+"<application>gLabels</application> window."
+msgstr ""
+"Pour ouvrir un fichier, choisissez <menuchoice><guimenu>Fichier</"
+"guimenu><guimenuitem>Ouvrir</guimenuitem></menuchoice> pour afficher la "
+"boîte de dialogue <guilabel>Ouvrir un fichier</guilabel>. Choisissez le "
+"fichier à ouvrir, puis cliquez sur <guibutton>Valider</guibutton>. Le fichier "
+"apparaît dans la zone d'affichage de la fenêtre de <application>gLabels</application>."
+
+#: C/glabels.xml:302(para)
+msgid ""
+"You can also open multiple files in <application>gLabels</application>. The "
+"application creates a separate application window for each open file."
+msgstr ""
+"Vous pouvez aussi ouvrir plusieurs fichiers dans <application>gLabels</"
+"application>. L'application crée une fenêtre séparée pour chaque "
+"fichier ouvert."
+
+#: C/glabels.xml:306(para)
+msgid ""
+"The application records the paths and filenames of the most recent files "
+"that you have edited and displays the files as menu items on the "
+"<menuchoice><guimenu>File</guimenu><guisubmenu>Recent Files</guisubmenu></"
+"menuchoice> menu."
+msgstr ""
+"Cet utilitaire enregistre les chemins et les noms des fichiers les plus "
+"récents, et les affiche dans le menu <menuchoice><guimenu>Fichier</"
+"guimenu><guisubmenu>Fichiers récents</guisubmenu></menuchoice>."
+
+#: C/glabels.xml:316(title)
+msgid "To Open Multiple Files from a Command Line"
+msgstr "Ouverture de plusieurs fichiers en ligne de commande"
+
+#: C/glabels.xml:318(para)
+msgid ""
+"You can run <application>gLabels</application> from a command line and open "
+"a single file or multiple files. To open multiple files from a command line, "
+"type the following command, then press <keycap>Return</keycap>:"
+msgstr ""
+"Vous pouvez ouvrir un ou plusieurs fichiers dans <application>gLabels</"
+"application> à partir d'un terminal. Pour ouvrir plusieurs fichiers, saisissez "
+"la commande suivante et appuyez sur <keycap>Entrée</keycap> :"
+
+#: C/glabels.xml:324(replaceable)
+msgid "file1.glabels file2.glabels file3.glabels"
+msgstr "fichier1.glabels fichier2.glabels fichier3.glabels"
+
+#: C/glabels.xml:323(command)
+msgid "glabels <placeholder-1/>"
+msgstr "glabels <placeholder-1/>"
+
+#: C/glabels.xml:327(para)
+msgid ""
+"When the application starts, the files that you specify are displayed in "
+"separate <application>gLabels</application> windows."
+msgstr ""
+"Au démarrage de l'application, les fichiers que vous avez choisis s'ouvrent "
+"dans des fenêtres séparées."
+
+#: C/glabels.xml:334(title)
+msgid "To Save a File"
+msgstr "Enregistrement d'un fichier"
+
+#: C/glabels.xml:336(para)
+msgid "You can save files in the following ways:"
+msgstr "Vous pouvez enregistrer des fichiers de différentes façons :"
+
+#: C/glabels.xml:341(para)
+msgid ""
+"To save changes to an existing file, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Save</guimenuitem></menuchoice>."
+msgstr ""
+"Pour enregistrer les modifications d'un fichier existant, choisissez "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Enregistrer</"
+"guimenuitem></menuchoice>."
+
+#: C/glabels.xml:348(para)
+msgid ""
+"To save a new file or to save an existing file under a new filename, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Save As</guimenuitem></"
+"menuchoice>. Enter a name for the file in the <guilabel>Save As</guilabel> "
+"dialog box, then click <guibutton>OK</guibutton>."
+msgstr ""
+"Pour enregistrer un nouveau fichier ou changer le nom d'un fichier "
+"existant, choisissez <menuchoice><guimenu>Fichier</"
+"guimenu><guimenuitem>Enregistrer sous</guimenuitem></menuchoice>. Saisissez un "
+"nom de fichier dans la boîte de dialogue <guilabel>Enregistrer sous</"
+"guilabel> et cliquez sur <guibutton>Valider</guibutton>."
+
+#: C/glabels.xml:361(title)
+msgid "To Change Label Properties"
+msgstr "Modification des propriétés d'une étiquette"
+
+#: C/glabels.xml:363(para)
+msgid ""
+"To change the media type and/or orientation of a label, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Properties</guimenuitem></"
+"menuchoice> to display the <guilabel>Label properties</guilabel> dialog. "
+"Select the new media type and orientation for the document, then click "
+"<guibutton>OK</guibutton>."
+msgstr ""
+"Pour changer le type de support ou l'orientation d'une étiquette, choisissez "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Propriétés</guimenuitem></"
+"menuchoice> pour afficher la boîte de dialogue <guilabel>Propriétés de l'étiquette</"
+"guilabel>. Sélectionnez un type de support et l'orientation du document, puis "
+"cliquez sur <guibutton>Valider</guibutton>."
+
+#: C/glabels.xml:374(title)
+msgid "To Create a Custom Template"
+msgstr "Création d'un patron personnalisé"
+
+#: C/glabels.xml:376(para)
+msgid ""
+"To create a new custom template, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Template Designer ...</guimenuitem></menuchoice> to "
+"display the <guilabel>Template Designer</guilabel> dialog. This dialog will "
+"assist you in creating a custom template for most types of label or card "
+"stationery that you may encounter."
+msgstr ""
+"Pour créer un nouveau patron personnalisé, choisissez "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Créateur de patrons..."
+"</guimenuitem></menuchoice> pour afficher la boîte de dialogue "
+"<guilabel>Créateur de patrons</guilabel>. L'assistant vous aidera à "
+"créer un patron compatible avec la plupart des modèles de supports du "
+"commerce."
+
+#: C/glabels.xml:383(para)
+msgid ""
+"If you prefer, you can create your templates manually. For this option see "
+"<xref linkend=\"glabels-manual-create-template\"/>"
+msgstr ""
+"Si vous préférez créer votre propre patron manuellement, reportez-vous à la "
+"section <xref linkend=\"glabels-manual-create-template\"/>"
+
+#: C/glabels.xml:391(title)
+msgid "To Close a File"
+msgstr "Fermeture d'un fichier"
+
+#: C/glabels.xml:393(para)
+msgid ""
+"To close the current document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice> to close the "
+"application window. If the current document is modified, a confirmation "
+"dialog will be presented, allowing you to save the document or cancel the "
+"command. If the window being closed is the only open window, "
+"<application>gLabels</application> will exit."
+msgstr ""
+"Pour fermer le document en cours, choisissez <menuchoice><guimenu>Fichier</"
+"guimenu><guimenuitem>Fermer</guimenuitem></menuchoice>. Cela ferme la "
+"fenêtre active. Si le document a été modifié, vous devrez confirmer dans une "
+"boîte de dialogue si vous souhaitez enregistrer les modifications avant de quitter, "
+"ou si vous souhaitez annuler la commande. S'il n'y avait qu'une seule "
+"fenêtre active, <application>gLabels</application> se fermera."
+
+#: C/glabels.xml:405(title)
+msgid "To Quit <application>gLabels</application>"
+msgstr "Fermeture de <application>gLabels</application>"
+
+#: C/glabels.xml:407(para)
+msgid ""
+"To quit <application>gLabels</application>, choose "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Quit</guimenuitem></"
+"menuchoice>. This is equivalent to closing all open windows. See <xref "
+"linkend=\"glabels-close-file\"/>."
+msgstr ""
+"Pour quitter <application>gLabels</application>, choisissez "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Quitter</guimenuitem></"
+"menuchoice>. Cette commande équivaut à fermer toutes les fenêtres ouvertes. "
+"Voir <xref linkend=\"glabels-close-file\"/>."
+
+#: C/glabels.xml:417(title)
+msgid "To Print Labels or Cards"
+msgstr "Impression d'étiquettes ou de cartes"
+
+#: C/glabels.xml:419(para)
+msgid ""
+"To print labels or cards, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice> to display the "
+"<guilabel>Print</guilabel> dialog. Once print options have been selected, "
+"click <guilabel>Print</guilabel> to print the labels or cards. To simply "
+"preview the results, click <guilabel>Print Preview</guilabel> instead."
+msgstr ""
+"Pour imprimer des étiquettes ou des cartes, "
+"choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Imprimer</"
+"guimenuitem></menuchoice> pour afficher la boîte de dialogue "
+"<guilabel>Imprimer</guilabel>. Choisissez les options d'impression et cliquez sur "
+"<guilabel>Imprimer</guilabel> pour démarrer l'impression. Si vous souhaitez "
+"simplement avoir un aperçu de ce qui sera imprimé, cliquez sur <guilabel>Aperçu avant impression</guilabel>."
+
+#: C/glabels.xml:426(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog allows you to specify the following "
+"print options:"
+msgstr ""
+"La boîte de dialogue <guilabel>Imprimer</guilabel> vous permet de choisir "
+"les options d'impression suivantes :"
+
+#: C/glabels.xml:430(title)
+msgid "The Labels Tab of the Print Dialog"
+msgstr "Onglet Étiquettes de la boîte de dialogue Imprimer"
+
+#: C/glabels.xml:435(guilabel)
+msgid "Print control (Simple)"
+msgstr "Contrôle d'impression (simple)"
+
+#: C/glabels.xml:438(para)
+msgid ""
+"For simple labels or cards (no document merge), the <guilabel>labels</"
+"guilabel> tabbed section contains the following copy controls."
+msgstr ""
+"Pour des formats simples d'étiquettes ou de cartes (pas de fusion), la "
+"section <guilabel>étiquettes</guilabel> dispose des contrôles suivants."
+
+#: C/glabels.xml:443(title)
+msgid "Print Copy Controls"
+msgstr "Contrôles d'impression"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:454(para)
+msgid ""
+"The number of copies of the label can be selected by choosing the number of "
+"full sheets to print, or a specific subset of labels on a single sheet."
+msgstr ""
+"Le nombre de copies peut être indiqué en choisissant le nombre de pages "
+"pleines à imprimer ou un choix d'étiquettes spécifiques sur une seule page."
+
+#: C/glabels.xml:458(para)
+msgid ""
+"The mini-preview can also be used to graphically select the subset of labels "
+"by clicking the first label on the mini-preview and dragging to the last "
+"label."
+msgstr ""
+"La prévisualisation en miniatures peut également être utilisée "
+"pour sélectionner graphiquement un assortiment d'étiquettes en cliquant sur "
+"la première étiquette et en faisant glisser la souris jusque sur la dernière."
+
+#: C/glabels.xml:466(guilabel)
+msgid "Print control (Merge)"
+msgstr "Contrôle d'impression (fusion)"
+
+#: C/glabels.xml:469(para)
+msgid ""
+"For labels or cards using the document merge (also known as \"mail merge\") "
+"capability, the <guilabel>labels</guilabel> tabbed section contains the "
+"following merge controls instead of copy controls."
+msgstr ""
+"Pour des étiquettes ou des cartes utilisant les possibilités de fusion "
+"(aussi connue sous le nom de « publipostage »), l'onglet <guilabel>Étiquettes"
+"</guilabel> propose les éléments de fusion suivants, à la place des contrôles "
+"de copie."
+
+#: C/glabels.xml:475(title)
+msgid "Print Document Merge Controls"
+msgstr "Contrôles de fusion pour l'impression d'un document"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:486(para)
+msgid ""
+"The total number of labels or cards printed is the product of the number of "
+"records in the merge source and the number of copies selected. If multiple "
+"copies are selected, these can be either collated (copies of the same record "
+"grouped together) or un-collated (one copy each record is printed before "
+"next copy)."
+msgstr ""
+"Le nombre total d'étiquettes ou de cartes imprimées est le produit du nombre "
+"d'enregistrements dans la source de fusion par le nombre de copies "
+"sélectionnées. Lors de l'impression de plusieurs copies, celles-ci "
+"peuvent être groupées (toutes les copies d'un même enregistrement sont "
+"groupées) ou séparées (une copie de chaque enregistrement est "
+"imprimée avant la suivante)."
+
+#: C/glabels.xml:493(para)
+msgid ""
+"Printing can begin on any label on the first sheet. This can be selected "
+"with the <guilabel>Start on label</guilabel> spinbutton."
+msgstr ""
+"L'impression peut commencer par n'importe quelle étiquette sur la première "
+"page. Cette option peut être choisie au moyen de la zone numérique <guilabel>"
+"Commencer par l'étiquette</guilabel>."
+
+#: C/glabels.xml:497(para)
+msgid ""
+"The mini-preview can also be used to graphically select this first label, by "
+"clicking on the desired label in the mini-preview."
+msgstr ""
+"De même, vous pouvez sélectionner cette première étiquette graphiquement en "
+"cliquant sur l'aperçu en miniature."
+
+#: C/glabels.xml:504(guilabel)
+msgid "Options"
+msgstr "Options"
+
+#: C/glabels.xml:506(para)
+msgid "The following options can also be selected."
+msgstr "Vous pouvez aussi définir les options suivantes."
+
+#: C/glabels.xml:509(guilabel)
+msgid "print outlines"
+msgstr "Imprimer des bordures"
+
+#: C/glabels.xml:510(para)
+msgid ""
+"Print outlines of labels. This option is useful for dry-runs, to test "
+"printer alignment."
+msgstr ""
+"Imprime le cadre des étiquettes. Cette option est utile pour des essais à "
+"blanc, pour tester l'alignement de l'imprimante."
+
+#: C/glabels.xml:514(guilabel)
+msgid "print in reverse"
+msgstr "Imprimer à l'envers"
+
+#: C/glabels.xml:515(para)
+msgid ""
+"Prints the labels as mirror images. This option is useful for printing on "
+"clear labels that will be viewed from the reverse side (e.g. in a car "
+"window)."
+msgstr ""
+"Imprime les étiquettes en miroir. Cette option est utile pour imprimer sur "
+"des supports transparents qui seront vus de l'extérieur (par ex. sur une vitre "
+"de voiture)."
+
+#: C/glabels.xml:520(guilabel)
+msgid "print crop marks"
+msgstr "Imprimer les guides de coupe"
+
+#: C/glabels.xml:521(para)
+msgid ""
+"Prints crop marks along the edge of the sheet. This option is useful for "
+"printing on blank stock, to be cut after printing. This option does not work "
+"well with all templates."
+msgstr ""
+"Cette option imprime des repères tout autour d'une feuille blanche et qui "
+"serviront à la découpe après impression. Elle ne fonctionne pas bien avec tous "
+"les patrons."
+
+#: C/glabels.xml:536(title)
+msgid "To Create New Objects"
+msgstr "Création de nouveaux objets"
+
+#: C/glabels.xml:538(para)
+msgid ""
+"Objects are created by choosing the appropriate selection under the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Create Object</"
+"guimenuitem></menuchoice> submenu or the <guilabel>Drawing Toolbar</"
+"guilabel>. This will place the display area into object creation mode as "
+"indicated by its cursor. To return to the default object selection mode "
+"without creating an object, choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Select Mode</guimenuitem></menuchoice>. This will "
+"return the display area's cursor to the default selection arrow."
+msgstr ""
+"Vous pouvez créer des objets en choisissant la fonction appropriée dans le "
+"sous-menu <menuchoice><guimenu>Objets</guimenu><guimenuitem>Créer un objet</"
+"guimenuitem></menuchoice>, ou dans la barre d'outils <guilabel>Dessin</"
+"guilabel>. Ceci mettra la zone d'affichage en mode création d'objet comme "
+"indiqué par son curseur. Pour revenir au mode par défaut sans création "
+"d'objet, choisissez <menuchoice><guimenu>Objets</"
+"guimenu><guimenuitem>Mode sélection</guimenuitem></menuchoice>. Ceci "
+"remettra le curseur standard (flèche de sélection) dans la fenêtre active."
+
+#: C/glabels.xml:548(para)
+msgid "The following describes the object creation mode for each object type:"
+msgstr ""
+"Voici la description du mode création d'objet pour chaque type d'objet :"
+
+#: C/glabels.xml:554(term) C/glabels.xml:1123(guilabel)
+msgid "Text"
+msgstr "Texte"
+
+#: C/glabels.xml:556(para)
+msgid ""
+"Click the desired location of the upper left corner of the text object. New "
+"text objects are initialized with the string \"Text.\" To change this text, "
+"or other properties, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Cliquez sur l'endroit désiré pour faire apparaître le coin supérieur gauche "
+"de l'objet texte. Les nouveaux objets texte contiennent initialement la "
+"chaîne « Texte ». Pour modifier ce texte ou ses autres propriétés, consultez <xref "
+"linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:564(term)
+msgid "Box"
+msgstr "Boîte"
+
+#: C/glabels.xml:566(para)
+msgid ""
+"Click the desired location of the upper left corner of the box object and "
+"drag to the desired location of the lower right corner. If you simply click "
+"in a single location, a square box will be created. To change properties of "
+"the box object, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Cliquez sur l'endroit choisi pour le coin supérieur gauche de l'objet boîte, "
+"et faites glisser jusqu'à l'emplacement désiré du coin inférieur droit. Un "
+"simple clic quelque part fait apparaître une boîte carrée. Pour modifier les "
+"propriétés de l'objet boîte, consultez <xref linkend=\"glabels-object-properties"
+"\"/>."
+
+#: C/glabels.xml:575(term) C/glabels.xml:1149(guilabel)
+msgid "Line"
+msgstr "Ligne"
+
+#: C/glabels.xml:577(para)
+msgid ""
+"Click the desired location of one end of the line object and drag to the "
+"desired location of the other end. If you simply click in a single location, "
+"a diagonal line will be created. To change properties of the line object, "
+"see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Cliquez sur l'endroit désiré pour l'une des deux extrémités de la ligne et "
+"faites glisser jusqu'à l'autre extrémité voulue. Un simple clic quelque part "
+"génère une ligne diagonale. Pour modifier les propriétés de la ligne, consultez "
+"<xref linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:586(term)
+msgid "Ellipse"
+msgstr "Ellipse"
+
+#: C/glabels.xml:588(para)
+msgid ""
+"Click the desired location of the upper left corner of the ellipse object "
+"and drag to the desired location of the lower right corner. If you simply "
+"click in a single location, a circle will be created. To change properties "
+"of the ellipse object, see <xref linkend=\"glabels-object-properties\"/>."
+msgstr ""
+"Cliquez sur l'endroit choisi pour le coin supérieur gauche de l'objet "
+"ellipse et faites glisser jusqu'à l'emplacement désiré du coin inférieur "
+"droit. Un simple clic quelque part génère un cercle. Pour modifier les "
+"propriétés de l'ellipse, consultez <xref linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:597(term)
+msgid "Image"
+msgstr "Image"
+
+#: C/glabels.xml:599(para)
+msgid ""
+"Click the desired location of the upper left corner of the image object and "
+"drag to the desired location of the lower right corner. If you simply click "
+"in a single location, a square will be created. New image objects are "
+"initialized with a simple checkerboard image. To change this image, or other "
+"properties of the image object, see <xref linkend=\"glabels-object-properties"
+"\"/>."
+msgstr ""
+"Cliquez sur l'endroit choisi pour le coin supérieur gauche de l'objet image "
+"et faites glisser jusqu'à l'emplacement désiré du coin inférieur droit. Un "
+"simple clic quelque part génère un carré. Les nouveaux objets image contiennent "
+"initialement une simple image de damier. Pour modifier cette image ou "
+"ses propriétés, consultez <xref linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:610(term)
+msgid "Barcode"
+msgstr "Code-barre"
+
+#: C/glabels.xml:612(para)
+msgid ""
+"Click the desired location of the upper left corner of the barcode object. "
+"New barcode objects are initialized to a POSTNET barcode with representative "
+"data. To change data and properties of the barcode object, see <xref linkend="
+"\"glabels-object-properties\"/>."
+msgstr ""
+"Cliquez sur l'endroit choisi pour le coin supérieur gauche de l'objet code-"
+"barre. Les nouveaux objets code-barre sont initialisés avec des données "
+"valides de style POSTNET. Pour modifier ces données et leurs propriétés, consultez "
+"<xref linkend=\"glabels-object-properties\"/>."
+
+#: C/glabels.xml:627(title)
+msgid "To Select Objects"
+msgstr "Sélection d'objets"
+
+#: C/glabels.xml:629(para)
+msgid ""
+"A prerequisite for performing operations on objects is the selection of "
+"individual objects or groups of objects. The display area must be in the "
+"object selection mode to create new selections, as indicated by an arrow "
+"cursor. The object selection mode is selected by the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Select Mode</"
+"guimenuitem></menuchoice> menu item, or the corresponding command on the "
+"<guilabel>Drawing Toolbar</guilabel>."
+msgstr ""
+"Une condition pour effectuer des opérations sur des objets est la sélection "
+"d'objets individuels ou de groupe d'objets. La zone d'affichage doit être en "
+"mode sélection pour générer de nouvelles sélections, comme l'indique le "
+"curseur en forme de flèche. On passe en mode sélection d'objet par le menu "
+"<menuchoice><guimenu>Objets</guimenu><guimenuitem>Mode sélection</"
+"guimenuitem></menuchoice> ou par le bouton correspondant de la barre "
+"d'outils <guilabel>Dessin</guilabel>."
+
+#: C/glabels.xml:642(term)
+msgid "Selecting a single object"
+msgstr "Sélection d'un seul objet"
+
+#: C/glabels.xml:644(para)
+msgid ""
+"A single object can be selected simply by clicking on the desired object in "
+"the display area. Once selected the object will be highlighted with a set of "
+"resizing handles."
+msgstr ""
+"Un seul objet peut être sélectionné en cliquant dessus dans la zone "
+"d'affichage. Il apparaît alors en surbrillance avec des poignées de "
+"redimensionnement."
+
+#: C/glabels.xml:652(term)
+msgid "Aggregate object selections"
+msgstr "Sélection d'objets groupés"
+
+#: C/glabels.xml:654(para)
+msgid ""
+"Multiple objects can be selected by first selecting the first object as "
+"above and then by holding the <keycap>Ctrl</keycap> key while selecting "
+"additional objects. Individual objects can be added to an existing selection "
+"at any time by holding the <keycap>Ctrl</keycap> key while selecting the "
+"desired objects. All objects can also be selected by using the "
+"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Select All</guimenuitem></"
+"menuchoice> menu item. All objects in an aggregate object selection will be "
+"highlighted."
+msgstr ""
+"Pour sélectionner plusieurs objets, commencez par cliquer sur l'un d'eux ; "
+"puis, en maintenant la touche <keycap>Ctrl</keycap> enfoncée, "
+"cliquez sur les autres. À tout moment, d'autres objets peuvent être rajoutés "
+"à la sélection de la même façon. Il est aussi possible de sélectionner tous "
+"les objets en même temps en choisissant <menuchoice><guimenu>Édition</"
+"guimenu><guimenuitem>Tout sélectionner</guimenuitem></menuchoice> dans le "
+"menu. Tous les objets groupés dans une même sélection apparaissent en "
+"surbrillance."
+
+#: C/glabels.xml:668(term)
+msgid "Area selections"
+msgstr "Sélection par zone"
+
+#: C/glabels.xml:670(para)
+msgid ""
+"Multiple objects can also be selected by clicking an empty area and dragging "
+"to form a rectangular area. When released, all objects contained in the area "
+"will form an aggregate selection. An area selection can be used to add to an "
+"existing selection by holding the <keycap>Ctrl</keycap> key while performing "
+"the selection."
+msgstr ""
+"Plusieurs objets peuvent aussi être sélectionnés avec la souris. Il suffit "
+"de cliquer sur un endroit vide et de faire glisser la souris en entourant les objets "
+"choisis. En relâchant, tous les objets présents dans ce rectangle font "
+"partie de la sélection. Une sélection par zone peut servir à ajouter des "
+"objets à une sélection existante en maintenant la touche <keycap>Ctrl</"
+"keycap> enfoncée pendant l'opération."
+
+#: C/glabels.xml:680(term)
+msgid "Unselecting objects"
+msgstr "Désélection d'objets"
+
+#: C/glabels.xml:682(para)
+msgid ""
+"Individual objects can be removed from an existing selection by holding the "
+"<keycap>Ctrl</keycap> key while clicking on a previously selected object. An "
+"entire selection can be dismissed by using the <menuchoice><guimenu>Edit</"
+"guimenu><guimenuitem>Un-select All</guimenuitem></menuchoice> menu item or "
+"by simply clicking any empty space in the display area. Once an object is "
+"unselected its highlight is removed."
+msgstr ""
+"Chaque objet peut être retiré d'une sélection existante en cliquant dessus "
+"tout en maintenant la touche <keycap>Ctrl</keycap> enfoncée. Une sélection "
+"entière peut être désactivée en choisissant <menuchoice><guimenu>Édition</"
+"guimenu><guimenuitem>Désélectionner tout</guimenuitem></menuchoice> dans le "
+"menu, ou plus simplement en cliquant dans un endroit vide de la zone "
+"d'affichage. Dès qu'un objet est désélectionné, il n'est plus en surbrillance."
+
+#: C/glabels.xml:699(title)
+msgid "Clipboard Commands"
+msgstr "Les commandes du presse-papiers"
+
+#: C/glabels.xml:701(para)
+msgid ""
+"Object selections can be manipulated using the standard clipboard operations "
+"<guimenuitem>Cut</guimenuitem>, <guimenuitem>Copy</guimenuitem>, "
+"<guimenuitem>Paste</guimenuitem>, and <guimenuitem>Delete</guimenuitem>."
+msgstr ""
+"Des sélections d'objets peuvent être manipulées avec les fonctions standards "
+"du presse-papiers : <guimenuitem>Couper</guimenuitem>, <guimenuitem>Copier</"
+"guimenuitem>, <guimenuitem>Coller</guimenuitem> et <guimenuitem>Supprimer</"
+"guimenuitem>."
+
+#: C/glabels.xml:712(keycap) C/glabels.xml:728(keycap)
+#: C/glabels.xml:744(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/glabels.xml:712(keycap)
+msgid "X"
+msgstr "X"
+
+#: C/glabels.xml:714(guimenuitem)
+msgid "Cut"
+msgstr "Couper"
+
+#: C/glabels.xml:718(para)
+msgid ""
+"Moves selected objects to the clipboard. The objects are then available for "
+"pasting back into the current document or another document."
+msgstr ""
+"Déplace les objets sélectionnés dans le presse-papiers. Ils sont alors "
+"disponibles pour être recollés dans le même document ou dans un autre."
+
+#: C/glabels.xml:728(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/glabels.xml:730(guimenuitem)
+msgid "Copy"
+msgstr "Copier"
+
+#: C/glabels.xml:734(para)
+msgid ""
+"Copies selected objects to the clipboard without deleting them. The objects "
+"are then available for pasting back into the current document or another "
+"document."
+msgstr ""
+"Crée une copie des objets sélectionnés dans le presse-papiers sans effacer "
+"les originaux. Ils sont alors disponibles pour être recollés dans le même "
+"document ou dans un autre."
+
+#: C/glabels.xml:744(keycap)
+msgid "V"
+msgstr "V"
+
+#: C/glabels.xml:746(guimenuitem)
+msgid "Paste"
+msgstr "Coller"
+
+#: C/glabels.xml:750(para)
+msgid ""
+"Pastes objects from the clipboard into the current document. "
+"<application>gLabels</application> can only paste objects from another "
+"<application>gLabels</application> document."
+msgstr ""
+"Colle des objets du presse-papiers dans le document actif. "
+"<application>gLabels</application> ne peut coller que des objets d'un autre "
+"document <application>gLabels</application>."
+
+#: C/glabels.xml:760(keycap) C/glabels.xml:762(guimenuitem)
+msgid "Delete"
+msgstr "Supprimer"
+
+#: C/glabels.xml:766(para)
+msgid "Deletes selected objects without placing them on the clipboard."
+msgstr ""
+"Supprime les objets sélectionnés sans les garder dans le presse-papiers."
+
+#: C/glabels.xml:777(title)
+msgid "To Edit Object Properties"
+msgstr "Édition des propriétés d'un objet"
+
+#: C/glabels.xml:779(para)
+msgid ""
+"Most object properties can be modified through the object editor sidebar, "
+"illustrated below. To use the object editor, a single object must first be "
+"selected. See <xref linkend=\"glabels-select-objects\"/>."
+msgstr ""
+"La plupart des propriétés d'un objet peuvent être modifiées avec l'éditeur "
+"d'objet présent dans le panneau latéral comme illustré ci-dessous. Pour que "
+"l'éditeur d'objet soit actif, il faut d'abord sélectionner un objet. Voir "
+"<xref linkend=\"glabels-select-objects\"/>."
+
+#: C/glabels.xml:786(title)
+msgid "Object Editor Sidebar"
+msgstr "Panneau latéral : éditeur d'objet"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:797(para)
+msgid ""
+"The object editor will contain a subset of the following tabbed sections, "
+"depending on object type:"
+msgstr ""
+"L'éditeur d'objet propose un sous-ensemble des onglets suivants, selon le "
+"type d'objet :"
+
+#: C/glabels.xml:801(title)
+msgid "Text Tabbed Section (Text objects)"
+msgstr "Onglet Texte (pour objets Texte)"
+
+#: C/glabels.xml:803(para)
+msgid ""
+"This section contains a small editor for changing the content of a text "
+"object. It also contains a dropdown menu of available document merge keys, "
+"that can be inserted into text."
+msgstr ""
+"Cet onglet contient un petit éditeur permettant de modifier le contenu d'un "
+"objet texte. Il contient aussi un menu déroulant indiquant les champs de "
+"fusion disponibles pouvant être insérés dans le texte."
+
+#: C/glabels.xml:810(title)
+msgid "Image Tabbed Section (Image objecs)"
+msgstr "Onglet Image (pour objets Image)"
+
+#: C/glabels.xml:812(para)
+msgid ""
+"This section contains a file entry with preview to select image files. The "
+"browse button can be used to easily locate image files. Alternatively, a "
+"document merge key can be used instead to provide a filename at print time."
+msgstr ""
+"Cet onglet contient une zone de sélection de fichier avec aperçu permettant "
+"de choisir des fichiers image. Le bouton peut être utilisé pour "
+"naviguer aisément parmi les fichiers image. On peut aussi indiquer un champ "
+"de fusion utilisable à la place du nom de fichier au moment de l'impression."
+
+#: C/glabels.xml:820(title)
+msgid "Data Tabbed Section (Barcode objecs)"
+msgstr "Onglet Code-barre (objets Code-barre)"
+
+#: C/glabels.xml:822(para)
+msgid ""
+"This section contains a text entry to enter literal barcode data. "
+"Alternatively, a document merge key can be used to provide this data at "
+"print time."
+msgstr ""
+"Cet onglet contient une zone de saisie de texte pour entrer la chaîne "
+"alphanumérique d'un code-barre. On peut aussi indiquer un "
+"champ de fusion qui fournira l'information au moment de l'impression."
+
+#: C/glabels.xml:829(title)
+msgid "Style Tabbed Section (Text objects)"
+msgstr "Onglet Style (objets Texte)"
+
+#: C/glabels.xml:831(para)
+msgid ""
+"This section contains controls to select text properties, including font "
+"family, font size, font weight, color, and text justification."
+msgstr ""
+"Cet onglet contient des éléments à renseigner pour choisir les propriétés du "
+"texte : famille, taille, style, couleur, alignement et espacement."
+
+#: C/glabels.xml:838(title)
+msgid "Style Tabbed Section (Barcode objecs)"
+msgstr "Onglet Style (objets Code-barre)"
+
+#: C/glabels.xml:840(para)
+msgid ""
+"This section contains controls to select barcode properties, including "
+"barcode style, color, whether to print text, and whether to include a "
+"checksum digit."
+msgstr ""
+"Cet onglet contient des éléments à renseigner pour choisir les propriétés du "
+"code-barre : le style, la couleur, et s'il faut y inclure ou non une "
+"somme de contrôle."
+
+#: C/glabels.xml:847(title)
+msgid "Line Tabbed Section"
+msgstr "Onglet Ligne"
+
+#: C/glabels.xml:849(para)
+msgid ""
+"This section contains controls to select properties of lines and outlines. "
+"These properties include line width and color."
+msgstr ""
+"Cet onglet contient deux éléments permettant de choisir les propriétés des "
+"lignes et des bordures : largeur et couleur."
+
+#: C/glabels.xml:855(title)
+msgid "Fill Tabbed Section"
+msgstr "Onglet Remplissage"
+
+#: C/glabels.xml:857(para)
+msgid ""
+"This section contains controls to select fill properties of box and ellipse "
+"objects. Currently the only fill property is fill color."
+msgstr ""
+"Cet onglet contient des éléments pour renseigner les propriétés de remplissage "
+"des objets boîte et ellipse. Pour l'instant, la couleur est la seule option "
+"de remplissage disponible."
+
+#: C/glabels.xml:864(title)
+msgid "Size Tabbed Section (All except line objects)"
+msgstr "Onglet Taille (tous objets, sauf Ligne)"
+
+#: C/glabels.xml:866(para)
+msgid ""
+"This section contains controls to select the width and height of an object. "
+"A checkbox is provided, so that the current aspect ratio can be locked while "
+"manipulating the width and height controls. Image objects also provide a "
+"button to reset the size to the image's natural size (Assumes 72DPI)."
+msgstr ""
+"Cet onglet contient deux éléments pour définir la largeur et la hauteur d'un "
+"objet. Il y a aussi une case à cocher pour figer le rapport largeur/"
+"hauteur pendant le redimensionnement de l'objet. Pour les objets Image, il y "
+"a en plus un bouton permettant de revenir aux dimensions d'origine (72 ppp "
+"par défaut)."
+
+#: C/glabels.xml:875(title)
+msgid "Size Tabbed Section (Line objects)"
+msgstr "Onglet Taille (objets ligne)"
+
+#: C/glabels.xml:877(para)
+msgid ""
+"This section contains controls to select the length and angle of a line "
+"object."
+msgstr ""
+"Cet onglet contient deux éléments pour renseigner la longueur et l'angle "
+"d'inclinaison d'un objet ligne."
+
+#: C/glabels.xml:883(title)
+msgid "Position Tabbed Section"
+msgstr "Onglet Position"
+
+#: C/glabels.xml:885(para)
+msgid "This section contains controls to change the position of an object."
+msgstr ""
+"Cet onglet contient des éléments permettant de modifier la position d'un objet."
+
+#: C/glabels.xml:892(title)
+msgid "Shadow Tabbed Section (All except image and barcode objects)"
+msgstr "Onglet Ombrage (tous objets, sauf Image et Code-barre)"
+
+#: C/glabels.xml:894(para)
+msgid "This section contains controls to add a shadow to an object."
+msgstr "Cet onglet contient les paramètres pour ajouter une ombre à un objet."
+
+#: C/glabels.xml:903(title)
+msgid "Other Manipulations of Objects"
+msgstr "Autres possibilités de manipulation d'un objet"
+
+#: C/glabels.xml:905(para)
+msgid "Objects can also be manipulated in the following ways."
+msgstr "Les objets peuvent aussi être manipulés des façons suivantes."
+
+#: C/glabels.xml:908(title)
+msgid "Moving and Resizing Objects"
+msgstr "Déplacement et redimensionnement des objets"
+
+#: C/glabels.xml:910(para)
+msgid ""
+"Objects can be moved by simply clicking on a selected object and dragging "
+"the object to its new location. If the object is part of an aggregate "
+"selection, all objects in the selection will move with the object being "
+"dragged, maintaining their relative positions to one another. If no object "
+"is selected, clicking on an object will create a new selection containing "
+"that object. See <xref linkend=\"glabels-select-objects\"/>."
+msgstr ""
+"Un objet peut être déplacé en cliquant dessus et en le faisant glisser à sa "
+"nouvelle place. Si cet objet fait partie d'une sélection groupée, "
+"tous les objets sélectionnés sont déplacés en même temps tout en gardant "
+"leurs positions relatives les uns par rapport aux autres. Si aucun objet "
+"n'est sélectionné, un clic sur un objet crée une nouvelle sélection "
+"contenant cet objet. Voir <xref linkend=\"glabels-select-objects\"/>."
+
+#: C/glabels.xml:918(para)
+msgid ""
+"A selected object can be resized by clicking one of its resize handle and "
+"dragging it to obtain the new size."
+msgstr ""
+"Un objet sélectionné peut être redimensionné en cliquant sur une de ses "
+"poignées et en la faisant glisser jusqu'à obtenir les dimensions souhaitées."
+
+#: C/glabels.xml:924(title)
+msgid "Changing Stacking Order"
+msgstr "Modification de l'ordre d'empilage"
+
+#: C/glabels.xml:926(para)
+msgid ""
+"Stacking order refers to relative position in the z-axis of objects. That is "
+"when objects overlap, which object will appear on top of the other. By "
+"default, newer objects will appear above older objects. To change this "
+"order, select one or more objects and choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Order</guimenuitem><guimenuitem>Bring to Front</"
+"guimenuitem></menuchoice> to raise the selection to the top of the stacking "
+"order, or choose <menuchoice><guimenu>Objects</guimenu><guimenuitem>Order</"
+"guimenuitem><guimenuitem>Send to Back</guimenuitem></menuchoice> to lower "
+"the selection to the bottom of the stacking order. These menuitems are also "
+"available by right-clicking the display area when there is a non-empty "
+"selection."
+msgstr ""
+"L'ordre d'empilage se réfère à la position relative d'un objet par rapport à "
+"l'axe Z, c'est-à-dire lorsque des objets se recouvrent, lequel apparaît au-"
+"dessus de l'autre. Par défaut, les plus récents sont affichés par-dessus les plus "
+"anciens. Pour modifier cet ordre, sélectionnez un ou plusieurs objets à "
+"déplacer et choisissez <menuchoice><guimenu>Objets</"
+"guimenu><guimenuitem>Ordre</guimenuitem><guimenuitem>Avancer au premier plan "
+"</guimenuitem></menuchoice> pour placer la sélection au-dessus de la pile, "
+"ou <menuchoice><guimenu>Objets</guimenu><guimenuitem>Ordre</"
+"guimenuitem><guimenuitem>Reculer à l'arrière-plan</guimenuitem></menuchoice> "
+"pour placer la sélection sous la pile. Ces commandes sont aussi accessibles "
+"par le menu contextuel (clic droit dans la zone d'affichage lorsqu'un élément "
+"au moins est sélectionné)."
+
+#: C/glabels.xml:944(title)
+msgid "Rotating and Flipping Objects"
+msgstr "Rotation et renversement des objets"
+
+#: C/glabels.xml:946(para)
+msgid ""
+"Objects can be rotated 90 degrees in either direction, or flipped "
+"horizontally or vertically, by choosing the appropriate menuitem in the "
+"<menuchoice><guimenu>Objects</guimenu><guimenuitem>Rotate/Flip</"
+"guimenuitem></menuchoice> sub-menu. These menuitems are also available by "
+"right-clicking the display area when there is a non-empty selection."
+msgstr ""
+"À partir du menu <menuchoice><guimenu>Objets</guimenu><guimenuitem>Rotation/"
+"Renversement</guimenuitem>, on accède à un sous-menu permettant de faire pivoter un "
+"objet de 90° dans n'importe quelle direction, ou de le renverser "
+"horizontalement ou verticalement. Ces commandes sont aussi accessibles par "
+"le menu contextuel (clic droit dans la zone d'affichage lorsqu'un élément "
+"au moins est sélectionné)."
+
+#: C/glabels.xml:956(title)
+msgid "Aligning Objects"
+msgstr "Alignement des objets"
+
+#: C/glabels.xml:958(para)
+msgid ""
+"Objects can be aligned horizontally or vertically, relative to one another, "
+"or relative to the center line of the label, by choosing the appropriate "
+"menuitem from the <menuchoice><guimenu>Objects</guimenu><guimenuitem>Align "
+"Horizontal</guimenuitem></menuchoice> or <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Align Horizontal</guimenuitem></menuchoice> sub-menus. "
+"These menuitems are also available by right-clicking the display area when "
+"there is a non-empty selection."
+msgstr ""
+"Des objets peuvent être alignés horizontalement ou verticalement les uns par "
+"rapport aux autres, ou par rapport à la ligne médiane de l'étiquette. Pour cela, "
+"choisissez l'option adéquate dans le menu <menuchoice><guimenu>Objets</"
+"guimenu><guimenuitem>Aligner horizontalement</guimenuitem></menuchoice> ou </"
+"guimenu><guimenuitem>Aligner verticalement</guimenuitem></menuchoice>. Ces "
+"commandes sont aussi accessibles par le menu contextuel (clic droit dans la "
+"zone d'affichage lorsqu'un élément au moins est sélectionné)."
+
+#: C/glabels.xml:971(title)
+msgid "Using the Property Bar"
+msgstr "Utilisation de la barre des propriétés"
+
+#: C/glabels.xml:973(para)
+msgid ""
+"The property bar can be used to change some common properties of objects en-"
+"masse. These properties include font family, font size, font weight, text "
+"alignment, text color, fill color, line or outline color, and line width. "
+"The property bar also controls the defaults for these properties for any "
+"newly created objects."
+msgstr ""
+"La barre des propriétés sert à modifier certaines options communes à un ensemble "
+"d'objets : famille de police, taille, gras, italique, alignement, couleur du "
+"texte, couleur de remplissage, couleur de ligne ou de bordure et épaisseur de "
+"ligne. La barre des propriétés est aussi utilisée pour définir les options "
+"appliquées par défaut à tout nouvel objet créé."
+
+#: C/glabels.xml:988(title)
+msgid "Performing a Document Merge"
+msgstr "Fusion de documents"
+
+#: C/glabels.xml:990(para)
+msgid ""
+"Document Merge (sometimes called \"Mail Merge\") is a powerful feature that "
+"allows a unique label or card to be printed for each record in an external "
+"data source."
+msgstr ""
+"La fusion de documents (aussi appelée « Publipostage ») est un outil "
+"performant qui, à partir d'une seule carte ou étiquette, est capable d'imprimer "
+"autant d'éléments que d'enregistrements présents dans un document source externe."
+
+#: C/glabels.xml:994(para)
+msgid ""
+"The first step to performing a document merge is to prepare a source "
+"document that contains your merge data. This data could be mailing addresses "
+"or any other data that you wish to create unique labels or cards for. "
+"Currently back-ends only exist for text files and the evolution data server "
+"-- others are planned. The currently supported text-file format is very "
+"simple: each line is a record; fields are delimited by commas (CSV), tabs, "
+"or colons; and newlines can be embedded into fields by using the \"\\n\" "
+"entity. This file could be created using any text editor or could be created "
+"by another program or script. A common way of creating CSV files is to "
+"export them from a spreadsheet program."
+msgstr ""
+"La première étape pour effectuer une fusion de documents est de créer un "
+"document source dans lequel figurent les informations de fusion. Celles-ci peuvent "
+"être des adresses postales (ou autres) pour lesquelles vous souhaitez "
+"imprimer une seule étiquette ou carte. Pour l'instant, les seules sources "
+"possibles sont des fichiers texte ou le carnet d'adresses d'Evolution "
+"(d'autres sont planifiées). Le format texte géré actuellement est très simple : chaque "
+"ligne est un enregistrement ; les champs sont séparés par des virgules "
+"(CSV), par des deux-points ou par des tabulations ; des sauts de lignes peuvent "
+"être contenus dans les champs en utilisant l'expression « \\n ». Ce fichier peut être créé avec "
+"n'importe quel éditeur de texte ou peut être généré par un autre programme "
+"ou script. L'usage, pour créer des fichiers CSV, est de les exporter depuis "
+"un tableur."
+
+#: C/glabels.xml:1006(para)
+msgid ""
+"A label must then be configured to \"point at\" this data file. To configure "
+"the merge properties of a document, choose <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>merge properties</guilabel> dialog. This dialog is "
+"used to select the exact data file format and file name (location) of the "
+"merge data."
+msgstr ""
+"Une étiquette doit ensuite être configurée pour « pointer » vers ce fichier "
+"source. Pour configurer les propriétés de fusion d'un document, choisissez "
+"<menuchoice><guimenu>Objets</guimenu><guimenuitem>Propriétés de "
+"fusion</guimenuitem></menuchoice> pour afficher la boîte de dialogue "
+"<guilabel>Propriétés de fusion</guilabel>. Cette boîte sert à définir "
+"exactement le format du fichier de données, ainsi que le nom et "
+"l'emplacement du fichier de données pour la fusion."
+
+#: C/glabels.xml:1014(para)
+msgid ""
+"Finally, once the label has been configured for a data file, field keys can "
+"be inserted into text objects and used as source or data for barcode objects "
+"and image filenames for image objects. See <xref linkend=\"glabels-object-"
+"properties\"/> for more information on using merge data for these object "
+"types."
+msgstr ""
+"Pour finir, lorsque l'étiquette a été configurée pour un fichier de données, "
+"des champs peuvent être insérés dans les objets texte et utilisés comme "
+"source de données pour les objets code-barre, et dans les noms de fichiers "
+"image pour les objets image. Consultez <xref linkend=\"glabels-object-properties\"/"
+"> pour de plus amples informations sur l'utilisation des données fusionnées "
+"pour ces types d'objets."
+
+#: C/glabels.xml:1020(para)
+msgid ""
+"Now that your label is configured, <application>gLabels</application> will "
+"print a unique label for each record in your source document -- substituting "
+"fields from each record for field keys in the all text, barcode, and image "
+"objects."
+msgstr ""
+"Lorsque l'étiquette est configurée, <application>gLabels</application> en "
+"imprime une pour chaque enregistrement (ligne) des données du document source, "
+"en remplaçant les champs définis dans les différents objets texte, code-barre "
+"et image par les champs de chaque enregistrement."
+
+#: C/glabels.xml:1025(para)
+msgid ""
+"See <xref linkend=\"glabels-merge-tutorial\"/> for a detailed tutorial on "
+"the document merge feature."
+msgstr ""
+"Consultez <xref linkend=\"glabels-merge-tutorial\"/> pour un guide détaillé sur "
+"les possibilités du publipostage."
+
+#: C/glabels.xml:1040(title)
+msgid "Settings"
+msgstr "Paramètres"
+
+#: C/glabels.xml:1041(para)
+msgid ""
+"To configure <application>gLabels</application>, choose "
+"<menuchoice><guimenu>Settings</guimenu><guimenuitem>Preferences</"
+"guimenuitem></menuchoice>. The <guilabel>Preferences</guilabel> dialog "
+"contains the following tabbed sections:"
+msgstr ""
+"Pour configurer <application>gLabels</application>, allez dans le menu "
+"<menuchoice><guimenu>Édition</guimenu><guimenuitem>Préférences</"
+"guimenuitem></menuchoice>. La boîte de dialogue <guilabel>Préférences</"
+"guilabel> contient les onglets suivants :"
+
+#: C/glabels.xml:1062(title)
+msgid "Locale"
+msgstr "Localisation"
+
+#: C/glabels.xml:1066(guilabel)
+msgid "Units"
+msgstr "Unités"
+
+#: C/glabels.xml:1068(para)
+msgid ""
+"Use this radio button group to specify your preferred units. Select one of "
+"the following options:"
+msgstr ""
+"Ce groupe de boutons radio permet d'indiquer vos unités de mesure préférées. "
+"Cochez l'une des options suivantes :"
+
+#: C/glabels.xml:1073(guilabel)
+msgid "Points"
+msgstr "Points"
+
+#: C/glabels.xml:1074(para)
+msgid "Use points (1 point = 1/72 in = 0.352778 mm)."
+msgstr "Utilise le point (1 point = 1/72ème de pouce = 0,352778 mm)."
+
+#: C/glabels.xml:1078(guilabel)
+msgid "Inches"
+msgstr "Pouces"
+
+#: C/glabels.xml:1079(para)
+msgid "Use inches."
+msgstr "Utilise les pouces."
+
+#: C/glabels.xml:1083(guilabel)
+msgid "Millimeters"
+msgstr "Millimètres"
+
+#: C/glabels.xml:1084(para)
+msgid "Use millimeters."
+msgstr "Utilise les millimètres."
+
+#: C/glabels.xml:1087(para)
+msgid "Default: <guilabel>Inches</guilabel>."
+msgstr "Unité par défaut : <guilabel>Pouces</guilabel>."
+
+#: C/glabels.xml:1093(guilabel)
+msgid "Default page size"
+msgstr "Taille de page par défaut"
+
+#: C/glabels.xml:1095(para)
+msgid ""
+"Use this radio button group to specify your preferred page size. This will "
+"make it quicker for you to locate media types when creating a new label or "
+"card."
+msgstr ""
+"Ce groupe de boutons radio permet d'indiquer votre format de page préféré. "
+"Ceci vous aide à trouver plus rapidement un type de support lors de la création "
+"d'une nouvelle étiquette ou carte."
+
+#: C/glabels.xml:1101(guilabel)
+msgid "US Letter"
+msgstr "Letter US"
+
+#: C/glabels.xml:1102(para)
+msgid ""
+"Most of your media will be of the US Letter page size (8.5 x 11 inches)."
+msgstr ""
+"La plupart de vos supports seront au format Letter US (8.5 x 11 pouces)."
+
+#: C/glabels.xml:1106(guilabel)
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: C/glabels.xml:1107(para)
+msgid "Most of your media will be of the ISO A4 page size (210 x 297 mm)."
+msgstr "La plupart de vos supports seront au format ISO A4 (210 x 297 mm)."
+
+#: C/glabels.xml:1110(para)
+msgid "Default: <guilabel>US Letter</guilabel>."
+msgstr "Support par défaut : <guilabel>Letter US</guilabel>."
+
+#: C/glabels.xml:1119(title)
+msgid "Object defaults"
+msgstr "Paramètres par défaut pour les objets"
+
+#: C/glabels.xml:1125(para)
+msgid ""
+"Use these controls to set the default properties of new text objects. These "
+"properties are"
+msgstr ""
+"Utilisez ces différents contrôles pour définir les paramètres par défaut des "
+"nouveaux objets texte :"
+
+#: C/glabels.xml:1130(guilabel)
+msgid "Font"
+msgstr "Police"
+
+#: C/glabels.xml:1131(para)
+msgid ""
+"These controls are used to select font family and font size, and whether the "
+"font should bold or in italics."
+msgstr ""
+"Permet de sélectionner la famille de police et sa taille, et si elle doit être en gras "
+"ou en italique."
+
+#: C/glabels.xml:1136(guilabel) C/glabels.xml:1161(guilabel)
+#: C/glabels.xml:1176(guilabel)
+msgid "Color"
+msgstr "Couleur"
+
+#: C/glabels.xml:1137(para)
+msgid "This control selects the default text color."
+msgstr "Définit la couleur par défaut du texte."
+
+#: C/glabels.xml:1141(guilabel)
+msgid "Alignment"
+msgstr "Alignement"
+
+#: C/glabels.xml:1142(para)
+msgid ""
+"These controls are used to select the default text alignment (left, center "
+"or right)."
+msgstr ""
+"Définit l'alignement par défaut du texte : à gauche, centré ou à droite."
+
+#: C/glabels.xml:1151(para)
+msgid ""
+"Use these controls to set the default properties of lines and outlines of "
+"new objects. These properties are"
+msgstr ""
+"Définit les propriétés par défaut des lignes et bordures des nouveaux objets. "
+"Ces propriétés sont :"
+
+#: C/glabels.xml:1156(guilabel)
+msgid "Width"
+msgstr "Largeur"
+
+#: C/glabels.xml:1157(para)
+msgid "This control selects the default line width."
+msgstr "Définit l'épaisseur par défaut des lignes."
+
+#: C/glabels.xml:1162(para)
+msgid "This control selects the default line color."
+msgstr "Définit la couleur par défaut des lignes."
+
+#: C/glabels.xml:1169(guilabel)
+msgid "Fill"
+msgstr "Remplissage"
+
+#: C/glabels.xml:1171(para)
+msgid ""
+"Use these controls to set the default fill properties of new objects. These "
+"properties are"
+msgstr ""
+"Définit la couleur de remplissage par défaut des nouveaux objets. Ces "
+"propriétés sont :"
+
+#: C/glabels.xml:1177(para)
+msgid "This control selects the default fill color."
+msgstr "Définit la couleur de remplissage par défaut."
+
+#: C/glabels.xml:1191(title)
+msgid "Document Merge Tutorial"
+msgstr "Guide du publipostage"
+
+#: C/glabels.xml:1193(para)
+msgid ""
+"Document Merge (sometimes called \"Mail Merge\") is a powerful feature that "
+"allows a unique label or card to be printed for each record in an external "
+"data source. It is however, the most mis-understood feature of "
+"<application>gLabels</application>. The following examples will step through "
+"a couple of common tasks using the document merge feature."
+msgstr ""
+"La fusion de documents (aussi appelée « Publipostage ») est une fonction "
+"puissante permettant d'imprimer une étiquette ou carte pour chaque "
+"enregistrement d'une source extérieure. Elle est cependant la fonction la "
+"plus méconnue de <application>gLabels</application>. Les exemples suivants "
+"vont détailler quelques tâches usuelles utilisant la fonction de "
+"publipostage."
+
+#: C/glabels.xml:1201(title)
+msgid "Example 1: Name Tags Using a CSV File"
+msgstr ""
+"Exemple 1 : création de badges en utilisant un fichier CSV"
+
+#: C/glabels.xml:1203(para)
+msgid ""
+"In this example we are organizing an orientation party for the new crew "
+"members of our ship. We have a list of freshman crew members that we created "
+"in <application>gnumeric</application> and exported as the following CSV "
+"file. We could have created this file by using a text editor, but heck it is "
+"the 23rd century."
+msgstr ""
+"Dans cet exemple, nous organisons une session d'orientation pour les "
+"nouveaux membres d'équipage de notre navire. Nous disposons d'une liste de "
+"nouvelles recrues créée avec <application>gnumeric</application> et exportée "
+"sous la forme du fichier CSV ci-après. Nous aurions pu créer ce fichier avec "
+"n'importe quel éditeur de texte, mais bon, nous sommes au 23ème siècle."
+
+#: C/glabels.xml:1209(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"Name,Department,SN\n"
+"\"Jim Kirk\",Management,\"SC937-0176 CEC\"\n"
+"\"Mr. Spock\",Sciences,S179-276SP\n"
+"\"Leonard McCoy\",Medicine,unknown\n"
+"\"Montgomery Scott\",Engineering,SE-197-54T\n"
+"      "
+msgstr ""
+"\n"
+"Nom,Département,Matricule\n"
+"\"Jim Kirk\",Direction,\"SC937-0176 CEC\"\n"
+"\"Mr. Spock\",Sciences,S179-276SP\n"
+"\"Léonard McCoy\",Médecine,Inconnu\n"
+"\"Montgomery Scott\",Ingénierie,SE-197-54T\n"
+"      "
+
+#: C/glabels.xml:1217(para)
+msgid ""
+"In <application>gLabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5395 \"Name "
+"Badge Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>merge properties</guilabel> dialog. We use this "
+"dialog to select the source type (in our case CSV) and the merge source "
+"(filename) as shown."
+msgstr ""
+"Dans <application>gLabels</application>, nous avons créé un nouveau document "
+"<application>gLabels</application> utilisant le patron AVERY 5395 « Étiquettes "
+"pour badges ». Ensuite, nous ouvrons la boîte de dialogue "
+"<guilabel>Propriétés de fusion</guilabel> du menu "
+"<menuchoice><guimenu>Objets</guimenu></menuchoice> pour afficher les options "
+"de fusion. Ceci nous permet de choisir le type de source (dans "
+"notre cas, « Texte séparé par des virgules ») et son emplacement (nom de "
+"fichier) comme sur la figure suivante :"
+
+#: C/glabels.xml:1227(title) C/glabels.xml:1344(title)
+#: C/glabels.xml:1460(title)
+msgid "Merge properties dialog"
+msgstr "Boîte de dialogue Propriétés de fusion"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1238(para)
+msgid ""
+"Before applying the merge source, we uncheck the first record since it is "
+"only column headers from our original <application>gnumeric</application> "
+"spreadsheet and would simply waste our first label. We could also unselect "
+"any other records that we didn't want to print a label for."
+msgstr ""
+"Avant d'effectuer la fusion, nous allons décocher la première ligne, car "
+"c'est l'en-tête de notre document <application>gnumeric</application> "
+"original, et l'imprimer ne ferait que gaspiller notre première étiquette. On "
+"pourrait de la même façon désélectionner d'autres enregistrements non "
+"désirés."
+
+#: C/glabels.xml:1243(para) C/glabels.xml:1361(para)
+msgid ""
+"We can also view each record in more detail by clicking on the appropriate "
+"expander (the little triangles) as shown. Once we are satisfied with the "
+"selections in this dialog we click <guibutton>OK</guibutton> to accept the "
+"changes."
+msgstr ""
+"On peut aussi agrandir chaque enregistrement en cliquant sur le petit "
+"triangle correspondant (voir figure). Une fois satisfait des choix effectués "
+"dans cette boîte de dialogue, cliquez sur <guibutton>Valider</guibutton> pour "
+"valider les modifications."
+
+#: C/glabels.xml:1248(para) C/glabels.xml:1366(para)
+msgid ""
+"Now we start adding objects to our <application>gLabels</application> "
+"document as shown."
+msgstr ""
+"Nous allons maintenant ajouter des objets à notre document "
+"<application>gLabels</application> comme ceci :"
+
+#: C/glabels.xml:1252(title) C/glabels.xml:1370(title)
+#: C/glabels.xml:1488(title)
+msgid "Adding objects"
+msgstr "Ajout d'objets"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1263(para)
+msgid ""
+"In this example we have added three text objects and a barcode object. The "
+"first text object contains only simple literal text (\"Hello, my name is\"). "
+"The second text object contains a single merge field (\"${1}\") "
+"corresponding to the first field of a record (first column of a line) which "
+"contains the new crew member's full name. The third text field contains both "
+"literal text (\"Department: \") followed by a single merge field (\"${2}\") "
+"corresponding to the second field or the crew member's department. The "
+"barcode object is configured to use field (or key) \"3\" which contains our "
+"crew member's starfleet serial number."
+msgstr ""
+"Dans cet exemple, nous avons ajouté trois objets Texte, et un objet Code-"
+"barre. Le premier objet Texte ne contient que du texte (« Bonjour, je "
+"m'appelle ». Le second objet Texte contient un seul champ de fusion (« ${1} ») "
+"correspondant au premier champ d'un enregistrement (première colonne d'une "
+"ligne) donnant ici le nom complet du membre d'équipage. Le troisième contient "
+"du texte (« Département ») suivi d'un seul champ de fusion (« ${2} ») "
+"correspondant au département d'appartenance du membre d'équipage. L'objet "
+"Code-barre est configuré pour recevoir le champ (ou clé) « 3 » contenant le "
+"numéro matricule du membre d'équipage."
+
+#: C/glabels.xml:1273(para)
+msgid ""
+"Now we can print our name tags by selecting the <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu item. This will "
+"display print dialog as shown below."
+msgstr ""
+"On peut maintenant lancer l'impression de nos badges en choisissant "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Imprimer</guimenuitem></"
+"menuchoice> à partir du menu. La boîte de dialogue ci-dessous apparaît."
+
+#: C/glabels.xml:1280(title)
+msgid "Printing name tags"
+msgstr "Impression de badges nominatifs"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1291(para) C/glabels.xml:1406(para) C/glabels.xml:1520(para)
+msgid ""
+"Just to make sure our labels are going to look okay, we select the "
+"<guilabel>Print outlines</guilabel> option and click <guibutton>Print "
+"Preview</guibutton>. This will display a print preview dialog as shown below."
+msgstr ""
+"Afin de s'assurer que nos badges ressembleront à ce que nous voulons, nous "
+"activons l'option <guilabel>Imprimer des bordures</guilabel> et nous cliquons "
+"sur <guibutton>Aperçu avant impression</guibutton>. Une fenêtre d'aperçu "
+"apparaît, comme ci-dessous."
+
+#: C/glabels.xml:1298(title)
+msgid "Name tags preview"
+msgstr "Aperçu des badges nominatifs"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1309(para)
+msgid ""
+"Everything looks good, so we can now load up our printer with the "
+"appropriate label stock, print our name tags and start beaming our guests "
+"aboard."
+msgstr ""
+"Tout semble parfait, nous pouvons maintenant charger le "
+"stock d'étiquettes adéquates dans l'imprimante, imprimer nos badges et commencer à faire "
+"monter nos invités à bord."
+
+#: C/glabels.xml:1316(title)
+msgid "Example 2: Address Labels Using a CSV File"
+msgstr "Exemple 2 : étiquettes adresses à partir d'un fichier CSV"
+
+#: C/glabels.xml:1318(para)
+msgid ""
+"In this example we are going to throw a party and need to print mailing "
+"address labels for our invitations. We have a list of our closest friends "
+"that we created in <application>gnumeric</application> and exported as the "
+"following CSV file. It should be noted that not everyone has a middle "
+"initial or a two line address."
+msgstr ""
+"Dans cet exemple, nous allons organiser une soirée et nous avons besoin "
+"d'imprimer des étiquettes pour lancer nos invitations. Nous avons une liste "
+"de nos amis les plus proches, créée à partir de <application>gnumeric</"
+"application> et exportée dans le fichier CSV ci-après. Il faut tenir compte "
+"du fait que tout le monde n'a pas une initiale centrale, ni une adresse à "
+"deux lignes."
+
+#: C/glabels.xml:1324(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"LAST,FIRST,MI,ADDR1,ADDR2,CITY,STATE,ZIP\n"
+",,,,,,,\n"
+"Critter,Ess,S,\"123 Faux St.\",,Alexandria,VA,22310\n"
+"Doe,John,,\"Apt 1X\",\"451 Mystery St.\",Trenton,NJ,08601\n"
+"Summers,Joyce,,\"1630 Revello Dr\",,Sunnydale,CA,95037\n"
+"McGarret,Steve,O,\"404 Piikoi Street\",,Honolulu,HI,96813\n"
+"Kramer,Cosmo,,\"Apt 5B\",\"129 W. 81 St.\",\"New York\",NY,10024-7207\n"
+"      "
+msgstr ""
+"\n"
+"NOM,PRÉNOM,INITIALE,ADRESSE1,ADRESSE2,VILLE,ÉTAT,CODE POSTAL\n"
+",,,,,,,\n"
+"Critter,Ess,S,\"123 Faux St.\",,Alexandria,VA,22310\n"
+"Doe,John,,\"Apt 1X\",\"451 Mystery St.\",Trenton,NJ,08601\n"
+"Summers,Joyce,,\"1630 Revello Dr\",,Sunnydale,CA,95037\n"
+"McGarret,Steve,O,\"404 Piikoi Street\",,Honolulu,HI,96813\n"
+"Kramer,Cosmo,,\"Apt 5B\",\"129 W. 81 St.\",\"New York\",NY,10024-7207\n"
+"      "
+
+#: C/glabels.xml:1334(para)
+msgid ""
+"In <application>gLabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5512 \"Address "
+"Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>merge properties</guilabel> dialog. We use this "
+"dialog to select the source type (in our case CSV) and the merge source "
+"(filename) as shown."
+msgstr ""
+"Dans <application>gLabels</application>, nous avons créé un nouveau document "
+"<application>gLabels</application> utilisant le patron « Étiquettes "
+"adresses » AVERY 5512. Puis, à partir du menu <menuchoice><guimenu>Objets</"
+"guimenu><guimenuitem>Propriétés de fusion</guimenuitem></menuchoice> pour "
+"afficher la boîte <guilabel>Propriétés de fusion</guilabel>, nous "
+"sélectionnons le type de source (ici CSV), ainsi que son emplacement (nom de "
+"fichier) comme sur la figure ci-dessous."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1355(para)
+msgid ""
+"Before applying the merge source, we uncheck the first record since it is "
+"only column headers from our original <application>gnumeric</application> "
+"spreadsheet and would simply waste our first label. We also unselect the "
+"second record which is empty (an artifact of our original spreadsheet). We "
+"could also unselect any other records that we didn't want to print a label "
+"for."
+msgstr ""
+"Avant d'effectuer la fusion, nous allons décocher la première ligne, car "
+"c'est l'en-tête de notre document <application>gnumeric</application> "
+"original, et l'imprimer ne ferait que gaspiller notre première étiquette."
+"Nous désélectionnons aussi le deuxième enregistrement qui est vide (un "
+"artifice de notre fichier original). On pourrait de la même façon "
+"désélectionner d'autres enregistrements non désirés."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1381(para)
+msgid ""
+"In this example we have a single text object. This text object contains all "
+"of our merge fields organized on multiple lines as a mailing address. Notice "
+"that fields ${4} and ${5} (corresponding to ADDR1 and ADDR2) are each "
+"located with no other text on their own lines. When <application>gLabels</"
+"application> encounters a field as the only text on a line, it will not "
+"expand the line if the field is empty."
+msgstr ""
+"Dans cet exemple, nous avons un seul objet Texte. Celui-ci contient tous nos "
+"champs fusionnés et présents sous forme de plusieurs lignes représentant des "
+"adresses postales. Veuillez noter que les champs ${4} et ${5} "
+"(correspondants à ADRESSE1 et ADRESSE2) sont respectivement listés sans "
+"aucune autre mention sur leur ligne. Lorsque <application>gLabels</"
+"application> rencontre ce type de champ, il ne génère pas la ligne si "
+"celle-ci est vide."
+
+#: C/glabels.xml:1388(para)
+msgid ""
+"Now we can print our address labels by selecting the "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></"
+"menuchoice> menu item. This will display print dialog as shown below."
+msgstr ""
+"Nous pouvons maintenant imprimer nos étiquettes d'adresses avec le menu "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Imprimer</guimenuitem></"
+"menuchoice>. Cette commande ouvre la boîte de dialogue ci-dessous."
+
+#: C/glabels.xml:1395(title) C/glabels.xml:1509(title)
+msgid "Printing address labels"
+msgstr "Impression des étiquettes d'adresses"
+
+#: C/glabels.xml:1413(title) C/glabels.xml:1527(title)
+msgid "Address labels preview"
+msgstr "Aperçu des étiquettes d'adresses"
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1424(para) C/glabels.xml:1538(para)
+msgid ""
+"Everything looks good, so we can now load up our printer with the "
+"appropriate label stock, print our address labels and start mailing our "
+"party invitations."
+msgstr ""
+"Tout semble parfait, nous pouvons maintenant charger le stock d'étiquettes "
+"adéquates dans l'imprimante, imprimer les adresses et envoyer les "
+"invitations pour notre soirée."
+
+#: C/glabels.xml:1431(title)
+msgid ""
+"Example 3: Address Labels Using the <application>Evolution</application> "
+"Addressbook"
+msgstr ""
+"Exemple 3 : étiquettes adresses à partir du carnet d'adresses d'"
+"<application>Evolution</application> "
+
+#: C/glabels.xml:1433(para)
+msgid ""
+"Our last party was a great success, and now we need to print mailing address "
+"labels for the invitations to a new one. To simplify this, we can use the "
+"<application>Evolution</application> addressbook, because the address data "
+"of all our friends is stored there."
+msgstr ""
+"Notre précédente soirée fut un grand succès, et nous voulons maintenant "
+"imprimer d'autres adresses pour en organiser une autre. Pour simplifier "
+"l'opération, nous allons utiliser le carnet d'adresses d'"
+"<application>Evolution</application>, car les coordonnées de tous nos amis y "
+"figurent."
+
+#: C/glabels.xml:1439(para)
+msgid ""
+"Depending on how your copy of <application>gLabels</application> was "
+"packaged, this option could be unavailable. Support for the "
+"<application>Evolution</application> addressbook will only be available if "
+"the <application>evolution-data-server</application> and its development "
+"files were present when <application>gLabels</application> was built. Please "
+"keep this in mind if you build <application>gLabels</application> directly "
+"from source."
+msgstr ""
+"Selon la distribution que vous utilisez, votre copie de "
+"<application>gLabels</application> peut ne pas inclure cette option. "
+"L'utilisation du carnet d'adresses d'<application>Evolution</application> "
+"n'est disponible que si le composant <application>evolution-data-server</"
+"application> et ses fichiers de développement étaient présents lors de la "
+"compilation de <application>gLabels</application>. Veuillez garder cela à "
+"l'esprit si vous compilez <application>gLabels</application> directement "
+"à partir des sources du programme."
+
+#: C/glabels.xml:1445(para)
+msgid ""
+"If the <application>gLabels</application> package from your distribution "
+"lacks this support, you may wish to contact the package maintainer or file a "
+"bug against the package to request it."
+msgstr ""
+"Si le paquet <application>gLabels</application> de votre distribution ne "
+"comporte pas cette option, vous pouvez essayer de contacter le responsable du "
+"paquet ou envoyer un rapport d'anomalie pour demander l'ajout de cette fonctionnalité."
+
+#: C/glabels.xml:1450(para)
+msgid ""
+"In <application>glabels</application> we have created a new "
+"<application>gLabels</application> document using the Avery 5512 \"Address "
+"Labels\" template. Next we use the <menuchoice><guimenu>Objects</"
+"guimenu><guimenuitem>Merge Properties</guimenuitem></menuchoice> menu item "
+"to display the <guilabel>Merge properties</guilabel> dialog. We use this "
+"dialog to select the source type (in our case <guilabel>Data from default "
+"Evolution addressbook</guilabel>) as shown."
+msgstr ""
+"Dans <application>gLabels</application>, nous avons créé un nouveau document "
+"avec le patron « Étiquettes adresses » AVERY 5512. Puis, à partir du menu "
+"<menuchoice><guimenu>Objets</guimenu><guimenuitem>Propriétés de fusion</"
+"guimenuitem></menuchoice> pour afficher la boîte de dialogue "
+"<guilabel>Propriétés de fusion</guilabel>, nous sélectionnons le type de "
+"source (ici <guilabel>Données du carnet d'adresses Evolution par défaut</"
+"guilabel>) comme ci-dessous."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1471(para)
+msgid ""
+"Once we have chosen <guilabel>Data from default Evolution addressbook </"
+"guilabel> as our merge source, we will get a full list of its content. "
+"Initially, all entries are checked. Assuming we were planning a really big "
+"party, we could leave this selection untouched (but let's keep our budget in "
+"mind). We will now select or unselect certain entries by clicking on the "
+"appropriate checkboxes, or we could use the <guibutton>Select all</"
+"guibutton> and <guibutton>Unselect all </guibutton> buttons to activate or "
+"deactivate all entries in the address book."
+msgstr ""
+"Après avoir choisi <guilabel>Données du carnet d'adresses Evolution par défaut"
+"</guilabel> comme source à fusionner, nous obtenons une liste complète de "
+"son contenu. Par défaut, toutes les adresses sont cochées. Nous pourrions "
+"organiser une soirée géante en laissant cette sélection telle quelle. Mais "
+"il vaut mieux tenir compte de notre budget. Nous allons donc choisir en "
+"décochant certaines adresses par un clic dans les cases correspondantes ou "
+"en utilisant le bouton <guibutton>Sélectionner tout</guibutton> ou "
+"<guibutton>Désélectionner tout</guibutton> pour activer ou désactiver "
+"toutes les adresses du carnet."
+
+#: C/glabels.xml:1479(para)
+msgid ""
+"We can also view each entry in more detail by clicking on the appropriate "
+"expander (the little triangles) as shown. Once we are satisfied with the "
+"selections in this dialog, we will click the <guibutton>OK</guibutton> "
+"button to accept the changes."
+msgstr ""
+"On peut aussi agrandir chaque enregistrement en cliquant sur le petit "
+"triangle correspondant (voir figure). Une fois satisfait des choix effectués "
+"dans cette boîte de dialogue, cliquez sur <guibutton>Valider</guibutton> pour "
+"valider les modifications."
+
+#: C/glabels.xml:1484(para)
+msgid "Now we start adding objects to our glabels document as shown."
+msgstr ""
+"Nous allons maintenant ajouter des objets à notre document gLabels comme ci-"
+"dessous."
+
+#. ==== End of Figure ====
+#: C/glabels.xml:1499(para)
+msgid ""
+"In this example we have a single text object again. This text object "
+"contains all of our merge fields organized on multiple lines as a mailing "
+"address."
+msgstr ""
+"Dans cet exemple, nous avons à nouveau un seul objet texte contenant tous "
+"nos champs fusionnés et disposés sur plusieurs lignes sous forme d'adresses "
+"postales."
+
+#: C/glabels.xml:1502(para)
+msgid ""
+"Now we can print our address labels by selecting the "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></"
+"menuchoice> menu item. This will display the print dialog as shown below."
+msgstr ""
+"Nous pouvons maintenant imprimer les adresses à partir du menu "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Imprimer</guimenuitem> et "
+"de la boîte de dialogue ci-dessous."
+
+#: C/glabels.xml:1551(title)
+msgid "Manually Creating New Templates"
+msgstr "Création manuelle de nouveaux patrons"
+
+#: C/glabels.xml:1553(para)
+msgid ""
+"Predefined templates are defined by XML files located in <filename>${prefix}/"
+"share/glabels/</filename>, where <filename>${prefix}</filename> is usually "
+"something like <filename>/usr/local</filename> or <filename>/usr</filename> "
+"depending on the configuration option <filename>prefix</filename>. "
+"<application>gLabels</application> will use all files of the form "
+"<filename>*-templates.xml</filename> or <filename>*.template</filename>, "
+"that it finds in <filename>${prefix}/share/glabels/</filename> and <filename>"
+"${HOME}/.glabels/</filename>. Additional templates can be added by creating "
+"additional <filename>*.template</filename> files in either of these "
+"directories."
+msgstr ""
+"Des modèles de patrons sont présents sous la forme de fichiers XML dans "
+"<filename>${préfixe}/share/glabels/</filename>, où <filename>${préfixe}</"
+"filename> correspond généralement à <filename>/usr/local</filename> ou à "
+"<filename>/usr</filename> selon l'option de configuration de "
+"<filename>prefix</filename>. <application>gLabels</application> "
+"utilise tout fichier de la forme <filename>*-templates.xml</filename> ou "
+"<filename>*.template</filename> qu'il trouve dans <filename>${préfixe}/"
+"share/glabels/</filename> et <filename>${HOME}/.glabels/</filename>. "
+"D'autres patrons peuvent être ajoutés en créant des fichiers <filename>*."
+"template</filename> dans l'un ou l'autre de ces répertoires."
+
+#: C/glabels.xml:1566(para)
+msgid ""
+"The format for these files is defined in the DTD: <ulink url=\"http://"
+"glabels.sourceforge.net/doc/glabels-2.0.dtd.txt\" type=\"http\">glabels-2.2."
+"dtd</ulink>. (This DTD also describes other XML formats used by "
+"<application>gLabels</application>.)"
+msgstr ""
+"Le format de ces fichiers est décrit dans le document DTD suivant : <ulink "
+"url=\"http://glabels.sourceforge.net/doc/glabels-2.0.dtd.txt\" type=\"http"
+"\">glabels-2.2.dtd</ulink> (ce document DTD décrit aussi d'autres "
+"formats XML utilisés par <application>gLabels</application>)."
+
+#: C/glabels.xml:1572(title)
+msgid "Assumptions/caveats"
+msgstr "Règles générales"
+
+#: C/glabels.xml:1575(para)
+msgid ""
+"A sheet contains only one size of label or card (if a sheet contains more "
+"than one size of item, it can be split into multiple templates for multiple "
+"pass printing)"
+msgstr ""
+"Une page ne contient qu'un seul format d'étiquette ou de carte (s'il y en a "
+"plusieurs, il faut la diviser en plusieurs patrons et faire autant de passes "
+"d'impression)."
+
+#: C/glabels.xml:1580(para)
+msgid ""
+"Distances can be expressed in units of <emphasis>pt</emphasis>, "
+"<emphasis>in</emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis>, "
+"or <emphasis>pc</emphasis>. For example: \"<literal>1.0in</literal>\" or "
+"\"<literal>2.54cm</literal>\". If no units are specified, computer points "
+"(<emphasis>pt</emphasis>) will be assumed (1 <emphasis>pt</emphasis> = 1/72 "
+"<emphasis>in</emphasis> = 0.352778 <emphasis>mm</emphasis>)."
+msgstr ""
+"Les mesures de distance peuvent être exprimées en <emphasis>pt</emphasis>, "
+"<emphasis>in</emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis> "
+"ou <emphasis>pc</emphasis>. Par exemple : « <literal>1.0in</literal> » ou "
+"« <literal>2.54cm</literal> ». Si aucune unité n'est indiquée, c'est le "
+"point (<emphasis>pt</emphasis>) qui est utilisé par défaut : 1 <emphasis>pt</"
+"emphasis> = 1/72ème <emphasis>de pouce</emphasis> = 0,352778 <emphasis>mm</"
+"emphasis>."
+
+#: C/glabels.xml:1593(title)
+msgid "Template Files"
+msgstr "Fichiers patron"
+
+#: C/glabels.xml:1595(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"&lt;?xml version=\"1.0\"?&gt;\n"
+"&lt;Glabels-templates&gt;\n"
+"\n"
+"   <replaceable>...templates...</replaceable>\n"
+"\n"
+"&lt;/Glabels-templates&gt;\n"
+"      "
+msgstr ""
+"\n"
+"&lt;?xml version=\"1.0\"?&gt;\n"
+"&lt;Glabels-templates&gt;\n"
+"\n"
+"   <replaceable>...patrons...</replaceable>\n"
+"\n"
+"&lt;/Glabels-templates&gt;\n"
+"      "
+
+#: C/glabels.xml:1607(title)
+msgid "Example Template"
+msgstr "Exemple de patron"
+
+#: C/glabels.xml:1608(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"  &lt;Template brand=\"Avery\" part=\"8160\" size=\"US-Letter\" description=\"Mailing Labels\"&gt;\n"
+"    &lt;Label-rectangle id=\"0\" width=\"189pt\" height=\"72pt\" round=\"5pt\"&gt;\n"
+"      &lt;Markup-margin size=\"5pt\"/&gt;\n"
+"      &lt;Layout nx=\"3\" ny=\"10\" x0=\"11.25pt\" y0=\"36pt\" dx=\"200pt\" dy=\"72pt\"/&gt;\n"
+"    &lt;/Label-rectangle&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"5160\"/&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"6233\"/&gt;\n"
+"  &lt;/Template&gt;\n"
+"      "
+msgstr ""
+"\n"
+"  &lt;Template brand=\"Avery\" part=\"8160\" size=\"US-Letter\" description=\"Étiquettes de publipostage\"&gt;\n"
+"    &lt;Label-rectangle id=\"0\" width=\"189pt\" height=\"72pt\" round=\"5pt\"&gt;\n"
+"      &lt;Markup-margin size=\"5pt\"/&gt;\n"
+"      &lt;Layout nx=\"3\" ny=\"10\" x0=\"11.25pt\" y0=\"36pt\" dx=\"200pt\" dy=\"72pt\"/&gt;\n"
+"    &lt;/Label-rectangle&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"5160\"/&gt;\n"
+"    &lt;Alias brand=\"Avery\" part=\"6233\"/&gt;\n"
+"  &lt;/Template&gt;\n"
+"      "
+
+#: C/glabels.xml:1621(title)
+msgid "Template Node"
+msgstr "Nœud Template"
+
+#: C/glabels.xml:1623(para)
+msgid ""
+"A <emphasis>Template</emphasis> node describes a single stationary product. "
+"It must contain one instance of any type of Label node (<emphasis>Label-"
+"rectangle</emphasis>, <emphasis>Label-round</emphasis>, or <emphasis>Label-"
+"cd</emphasis>). This node can be followed by zero or more <emphasis>Alias</"
+"emphasis> nodes."
+msgstr ""
+"Un nœud <emphasis>Template</emphasis> décrit les caractéristiques d'un seul "
+"produit. Il doit contenir une occurrence de l'un des types d'étiquettes suivants : "
+"<emphasis>Label-rectangle</emphasis>, <emphasis>Label-round</emphasis> ou "
+"<emphasis>Label-CD</emphasis>. Ce nœud peut être suivi par zéro ou plus de "
+"nœuds <emphasis>Alias</emphasis>."
+
+#: C/glabels.xml:1637(para) C/glabels.xml:1712(para) C/glabels.xml:1789(para)
+#: C/glabels.xml:1834(para) C/glabels.xml:1910(para) C/glabels.xml:1943(para)
+#: C/glabels.xml:1994(para) C/glabels.xml:2037(para) C/glabels.xml:2096(para)
+#: C/glabels.xml:2173(para)
+msgid "Property"
+msgstr "Propriété"
+
+#: C/glabels.xml:1640(para) C/glabels.xml:1715(para) C/glabels.xml:1792(para)
+#: C/glabels.xml:1837(para) C/glabels.xml:1913(para) C/glabels.xml:1946(para)
+#: C/glabels.xml:1997(para) C/glabels.xml:2040(para) C/glabels.xml:2099(para)
+#: C/glabels.xml:2176(para)
+msgid "Description"
+msgstr "Description"
+
+#: C/glabels.xml:1646(para) C/glabels.xml:2182(para)
+msgid "brand"
+msgstr "brand"
+
+#: C/glabels.xml:1648(para)
+msgid "Brand or manufacturer of stationary product. E.g. \"Avery\""
+msgstr "Marque ou fabricant du produit, par ex. « Avery »"
+
+#: C/glabels.xml:1653(para) C/glabels.xml:2188(para)
+msgid "part"
+msgstr "part"
+
+#: C/glabels.xml:1655(para)
+msgid "Part number or name of stationary product. E.g. \"8160\""
+msgstr "Numéro de série ou nom du produit, par ex. « 8160 »"
+
+#: C/glabels.xml:1660(para) C/glabels.xml:1919(para)
+msgid "size"
+msgstr "size"
+
+#: C/glabels.xml:1662(para)
+msgid "Size of sheet. E.g., \"US-Letter,\" \"A4\", ..."
+msgstr "Format de page, par ex. « US-Letter », « A4 », ..."
+
+#: C/glabels.xml:1666(para)
+msgid "description"
+msgstr "description"
+
+#: C/glabels.xml:1668(para)
+msgid "Description of stationary product. E.g, \"Mailing Labels.\""
+msgstr "Description du produit, par ex. « Étiquettes postales. »."
+
+#: C/glabels.xml:1673(para)
+msgid "_description"
+msgstr "_description"
+
+#: C/glabels.xml:1675(para)
+msgid ""
+"Translatable description of stationary product. E.g, \"Mailing Labels."
+"\" (Only useful for predefined templates)"
+msgstr ""
+"Description traduisible du produit, par ex. « Étiquettes "
+"postales » (seulement utile pour des formats de patrons prédéfinis)."
+
+#: C/glabels.xml:1681(para) C/glabels.xml:1727(para) C/glabels.xml:1857(para)
+msgid "width"
+msgstr "width"
+
+#: C/glabels.xml:1683(para)
+msgid "Page width. Only valid if size=\"Other\""
+msgstr "Largeur de la page. Seulement valide si la propriété size contient « Other » (autre)."
+
+#: C/glabels.xml:1687(para) C/glabels.xml:1731(para) C/glabels.xml:1864(para)
+msgid "height"
+msgstr "height"
+
+#: C/glabels.xml:1689(para)
+msgid "Page height. Only valid if size=\"Other\""
+msgstr "Hauteur de la page. Seulement valide si la propriété size contient « Other » (autre)."
+
+#: C/glabels.xml:1699(title)
+msgid "Label-rectangle Node"
+msgstr "Nœud Label-rectangle"
+
+#: C/glabels.xml:1701(para)
+msgid ""
+"A <emphasis>Label-rectangle</emphasis> node describes the dimensions of a "
+"single label or business card that is rectangular in shape (may have rounded "
+"edges)."
+msgstr ""
+"Un nœud <emphasis>Label-rectangle</emphasis> décrit les dimensions d'une "
+"étiquette ou carte de visite rectangulaire (elle peut aussi avoir les "
+"angles arrondis)."
+
+#: C/glabels.xml:1721(para) C/glabels.xml:1798(para) C/glabels.xml:1843(para)
+msgid "id"
+msgstr "id"
+
+#: C/glabels.xml:1723(para) C/glabels.xml:1800(para) C/glabels.xml:1845(para)
+msgid "Reserved for future use. Should always be 0."
+msgstr "Réservé pour une utilisation future. Doit toujours être 0."
+
+#: C/glabels.xml:1728(para)
+msgid "Width of label/card"
+msgstr "Largeur de l'étiquette/carte"
+
+#: C/glabels.xml:1732(para)
+msgid "Height of label/card"
+msgstr "Hauteur de l'étiquette/carte"
+
+#: C/glabels.xml:1735(para)
+msgid "round"
+msgstr "round"
+
+#: C/glabels.xml:1737(para)
+msgid ""
+"Radius of corners. For items with square edges (business cards), the radius "
+"should be 0."
+msgstr ""
+"Rayon des angles arrondis. Pour les étiquettes ou cartes à angles droits (cartes de "
+"visite), la valeur du rayon doit être 0."
+
+#: C/glabels.xml:1742(para)
+msgid "x_waste"
+msgstr "x_waste"
+
+#: C/glabels.xml:1744(para)
+msgid ""
+"Amount of horizontal waste (over-print) to allow. This is useful for "
+"minimizing alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+"Quantité d'espace horizontal perdu acceptable (sur-impression). "
+"C'est utile pour réduire les problèmes d'alignement, notamment avec "
+"l'utilisation de fonds colorés (par ex. des images)."
+
+#: C/glabels.xml:1750(para)
+msgid "y_waste"
+msgstr "y_waste"
+
+#: C/glabels.xml:1752(para)
+msgid ""
+"Amount of vertical waste (over-print) to allow. This is useful for "
+"minimizing alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+"Quantité d'espace vertical perdu acceptable (sur-impression). "
+"C'est utile pour réduire les problèmes d'alignement, notamment avec "
+"l'utilisation de fonds colorés (par ex. des images)."
+
+#: C/glabels.xml:1763(title)
+msgid "Label-rectangle Parameters"
+msgstr "Paramètres de l'étiquette rectangle"
+
+#: C/glabels.xml:1777(title)
+msgid "Label-round Node"
+msgstr "Nœud Label-round"
+
+#: C/glabels.xml:1779(para)
+msgid ""
+"A <emphasis>Label-round</emphasis> node describes the dimensions of a simple "
+"round label (not a CD)."
+msgstr ""
+"Un nœud <emphasis>Label-round</emphasis> décrit les dimensions d'une "
+"étiquette ronde pleine (pas pour CD)."
+
+#: C/glabels.xml:1804(para) C/glabels.xml:1849(para) C/glabels.xml:2015(para)
+msgid "radius"
+msgstr "radius"
+
+#: C/glabels.xml:1805(para)
+msgid "Radius (1/2 diameter) of label"
+msgstr "Rayon (la moitié du diamètre) d'une étiquette ronde"
+
+#: C/glabels.xml:1808(para) C/glabels.xml:1871(para)
+msgid "waste"
+msgstr "waste"
+
+#: C/glabels.xml:1810(para) C/glabels.xml:1873(para)
+msgid ""
+"Amount of waste (over-print) to allow. This is useful for minimizing "
+"alignment problems when using non-white backgrounds (e.g. images)."
+msgstr ""
+"Quantité d'espace perdu acceptable (sur-impression). C'est "
+"utile pour réduire les problèmes d'alignement, notamment avec l'utilisation "
+"de fonds colorés (par ex. des images)."
+
+#: C/glabels.xml:1822(title)
+msgid "Label-cd Node"
+msgstr "Nœud Label-cd"
+
+#: C/glabels.xml:1824(para)
+msgid ""
+"A <emphasis>Label-cd</emphasis> node describes the dimensions of a CD, DVD, "
+"or business card CD."
+msgstr ""
+"Un nœud <emphasis>Label-cd</emphasis> décrit les dimensions d'une étiquette "
+"de CD, de DVD ou d'une carte de visite dans ce format."
+
+#: C/glabels.xml:1850(para)
+msgid "Outer radius of label"
+msgstr "Rayon extérieur de l'étiquette"
+
+#: C/glabels.xml:1853(para)
+msgid "hole"
+msgstr "hole"
+
+#: C/glabels.xml:1854(para)
+msgid "Radius of concentric hole"
+msgstr "Rayon du trou central"
+
+#: C/glabels.xml:1859(para)
+msgid ""
+"If present, the label is clipped to the given width. (Useful for \"business "
+"card CDs\")."
+msgstr ""
+"Si disponible, l'étiquette est bloquée à la largeur donnée (utile pour des "
+"cartes de visite au format CD)."
+
+#: C/glabels.xml:1866(para)
+msgid ""
+"If present, the label is clipped to the given height. (Useful for \"business "
+"card CDs\")."
+msgstr ""
+"Si disponible, l'étiquette est bloquée à la hauteur donnée (utile pour des "
+"cartes de visite au format CD)."
+
+#: C/glabels.xml:1884(title)
+msgid "CD Label Parameters"
+msgstr "Paramètres de l'étiquette CD"
+
+#: C/glabels.xml:1898(title)
+msgid "Markup-margin Node"
+msgstr "Nœud Markup-margin"
+
+#: C/glabels.xml:1900(para)
+msgid ""
+"A <emphasis>Markup-margin</emphasis> describes a margin along all edges of a "
+"label."
+msgstr ""
+"Un nœud <emphasis>Markup-margin</emphasis> détermine une marge tout autour "
+"d'une étiquette."
+
+#: C/glabels.xml:1921(para)
+msgid ""
+"Size of the margin. I.e. the distance of the margin line from the edge of "
+"the card/label."
+msgstr ""
+"Taille de la marge, c'est-à-dire la distance de la ligne de marge jusqu'au bord de "
+"l'étiquette/carte."
+
+#: C/glabels.xml:1932(title)
+msgid "Markup-line Node"
+msgstr "Nœud Markup-line"
+
+#: C/glabels.xml:1934(para)
+msgid "A <emphasis>Markup-line</emphasis> describes a markup line."
+msgstr "Un nœud<emphasis>Markup-line</emphasis> décrit un traçage de ligne."
+
+#: C/glabels.xml:1952(para) C/glabels.xml:2046(para)
+msgid "x1"
+msgstr "x1"
+
+#: C/glabels.xml:1954(para)
+msgid "x coordinate of 1st endpoint of the line segment."
+msgstr "Coordonnée x de la 1ère extrémité du segment de ligne."
+
+#: C/glabels.xml:1958(para) C/glabels.xml:2052(para)
+msgid "y1"
+msgstr "y1"
+
+#: C/glabels.xml:1960(para)
+msgid "y coordinate of 1st endpoint of the line segment."
+msgstr "Coordonnée y de la 1ère extrémité du segment de ligne."
+
+#: C/glabels.xml:1964(para)
+msgid "x2"
+msgstr "x2"
+
+#: C/glabels.xml:1966(para)
+msgid "x coordinate of 2nd endpoint of the line segment."
+msgstr "Coordonnée x de la 2ème extrémité du segment de ligne."
+
+#: C/glabels.xml:1970(para)
+msgid "y2"
+msgstr "y2"
+
+#: C/glabels.xml:1972(para)
+msgid "y coordinate of 2nd endpoint of the line segment."
+msgstr "Coordonnée y de la 2ème extrémité du segment de ligne."
+
+#: C/glabels.xml:1982(title)
+msgid "Markup-circle Node"
+msgstr "Nœud Markup-circle"
+
+#: C/glabels.xml:1984(para)
+msgid "A <emphasis>Markup-circle</emphasis> describes a markup circle."
+msgstr "Un nœud <emphasis>Markup-circle</emphasis> décrit un traçage de cercle."
+
+#: C/glabels.xml:2003(para) C/glabels.xml:2119(para)
+msgid "x0"
+msgstr "x0"
+
+#: C/glabels.xml:2005(para)
+msgid "x coordinate of circle origin (center)."
+msgstr "Coordonnée x de l'origine du cercle (son centre)."
+
+#: C/glabels.xml:2009(para) C/glabels.xml:2126(para)
+msgid "y0"
+msgstr "y0"
+
+#: C/glabels.xml:2011(para)
+msgid "y coordinate of circle origin (center)."
+msgstr "Coordonnée y de l'origine du cercle (son centre)."
+
+#: C/glabels.xml:2016(para)
+msgid "Radius of circle."
+msgstr "Rayon du cercle."
+
+#: C/glabels.xml:2025(title)
+msgid "Markup-rect Node"
+msgstr "Nœud Markup-rect"
+
+#: C/glabels.xml:2027(para)
+msgid "A <emphasis>Markup-rect</emphasis> describes a markup rectangle."
+msgstr ""
+"Un nœud <emphasis>Markup-rect</emphasis> décrit un traçage de rectangle."
+
+#: C/glabels.xml:2048(para)
+msgid "x coordinate of upper left corner of rectangle."
+msgstr "Coordonnée x du coin supérieur gauche du rectangle."
+
+#: C/glabels.xml:2054(para)
+msgid "y coordinate of upper left corner of rectangle."
+msgstr "Coordonnée y du coin supérieur gauche du rectangle."
+
+#: C/glabels.xml:2058(para)
+msgid "w"
+msgstr "w"
+
+#: C/glabels.xml:2060(para)
+msgid "Width of rectangle."
+msgstr "Largeur du rectangle."
+
+#: C/glabels.xml:2064(para)
+msgid "h"
+msgstr "h"
+
+#: C/glabels.xml:2066(para)
+msgid "Height of rectangle."
+msgstr "Hauteur du rectangle."
+
+#: C/glabels.xml:2070(para)
+msgid "r"
+msgstr "r"
+
+#: C/glabels.xml:2071(para)
+msgid "Radius of rounded corners of rectangle."
+msgstr "Rayon des coins arrondis du rectangle."
+
+#: C/glabels.xml:2080(title)
+msgid "Layout Node"
+msgstr "Nœud Layout"
+
+#: C/glabels.xml:2082(para)
+msgid ""
+"A label node may contain multiple <emphasis>Layout</emphasis> children. If "
+"labels are arranged in a simple grid pattern, only one layout is needed. "
+"However, if labels are arranged in multiple grids, such as a running bond "
+"pattern, multiple <emphasis>layout</emphasis> tags can be used. Note: a "
+"single label can always be treated as a grid of one."
+msgstr ""
+"Un nœud étiquette (Label-...) peut contenir plusieurs nœuds enfants "
+"<emphasis>Layout</emphasis> (disposition). Si les étiquettes sont placées "
+"dans une grille simple, une seule disposition suffit. Si les étiquettes sont placées dans plusieurs "
+"grilles différentes, comme pour imprimer des échantillons par exemple, "
+"plusieurs dispositions seront nécessaires. Note : une étiquette unique peut "
+"toujours être considérée comme une grille à un seul élément."
+
+#: C/glabels.xml:2105(para)
+msgid "nx"
+msgstr "nx"
+
+#: C/glabels.xml:2107(para)
+msgid "Number of labels/cards across in the grid (horizontal)"
+msgstr "Nombre d'étiquettes/cartes dans la grille (sur le plan horizontal)."
+
+#: C/glabels.xml:2112(para)
+msgid "ny"
+msgstr "ny"
+
+#: C/glabels.xml:2114(para)
+msgid "Number of labels/cards up and down in the grid (vertical)"
+msgstr "Nombre d'étiquettes/cartes dans la grille (sur le plan vertical)."
+
+#: C/glabels.xml:2121(para)
+msgid ""
+"Distance from left edge of sheet to the left edge of the left column of "
+"cards/labels in the layout."
+msgstr ""
+"Distance entre le bord gauche de la page et le bord gauche de la première colonne "
+"d'étiquettes/cartes dans la disposition."
+
+#: C/glabels.xml:2128(para)
+msgid ""
+"Distance from the top edge of sheet to the top edge of the top row of labels/"
+"cards in the layout."
+msgstr ""
+"Distance entre le bord supérieur de la page et le bord supérieur de la "
+"première rangée d'étiquettes/cartes dans la disposition."
+
+#: C/glabels.xml:2133(para)
+msgid "dx"
+msgstr "dx"
+
+#: C/glabels.xml:2134(para)
+msgid "Horizontal pitch of grid."
+msgstr "Pas horizontal de la grille."
+
+#: C/glabels.xml:2137(para)
+msgid "dy"
+msgstr "dy"
+
+#: C/glabels.xml:2138(para)
+msgid "Vertical pitch of grid."
+msgstr "Pas vertical de la grille."
+
+#: C/glabels.xml:2146(title)
+msgid "Layout Parameters"
+msgstr "Paramètres de disposition"
+
+#: C/glabels.xml:2160(title)
+msgid "Alias Node"
+msgstr "Nœud Alias"
+
+#: C/glabels.xml:2162(para)
+msgid ""
+"An <emphasis>Alias</emphasis> node provides the name of a product with the "
+"same size and layout characteristics as the parent template."
+msgstr ""
+"Un nœud <emphasis>Alias</emphasis> donne le nom d'un produit ayant les mêmes "
+"caractéristiques de taille et de disposition que le patron parent."
+
+#: C/glabels.xml:2184(para)
+msgid "The brand or manufacturer of the equivalent product."
+msgstr "La marque ou le fabricant du produit équivalent."
+
+#: C/glabels.xml:2190(para)
+msgid "The part number or name of the equivalent product."
+msgstr "Le numéro de série ou le nom du produit équivalent."
+
+#: C/glabels.xml:2226(title)
+msgid "About <application>gLabels</application>"
+msgstr "À propos de <application>gLabels</application>"
+
+#: C/glabels.xml:2227(para)
+msgid ""
+"<application>gLabels</application> was written by Jim Evins "
+"(<email>evins@snaught.com</email>). To find more information about "
+"<application>gLabels</application>, please visit the <ulink url=\"http://"
+"glabels.sourceforge.net\" type=\"http\">gLabels Web page</ulink>."
+msgstr ""
+"<application>gLabels</application> a été écrit par Jim Evins "
+"(<email>evins@snaught.com</email>). Pour obtenir de plus amples informations "
+"à propos de <application>gLabels</application>, visitez le <ulink "
+"url=\"http://glabels.sourceforge.net\" type=\"http\">site Web de gLabels</"
+"ulink>."
+
+#: C/glabels.xml:2232(para)
+msgid ""
+"To report a bug or make a suggestion regarding this application or this "
+"manual, follow the directions at the <ulink url=\"http://glabels.sourceforge."
+"net/contact/\" type=\"http\"><application>gLabels</application> Contact "
+"Page</ulink>."
+msgstr ""
+"Pour signaler une anomalie ou émettre une suggestion à propos de cette "
+"application ou ce manuel, consultez les indications de la <ulink url=\"http://glabels.sourceforge."
+"net/contact/\" type=\"http\">page de contact de <application>gLabels</application></ulink>."
+
+#: C/glabels.xml:2238(para)
+msgid ""
+"This program is distributed 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. A copy of this license "
+"can be found at this <ulink url=\"ghelp:gpl\" type=\"help\">link</ulink>, or "
+"in the file COPYING included with the source code of this program."
+msgstr ""
+"Ce logiciel est distribué selon les termes de la Licence "
+"Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la "
+"version 2 de cette licence, soit (à votre convenance) une quelconque version "
+"ultérieure. Une copie de cette licence est disponible à <ulink url=\"ghelp:"
+"gpl\" type=\"help\">ce lien</ulink> ou dans le fichier COPYING inclus dans "
+"le code source de ce logiciel."
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: C/glabels.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Alain Lojewski <allomervans@gmail.com>, 2009\n"
+"Claude Paroz <claude@2xlibre.net>, 2009"
diff --git a/help/fr/glabels.xml b/help/fr/glabels.xml
new file mode 100644 (file)
index 0000000..65b4989
--- /dev/null
@@ -0,0 +1,1776 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY legal SYSTEM "legal.xml">
+<!ENTITY appversion "2.2.6">
+<!ENTITY manrevision "2.2.6">
+<!ENTITY date "December 2007">
+<!ENTITY app "<application>gLabels</application>">
+<!-- Information about the entities
+       The legal.xml file contains legal information, there is no need to edit the file. 
+       Use the appversion entity to specify the version of the application.
+       Use the manrevision entity to specify the revision number of this manual.
+       Use the date entity to specify the release date of this manual.
+       Use the app entity to specify the name of the application. -->]>
+<!-- 
+      (Do not remove this comment block.)
+  Maintained by the GNOME Documentation Project
+  http://developer.gnome.org/projects/gdp
+  Template version: 2.0 beta
+  Template last modified Apr 11, 2002
+-->
+<!-- =============Document Header ============================= -->
+<article id="index" lang="fr">
+<!-- please do not change the id; for translations, change lang to -->
+<!-- appropriate code -->
+  <articleinfo> 
+    <title>Manuel <application>gLabels</application> v2.2.6</title>       
+       <abstract role="description">
+       <para>Manuel d'utilisation de <application>gLabels</application>, utilitaire de création d'étiquettes et de cartes de visite</para>
+    </abstract>
+    <copyright> 
+      <year>2003-2009</year> 
+      <holder>Jim Evins</holder> 
+    </copyright><copyright><year>2009</year><holder>Alain Lojewski (allomervans@gmail.com)</holder></copyright><copyright><year>2009</year><holder>Claude Paroz (claude@2xlibre.net)</holder></copyright>
+       <publisher> 
+               <publishername>Jim Evins</publishername> 
+       </publisher> 
+
+     <legalnotice id="legalnotice">
+       <para>Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la licence de documentation libre GNU, Version 1.1 ou ultérieure publiée par la Free Software Foundation sans section inaltérable, sans texte de première page de couverture ni texte de dernière page de couverture. Vous trouverez un exemplaire de cette licence en suivant ce <ulink type="help" url="ghelp:fdl">lien</ulink> ou dans le fichier COPYING-DOCS fourni avec le présent manuel.</para>
+         <para>Ce manuel fait partie de la collection de manuels GNOME distribués selon les termes de la licence de documentation libre GNU. Si vous souhaitez distribuer ce manuel indépendamment de la collection, vous devez joindre un exemplaire de la licence au document, comme indiqué dans la section 6 de celle-ci.</para>
+
+       <para>La plupart des noms utilisés par les entreprises pour distinguer leurs produits et services sont des marques déposées. Lorsque ces noms apparaissent dans la documentation GNOME et que les membres du projet de Documentation GNOME sont informés de l'existence de ces marques déposées, soit ces noms entiers, soit leur première lettre est en majuscule.</para>
+
+       <para>LE PRÉSENT DOCUMENT ET SES VERSIONS MODIFIÉES SONT FOURNIS SELON LES TERMES DE LA LICENCE DE DOCUMENTATION LIBRE GNU SACHANT QUE : <orderedlist>
+               <listitem>
+                 <para>LE PRÉSENT DOCUMENT EST FOURNI « TEL QUEL », SANS AUCUNE GARANTIE, EXPRESSE OU IMPLICITE, Y COMPRIS, ET SANS LIMITATION, LES GARANTIES DE MARCHANDABILITÉ, D'ADÉQUATION À UN OBJECTIF PARTICULIER OU DE NON INFRACTION DU DOCUMENT OU DE SA VERSION MODIFIÉE. L'UTILISATEUR ASSUME TOUT RISQUE RELATIF À LA QUALITÉ, À LA PERTINENCE ET À LA PERFORMANCE DU DOCUMENT OU DE SA VERSION DE MISE À JOUR. SI LE DOCUMENT OU SA VERSION MODIFIÉE S'AVÉRAIT DÉFECTUEUSE, L'UTILISATEUR (ET NON LE RÉDACTEUR INITIAL, L'AUTEUR, NI TOUT AUTRE PARTICIPANT) ENDOSSERA LES COÛTS DE TOUTE INTERVENTION, RÉPARATION OU CORRECTION NÉCESSAIRE. CETTE DÉNÉGATION DE RESPONSABILITÉ CONSTITUE UNE PARTIE ESSENTIELLE DE CETTE LICENCE. AUCUNE UTILISATION DE CE DOCUMENT OU DE SA VERSION MODIFIÉE N'EST AUTORISÉE AUX TERMES DU PRÉSENT ACCORD, EXCEPTÉ SOUS CETTE DÉNÉGATION DE RESPONSABILITÉ ; </para>
+               </listitem>
+               <listitem>
+                 <para>EN AUCUNE CIRCONSTANCE ET SOUS AUCUNE INTERPRÉTATION DE LA LOI, QU'IL S'AGISSE D'UN DÉLIT CIVIL (Y COMPRIS LA NÉGLIGENCE), CONTRACTUEL OU AUTRE, L'AUTEUR, LE RÉDACTEUR INITIAL, TOUT PARTICIPANT OU TOUT DISTRIBUTEUR DE CE DOCUMENT OU DE SA VERSION MODIFIÉE, OU TOUT FOURNISSEUR DE L'UNE DE CES PARTIES NE POURRA ÊTRE TENU RESPONSABLE À L'ÉGARD DE QUICONQUE POUR TOUT DOMMAGE DIRECT, INDIRECT, PARTICULIER, OU ACCIDENTEL DE TOUT TYPE Y COMPRIS, SANS LIMITATION, LES DOMMAGES LIÉS À LA PERTE DE CLIENTÈLE, À UN ARRÊT DE TRAVAIL, À UNE DÉFAILLANCE OU UN MAUVAIS FONCTIONNEMENT INFORMATIQUE, OU À TOUT AUTRE DOMMAGE OU PERTE LIÉE À L'UTILISATION DU DOCUMENT ET DE SES VERSIONS MODIFIÉES, MÊME SI LADITE PARTIE A ÉTÉ INFORMÉE DE L'ÉVENTUALITÉ DE TELS DOMMAGES.</para>
+               </listitem>
+         </orderedlist></para>
+  </legalnotice>
+
+
+   <!-- This file  contains link to license for the documentation (GNU FDL), and 
+        other legal stuff such as "NO WARRANTY" statement. Please do not change 
+       any of this. -->
+
+    <authorgroup> 
+      <author role="maintainer"> 
+               <firstname>Jim</firstname> 
+               <surname>Evins</surname> 
+      </author> 
+      
+<!-- This is appropriate place for other contributors: translators,
+     maintainers,  etc. Commented out by default.
+     
+      <othercredit role="translator">
+               <firstname>Latin</firstname> 
+               <surname>Translator 1</surname> 
+               <affiliation> 
+                       <orgname>Latin Translation Team</orgname> 
+                       <address> <email>translator@gnome.org</email> </address> 
+               </affiliation>
+               <contrib>Latin translation</contrib>
+      </othercredit>
+-->
+    </authorgroup>
+
+
+<!-- According to GNU FDL, revision history is mandatory if you are -->
+<!-- modifying/reusing someone else's document.  If not, you can omit it. -->
+<!-- Remember to remove the &manrevision; entity from the revision entries other
+-->
+<!-- than the current revision. -->
+<!-- The revision numbering system for GNOME manuals is as follows: -->
+<!-- * the revision number consists of two components -->
+<!-- * the first component of the revision number reflects the release version of the GNOME desktop. -->
+<!-- * the second component of the revision number is a decimal unit that is incremented with each revision of the manual. -->
+<!-- For example, if the GNOME desktop release is V2.x, the first version of the manual that -->
+<!-- is written in that desktop timeframe is V2.0, the second version of the manual is V2.1, etc. -->
+<!-- When the desktop release version changes to V3.x, the revision number of the manual changes -->
+<!-- to V3.0, and so on. -->  
+    <revhistory>
+      <revision> 
+               <revnumber>Manuel glabels v2.2.6</revnumber> 
+               <date>Octobre 2009</date> 
+               <revdescription> 
+                       <para role="author">Mario Blättermann <email>mariobl@gnome.org</email></para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+      <revision> 
+               <revnumber>Manuel glabels v2.2</revnumber> 
+               <date>Décembre 2007</date> 
+               <revdescription> 
+                       <para role="author">Jim Evins <email>evins@snaught.com</email></para>
+                       <para role="publisher">Jim Evins</para>
+               </revdescription> 
+      </revision> 
+    </revhistory> 
+
+    <releaseinfo>Ce manuel documente la version 2.2.6 de <application>gLabels</application>.</releaseinfo> 
+    <legalnotice> 
+      <title>Votre avis</title> 
+      <para>Pour signaler une anomalie ou émettre une suggestion concernant l'application <application>gLabels</application> ou ce manuel, procédez comme indiqué sur la <ulink url="http://glabels.sourceforge.net/contact/" type="http">Page de contact de <application>gLabels</application></ulink>.</para>
+<!-- Translators may also add here feedback address for translations -->
+    </legalnotice> 
+  </articleinfo> 
+
+  <indexterm zone="index"> 
+    <primary>glabels</primary> 
+  </indexterm> 
+  <indexterm zone="index"> 
+    <primary>glabels</primary> 
+  </indexterm>
+
+
+
+
+<!-- ============= Document Body ============================= -->
+<!-- ============= Introduction ============================== -->
+<!-- Use the Introduction section to give a brief overview of what
+     the application is and what it does. -->
+  <sect1 id="glabels-introduction"> 
+    <title>Introduction</title> 
+
+    <para>L'application <application>gLabels</application> est un petit utilitaire capable de créer des étiquettes et des cartes de visite sous l'environnement de bureau GNOME. Avec une simple imprimante laser ou à jet d'encre, il peut gérer une multitude de matrices standards que vous trouverez dans la plupart des magasins spécialisés.</para>
+
+  </sect1>
+
+
+
+
+<!-- =========== Getting Started ============================== -->
+<!-- Use the Getting Started section to describe the steps required
+     to start the application and to describe the user interface components
+     of the application. If there is other information that it is important
+     for readers to know before they start using the application, you should
+     also include this information here. 
+     If the information about how to get started is very short, you can 
+     include it in the Introduction and omit this section. -->
+
+  <sect1 id="glabels-getting-started"> 
+    <title>Premiers pas</title> 
+
+    <sect2 id="glabels-start">
+    <title>Démarrage de <application>gLabels</application></title>
+    <para>Vous pouvez lancer <application>gLabels</application> de deux façons :</para> 
+    <variablelist>
+       <varlistentry>
+               <term>Menu <guimenu>Applications</guimenu></term>
+               <listitem>
+               <para>Choisissez <menuchoice><guisubmenu>Bureautique</guisubmenu><guimenuitem>gLabels</guimenuitem></menuchoice>.</para>
+               </listitem>
+       </varlistentry>
+       <varlistentry>
+               <term>En ligne de commande</term>
+               <listitem>
+               <para>Saisissez <command>glabels</command>, puis appuyez sur <keycap>Entrée</keycap> :</para>
+               </listitem>
+       </varlistentry>
+    </variablelist>
+    </sect2>
+
+    <sect2 id="glabels-when-start">
+    <title>Au démarrage de <application>gLabels</application></title>
+    <para>Lorsque vous lancez <application>gLabels</application>, la fenêtre ci-dessous apparaît.</para>
+
+    <!-- ==== Figure ==== -->
+      <figure id="mainwindow-fig"> 
+       <title>Fenêtre de démarrage de <application>gLabels</application></title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/main-window-empty.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+    <!-- ==== End of Figure ==== -->
+
+    <!-- Include any descriptions of the GUI immediately after the screenshot of the main UI, -->
+    <!-- for example, the items on the menubar and on the toolbar. This section is optional. -->
+
+    <para>Contenu de la fenêtre <application>gLabels</application> :</para>
+      <variablelist>
+       <varlistentry>
+       <term>La barre des menus</term>
+       <listitem>
+           <para>Les options de cette barre de menus montrent toutes les commandes à votre disposition pour créer et éditer des étiquettes et cartes de visite avec <application>gLabels</application>.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Barre d'outils principale</term>
+       <listitem>
+           <para>La barre d'outils principale contient un sous-ensemble des commandes les plus utilisées des menus Fichier et Édition de la barre de menus.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Barre d'outils Dessin</term>
+       <listitem>
+           <para>La barre d'outils Dessin contient un choix de commandes pour la modification du document <application>gLabels</application> actif.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Zone d'affichage</term>
+       <listitem>
+           <para>La zone d'affichage est la principale interface de conception de <application>gLabels</application>.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Barre latérale Objet</term>
+       <listitem>
+           <para>La barre latérale Objet fournit une interface pour afficher et modifier toutes les propriétés d'un objet.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Barre d'outils Propriétés</term>
+       <listitem>
+           <para>La barre d'outils Propriétés met à disposition un choix d'outils pour modifier les propriétés de l'objet sélectionné, et pour définir les propriétés par défaut pour de nouveaux objets.</para>
+       </listitem>
+       </varlistentry>
+       <varlistentry>
+       <term>Barre d'état</term>
+       <listitem>
+           <para>La barre d'état affiche des informations sur l'activité actuelle de <application>gLabels</application>, ainsi que des informations contextuelles au sujet des éléments du menu.</para>
+       </listitem>
+       </varlistentry>
+       </variablelist>
+    </sect2>
+  </sect1>
+
+
+
+
+<!-- ================ Usage ================================ -->
+<!-- Use this section to describe how to use the application to perform the tasks for 
+  which the application is designed. -->
+  <sect1 id="glabels-usage"> 
+    <title>Utilisation</title> 
+
+<!-- ============= To create a new file ============================= -->
+    <sect2 id="glabels-open-new"> 
+      <title>Création d'une nouvelle étiquette ou d'une nouvelle carte de visite</title>
+
+      <para>Pour créer une nouvelle étiquette ou une nouvelle carte de visite, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Nouveau</guimenuitem></menuchoice> pour afficher la boîte de dialogue <guilabel>Nouvelle étiquette/carte</guilabel>. Sélectionnez le type de support et l'orientation, puis cliquez sur <guibutton>Valider</guibutton>. Un nouveau document apparaît dans la zone d'affichage de <application>gLabels</application>.</para>
+
+      <para>Si le type de votre support n'apparaît pas dans la liste, consultez <xref linkend="glabels-create-template"/></para>
+
+    </sect2>
+
+<!-- ============= To Open a File ============================= -->
+    <sect2 id="glabels-open-file"> 
+      <title>Ouverture d'un fichier</title>
+
+      <para>Pour ouvrir un fichier, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Ouvrir</guimenuitem></menuchoice> pour afficher la boîte de dialogue <guilabel>Ouvrir un fichier</guilabel>. Choisissez le fichier à ouvrir, puis cliquez sur <guibutton>Valider</guibutton>. Le fichier apparaît dans la zone d'affichage de la fenêtre de <application>gLabels</application>.</para>
+
+      <para>Vous pouvez aussi ouvrir plusieurs fichiers dans <application>gLabels</application>. L'application crée une fenêtre séparée pour chaque fichier ouvert.</para>
+
+      <para>Cet utilitaire enregistre les chemins et les noms des fichiers les plus récents, et les affiche dans le menu <menuchoice><guimenu>Fichier</guimenu><guisubmenu>Fichiers récents</guisubmenu></menuchoice>.</para>
+
+    </sect2>
+
+<!-- ============= To Open Multiple Files from the Command Line ========= -->
+    <sect2 id="glabels-run-from-cmd-line"> 
+      <title>Ouverture de plusieurs fichiers en ligne de commande</title>
+
+      <para>Vous pouvez ouvrir un ou plusieurs fichiers dans <application>gLabels</application> à partir d'un terminal. Pour ouvrir plusieurs fichiers, saisissez la commande suivante et appuyez sur <keycap>Entrée</keycap> :</para>
+
+      <para><command>glabels <replaceable>fichier1.glabels fichier2.glabels fichier3.glabels</replaceable></command></para>
+
+      <para>Au démarrage de l'application, les fichiers que vous avez choisis s'ouvrent dans des fenêtres séparées.</para>
+
+    </sect2>
+
+<!-- ============= To Save a File ========= -->
+    <sect2 id="glabels-save-file"> 
+      <title>Enregistrement d'un fichier</title>
+
+      <para>Vous pouvez enregistrer des fichiers de différentes façons :</para>
+
+      <itemizedlist> 
+       <listitem>
+
+         <para>Pour enregistrer les modifications d'un fichier existant, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Enregistrer</guimenuitem></menuchoice>.</para>
+
+       </listitem>
+       <listitem>
+
+         <para>Pour enregistrer un nouveau fichier ou changer le nom d'un fichier existant, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Enregistrer sous</guimenuitem></menuchoice>. Saisissez un nom de fichier dans la boîte de dialogue <guilabel>Enregistrer sous</guilabel> et cliquez sur <guibutton>Valider</guibutton>.</para>
+
+       </listitem>
+      </itemizedlist>
+
+    </sect2>
+
+<!-- ============= To Change Label Properties ========= -->
+    <sect2 id="glabels-label-properties"> 
+      <title>Modification des propriétés d'une étiquette</title>
+
+      <para>Pour changer le type de support ou l'orientation d'une étiquette, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Propriétés</guimenuitem></menuchoice> pour afficher la boîte de dialogue <guilabel>Propriétés de l'étiquette</guilabel>. Sélectionnez un type de support et l'orientation du document, puis cliquez sur <guibutton>Valider</guibutton>.</para>
+
+    </sect2>
+
+<!-- ============= To create a custom template ======================= -->
+    <sect2 id="glabels-create-template"> 
+      <title>Création d'un patron personnalisé</title>
+
+      <para>Pour créer un nouveau patron personnalisé, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Créateur de patrons...</guimenuitem></menuchoice> pour afficher la boîte de dialogue <guilabel>Créateur de patrons</guilabel>. L'assistant vous aidera à créer un patron compatible avec la plupart des modèles de supports du commerce.</para>
+
+      <para>Si vous préférez créer votre propre patron manuellement, reportez-vous à la section <xref linkend="glabels-manual-create-template"/></para>
+
+    </sect2>
+
+<!-- ============= To Close a File ========= -->
+    <sect2 id="glabels-close-file"> 
+      <title>Fermeture d'un fichier</title>
+
+      <para>Pour fermer le document en cours, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Fermer</guimenuitem></menuchoice>. Cela ferme la fenêtre active. Si le document a été modifié, vous devrez confirmer dans une boîte de dialogue si vous souhaitez enregistrer les modifications avant de quitter, ou si vous souhaitez annuler la commande. S'il n'y avait qu'une seule fenêtre active, <application>gLabels</application> se fermera.</para>
+
+    </sect2>
+
+<!-- ============= To Quit ========= -->
+    <sect2 id="glabels-quit"> 
+      <title>Fermeture de <application>gLabels</application></title>
+
+      <para>Pour quitter <application>gLabels</application>, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Quitter</guimenuitem></menuchoice>. Cette commande équivaut à fermer toutes les fenêtres ouvertes. Voir <xref linkend="glabels-close-file"/>.</para>
+
+    </sect2>
+
+<!-- ============= To Print Labels and Cards ========= -->
+    <sect2 id="glabels-print-file"> 
+      <title>Impression d'étiquettes ou de cartes</title>
+
+      <para>Pour imprimer des étiquettes ou des cartes, choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Imprimer</guimenuitem></menuchoice> pour afficher la boîte de dialogue <guilabel>Imprimer</guilabel>. Choisissez les options d'impression et cliquez sur <guilabel>Imprimer</guilabel> pour démarrer l'impression. Si vous souhaitez simplement avoir un aperçu de ce qui sera imprimé, cliquez sur <guilabel>Aperçu avant impression</guilabel>.</para>
+
+      <para>La boîte de dialogue <guilabel>Imprimer</guilabel> vous permet de choisir les options d'impression suivantes :</para>
+               
+      <sect3 id="print-dialog-job">
+       <title>Onglet Étiquettes de la boîte de dialogue Imprimer</title>
+
+       <variablelist>
+
+         <varlistentry>
+            <term><guilabel>Contrôle d'impression (simple)</guilabel></term>
+           <listitem> 
+
+             <para>Pour des formats simples d'étiquettes ou de cartes (pas de fusion), la section <guilabel>étiquettes</guilabel> dispose des contrôles suivants.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-copies-fig"> 
+               <title>Contrôles d'impression</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata fileref="figures/print-copies.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>Le nombre de copies peut être indiqué en choisissant le nombre de pages pleines à imprimer ou un choix d'étiquettes spécifiques sur une seule page.</para>
+
+             <para>La prévisualisation en miniatures peut également être utilisée pour sélectionner graphiquement un assortiment d'étiquettes en cliquant sur la première étiquette et en faisant glisser la souris jusque sur la dernière.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry>
+            <term><guilabel>Contrôle d'impression (fusion)</guilabel></term>
+           <listitem> 
+
+             <para>Pour des étiquettes ou des cartes utilisant les possibilités de fusion (aussi connue sous le nom de « publipostage »), l'onglet <guilabel>Étiquettes</guilabel> propose les éléments de fusion suivants, à la place des contrôles de copie.</para>
+
+             <!-- ==== Figure ==== -->
+             <figure id="print-merge-fig"> 
+               <title>Contrôles de fusion pour l'impression d'un document</title> 
+               <screenshot> 
+                 <mediaobject> 
+                   <imageobject><imagedata fileref="figures/print-merge.png" format="PNG"/> 
+                   </imageobject>
+                 </mediaobject> 
+               </screenshot> 
+             </figure>
+             <!-- ==== End of Figure ==== -->
+
+             <para>Le nombre total d'étiquettes ou de cartes imprimées est le produit du nombre d'enregistrements dans la source de fusion par le nombre de copies sélectionnées. Lors de l'impression de plusieurs copies, celles-ci peuvent être groupées (toutes les copies d'un même enregistrement sont groupées) ou séparées (une copie de chaque enregistrement est imprimée avant la suivante).</para>
+
+             <para>L'impression peut commencer par n'importe quelle étiquette sur la première page. Cette option peut être choisie au moyen de la zone numérique <guilabel>Commencer par l'étiquette</guilabel>.</para>
+
+             <para>De même, vous pouvez sélectionner cette première étiquette graphiquement en cliquant sur l'aperçu en miniature.</para>
+
+           </listitem>
+         </varlistentry>
+
+         <varlistentry> <term><guilabel>Options</guilabel> </term> 
+           <listitem> 
+             <para>Vous pouvez aussi définir les options suivantes.</para>
+             <itemizedlist>
+               <listitem>
+                 <para><guilabel>Imprimer des bordures</guilabel></para>
+                 <para>Imprime le cadre des étiquettes. Cette option est utile pour des essais à blanc, pour tester l'alignement de l'imprimante.</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>Imprimer à l'envers</guilabel></para>
+                 <para>Imprime les étiquettes en miroir. Cette option est utile pour imprimer sur des supports transparents qui seront vus de l'extérieur (par ex. sur une vitre de voiture).</para>
+               </listitem>
+               <listitem>
+                 <para><guilabel>Imprimer les guides de coupe</guilabel></para>
+                 <para>Cette option imprime des repères tout autour d'une feuille blanche et qui serviront à la découpe après impression. Elle ne fonctionne pas bien avec tous les patrons.</para>
+               </listitem>
+             </itemizedlist>
+           </listitem>
+         </varlistentry>
+       </variablelist>
+      </sect3>
+               
+    </sect2>
+
+<!-- ============= To Create New Objects ========= -->
+    <sect2 id="glabels-new-objects"> 
+      <title>Création de nouveaux objets</title>
+
+      <para>Vous pouvez créer des objets en choisissant la fonction appropriée dans le sous-menu <menuchoice><guimenu>Objets</guimenu><guimenuitem>Créer un objet</guimenuitem></menuchoice>, ou dans la barre d'outils <guilabel>Dessin</guilabel>. Ceci mettra la zone d'affichage en mode création d'objet comme indiqué par son curseur. Pour revenir au mode par défaut sans création d'objet, choisissez <menuchoice><guimenu>Objets</guimenu><guimenuitem>Mode sélection</guimenuitem></menuchoice>. Ceci remettra le curseur standard (flèche de sélection) dans la fenêtre active.</para>
+
+      <para>Voici la description du mode création d'objet pour chaque type d'objet :</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Texte</term>
+         <listitem>
+           <para>Cliquez sur l'endroit désiré pour faire apparaître le coin supérieur gauche de l'objet texte. Les nouveaux objets texte contiennent initialement la chaîne « Texte ». Pour modifier ce texte ou ses autres propriétés, consultez <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Boîte</term>
+         <listitem>
+           <para>Cliquez sur l'endroit choisi pour le coin supérieur gauche de l'objet boîte, et faites glisser jusqu'à l'emplacement désiré du coin inférieur droit. Un simple clic quelque part fait apparaître une boîte carrée. Pour modifier les propriétés de l'objet boîte, consultez <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Ligne</term>
+         <listitem>
+           <para>Cliquez sur l'endroit désiré pour l'une des deux extrémités de la ligne et faites glisser jusqu'à l'autre extrémité voulue. Un simple clic quelque part génère une ligne diagonale. Pour modifier les propriétés de la ligne, consultez <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Ellipse</term>
+         <listitem>
+           <para>Cliquez sur l'endroit choisi pour le coin supérieur gauche de l'objet ellipse et faites glisser jusqu'à l'emplacement désiré du coin inférieur droit. Un simple clic quelque part génère un cercle. Pour modifier les propriétés de l'ellipse, consultez <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Image</term>
+         <listitem>
+           <para>Cliquez sur l'endroit choisi pour le coin supérieur gauche de l'objet image et faites glisser jusqu'à l'emplacement désiré du coin inférieur droit. Un simple clic quelque part génère un carré. Les nouveaux objets image contiennent initialement une simple image de damier. Pour modifier cette image ou ses propriétés, consultez <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Code-barre</term>
+         <listitem>
+           <para>Cliquez sur l'endroit choisi pour le coin supérieur gauche de l'objet code-barre. Les nouveaux objets code-barre sont initialisés avec des données valides de style POSTNET. Pour modifier ces données et leurs propriétés, consultez <xref linkend="glabels-object-properties"/>.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+
+    </sect2>
+
+<!-- ============= To Select Objects ========= -->
+    <sect2 id="glabels-select-objects"> 
+      <title>Sélection d'objets</title>
+
+      <para>Une condition pour effectuer des opérations sur des objets est la sélection d'objets individuels ou de groupe d'objets. La zone d'affichage doit être en mode sélection pour générer de nouvelles sélections, comme l'indique le curseur en forme de flèche. On passe en mode sélection d'objet par le menu <menuchoice><guimenu>Objets</guimenu><guimenuitem>Mode sélection</guimenuitem></menuchoice> ou par le bouton correspondant de la barre d'outils <guilabel>Dessin</guilabel>.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>Sélection d'un seul objet</term>
+         <listitem>
+           <para>Un seul objet peut être sélectionné en cliquant dessus dans la zone d'affichage. Il apparaît alors en surbrillance avec des poignées de redimensionnement.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Sélection d'objets groupés</term>
+         <listitem>
+           <para>Pour sélectionner plusieurs objets, commencez par cliquer sur l'un d'eux ; puis, en maintenant la touche <keycap>Ctrl</keycap> enfoncée, cliquez sur les autres. À tout moment, d'autres objets peuvent être rajoutés à la sélection de la même façon. Il est aussi possible de sélectionner tous les objets en même temps en choisissant <menuchoice><guimenu>Édition</guimenu><guimenuitem>Tout sélectionner</guimenuitem></menuchoice> dans le menu. Tous les objets groupés dans une même sélection apparaissent en surbrillance.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Sélection par zone</term>
+         <listitem>
+           <para>Plusieurs objets peuvent aussi être sélectionnés avec la souris. Il suffit de cliquer sur un endroit vide et de faire glisser la souris en entourant les objets choisis. En relâchant, tous les objets présents dans ce rectangle font partie de la sélection. Une sélection par zone peut servir à ajouter des objets à une sélection existante en maintenant la touche <keycap>Ctrl</keycap> enfoncée pendant l'opération.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>Désélection d'objets</term>
+         <listitem>
+           <para>Chaque objet peut être retiré d'une sélection existante en cliquant dessus tout en maintenant la touche <keycap>Ctrl</keycap> enfoncée. Une sélection entière peut être désactivée en choisissant <menuchoice><guimenu>Édition</guimenu><guimenuitem>Désélectionner tout</guimenuitem></menuchoice> dans le menu, ou plus simplement en cliquant dans un endroit vide de la zone d'affichage. Dès qu'un objet est désélectionné, il n'est plus en surbrillance.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= Clipboard Commands ========= -->
+    <sect2 id="glabels-clipboard"> 
+      <title>Les commandes du presse-papiers</title>
+
+      <para>Des sélections d'objets peuvent être manipulées avec les fonctions standards du presse-papiers : <guimenuitem>Couper</guimenuitem>, <guimenuitem>Copier</guimenuitem>, <guimenuitem>Coller</guimenuitem> et <guimenuitem>Supprimer</guimenuitem>.</para>
+
+      <variablelist>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>X</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Couper</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Déplace les objets sélectionnés dans le presse-papiers. Ils sont alors disponibles pour être recollés dans le même document ou dans un autre.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Copier</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Crée une copie des objets sélectionnés dans le presse-papiers sans effacer les originaux. Ils sont alors disponibles pour être recollés dans le même document ou dans un autre.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycombo><keycap>Ctrl</keycap><keycap>V</keycap></keycombo>
+             </shortcut>
+             <guimenuitem>Coller</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Colle des objets du presse-papiers dans le document actif. <application>gLabels</application> ne peut coller que des objets d'un autre document <application>gLabels</application>.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+            <menuchoice>
+             <shortcut>
+               <keycap>Supprimer</keycap>
+             </shortcut>
+             <guimenuitem>Supprimer</guimenuitem>
+           </menuchoice>
+          </term>
+         <listitem>
+           <para>Supprime les objets sélectionnés sans les garder dans le presse-papiers.</para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </sect2>
+
+<!-- ============= To Edit object Properties ========= -->
+    <sect2 id="glabels-object-properties"> 
+      <title>Édition des propriétés d'un objet</title>
+
+      <para>La plupart des propriétés d'un objet peuvent être modifiées avec l'éditeur d'objet présent dans le panneau latéral comme illustré ci-dessous. Pour que l'éditeur d'objet soit actif, il faut d'abord sélectionner un objet. Voir <xref linkend="glabels-select-objects"/>.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="object-editor-sidebar-fig"> 
+       <title>Panneau latéral : éditeur d'objet</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/object-editor-sidebar.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>L'éditeur d'objet propose un sous-ensemble des onglets suivants, selon le type d'objet :</para>
+
+      <sect3 id="object-editor-text">
+       <title>Onglet Texte (pour objets Texte)</title>
+
+       <para>Cet onglet contient un petit éditeur permettant de modifier le contenu d'un objet texte. Il contient aussi un menu déroulant indiquant les champs de fusion disponibles pouvant être insérés dans le texte.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-image">
+       <title>Onglet Image (pour objets Image)</title>
+
+       <para>Cet onglet contient une zone de sélection de fichier avec aperçu permettant de choisir des fichiers image. Le bouton peut être utilisé pour naviguer aisément parmi les fichiers image. On peut aussi indiquer un champ de fusion utilisable à la place du nom de fichier au moment de l'impression.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-data">
+       <title>Onglet Code-barre (objets Code-barre)</title>
+
+       <para>Cet onglet contient une zone de saisie de texte pour entrer la chaîne alphanumérique d'un code-barre. On peut aussi indiquer un champ de fusion qui fournira l'information au moment de l'impression.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-style">
+       <title>Onglet Style (objets Texte)</title>
+
+       <para>Cet onglet contient des éléments à renseigner pour choisir les propriétés du texte : famille, taille, style, couleur, alignement et espacement.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-barcode">
+       <title>Onglet Style (objets Code-barre)</title>
+
+       <para>Cet onglet contient des éléments à renseigner pour choisir les propriétés du code-barre : le style, la couleur, et s'il faut y inclure ou non une somme de contrôle.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-line">
+       <title>Onglet Ligne</title>
+
+       <para>Cet onglet contient deux éléments permettant de choisir les propriétés des lignes et des bordures : largeur et couleur.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-fill">
+       <title>Onglet Remplissage</title>
+
+       <para>Cet onglet contient des éléments pour renseigner les propriétés de remplissage des objets boîte et ellipse. Pour l'instant, la couleur est la seule option de remplissage disponible.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size">
+       <title>Onglet Taille (tous objets, sauf Ligne)</title>
+
+       <para>Cet onglet contient deux éléments pour définir la largeur et la hauteur d'un objet. Il y a aussi une case à cocher pour figer le rapport largeur/hauteur pendant le redimensionnement de l'objet. Pour les objets Image, il y a en plus un bouton permettant de revenir aux dimensions d'origine (72 ppp par défaut).</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-size-line">
+       <title>Onglet Taille (objets ligne)</title>
+
+       <para>Cet onglet contient deux éléments pour renseigner la longueur et l'angle d'inclinaison d'un objet ligne.</para>
+
+      </sect3>
+
+      <sect3 id="object-editor-position">
+       <title>Onglet Position</title>
+
+       <para>Cet onglet contient des éléments permettant de modifier la position d'un objet.</para>
+
+      </sect3>
+
+
+      <sect3 id="object-editor-shadow">
+       <title>Onglet Ombrage (tous objets, sauf Image et Code-barre)</title>
+
+       <para>Cet onglet contient les paramètres pour ajouter une ombre à un objet.</para>
+
+      </sect3>
+
+
+    </sect2>
+
+<!-- ============= Other Manipulations of Objects ========= -->
+    <sect2 id="glabels-object-manipulation"> 
+      <title>Autres possibilités de manipulation d'un objet</title>
+
+      <para>Les objets peuvent aussi être manipulés des façons suivantes.</para>
+
+      <sect3 id="other-moving-resizing">
+       <title>Déplacement et redimensionnement des objets</title>
+
+       <para>Un objet peut être déplacé en cliquant dessus et en le faisant glisser à sa nouvelle place. Si cet objet fait partie d'une sélection groupée, tous les objets sélectionnés sont déplacés en même temps tout en gardant leurs positions relatives les uns par rapport aux autres. Si aucun objet n'est sélectionné, un clic sur un objet crée une nouvelle sélection contenant cet objet. Voir <xref linkend="glabels-select-objects"/>.</para>
+
+       <para>Un objet sélectionné peut être redimensionné en cliquant sur une de ses poignées et en la faisant glisser jusqu'à obtenir les dimensions souhaitées.</para>
+
+      </sect3>
+
+      <sect3 id="other-stacking-order">
+       <title>Modification de l'ordre d'empilage</title>
+
+       <para>L'ordre d'empilage se réfère à la position relative d'un objet par rapport à l'axe Z, c'est-à-dire lorsque des objets se recouvrent, lequel apparaît au-dessus de l'autre. Par défaut, les plus récents sont affichés par-dessus les plus anciens. Pour modifier cet ordre, sélectionnez un ou plusieurs objets à déplacer et choisissez <menuchoice><guimenu>Objets</guimenu><guimenuitem>Ordre</guimenuitem><guimenuitem>Avancer au premier plan </guimenuitem></menuchoice> pour placer la sélection au-dessus de la pile, ou <menuchoice><guimenu>Objets</guimenu><guimenuitem>Ordre</guimenuitem><guimenuitem>Reculer à l'arrière-plan</guimenuitem></menuchoice> pour placer la sélection sous la pile. Ces commandes sont aussi accessibles par le menu contextuel (clic droit dans la zone d'affichage lorsqu'un élément au moins est sélectionné).</para>
+
+      </sect3>
+
+      <sect3 id="other-rotating-flipping">
+       <title>Rotation et renversement des objets</title>
+
+       <para>À partir du menu <menuchoice><guimenu>Objets</guimenu><guimenuitem>Rotation/Renversement</guimenuitem>, on accède à un sous-menu permettant de faire pivoter un objet de 90° dans n'importe quelle direction, ou de le renverser horizontalement ou verticalement. Ces commandes sont aussi accessibles par le menu contextuel (clic droit dans la zone d'affichage lorsqu'un élément au moins est sélectionné).</menuchoice></para>
+
+      </sect3>
+
+      <sect3 id="other-alignment">
+       <title>Alignement des objets</title>
+
+       <para>Des objets peuvent être alignés horizontalement ou verticalement les uns par rapport aux autres, ou par rapport à la ligne médiane de l'étiquette. Pour cela, choisissez l'option adéquate dans le menu <menuchoice><guimenu>Objets</guimenu><guimenuitem>Aligner horizontalement</guimenuitem></menuchoice> ou </para>
+
+      </sect3>
+
+      <sect3 id="other-property-bar">
+       <title>Utilisation de la barre des propriétés</title>
+
+       <para>La barre des propriétés sert à modifier certaines options communes à un ensemble d'objets : famille de police, taille, gras, italique, alignement, couleur du texte, couleur de remplissage, couleur de ligne ou de bordure et épaisseur de ligne. La barre des propriétés est aussi utilisée pour définir les options appliquées par défaut à tout nouvel objet créé.</para>
+
+      </sect3>
+
+
+
+    </sect2>
+
+<!-- ============= Document Merge Features ========= -->
+    <sect2 id="glabels-merge"> 
+      <title>Fusion de documents</title>
+
+      <para>La fusion de documents (aussi appelée « Publipostage ») est un outil performant qui, à partir d'une seule carte ou étiquette, est capable d'imprimer autant d'éléments que d'enregistrements présents dans un document source externe.</para>
+
+      <para>La première étape pour effectuer une fusion de documents est de créer un document source dans lequel figurent les informations de fusion. Celles-ci peuvent être des adresses postales (ou autres) pour lesquelles vous souhaitez imprimer une seule étiquette ou carte. Pour l'instant, les seules sources possibles sont des fichiers texte ou le carnet d'adresses d'Evolution (d'autres sont planifiées). Le format texte géré actuellement est très simple : chaque ligne est un enregistrement ; les champs sont séparés par des virgules (CSV), par des deux-points ou par des tabulations ; des sauts de lignes peuvent être contenus dans les champs en utilisant l'expression « \n ». Ce fichier peut être créé avec n'importe quel éditeur de texte ou peut être généré par un autre programme ou script. L'usage, pour créer des fichiers CSV, est de les exporter depuis un tableur.</para>
+
+      <para>Une étiquette doit ensuite être configurée pour « pointer » vers ce fichier source. Pour configurer les propriétés de fusion d'un document, choisissez <menuchoice><guimenu>Objets</guimenu><guimenuitem>Propriétés de fusion</guimenuitem></menuchoice> pour afficher la boîte de dialogue <guilabel>Propriétés de fusion</guilabel>. Cette boîte sert à définir exactement le format du fichier de données, ainsi que le nom et l'emplacement du fichier de données pour la fusion.</para>
+
+      <para>Pour finir, lorsque l'étiquette a été configurée pour un fichier de données, des champs peuvent être insérés dans les objets texte et utilisés comme source de données pour les objets code-barre, et dans les noms de fichiers image pour les objets image. Consultez <xref linkend="glabels-object-properties"/> pour de plus amples informations sur l'utilisation des données fusionnées pour ces types d'objets.</para>
+
+      <para>Lorsque l'étiquette est configurée, <application>gLabels</application> en imprime une pour chaque enregistrement (ligne) des données du document source, en remplaçant les champs définis dans les différents objets texte, code-barre et image par les champs de chaque enregistrement.</para>
+
+      <para>Consultez <xref linkend="glabels-merge-tutorial"/> pour un guide détaillé sur les possibilités du publipostage.</para>
+
+
+    </sect2>
+
+
+  </sect1>
+
+
+
+
+  <!-- ============= Customization ============================= -->
+  <!-- Use this section to describe how to customize the application. -->
+  <sect1 id="glabels-prefs"> 
+    <title>Paramètres</title> 
+    <para>Pour configurer <application>gLabels</application>, allez dans le menu <menuchoice><guimenu>Édition</guimenu><guimenuitem>Préférences</guimenuitem></menuchoice>. La boîte de dialogue <guilabel>Préférences</guilabel> contient les onglets suivants :</para> 
+    <itemizedlist> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-locale"/></para> 
+      </listitem> 
+      <listitem> 
+       <para> 
+         <xref linkend="glabels-prefs-object-defaults"/></para> 
+      </listitem> 
+    </itemizedlist>
+<!-- =============== Customization Subsection ================ -->
+<!-- Use a new section to describe different tabbed sections on the Settings or Preferences
+            dialog. -->
+    <sect2 id="glabels-prefs-locale"> 
+      <title>Localisation</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Unités</guilabel> </term> 
+         <listitem> 
+           <para>Ce groupe de boutons radio permet d'indiquer vos unités de mesure préférées. Cochez l'une des options suivantes :</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Points</guilabel> </para> 
+               <para>Utilise le point (1 point = 1/72ème de pouce = 0,352778 mm).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Pouces</guilabel> </para> 
+               <para>Utilise les pouces.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Millimètres</guilabel> </para> 
+               <para>Utilise les millimètres.</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Unité par défaut : <guilabel>Pouces</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Taille de page par défaut</guilabel> </term> 
+         <listitem> 
+           <para>Ce groupe de boutons radio permet d'indiquer votre format de page préféré. Ceci vous aide à trouver plus rapidement un type de support lors de la création d'une nouvelle étiquette ou carte.</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Letter US</guilabel> </para> 
+               <para>La plupart de vos supports seront au format Letter US (8.5 x 11 pouces).</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>ISO A4</guilabel> </para> 
+               <para>La plupart de vos supports seront au format ISO A4 (210 x 297 mm).</para>
+             </listitem> 
+           </itemizedlist> 
+           <para>Support par défaut : <guilabel>Letter US</guilabel>.</para> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2>
+    <!-- ============= Customization Subsection ===================== -->
+    <!-- Another tabbed section on the Preferences dialog. -->
+    <sect2 id="glabels-prefs-object-defaults"> 
+      <title>Paramètres par défaut pour les objets</title> 
+      <variablelist> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Texte</guilabel> </term> 
+         <listitem> 
+           <para>Utilisez ces différents contrôles pour définir les paramètres par défaut des nouveaux objets texte :</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Police</guilabel> </para> 
+               <para>Permet de sélectionner la famille de police et sa taille, et si elle doit être en gras ou en italique.</para> 
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Couleur</guilabel> </para> 
+               <para>Définit la couleur par défaut du texte.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Alignement</guilabel> </para> 
+               <para>Définit l'alignement par défaut du texte : à gauche, centré ou à droite.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Ligne</guilabel> </term> 
+         <listitem> 
+           <para>Définit les propriétés par défaut des lignes et bordures des nouveaux objets. Ces propriétés sont :</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Largeur</guilabel> </para> 
+               <para>Définit l'épaisseur par défaut des lignes.</para>
+             </listitem> 
+             <listitem> 
+               <para> 
+                 <guilabel>Couleur</guilabel> </para> 
+               <para>Définit la couleur par défaut des lignes.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+       <varlistentry> 
+         <term> 
+           <guilabel>Remplissage</guilabel> </term> 
+         <listitem> 
+           <para>Définit la couleur de remplissage par défaut des nouveaux objets. Ces propriétés sont :</para>
+           <itemizedlist> 
+             <listitem> 
+               <para> 
+                 <guilabel>Couleur</guilabel> </para> 
+               <para>Définit la couleur de remplissage par défaut.</para>
+             </listitem> 
+           </itemizedlist> 
+         </listitem> 
+       </varlistentry> 
+      </variablelist> 
+    </sect2> 
+  </sect1>
+
+
+
+
+<!-- ============= Document Merge Tutorial ================================== -->
+  <sect1 id="glabels-merge-tutorial"> 
+    <title>Guide du publipostage</title>
+
+    <para>La fusion de documents (aussi appelée « Publipostage ») est une fonction puissante permettant d'imprimer une étiquette ou carte pour chaque enregistrement d'une source extérieure. Elle est cependant la fonction la plus méconnue de <application>gLabels</application>. Les exemples suivants vont détailler quelques tâches usuelles utilisant la fonction de publipostage.</para>
+
+    <sect2 id="merge-ex1">
+      <title>Exemple 1 : création de badges en utilisant un fichier CSV</title>
+  
+      <para>Dans cet exemple, nous organisons une session d'orientation pour les nouveaux membres d'équipage de notre navire. Nous disposons d'une liste de nouvelles recrues créée avec <application>gnumeric</application> et exportée sous la forme du fichier CSV ci-après. Nous aurions pu créer ce fichier avec n'importe quel éditeur de texte, mais bon, nous sommes au 23ème siècle.</para>
+
+      <programlisting>
+Nom,Département,Matricule
+"Jim Kirk",Direction,"SC937-0176 CEC"
+"Mr. Spock",Sciences,S179-276SP
+"Léonard McCoy",Médecine,Inconnu
+"Montgomery Scott",Ingénierie,SE-197-54T
+      </programlisting>
+
+      <para>Dans <application>gLabels</application>, nous avons créé un nouveau document <application>gLabels</application> utilisant le patron AVERY 5395 « Étiquettes pour badges ». Ensuite, nous ouvrons la boîte de dialogue <guilabel>Propriétés de fusion</guilabel> du menu <menuchoice><guimenu>Objets</guimenu></menuchoice> pour afficher les options de fusion. Ceci nous permet de choisir le type de source (dans notre cas, « Texte séparé par des virgules ») et son emplacement (nom de fichier) comme sur la figure suivante :</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-1-fig"> 
+       <title>Boîte de dialogue Propriétés de fusion</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Avant d'effectuer la fusion, nous allons décocher la première ligne, car c'est l'en-tête de notre document <application>gnumeric</application> original, et l'imprimer ne ferait que gaspiller notre première étiquette. On pourrait de la même façon désélectionner d'autres enregistrements non désirés.</para>
+
+      <para>On peut aussi agrandir chaque enregistrement en cliquant sur le petit triangle correspondant (voir figure). Une fois satisfait des choix effectués dans cette boîte de dialogue, cliquez sur <guibutton>Valider</guibutton> pour valider les modifications.</para>
+
+      <para>Nous allons maintenant ajouter des objets à notre document <application>gLabels</application> comme ceci :</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-2-fig"> 
+       <title>Ajout d'objets</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Dans cet exemple, nous avons ajouté trois objets Texte, et un objet Code-barre. Le premier objet Texte ne contient que du texte (« Bonjour, je m'appelle ». Le second objet Texte contient un seul champ de fusion (« ${1} ») correspondant au premier champ d'un enregistrement (première colonne d'une ligne) donnant ici le nom complet du membre d'équipage. Le troisième contient du texte (« Département ») suivi d'un seul champ de fusion (« ${2} ») correspondant au département d'appartenance du membre d'équipage. L'objet Code-barre est configuré pour recevoir le champ (ou clé) « 3 » contenant le numéro matricule du membre d'équipage.</para>
+
+      <para>On peut maintenant lancer l'impression de nos badges en choisissant <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Imprimer</guimenuitem></menuchoice> à partir du menu. La boîte de dialogue ci-dessous apparaît.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-3-fig"> 
+       <title>Impression de badges nominatifs</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Afin de s'assurer que nos badges ressembleront à ce que nous voulons, nous activons l'option <guilabel>Imprimer des bordures</guilabel> et nous cliquons sur <guibutton>Aperçu avant impression</guibutton>. Une fenêtre d'aperçu apparaît, comme ci-dessous.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex1-4-fig"> 
+       <title>Aperçu des badges nominatifs</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex1-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Tout semble parfait, nous pouvons maintenant charger le stock d'étiquettes adéquates dans l'imprimante, imprimer nos badges et commencer à faire monter nos invités à bord.</para>
+
+    </sect2>
+
+    <sect2 id="merge-ex2">
+      <title>Exemple 2 : étiquettes adresses à partir d'un fichier CSV</title>
+  
+      <para>Dans cet exemple, nous allons organiser une soirée et nous avons besoin d'imprimer des étiquettes pour lancer nos invitations. Nous avons une liste de nos amis les plus proches, créée à partir de <application>gnumeric</application> et exportée dans le fichier CSV ci-après. Il faut tenir compte du fait que tout le monde n'a pas une initiale centrale, ni une adresse à deux lignes.</para>
+
+      <programlisting>
+NOM,PRÉNOM,INITIALE,ADRESSE1,ADRESSE2,VILLE,ÉTAT,CODE POSTAL
+,,,,,,,
+Critter,Ess,S,"123 Faux St.",,Alexandria,VA,22310
+Doe,John,,"Apt 1X","451 Mystery St.",Trenton,NJ,08601
+Summers,Joyce,,"1630 Revello Dr",,Sunnydale,CA,95037
+McGarret,Steve,O,"404 Piikoi Street",,Honolulu,HI,96813
+Kramer,Cosmo,,"Apt 5B","129 W. 81 St.","New York",NY,10024-7207
+      </programlisting>
+
+      <para>Dans <application>gLabels</application>, nous avons créé un nouveau document <application>gLabels</application> utilisant le patron « Étiquettes adresses » AVERY 5512. Puis, à partir du menu <menuchoice><guimenu>Objets</guimenu><guimenuitem>Propriétés de fusion</guimenuitem></menuchoice> pour afficher la boîte <guilabel>Propriétés de fusion</guilabel>, nous sélectionnons le type de source (ici CSV), ainsi que son emplacement (nom de fichier) comme sur la figure ci-dessous.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-1-fig"> 
+       <title>Boîte de dialogue Propriétés de fusion</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Avant d'effectuer la fusion, nous allons décocher la première ligne, car c'est l'en-tête de notre document <application>gnumeric</application> original, et l'imprimer ne ferait que gaspiller notre première étiquette.Nous désélectionnons aussi le deuxième enregistrement qui est vide (un artifice de notre fichier original). On pourrait de la même façon désélectionner d'autres enregistrements non désirés.</para>
+
+      <para>On peut aussi agrandir chaque enregistrement en cliquant sur le petit triangle correspondant (voir figure). Une fois satisfait des choix effectués dans cette boîte de dialogue, cliquez sur <guibutton>Valider</guibutton> pour valider les modifications.</para>
+
+      <para>Nous allons maintenant ajouter des objets à notre document <application>gLabels</application> comme ceci :</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-2-fig"> 
+       <title>Ajout d'objets</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Dans cet exemple, nous avons un seul objet Texte. Celui-ci contient tous nos champs fusionnés et présents sous forme de plusieurs lignes représentant des adresses postales. Veuillez noter que les champs ${4} et ${5} (correspondants à ADRESSE1 et ADRESSE2) sont respectivement listés sans aucune autre mention sur leur ligne. Lorsque <application>gLabels</application> rencontre ce type de champ, il ne génère pas la ligne si celle-ci est vide.</para>
+
+      <para>Nous pouvons maintenant imprimer nos étiquettes d'adresses avec le menu <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Imprimer</guimenuitem></menuchoice>. Cette commande ouvre la boîte de dialogue ci-dessous.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-3-fig"> 
+       <title>Impression des étiquettes d'adresses</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Afin de s'assurer que nos badges ressembleront à ce que nous voulons, nous activons l'option <guilabel>Imprimer des bordures</guilabel> et nous cliquons sur <guibutton>Aperçu avant impression</guibutton>. Une fenêtre d'aperçu apparaît, comme ci-dessous.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex2-4-fig"> 
+       <title>Aperçu des étiquettes d'adresses</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Tout semble parfait, nous pouvons maintenant charger le stock d'étiquettes adéquates dans l'imprimante, imprimer les adresses et envoyer les invitations pour notre soirée.</para>
+
+    </sect2>
+
+<sect2 id="merge-ex3">
+      <title>Exemple 3 : étiquettes adresses à partir du carnet d'adresses d'<application>Evolution</application> </title>
+  
+      <para>Notre précédente soirée fut un grand succès, et nous voulons maintenant imprimer d'autres adresses pour en organiser une autre. Pour simplifier l'opération, nous allons utiliser le carnet d'adresses d'<application>Evolution</application>, car les coordonnées de tous nos amis y figurent.</para>
+
+      <note>
+       <para>Selon la distribution que vous utilisez, votre copie de <application>gLabels</application> peut ne pas inclure cette option. L'utilisation du carnet d'adresses d'<application>Evolution</application> n'est disponible que si le composant <application>evolution-data-server</application> et ses fichiers de développement étaient présents lors de la compilation de <application>gLabels</application>. Veuillez garder cela à l'esprit si vous compilez <application>gLabels</application> directement à partir des sources du programme.</para>
+       
+       <para>Si le paquet <application>gLabels</application> de votre distribution ne comporte pas cette option, vous pouvez essayer de contacter le responsable du paquet ou envoyer un rapport d'anomalie pour demander l'ajout de cette fonctionnalité.</para>
+      </note>
+
+      <para>Dans <application>gLabels</application>, nous avons créé un nouveau document avec le patron « Étiquettes adresses » AVERY 5512. Puis, à partir du menu <menuchoice><guimenu>Objets</guimenu><guimenuitem>Propriétés de fusion</guimenuitem></menuchoice> pour afficher la boîte de dialogue <guilabel>Propriétés de fusion</guilabel>, nous sélectionnons le type de source (ici <guilabel>Données du carnet d'adresses Evolution par défaut</guilabel>) comme ci-dessous.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-1-fig"> 
+       <title>Boîte de dialogue Propriétés de fusion</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex3-1.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Après avoir choisi <guilabel>Données du carnet d'adresses Evolution par défaut</guilabel> comme source à fusionner, nous obtenons une liste complète de son contenu. Par défaut, toutes les adresses sont cochées. Nous pourrions organiser une soirée géante en laissant cette sélection telle quelle. Mais il vaut mieux tenir compte de notre budget. Nous allons donc choisir en décochant certaines adresses par un clic dans les cases correspondantes ou en utilisant le bouton <guibutton>Sélectionner tout</guibutton> ou <guibutton>Désélectionner tout</guibutton> pour activer ou désactiver toutes les adresses du carnet.</para>
+      <para>On peut aussi agrandir chaque enregistrement en cliquant sur le petit triangle correspondant (voir figure). Une fois satisfait des choix effectués dans cette boîte de dialogue, cliquez sur <guibutton>Valider</guibutton> pour valider les modifications.</para>
+
+      <para>Nous allons maintenant ajouter des objets à notre document gLabels comme ci-dessous.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-2-fig"> 
+       <title>Ajout d'objets</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex3-2.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Dans cet exemple, nous avons à nouveau un seul objet texte contenant tous nos champs fusionnés et disposés sur plusieurs lignes sous forme d'adresses postales.</para>
+
+      <para>Nous pouvons maintenant imprimer les adresses à partir du menu <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Imprimer</guimenuitem> et de la boîte de dialogue ci-dessous.</menuchoice></para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-3-fig"> 
+       <title>Impression des étiquettes d'adresses</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-3.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Afin de s'assurer que nos badges ressembleront à ce que nous voulons, nous activons l'option <guilabel>Imprimer des bordures</guilabel> et nous cliquons sur <guibutton>Aperçu avant impression</guibutton>. Une fenêtre d'aperçu apparaît, comme ci-dessous.</para>
+
+      <!-- ==== Figure ==== -->
+      <figure id="merge-ex3-4-fig"> 
+       <title>Aperçu des étiquettes d'adresses</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/merge-ex2-4.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+      <para>Tout semble parfait, nous pouvons maintenant charger le stock d'étiquettes adéquates dans l'imprimante, imprimer les adresses et envoyer les invitations pour notre soirée.</para>
+
+    </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Creating templates ================================== -->
+  <sect1 id="glabels-manual-create-template"> 
+    <title>Création manuelle de nouveaux patrons</title> 
+
+    <para>Des modèles de patrons sont présents sous la forme de fichiers XML dans <filename>${préfixe}/share/glabels/</filename>, où <filename>${préfixe}</filename> correspond généralement à <filename>/usr/local</filename> ou à <filename>/usr</filename> selon l'option de configuration de <filename>prefix</filename>. <application>gLabels</application> utilise tout fichier de la forme <filename>*-templates.xml</filename> ou <filename>*.template</filename> qu'il trouve dans <filename>${préfixe}/share/glabels/</filename> et <filename>${HOME}/.glabels/</filename>. D'autres patrons peuvent être ajoutés en créant des fichiers <filename>*.template</filename> dans l'un ou l'autre de ces répertoires.</para>
+
+    <para>Le format de ces fichiers est décrit dans le document DTD suivant : <ulink url="http://glabels.sourceforge.net/doc/glabels-2.0.dtd.txt" type="http">glabels-2.2.dtd</ulink> (ce document DTD décrit aussi d'autres formats XML utilisés par <application>gLabels</application>).</para>
+
+    <sect2 id="template-assumptions">
+      <title>Règles générales</title>
+      <itemizedlist>
+       <listitem>
+         <para>Une page ne contient qu'un seul format d'étiquette ou de carte (s'il y en a plusieurs, il faut la diviser en plusieurs patrons et faire autant de passes d'impression).</para>
+       </listitem>
+       <listitem>
+         <para>Les mesures de distance peuvent être exprimées en <emphasis>pt</emphasis>, <emphasis>in</emphasis>, <emphasis>mm</emphasis>, <emphasis>cm</emphasis> ou <emphasis>pc</emphasis>. Par exemple : « <literal>1.0in</literal> » ou « <literal>2.54cm</literal> ». Si aucune unité n'est indiquée, c'est le point (<emphasis>pt</emphasis>) qui est utilisé par défaut : 1 <emphasis>pt</emphasis> = 1/72ème <emphasis>de pouce</emphasis> = 0,352778 <emphasis>mm</emphasis>.</para>
+       </listitem>
+      </itemizedlist>
+    </sect2>
+
+    <sect2 id="template-file">
+      <title>Fichiers patron</title>
+
+      <programlisting>
+&lt;?xml version="1.0"?&gt;
+&lt;Glabels-templates&gt;
+
+   <replaceable>...patrons...</replaceable>
+
+&lt;/Glabels-templates&gt;
+      </programlisting>
+    </sect2>
+
+
+    <sect2 id="template-example">
+      <title>Exemple de patron</title>
+      <programlisting>
+  &lt;Template brand="Avery" part="8160" size="US-Letter" description="Étiquettes de publipostage"&gt;
+    &lt;Label-rectangle id="0" width="189pt" height="72pt" round="5pt"&gt;
+      &lt;Markup-margin size="5pt"/&gt;
+      &lt;Layout nx="3" ny="10" x0="11.25pt" y0="36pt" dx="200pt" dy="72pt"/&gt;
+    &lt;/Label-rectangle&gt;
+    &lt;Alias brand="Avery" part="5160"/&gt;
+    &lt;Alias brand="Avery" part="6233"/&gt;
+  &lt;/Template&gt;
+      </programlisting>
+    </sect2>
+
+    <sect2 id="template-template-node">
+      <title>Nœud Template</title>
+
+      <para>Un nœud <emphasis>Template</emphasis> décrit les caractéristiques d'un seul produit. Il doit contenir une occurrence de l'un des types d'étiquettes suivants : <emphasis>Label-rectangle</emphasis>, <emphasis>Label-round</emphasis> ou <emphasis>Label-CD</emphasis>. Ce nœud peut être suivi par zéro ou plus de nœuds <emphasis>Alias</emphasis>.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>Marque ou fabricant du produit, par ex. « Avery »</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>Numéro de série ou nom du produit, par ex. « 8160 »</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>size</para></entry>
+             <entry>
+                <para>Format de page, par ex. « US-Letter », « A4 », ...</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>description</para></entry>
+             <entry>
+                <para>Description du produit, par ex. « Étiquettes postales. ».</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>_description</para></entry>
+             <entry>
+                <para>Description traduisible du produit, par ex. « Étiquettes postales » (seulement utile pour des formats de patrons prédéfinis).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry>
+                <para>Largeur de la page. Seulement valide si la propriété size contient « Other » (autre).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry>
+                <para>Hauteur de la page. Seulement valide si la propriété size contient « Other » (autre).</para>
+               </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-rectangle-node">
+      <title>Nœud Label-rectangle</title>
+
+      <para>Un nœud <emphasis>Label-rectangle</emphasis> décrit les dimensions d'une étiquette ou carte de visite rectangulaire (elle peut aussi avoir les angles arrondis).</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Réservé pour une utilisation future. Doit toujours être 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry><para>Largeur de l'étiquette/carte</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry><para>Hauteur de l'étiquette/carte</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>round</para></entry>
+             <entry>
+                <para>Rayon des angles arrondis. Pour les étiquettes ou cartes à angles droits (cartes de visite), la valeur du rayon doit être 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x_waste</para></entry>
+             <entry>
+                <para>Quantité d'espace horizontal perdu acceptable (sur-impression). C'est utile pour réduire les problèmes d'alignement, notamment avec l'utilisation de fonds colorés (par ex. des images).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y_waste</para></entry>
+             <entry>
+                <para>Quantité d'espace vertical perdu acceptable (sur-impression). C'est utile pour réduire les problèmes d'alignement, notamment avec l'utilisation de fonds colorés (par ex. des images).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-fig"> 
+       <title>Paramètres de l'étiquette rectangle</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-label.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-label-round-node">
+      <title>Nœud Label-round</title>
+
+      <para>Un nœud <emphasis>Label-round</emphasis> décrit les dimensions d'une étiquette ronde pleine (pas pour CD).</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Réservé pour une utilisation future. Doit toujours être 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Rayon (la moitié du diamètre) d'une étiquette ronde</para></entry>
+            </row>
+           <row valign="top">
+             <entry><para>waste</para></entry>
+             <entry>
+                <para>Quantité d'espace perdu acceptable (sur-impression). C'est utile pour réduire les problèmes d'alignement, notamment avec l'utilisation de fonds colorés (par ex. des images).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-label-cd-node">
+      <title>Nœud Label-cd</title>
+
+      <para>Un nœud <emphasis>Label-cd</emphasis> décrit les dimensions d'une étiquette de CD, de DVD ou d'une carte de visite dans ce format.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>id</para></entry>
+             <entry>
+                <para>Réservé pour une utilisation future. Doit toujours être 0.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Rayon extérieur de l'étiquette</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>hole</para></entry>
+             <entry><para>Rayon du trou central</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>width</para></entry>
+             <entry>
+                <para>Si disponible, l'étiquette est bloquée à la largeur donnée (utile pour des cartes de visite au format CD).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>height</para></entry>
+             <entry>
+                <para>Si disponible, l'étiquette est bloquée à la hauteur donnée (utile pour des cartes de visite au format CD).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>waste</para></entry>
+             <entry>
+                <para>Quantité d'espace perdu acceptable (sur-impression). C'est utile pour réduire les problèmes d'alignement, notamment avec l'utilisation de fonds colorés (par ex. des images).</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-label-cd-fig"> 
+       <title>Paramètres de l'étiquette CD</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-cd.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-markup-margin-node">
+      <title>Nœud Markup-margin</title>
+
+      <para>Un nœud <emphasis>Markup-margin</emphasis> détermine une marge tout autour d'une étiquette.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>size</para></entry>
+             <entry>
+                <para>Taille de la marge, c'est-à-dire la distance de la ligne de marge jusqu'au bord de l'étiquette/carte.</para>
+              </entry>
+            </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-line-node">
+      <title>Nœud Markup-line</title>
+
+      <para>Un nœud<emphasis>Markup-line</emphasis> décrit un traçage de ligne.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>Coordonnée x de la 1ère extrémité du segment de ligne.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>Coordonnée y de la 1ère extrémité du segment de ligne.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x2</para></entry>
+             <entry>
+                <para>Coordonnée x de la 2ème extrémité du segment de ligne.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y2</para></entry>
+             <entry>
+                <para>Coordonnée y de la 2ème extrémité du segment de ligne.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-circle-node">
+      <title>Nœud Markup-circle</title>
+
+      <para>Un nœud <emphasis>Markup-circle</emphasis> décrit un traçage de cercle.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>Coordonnée x de l'origine du cercle (son centre).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>Coordonnée y de l'origine du cercle (son centre).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>radius</para></entry>
+             <entry><para>Rayon du cercle.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-markup-rect-node">
+      <title>Nœud Markup-rect</title>
+
+      <para>Un nœud <emphasis>Markup-rect</emphasis> décrit un traçage de rectangle.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>x1</para></entry>
+             <entry>
+                <para>Coordonnée x du coin supérieur gauche du rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y1</para></entry>
+             <entry>
+                <para>Coordonnée y du coin supérieur gauche du rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>w</para></entry>
+             <entry>
+                <para>Largeur du rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>h</para></entry>
+             <entry>
+                <para>Hauteur du rectangle.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>r</para></entry>
+             <entry><para>Rayon des coins arrondis du rectangle.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+    </sect2>
+
+    <sect2 id="template-layout-node">
+      <title>Nœud Layout</title>
+
+      <para>Un nœud étiquette (Label-...) peut contenir plusieurs nœuds enfants <emphasis>Layout</emphasis> (disposition). Si les étiquettes sont placées dans une grille simple, une seule disposition suffit. Si les étiquettes sont placées dans plusieurs grilles différentes, comme pour imprimer des échantillons par exemple, plusieurs dispositions seront nécessaires. Note : une étiquette unique peut toujours être considérée comme une grille à un seul élément.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>nx</para></entry>
+             <entry>
+                <para>Nombre d'étiquettes/cartes dans la grille (sur le plan horizontal).</para>
+              </entry>
+            </row>
+           <row valign="top">
+             <entry><para>ny</para></entry>
+             <entry>
+                <para>Nombre d'étiquettes/cartes dans la grille (sur le plan vertical).</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>x0</para></entry>
+             <entry>
+                <para>Distance entre le bord gauche de la page et le bord gauche de la première colonne d'étiquettes/cartes dans la disposition.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>y0</para></entry>
+             <entry>
+                <para>Distance entre le bord supérieur de la page et le bord supérieur de la première rangée d'étiquettes/cartes dans la disposition.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>dx</para></entry>
+             <entry><para>Pas horizontal de la grille.</para></entry>
+           </row>
+           <row valign="top">
+             <entry><para>dy</para></entry>
+             <entry><para>Pas vertical de la grille.</para></entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      <!-- ==== Figure ==== -->
+      <figure id="template-layout-fig"> 
+       <title>Paramètres de disposition</title> 
+       <screenshot> 
+         <mediaobject> 
+           <imageobject><imagedata fileref="figures/glabels-template-layout.png" format="PNG"/> 
+           </imageobject>
+         </mediaobject> 
+       </screenshot> 
+      </figure>
+      <!-- ==== End of Figure ==== -->
+
+    </sect2>
+
+    <sect2 id="template-alias-node">
+      <title>Nœud Alias</title>
+
+      <para>Un nœud <emphasis>Alias</emphasis> donne le nom d'un produit ayant les mêmes caractéristiques de taille et de disposition que le patron parent.</para>
+
+      <informaltable frame="topbot">
+       <tgroup cols="2">
+         <colspec colname="col1"/>
+         <colspec colname="col2"/>
+         <thead>
+           <row valign="top">
+             <entry colname="col1" colsep="0" valign="top">
+                <para>Propriété</para>
+              </entry>
+             <entry colname="col2" valign="top">
+                <para>Description</para>
+              </entry>
+           </row>
+         </thead>
+         <tbody>
+           <row valign="top">
+             <entry><para>brand</para></entry>
+             <entry>
+                <para>La marque ou le fabricant du produit équivalent.</para>
+              </entry>
+           </row>
+           <row valign="top">
+             <entry><para>part</para></entry>
+             <entry>
+                <para>Le numéro de série ou le nom du produit équivalent.</para>
+              </entry>
+           </row>
+         </tbody>
+       </tgroup>
+      </informaltable>
+
+      </sect2>
+
+  </sect1>
+
+
+
+
+<!-- ============= Bugs ================================== -->
+<!-- This section is optional and is commented out by default. 
+     You can use it to describe known bugs and limitations of the 
+         program if there are any - please be frank and list all
+     problems you know of. 
+  
+  <sect1 id="mayapp-bugs">
+  <title>Known Bugs and Limitations</title>
+  <para> </para>
+ </sect1>
+-->
+
+
+
+
+<!-- ============= About ================================== -->
+<!-- This section contains info about the program (not docs), such as
+      author's name(s), web page, license, feedback address. This
+      section is optional: primary place for this info is "About.." box of
+      the program. However, if you do wish to include this info in the
+      manual, this is the place to put it. Alternatively, you can put this information in the title page.-->
+  <sect1 id="glabels-about"> 
+    <title>À propos de <application>gLabels</application></title> 
+    <para><application>gLabels</application> a été écrit par Jim Evins (<email>evins@snaught.com</email>). Pour obtenir de plus amples informations à propos de <application>gLabels</application>, visitez le <ulink url="http://glabels.sourceforge.net" type="http">site Web de gLabels</ulink>.</para>
+    <para>Pour signaler une anomalie ou émettre une suggestion à propos de cette application ou ce manuel, consultez les indications de la <ulink url="http://glabels.sourceforge.net/contact/" type="http">page de contact de <application>gLabels</application></ulink>.</para>
+
+    <para>Ce logiciel est distribué selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de cette licence, soit (à votre convenance) une quelconque version ultérieure. Une copie de cette licence est disponible à <ulink url="ghelp:gpl" type="help">ce lien</ulink> ou dans le fichier COPYING inclus dans le code source de ce logiciel.</para>
+
+  </sect1> 
+
+
+
+
+
+</article>
diff --git a/help/glabels.omf.in b/help/glabels.omf.in
new file mode 100644 (file)
index 0000000..b79de5c
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" standalone="no"?>
+<omf>
+  <resource>
+    <subject category="Applications|Office"/>
+    <type>
+       manual
+    </type>
+       <relation seriesid="283ccb74-3d5c-11de-8d40-e8b06f874863"/>
+       <rights type="GNU FDL" license.version="1.1"
+      license="http://www.gnu.org/licenses/fdl.html" holder="Jim Evins"/>
+  </resource>
+</omf>
diff --git a/iec16022-0.2.1/BUGS b/iec16022-0.2.1/BUGS
new file mode 100644 (file)
index 0000000..9de2b17
--- /dev/null
@@ -0,0 +1,6 @@
+iec16022 -f i -c aaaaabbbbbccccc
+Barcode too long for 32x8
+No barcode produced
+
+We should find a suit barcode and not error here.
+
diff --git a/iec16022-0.2.1/CHANGELOG b/iec16022-0.2.1/CHANGELOG
new file mode 100644 (file)
index 0000000..7c02bce
--- /dev/null
@@ -0,0 +1,26 @@
+0.2.1
+       - Fix 'Barcode too long' bug. Thanks to Alessandro Zummo.
+       - Use Lindent to start cleaning up the code mess.
+       
+2006-11-11  Stefan Schmidt <stefan@datenfreihafen.org>
+
+0.2
+       - Rewrite Makefile.
+       - Documentation update.
+       - Exclude double include of header files.
+       - Layout cahnges. Place return value in front of function name.
+       - 80 character per line.
+       - Print version number before usage.
+       - Tests
+       
+2006-02-06  Stefan Schmidt <stefan@datenfreihafen.org>
+
+
+0.1
+       - Initial release.
+       - INSTALL, README, TODO, CREDITS, Makefile, LICENSE and CHANGELOG files
+         added.
+       - Fix some include issues.
+       - Fix some signed/unsigned issues.
+
+2006-01-08  Stefan Schmidt <stefan@datenfreihafen.org>
diff --git a/iec16022-0.2.1/CREDITS b/iec16022-0.2.1/CREDITS
new file mode 100644 (file)
index 0000000..37e2bcc
--- /dev/null
@@ -0,0 +1,10 @@
+Adrian Kennard, Andrews & Arnold Ltd for the original source code. You can 
+find it at http://aa.gg/free/
+
+Cliff Hones for the RS coding.
+
+Jan Luebbe <jluebbe@lasnet.de> for writing the manual page and maintaining 
+the debian package.
+
+Daniel Willman <alphaone@totalueberwachung.de> for maintaining the gentoo
+ebuild.
diff --git a/iec16022-0.2.1/INSTALL b/iec16022-0.2.1/INSTALL
new file mode 100644 (file)
index 0000000..102a61e
--- /dev/null
@@ -0,0 +1,8 @@
+To install this software you need the following libraries installed:
+- libpopt
+- zlib
+
+Installing iec16022 is really simple. Just do a 'make' and 'make install'.
+
+In standard configuration the binary will be installed in /usr/local/bin. You
+can change the prefix and DESTDIR in the Makefile.
diff --git a/iec16022-0.2.1/LICENSE b/iec16022-0.2.1/LICENSE
new file mode 100644 (file)
index 0000000..3912109
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  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.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/iec16022-0.2.1/Makefile.am b/iec16022-0.2.1/Makefile.am
new file mode 100644 (file)
index 0000000..566bdc0
--- /dev/null
@@ -0,0 +1,35 @@
+INCLUDES = \
+       -DLIB \
+       $(GLABELS_CFLAGS)
+
+
+IEC_FILES =                    \
+       iec16022ecc200.c        \
+       reedsol.c
+
+noinst_LTLIBRARIES = libiec16022.la
+
+libiec16022_la_SOURCES = $(IEC_FILES)
+
+EXTRA_DIST =                   \
+       BUGS                    \
+       CHANGELOG               \
+       CREDITS                 \
+       iec16022.1              \
+       iec16022.c              \
+       iec16022ecc200.h        \
+       image.c                 \
+       image.h                 \
+       INSTALL                 \
+       LICENSE                 \
+       Makefile.dist           \
+       README                  \
+       README.glabels          \
+       reedsol.h               \
+       TODO                    \
+       test/testsuite-example.bin      \
+       test/testsuite-example.eps      \
+       test/testsuite-example.hex      \
+       test/testsuite-example.png      \
+       test/testsuite-example.text     \
+       test/testsuite.sh
diff --git a/iec16022-0.2.1/Makefile.dist b/iec16022-0.2.1/Makefile.dist
new file mode 100644 (file)
index 0000000..4929afd
--- /dev/null
@@ -0,0 +1,40 @@
+CC=/usr/bin/cc
+INSTALL=/usr/bin/install
+GZIP=/bin/gzip
+
+prefix=/usr/local
+bindir=$(prefix)/bin
+mandir=$(prefix)/share/man
+
+CFLAGS=-Wall
+
+.PHONY: test clean
+
+all: iec16022 manpage
+
+iec16022: iec16022ecc200.o image.o iec16022.c
+       $(CC) -c iec16022.c
+       $(CC) -o iec16022 $(CFLAGS) reedsol.o iec16022.o image.o iec16022ecc200.o -lz -lpopt
+
+manpage: iec16022.1
+       $(GZIP) -f --best < iec16022.1 > iec16022.1.gz
+
+install: all
+       $(INSTALL) -d -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1
+       $(INSTALL) -m 755 iec16022 $(DESTDIR)$(bindir)
+       $(INSTALL) -m 644 iec16022.1.gz $(DESTDIR)$(mandir)/man1
+
+test: iec16022
+       cd test; ./testsuite.sh
+
+iec16022ecc200.o: iec16022ecc200.c iec16022ecc200.h reedsol.o
+       $(CC) -c iec16022ecc200.c
+
+image.o: image.c image.h
+       $(CC) -c image.c
+
+reedsol.o: reedsol.c reedsol.h
+       $(CC)  -DLIB -c reedsol.c
+
+clean:
+       rm -f iec16022 iec16022.1.gz *.o
diff --git a/iec16022-0.2.1/Makefile.in b/iec16022-0.2.1/Makefile.in
new file mode 100644 (file)
index 0000000..01f31d7
--- /dev/null
@@ -0,0 +1,551 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = iec16022-0.2.1
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       INSTALL TODO
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libiec16022_la_LIBADD =
+am__objects_1 = iec16022ecc200.lo reedsol.lo
+am_libiec16022_la_OBJECTS = $(am__objects_1)
+libiec16022_la_OBJECTS = $(am_libiec16022_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libiec16022_la_SOURCES)
+DIST_SOURCES = $(libiec16022_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -DLIB \
+       $(GLABELS_CFLAGS)
+
+IEC_FILES = \
+       iec16022ecc200.c        \
+       reedsol.c
+
+noinst_LTLIBRARIES = libiec16022.la
+libiec16022_la_SOURCES = $(IEC_FILES)
+EXTRA_DIST = \
+       BUGS                    \
+       CHANGELOG               \
+       CREDITS                 \
+       iec16022.1              \
+       iec16022.c              \
+       iec16022ecc200.h        \
+       image.c                 \
+       image.h                 \
+       INSTALL                 \
+       LICENSE                 \
+       Makefile.dist           \
+       README                  \
+       README.glabels          \
+       reedsol.h               \
+       TODO                    \
+       test/testsuite-example.bin      \
+       test/testsuite-example.eps      \
+       test/testsuite-example.hex      \
+       test/testsuite-example.png      \
+       test/testsuite-example.text     \
+       test/testsuite.sh
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu iec16022-0.2.1/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu iec16022-0.2.1/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libiec16022.la: $(libiec16022_la_OBJECTS) $(libiec16022_la_DEPENDENCIES) 
+       $(LINK)  $(libiec16022_la_OBJECTS) $(libiec16022_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iec16022ecc200.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reedsol.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# 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/iec16022-0.2.1/README b/iec16022-0.2.1/README
new file mode 100644 (file)
index 0000000..072c0ae
--- /dev/null
@@ -0,0 +1,13 @@
+With iec16022 you can produce 2d barcodes. Also known as Data Matrix. These
+barcodes are defined in ISO/IEC 16022.
+
+The code was originally written by Andrews & Arnold Ltd. You can download this
+code from http://aa.gg/free/.
+The current maintainer of the code is Stefan Schmidt.
+
+Website:               http://www.datenfreihafen.org/projects/iec16022.html
+Maillinglist:  https://sirius.lasnet.de/mailman/listinfo/iec16022
+SVN repository:        https://svn.datenfreihafen.org/iec16022/
+
+
+Stefan Schmidt <stefan@datenfreihafen.org>
diff --git a/iec16022-0.2.1/README.glabels b/iec16022-0.2.1/README.glabels
new file mode 100644 (file)
index 0000000..ad1dced
--- /dev/null
@@ -0,0 +1,6 @@
+The following changes have been made to the stock iec16022 0.2.1 distribution
+to facilitate compilation with glabels:
+
+       Makefile renamed to Makefile.dist
+       added Makefile.am, which is configured from ../configure.in
+
diff --git a/iec16022-0.2.1/TODO b/iec16022-0.2.1/TODO
new file mode 100644 (file)
index 0000000..6c0a97b
--- /dev/null
@@ -0,0 +1,9 @@
+- Fix compiler warnings.
+- Test on 64bit, powerpc, arm, etc. Anyone?
+- Test stamp feature. Anyone?
+- Use autotools
+
+Some things to think about:
+---------------------------
+- Use libpng?
+- Merge iec16022 in barcode?
diff --git a/iec16022-0.2.1/iec16022.1 b/iec16022-0.2.1/iec16022.1
new file mode 100644 (file)
index 0000000..681c3a7
--- /dev/null
@@ -0,0 +1,52 @@
+.TH iec16022 1 2006-01-14 "iec16022 0.1"
+.SH NAME
+iec16022 \- program to generate 2d barcodes
+.SH SYNOPSIS
+.B iec16022
+.RI [ options ]
+.SH DESCRIPTION
+This manual page documents briefly the
+.B iec16022
+command.
+.PP
+.B iec16022
+generates 2d barcodes conforming to the ISO/IEC 16022 standard (which is
+also known as Data Matrix and Semacode).
+.SH OPTIONS
+These programs follow the usual GNU command line syntax, with long
+options starting with two dashes (`-').
+A summary of options is included below.
+.TP
+.B \-s, \-\-size WxH
+Sets the size of the generated barcode.
+.TP
+.B \-c, \-\-barcode text
+Specifies the text to be encoded.
+.TP
+.B \-\-ecc 000|050|080|100|140|200
+Sets the type of ecc to be used.
+.TP
+.B \-i, \-\-infile filename
+Read input data from file.
+.TP
+.B \-o, \-\-outfile filenmae
+Save output to file (instead of standard output).
+.TP
+.B \-f, \-\-format Text|EPS|Bin|Hex|Stamp|PNG
+Set the output type.
+.TP
+.B \-?, \-\-help
+Show summary of options.
+.TP
+.B \-\-usage
+Show short overview of options.
+.SH EXAMPLE
+To produce a datamatrix barcode for foobar in PNG format you need the following
+arguments:
+.TP
+.B iec16022 -f PNG -c foobar -o foobar.png
+.SH AUTHOR
+iec16022 was written by Adrian Kennard, Andrews & Arnold Ltd.
+.PP
+This manual page was written by Jan Luebbe <jluebbe@lasnet.de>,
+for the Debian project (but may be used by others).
diff --git a/iec16022-0.2.1/iec16022.c b/iec16022-0.2.1/iec16022.c
new file mode 100644 (file)
index 0000000..6fb7c30
--- /dev/null
@@ -0,0 +1,462 @@
+/** 
+ *
+ * IEC16022 bar code generation
+ * Adrian Kennard, Andrews & Arnold Ltd
+ * with help from Cliff Hones on the RS coding
+ *
+ * (c) 2004 Adrian Kennard, Andrews & Arnold Ltd
+ * (c) 2006 Stefan Schmidt <stefan@datenfreihafen.org>
+ * 
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#define IEC16022_VERSION "0.2"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
+#include <popt.h>
+#include <malloc.h>
+#include "image.h"
+#include "iec16022ecc200.h"
+
+ // simple checked response malloc
+void *safemalloc(int n)
+{
+       void *p = malloc(n);
+       if (!p) {
+               fprintf(stderr, "Malloc(%d) failed\n", n);
+               exit(1);
+       }
+       return p;
+}
+
+// hex dump - bottom left pixel first
+void dumphex(unsigned char *grid, int W, int H, unsigned char p)
+{
+       int c = 0, y;
+       for (y = 0; y < H; y++) {
+               int v = 0, x, b = 128;
+               for (x = 0; x < W; x++) {
+                       if (grid[y * W + x])
+                               v |= b;
+                       b >>= 1;
+                       if (!b) {
+                               printf("%02X", v ^ p);
+                               v = 0;
+                               b = 128;
+                               c++;
+                       }
+               }
+               if (b != 128) {
+                       printf("%02X", v ^ p);
+                       c++;
+               }
+               printf(" ");
+               c++;
+               if (c >= 80) {
+                       printf("\n");
+                       c = 0;
+               }
+       }
+       if (c)
+               printf("\n");
+}
+
+int main(int argc, const char *argv[])
+{
+       char c;
+       int W = 0, H = 0;
+       int ecc = 0;
+       int barcodelen = 0;
+       char *encoding = 0;
+       char *outfile = 0;
+       char *infile = 0;
+       char *barcode = 0;
+       char *format = "Text";
+       char *size = 0;
+       char *eccstr = 0;
+       int len = 0, maxlen = 0, ecclen = 0;
+       unsigned char *grid = 0;
+       poptContext optCon;     // context for parsing command-line options
+       const struct poptOption optionsTable[] = {
+               {
+                "size", 's', POPT_ARG_STRING, &size, 0, "Size", "WxH"},
+               {
+                "barcode", 'c', POPT_ARG_STRING, &barcode, 0, "Barcode",
+                "text"},
+               {
+                "ecc", 0, POPT_ARG_STRING, &eccstr, 0, "ECC",
+                "000/050/080/100/140/200"},
+               {
+                "infile", 'i', POPT_ARG_STRING, &infile, 0, "Barcode file",
+                "filename"},
+               {
+                "outfile", 'o', POPT_ARG_STRING, &outfile, 0,
+                "Output filename",
+                "filename"},
+               {
+                "encoding", 'e', POPT_ARG_STRING, &encoding, 0,
+                "Encoding template",
+                "[CTXEAB]* for ecc200 or 11/27/41/37/128/256"},
+               {
+                "format", 'f', POPT_ARGFLAG_SHOW_DEFAULT | POPT_ARG_STRING,
+                &format, 0,
+                "Output format", "Text/EPS/PNG/Bin/Hex/Stamp"},
+               POPT_AUTOHELP {
+                              NULL, 0, 0, NULL, 0}
+       };
+       optCon = poptGetContext(NULL, argc, argv, optionsTable, 0);
+       poptSetOtherOptionHelp(optCon, "[barcode]");
+       if ((c = poptGetNextOpt(optCon)) < -1) {
+               /* an error occurred during option processing */
+               fprintf(stderr, "%s: %s\n", poptBadOption(optCon,
+                                                         POPT_BADOPTION_NOALIAS),
+                       poptStrerror(c));
+               return 1;
+       }
+
+       if (poptPeekArg(optCon) && !barcode && !infile)
+               barcode = (char *)poptGetArg(optCon);
+       if (poptPeekArg(optCon) || !barcode && !infile || barcode && infile) {
+               fprintf(stderr, "Version: %s\n", IEC16022_VERSION);
+               poptPrintUsage(optCon, stderr, 0);
+               return -1;
+       }
+       if (outfile && !freopen(outfile, "w", stdout)) {
+               perror(outfile);
+               return 1;
+       }
+
+       if (infile) {           // read from file
+               FILE *f = fopen(infile, "rb");
+               barcode = safemalloc(4001);
+               if (!f) {
+                       perror(infile);
+                       return 1;
+               }
+               barcodelen = fread(barcode, 1, 4000, f);
+               if (barcodelen < 0) {
+                       perror(infile);
+                       return 1;
+               }
+               barcode[barcodelen] = 0;        // null terminate anyway
+               close(f);
+       } else
+               barcodelen = strlen(barcode);
+       // check parameters
+       if (size) {
+               char *x = strchr(size, 'x');
+               W = atoi(size);
+               if (x)
+                       H = atoi(x + 1);
+               if (!H)
+                       W = H;
+       }
+       if (eccstr)
+               ecc = atoi(eccstr);
+       if (W & 1) {            // odd size
+               if (W != H || W < 9 || W > 49) {
+                       fprintf(stderr, "Invalid size %dx%d\n", W, H);
+                       return 1;
+               }
+               if (!eccstr) {
+                       if (W >= 17)
+                               ecc = 140;
+                       else if (W >= 13)
+                               ecc = 100;
+                       else if (W >= 11)
+                               ecc = 80;
+                       else
+                               ecc = 0;
+               }
+               if (ecc && ecc != 50 && ecc != 80 && ecc != 100 && ecc != 140 ||
+                   ecc == 50 && W < 11 || ecc == 80 && W < 13 || ecc == 100
+                   && W < 13 || ecc == 140 && W < 17) {
+                       fprintf(stderr, "ECC%03d invalid for %dx%d\n", ecc, W,
+                               H);
+                       return 1;
+               }
+
+       } else if (W) {         // even size
+               if (W < H) {
+                       int t = W;
+                       W = H;
+                       H = t;
+               }
+               if (!eccstr)
+                       ecc = 200;
+               if (ecc != 200) {
+                       fprintf(stderr, "ECC%03d invalid for %dx%d\n", ecc, W,
+                               H);
+                       return 1;
+               }
+       }
+
+       else {                  // auto size
+               if (!eccstr)
+                       // default is even sizes only unless explicit ecc set to force odd
+                       // sizes
+                       ecc = 200;
+       }
+
+       if (tolower(*format) == 's') {  // special stamp format checks & defaults
+               if (!W)
+                       W = H = 32;
+               if (ecc != 200 || W != 32 || H != 32)
+                       fprintf(stderr, "Stamps must be 32x32\n");
+               if (encoding)
+                       fprintf(stderr, "Stamps should use auto encoding\n");
+               else {
+                       int n;
+                       for (n = 0; n < barcodelen && (barcode[n] == ' ' ||
+                                                      isdigit(barcode[n])
+                                                      || isupper(barcode[n]));
+                            n++) ;
+                       if (n < barcodelen)
+                               fprintf(stderr,
+                                       "Has invalid characters for a stamp\n");
+                       else {
+                               // Generate simplistic encoding rules as used by the windows app
+                               // TBA - does not always match the windows app...
+                               n = 0;
+                               encoding = safemalloc(barcodelen + 1);
+                               while (n < barcodelen) {
+                                       // ASCII
+                                       while (1) {
+                                               if (n == barcodelen
+                                                   || n + 3 <= barcodelen
+                                                   && (!isdigit(barcode[n])
+                                                       ||
+                                                       !isdigit(barcode
+                                                                [n + 1])))
+                                                       break;
+                                               encoding[n++] = 'A';
+                                               if (n < barcodelen
+                                                   && isdigit(barcode[n - 1])
+                                                   && isdigit(barcode[n]))
+                                                       encoding[n++] = 'A';
+                                       }
+                                       // C40
+                                       while (1) {
+                                               int r = 0;
+                                               while (n + r < barcodelen
+                                                      &&
+                                                      isdigit(barcode[n + r]))
+                                                       r++;
+                                               if (n + 3 > barcodelen
+                                                   || r >= 6)
+                                                       break;
+                                               encoding[n++] = 'C';
+                                               encoding[n++] = 'C';
+                                               encoding[n++] = 'C';
+                                       }
+                               }
+                               encoding[n] = 0;
+                               //fprintf (stderr, "%s\n%s\n", barcode, encoding);
+                       }
+               }
+       }
+       // processing stamps
+       if ((W & 1) || ecc < 200) {     // odd sizes
+               fprintf(stderr, "Not done odd sizes yet, sorry\n");
+       } else {                // even sizes
+               grid =
+                   iec16022ecc200(&W, &H, &encoding, barcodelen, barcode, &len,
+                                  &maxlen, &ecclen);
+       }
+
+       // output
+       if (!grid || !W) {
+               fprintf(stderr, "No barcode produced\n");
+               return 1;
+       }
+       switch (tolower(*format)) {
+       case 'i':               // info
+               printf("Size    : %dx%d\n", W, H);
+               printf("Encoded : %d of %d bytes with %d bytes of ecc\n", len,
+                      maxlen, ecclen);
+               printf("Barcode : %s\n", barcode);
+               printf("Encoding: %s\n", encoding);
+               break;
+       case 'h':               // hex
+               dumphex(grid, W, H, 0);
+               break;
+       case 'b':               // bin
+               {
+                       int y;
+                       for (y = 0; y < H; y++) {
+                               int v = 0, x, b = 128;
+                               for (x = 0; x < W; x++) {
+                                       if (grid[y * W + x])
+                                               v |= b;
+                                       b >>= 1;
+                                       if (!b) {
+                                               putchar(v);
+                                               v = 0;
+                                               b = 128;
+                                       }
+                               }
+                               if (b != 128)
+                                       putchar(v);
+                       }
+               }
+               break;
+       case 't':               // text
+               {
+                       int y;
+                       for (y = H - 1; y >= 0; y--) {
+                               int x;
+                               for (x = 0; x < W; x++)
+                                       printf("%c",
+                                              grid[W * y + x] ? '*' : ' ');
+                               printf("\n");
+                       }
+               }
+               break;
+       case 'e':               // EPS
+               printf("%%!PS-Adobe-3.0 EPSF-3.0\n"
+                      "%%%%Creator: IEC16022 barcode/stamp generator\n"
+                      "%%%%BarcodeData: %s\n" "%%%%BarcodeSize: %dx%d\n"
+                      "%%%%BarcodeFormat: ECC200\n"
+                      "%%%%DocumentData: Clean7Bit\n" "%%%%LanguageLevel: 1\n"
+                      "%%%%Pages: 1\n" "%%%%BoundingBox: 0 0 %d %d\n"
+                      "%%%%EndComments\n" "%%%%Page: 1 1\n"
+                      "%d %d 1[1 0 0 1 -1 -1]{<\n", barcode, W, H, W + 2,
+                      H + 2, W, H);
+               dumphex(grid, W, H, 0xFF);
+               printf(">}image\n");
+               break;
+       case 's':               // Stamp
+               {
+                       char temp[74], c;
+                       time_t now;
+                       struct tm t = {
+                               0
+                       };
+                       int v;
+                       if (barcodelen < 74) {
+                               fprintf(stderr,
+                                       "Does not look like a stamp barcode\n");
+                               return 1;
+                       }
+                       memcpy(temp, barcode, 74);
+                       c = temp[5];
+                       temp[56] = 0;
+                       t.tm_year = atoi(temp + 54) + 100;
+                       t.tm_mday = 1;
+                       now = mktime(&t);
+                       temp[54] = 0;
+                       now += 86400 * (atoi(temp + 51) - 1);
+                       t = *gmtime(&now);
+                       temp[46] = 0;
+                       v = atoi(temp + 36);
+                       printf("%%!PS-Adobe-3.0 EPSF-3.0\n"
+                              "%%%%Creator: IEC16022 barcode/stamp generator\n"
+                              "%%%%BarcodeData: %s\n" "%%%%BarcodeSize: %dx%d\n" "%%%%DocumentData: Clean7Bit\n" "%%%%LanguageLevel: 1\n" "%%%%Pages: 1\n" "%%%%BoundingBox: 0 0 190 80\n" "%%%%EndComments\n" "%%%%Page: 1 1\n" "10 dict begin/f{findfont exch scalefont \
+                                setfont}bind def/rm/rmoveto load def/m/moveto load \
+                                def/rl/rlineto load def\n" "/l/lineto load def/cp/closepath load def/c{dup stringwidth \
+                                pop -2 div 0 rmoveto show}bind def\n" "gsave 72 25.4 div dup scale 0 0 m 67 0 rl 0 28 rl -67 0 rl \
+                                cp clip 1 setgray fill 0 setgray 0.5 0 translate 0.3 \
+                                setlinewidth\n" "32 32 1[2 0 0 2 0 -11]{<\n", barcode, W, H);
+                       dumphex(grid, W, H, 0xFF);
+                       printf(">}image\n"
+                              "3.25/Helvetica-Bold f 8 25.3 m(\\243%d.%02d)c\n"
+                              "2.6/Helvetica f 8 22.3 m(%.4s %.4s)c\n"
+                              "1.5/Helvetica f 8 3.3 m(POST BY)c\n"
+                              "3.3/Helvetica f 8 0.25 m(%02d.%02d.%02d)c\n",
+                              v / 100, v % 100, temp + 6, temp + 10, t.tm_mday,
+                              t.tm_mon + 1, t.tm_year % 100);
+                       if (c == '1' || c == '2' || c == 'A' || c == 'S') {
+                               if (c == '2')
+                                       printf
+                                           ("42 0 m 10 0 rl 0 28 rl -10 0 rl cp 57 0 m 5 0 rl 0 \
+                                          28 rl -5 0 rl cp");
+                               else
+                                       printf
+                                           ("42 0 m 5 0 rl 0 28 rl -5 0 rl cp 52 0 m 10 0 rl 0 \
+                                          28 rl -10 0 rl cp");
+                               printf
+                                   (" 21 0 m 16 0 rl 0 28 rl -16 0 rl cp fill\n"
+                                    "21.3 0.3 m 15.4 0 rl 0 13 rl -15.4 0 rl cp 1 setgray \
+                                       fill gsave 21.3 0.3 15.4 27.4 rectclip newpath\n");
+                               switch (c) {
+                               case '1':
+                                       printf
+                                           ("27/Helvetica-Bold f 27 8.7 m(1)show grestore 0 setgray \
+                                  1.5/Helvetica-Bold f 22 3.3 m(POSTAGE PAID GB)show \
+                                  1.7/Helvetica f 29 1.5 m(DumbStamp.co.uk)c\n");
+                                       break;
+                               case '2':
+                                       printf
+                                           ("21/Helvetica-Bold f 23.5 13 m(2)1.25 1 scale show grestore \
+                                  0 setgray 1.5/Helvetica-Bold f 22 3.3 \
+                                  m(POSTAGE PAID GB)show 1.7/Helvetica f 29 1.5 \
+                                  m(DumbStamp.co.uk)c\n");
+                                       break;
+                               case 'A':
+                                       printf
+                                           ("16/Helvetica-Bold f 29 14.75 m 1.1 1 scale(A)c grestore 0 \
+                                  setgray 1.5/Helvetica-Bold f 22 3.3 m(POSTAGE PAID GB)show \
+                                  1.7/Helvetica f 22 1.5 m(Par Avion)show\n");
+                                       break;
+                               case 'S':
+                                       printf
+                                           ("10/Helvetica-Bold f 29 17 m(SU)c grestore 0 setgray \
+                                          1.5/Helvetica-Bold f 22 1.5 m(POSTAGE PAID GB)show\n");
+                                       break;
+                               }
+                               printf
+                                   ("2.3/Helvetica-Bold f 29 10 m(LOYAL MAIL)c\n");
+                       } else if (c == 'P') {  // Standard Parcels
+                               printf("21 0 m 41 0 rl 0 28 rl -41 0 rl cp fill\n" "37.7 0.3 m 24 0 rl 0 27.4 rl -24 0 rl cp 1 setgray fill \
+                                       gsave 21.3 0.3 16.4 27.4 rectclip newpath\n" "22.5/Helvetica-Bold f 37.75 -1.25 m 90 rotate(SP)show \
+                                       grestore 0 setgray\n"
+                                      "3.5/Helvetica-Bold f 49.7 21.5 m(LOYAL MAIL)c\n" "2.3/Helvetica-Bold f 49.7 7 m(POSTAGE PAID GB)c\n" "2.6/Helveica f 49.7 4.25 m(DumbStamp.co.uk)c\n");
+                       } else if (c == '3')
+                               printf("21.15 0.15 40.7 27.7 rectstroke\n"
+                                      "21 0 m 41 0 rl 0 5 rl -41 0 rl cp fill\n"
+                                      "0 1 2{0 1 18{dup 1.525 mul 22.9 add 24 3 index 1.525 mul \
+                                       add 3 -1 roll 9 add 29 div 0 360 arc fill}for pop}for\n" "50.5 23.07 m 11.5 0 rl 0 5 rl -11.5 0 rl cp fill\n"
+                                      "5.85/Helvetica f 23.7 15.6 m(Loyal Mail)show\n" "4.75/Helvetica-Bold f 24 11 m(special)show 4.9/Helvetica \
+                                       f(delivery)show\n" "gsave 1 setgray 3.2/Helvetica-Bold f 24 1.6 \
+                                       m(next day)show 26 10.15 m 2 0 rl stroke grestore\n" "21.15 9.9 m 53.8 9.9 l stroke 53.8 9.9 0.4 0 360 \
+                                       arc fill\n");
+                       printf("end grestore\n");
+               }
+               break;
+       case 'p':               // png
+               {
+                       int x, y;
+                       Image *i = ImageNew(W + 2, H + 2, 2);
+                       i->Colour[0] = 0xFFFFFF;
+                       i->Colour[1] = 0;
+                       for (y = 0; y < H; y++)
+                               for (x = 0; x < W; x++)
+                                       if (grid[y * W + x])
+                                               ImagePixel(i, x + 1, H - y) = 1;
+                       ImageWritePNG(i, fileno(stdout), 0, -1, barcode);
+                       ImageFree(i);
+               }
+               break;
+       default:
+               fprintf(stderr, "Unknown output format %s\n", format);
+               break;
+       }
+       return 0;
+}
diff --git a/iec16022-0.2.1/iec16022ecc200.c b/iec16022-0.2.1/iec16022ecc200.c
new file mode 100644 (file)
index 0000000..0b28db7
--- /dev/null
@@ -0,0 +1,963 @@
+/** 
+ *
+ * IEC16022 bar code generation
+ * Adrian Kennard, Andrews & Arnold Ltd
+ * with help from Cliff Hones on the RS coding
+ * 
+ * (c) 2004 Adrian Kennard, Andrews & Arnold Ltd
+ * (c) 2006 Stefan Schmidt <stefan@datenfreihafen.org>
+ * 
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
+#include <popt.h>
+#include <malloc.h>
+#include "reedsol.h"
+#include "iec16022ecc200.h"
+
+static struct ecc200matrix_s {
+       int H, W;
+       int FH, FW;
+       int bytes;
+       int datablock, rsblock;
+} ecc200matrix[] = {
+       10, 10, 10, 10, 3, 3, 5,        //
+           12, 12, 12, 12, 5, 5, 7,    //
+           8, 18, 8, 18, 5, 5, 7,      //
+           14, 14, 14, 14, 8, 8, 10,   //
+           8, 32, 8, 16, 10, 10, 11,   //
+           16, 16, 16, 16, 12, 12, 12, //
+           12, 26, 12, 26, 16, 16, 14, //
+           18, 18, 18, 18, 18, 18, 14, //
+           20, 20, 20, 20, 22, 22, 18, //
+           12, 36, 12, 18, 22, 22, 18, //
+           22, 22, 22, 22, 30, 30, 20, //
+           16, 36, 16, 18, 32, 32, 24, //
+           24, 24, 24, 24, 36, 36, 24, //
+           26, 26, 26, 26, 44, 44, 28, //
+           16, 48, 16, 24, 49, 49, 28, //
+           32, 32, 16, 16, 62, 62, 36, //
+           36, 36, 18, 18, 86, 86, 42, //
+           40, 40, 20, 20, 114, 114, 48,       //
+           44, 44, 22, 22, 144, 144, 56,       //
+           48, 48, 24, 24, 174, 174, 68,       //
+           52, 52, 26, 26, 204, 102, 42,       //
+           64, 64, 16, 16, 280, 140, 56,       //
+           72, 72, 18, 18, 368, 92, 36,        //
+           80, 80, 20, 20, 456, 114, 48,       //
+           88, 88, 22, 22, 576, 144, 56,       //
+           96, 96, 24, 24, 696, 174, 68,       //
+           104, 104, 26, 26, 816, 136, 56,     //
+           120, 120, 20, 20, 1050, 175, 68,    //
+           132, 132, 22, 22, 1304, 163, 62,    //
+           144, 144, 24, 24, 1558, 156, 62,    // 156*4+155*2
+           0                   // terminate
+};
+
+ // simple checked response malloc
+static void *safemalloc(int n)
+{
+       void *p = malloc(n);
+       if (!p) {
+               fprintf(stderr, "Malloc(%d) failed\n", n);
+               exit(1);
+       }
+       return p;
+}
+
+// Annex M placement alorithm low level
+static void ecc200placementbit(int *array, int NR, int NC, int r, int c,
+                              int p, char b)
+{
+       if (r < 0) {
+               r += NR;
+               c += 4 - ((NR + 4) % 8);
+       }
+       if (c < 0) {
+               c += NC;
+               r += 4 - ((NC + 4) % 8);
+       }
+       array[r * NC + c] = (p << 3) + b;
+}
+
+static void ecc200placementblock(int *array, int NR, int NC, int r,
+                                int c, int p)
+{
+       ecc200placementbit(array, NR, NC, r - 2, c - 2, p, 7);
+       ecc200placementbit(array, NR, NC, r - 2, c - 1, p, 6);
+       ecc200placementbit(array, NR, NC, r - 1, c - 2, p, 5);
+       ecc200placementbit(array, NR, NC, r - 1, c - 1, p, 4);
+       ecc200placementbit(array, NR, NC, r - 1, c - 0, p, 3);
+       ecc200placementbit(array, NR, NC, r - 0, c - 2, p, 2);
+       ecc200placementbit(array, NR, NC, r - 0, c - 1, p, 1);
+       ecc200placementbit(array, NR, NC, r - 0, c - 0, p, 0);
+}
+
+static void ecc200placementcornerA(int *array, int NR, int NC, int p)
+{
+       ecc200placementbit(array, NR, NC, NR - 1, 0, p, 7);
+       ecc200placementbit(array, NR, NC, NR - 1, 1, p, 6);
+       ecc200placementbit(array, NR, NC, NR - 1, 2, p, 5);
+       ecc200placementbit(array, NR, NC, 0, NC - 2, p, 4);
+       ecc200placementbit(array, NR, NC, 0, NC - 1, p, 3);
+       ecc200placementbit(array, NR, NC, 1, NC - 1, p, 2);
+       ecc200placementbit(array, NR, NC, 2, NC - 1, p, 1);
+       ecc200placementbit(array, NR, NC, 3, NC - 1, p, 0);
+}
+
+static void ecc200placementcornerB(int *array, int NR, int NC, int p)
+{
+       ecc200placementbit(array, NR, NC, NR - 3, 0, p, 7);
+       ecc200placementbit(array, NR, NC, NR - 2, 0, p, 6);
+       ecc200placementbit(array, NR, NC, NR - 1, 0, p, 5);
+       ecc200placementbit(array, NR, NC, 0, NC - 4, p, 4);
+       ecc200placementbit(array, NR, NC, 0, NC - 3, p, 3);
+       ecc200placementbit(array, NR, NC, 0, NC - 2, p, 2);
+       ecc200placementbit(array, NR, NC, 0, NC - 1, p, 1);
+       ecc200placementbit(array, NR, NC, 1, NC - 1, p, 0);
+}
+
+static void ecc200placementcornerC(int *array, int NR, int NC, int p)
+{
+       ecc200placementbit(array, NR, NC, NR - 3, 0, p, 7);
+       ecc200placementbit(array, NR, NC, NR - 2, 0, p, 6);
+       ecc200placementbit(array, NR, NC, NR - 1, 0, p, 5);
+       ecc200placementbit(array, NR, NC, 0, NC - 2, p, 4);
+       ecc200placementbit(array, NR, NC, 0, NC - 1, p, 3);
+       ecc200placementbit(array, NR, NC, 1, NC - 1, p, 2);
+       ecc200placementbit(array, NR, NC, 2, NC - 1, p, 1);
+       ecc200placementbit(array, NR, NC, 3, NC - 1, p, 0);
+}
+
+static void ecc200placementcornerD(int *array, int NR, int NC, int p)
+{
+       ecc200placementbit(array, NR, NC, NR - 1, 0, p, 7);
+       ecc200placementbit(array, NR, NC, NR - 1, NC - 1, p, 6);
+       ecc200placementbit(array, NR, NC, 0, NC - 3, p, 5);
+       ecc200placementbit(array, NR, NC, 0, NC - 2, p, 4);
+       ecc200placementbit(array, NR, NC, 0, NC - 1, p, 3);
+       ecc200placementbit(array, NR, NC, 1, NC - 3, p, 2);
+       ecc200placementbit(array, NR, NC, 1, NC - 2, p, 1);
+       ecc200placementbit(array, NR, NC, 1, NC - 1, p, 0);
+}
+
+// Annex M placement alorithm main function
+static void ecc200placement(int *array, int NR, int NC)
+{
+       int r, c, p;
+       // invalidate
+       for (r = 0; r < NR; r++)
+               for (c = 0; c < NC; c++)
+                       array[r * NC + c] = 0;
+       // start
+       p = 1;
+       r = 4;
+       c = 0;
+       do {
+               // check corner
+               if (r == NR && !c)
+                       ecc200placementcornerA(array, NR, NC, p++);
+               if (r == NR - 2 && !c && NC % 4)
+                       ecc200placementcornerB(array, NR, NC, p++);
+               if (r == NR - 2 && !c && (NC % 8) == 4)
+                       ecc200placementcornerC(array, NR, NC, p++);
+               if (r == NR + 4 && c == 2 && !(NC % 8))
+                       ecc200placementcornerD(array, NR, NC, p++);
+               // up/right
+               do {
+                       if (r < NR && c >= 0 && !array[r * NC + c])
+                               ecc200placementblock(array, NR, NC, r, c, p++);
+                       r -= 2;
+                       c += 2;
+               }
+               while (r >= 0 && c < NC);
+               r++;
+               c += 3;
+               // down/left
+               do {
+                       if (r >= 0 && c < NC && !array[r * NC + c])
+                               ecc200placementblock(array, NR, NC, r, c, p++);
+                       r += 2;
+                       c -= 2;
+               }
+               while (r < NR && c >= 0);
+               r += 3;
+               c++;
+       }
+       while (r < NR || c < NC);
+       // unfilled corner
+       if (!array[NR * NC - 1])
+               array[NR * NC - 1] = array[NR * NC - NC - 2] = 1;
+}
+
+// calculate and append ecc code, and if necessary interleave
+static void ecc200(unsigned char *binary, int bytes, int datablock, int rsblock)
+{
+       int blocks = (bytes + 2) / datablock, b;
+       rs_init_gf(0x12d);
+       rs_init_code(rsblock, 1);
+       for (b = 0; b < blocks; b++) {
+               unsigned char buf[256], ecc[256];
+               int n, p = 0;
+               for (n = b; n < bytes; n += blocks)
+                       buf[p++] = binary[n];
+               rs_encode(p, buf, ecc);
+               p = rsblock - 1;        // comes back reversed
+               for (n = b; n < rsblock * blocks; n += blocks)
+                       binary[bytes + n] = ecc[p--];
+       }
+}
+
+/*
+ * perform encoding for ecc200, source s len sl, to target t len tl, using 
+ * optional encoding control string e return 1 if OK, 0 if failed. Does all 
+ * necessary padding to tl
+ */
+
+char ecc200encode(unsigned char *t, int tl, unsigned char *s, int sl,
+                 char *encoding, int *lenp)
+{
+       char enc = 'a';         // start in ASCII encoding mode
+       int tp = 0, sp = 0;
+       if (strlen(encoding) < sl) {
+               fprintf(stderr, "Encoding string too short\n");
+               return 0;
+       }
+       // do the encoding
+       while (sp < sl && tp < tl) {
+               char newenc = enc;      // suggest new encoding
+               if (tl - tp <= 1 && (enc == 'c' || enc == 't') || tl - tp <= 2
+                   && enc == 'x')
+                       enc = 'a';      // auto revert to ASCII
+               newenc = tolower(encoding[sp]);
+               switch (newenc) {       // encode character
+               case 'c':       // C40
+               case 't':       // Text
+               case 'x':       // X12
+                       {
+                               char out[6], p = 0;
+                               const char *e,
+                                   *s2 = "!\"#$%&'()*+,-./:;<=>?@[\\]_",
+                                   *s3 = 0;
+                               if (newenc == 'c') {
+                                       e = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+                                       s3 = "`abcdefghijklmnopqrstuvwxyz{|}~\177";
+                               }
+                               if (newenc == 't') {
+                                       e = " 0123456789abcdefghijklmnopqrstuvwxyz";
+                                       s3 = "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\177";
+                               }
+                               if (newenc == 'x')
+                                       e = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\r*>";
+                               do {
+                                       unsigned char c = s[sp++];
+                                       char *w;
+                                       if (c & 0x80) {
+                                               if (newenc == 'x') {
+                                                       fprintf(stderr,
+                                                               "Cannot encode char 0x%02X in X12\n",
+                                                               c);
+                                                       return 0;
+                                               }
+                                               c &= 0x7f;
+                                               out[p++] = 1;
+                                               out[p++] = 30;
+                                       }
+                                       w = strchr(e, c);
+                                       if (w)
+                                               out[p++] = ((w - e) + 3) % 40;
+                                       else {
+                                               if (newenc == 'x') {
+                                                       fprintf(stderr,
+                                                               "Cannot encode char 0x%02X in X12\n",
+                                                               c);
+                                                       return 0;
+                                               }
+                                               if (c < 32) {   // shift 1
+                                                       out[p++] = 0;
+                                                       out[p++] = c;
+                                               } else {
+                                                       w = strchr(s2, c);
+                                                       if (w) {        // shift 2
+                                                               out[p++] = 1;
+                                                               out[p++] =
+                                                                   (w - s2);
+                                                       } else {
+                                                               w = strchr(s3,
+                                                                          c);
+                                                               if (w) {
+                                                                       out[p++]
+                                                                           = 2;
+                                                                       out[p++]
+                                                                           =
+                                                                           (w -
+                                                                            s3);
+                                                               } else {
+                                                                       fprintf
+                                                                           (stderr,
+                                                                            "Could not encode 0x%02X, should \
+                                                                       not happen\n", c);
+                                                                       return
+                                                                           0;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                                       if (p == 2 && tp + 2 == tl && sp == sl)
+                                               out[p++] = 0;   // shift 1 pad at end
+                                       while (p >= 3) {
+                                               int v =
+                                                   out[0] * 1600 +
+                                                   out[1] * 40 + out[2] + 1;
+                                               if (enc != newenc) {
+                                                       if (enc == 'c'
+                                                           || enc == 't'
+                                                           || enc == 'x')
+                                                               t[tp++] = 254;  // escape C40/text/X12
+                                                       else if (enc == 'x')
+                                                               t[tp++] = 0x7C; // escape EDIFACT
+                                                       if (newenc == 'c')
+                                                               t[tp++] = 230;
+                                                       if (newenc == 't')
+                                                               t[tp++] = 239;
+                                                       if (newenc == 'x')
+                                                               t[tp++] = 238;
+                                                       enc = newenc;
+                                               }
+                                               t[tp++] = (v >> 8);
+                                               t[tp++] = (v & 0xFF);
+                                               p -= 3;
+                                               out[0] = out[3];
+                                               out[1] = out[4];
+                                               out[2] = out[5];
+                                       }
+                               }
+                               while (p && sp < sl);
+                       }
+                       break;
+               case 'e':       // EDIFACT
+                       {
+                               unsigned char out[4], p = 0;
+                               if (enc != newenc) {    // can only be from C40/Text/X12
+                                       t[tp++] = 254;
+                                       enc = 'a';
+                               }
+                               while (sp < sl && tolower(encoding[sp]) == 'e'
+                                      && p < 4)
+                                       out[p++] = s[sp++];
+                               if (p < 4) {
+                                       out[p++] = 0x1F;
+                                       enc = 'a';
+                               }       // termination
+                               t[tp] = ((s[0] & 0x3F) << 2);
+                               t[tp++] |= ((s[1] & 0x30) >> 4);
+                               t[tp] = ((s[1] & 0x0F) << 4);
+                               if (p == 2)
+                                       tp++;
+                               else {
+                                       t[tp++] |= ((s[2] & 0x3C) >> 2);
+                                       t[tp] = ((s[2] & 0x03) << 6);
+                                       t[tp++] |= (s[3] & 0x3F);
+                               }
+                       }
+                       break;
+               case 'a':       // ASCII
+                       if (enc != newenc) {
+                               if (enc == 'c' || enc == 't' || enc == 'x')
+                                       t[tp++] = 254;  // escape C40/text/X12
+                               else
+                                       t[tp++] = 0x7C; // escape EDIFACT
+                       }
+                       enc = 'a';
+                       if (sl - sp >= 2 && isdigit(s[sp])
+                           && isdigit(s[sp + 1])) {
+                               t[tp++] =
+                                   (s[sp] - '0') * 10 + s[sp + 1] - '0' + 130;
+                               sp += 2;
+                       } else if (s[sp] > 127) {
+                               t[tp++] = 235;
+                               t[tp++] = s[sp++] - 127;
+                       } else
+                               t[tp++] = s[sp++] + 1;
+                       break;
+               case 'b':       // Binary
+                       {
+                               int l = 0;      // how much to encode
+                               if (encoding) {
+                                       int p;
+                                       for (p = sp;
+                                            p < sl
+                                            && tolower(encoding[p]) == 'b';
+                                            p++)
+                                               l++;
+                               }
+                               t[tp++] = 231;  // base256
+                               if (l < 250)
+                                       t[tp++] = l;
+                               else {
+                                       t[tp++] = 249 + (l / 250);
+                                       t[tp++] = (l % 250);
+                               }
+                               while (l-- && tp < tl) {
+                                       t[tp] = s[sp++] + (((tp + 1) * 149) % 255) + 1; // see annex H
+                                       tp++;
+                               }
+                               enc = 'a';      // reverse to ASCII at end
+                       }
+                       break;
+               default:
+                       fprintf(stderr, "Unknown encoding %c\n", newenc);
+                       return 0;       // failed
+               }
+       }
+       if (lenp)
+               *lenp = tp;
+       if (tp < tl && enc != 'a') {
+               if (enc == 'c' || enc == 'x' || enc == 't')
+                       t[tp++] = 254;  // escape X12/C40/Text
+               else
+                       t[tp++] = 0x7C; // escape EDIFACT
+       }
+       if (tp < tl)
+               t[tp++] = 129;  // pad
+       while (tp < tl) {       // more padding
+               int v = 129 + (((tp + 1) * 149) % 253) + 1;     // see Annex H
+               if (v > 254)
+                       v -= 254;
+               t[tp++] = v;
+       }
+       if (tp > tl || sp < sl)
+               return 0;       // did not fit
+       /*
+        * for (tp = 0; tp < tl; tp++) fprintf (stderr, "%02X ", t[tp]); \
+        * fprintf (stderr, "\n");
+        */
+       return 1;               // OK 
+}
+
+// Auto encoding format functions
+static char encchr[] = "ACTXEB";
+
+enum {
+       E_ASCII,
+       E_C40,
+       E_TEXT,
+       E_X12,
+       E_EDIFACT,
+       E_BINARY,
+       E_MAX
+};
+
+unsigned char switchcost[E_MAX][E_MAX] = {
+       0, 1, 1, 1, 1, 2,       // From E_ASCII
+       1, 0, 2, 2, 2, 3,       // From E_C40
+       1, 2, 0, 2, 2, 3,       // From E_TEXT
+       1, 2, 2, 0, 2, 3,       // From E_X12
+       1, 2, 2, 2, 0, 3,       // From E_EDIFACT
+       0, 1, 1, 1, 1, 0,       // From E_BINARY
+};
+
+/*
+ * Creates a encoding list (malloc)
+ * returns encoding string
+ * if lenp not null, target len stored
+ * if error, null returned
+ * if exact specified, then assumes shortcuts applicable for exact fit 
+ * in target
+ * 1. No unlatch to return to ASCII for last encoded byte after C40 or 
+ * Text or X12
+ * 2. No unlatch to return to ASCII for last 1 or 2 encoded bytes after 
+ * EDIFACT
+ * 3. Final C40 or text encoding exactly in last 2 bytes can have a shift 
+ * 0 to pad to make a tripple
+ * Only use the encoding from an exact request if the len matches the target, 
+ * otherwise free the result and try again with exact=0
+ */
+
+static char *encmake(int l, unsigned char *s, int *lenp, char exact)
+{
+       char *encoding = 0;
+       int p = l;
+       char e;
+       struct {
+               // number of bytes of source that can be encoded in a row at this point
+               // using this encoding mode
+               short s;
+               // number of bytes of target generated encoding from this point to end if
+               // already in this encoding mode
+               short t;
+       } enc[MAXBARCODE][E_MAX];
+       memset(&enc, 0, sizeof(enc));
+       if (!l)
+               return "";      // no length
+       if (l > MAXBARCODE)
+               return 0;       // not valid
+       while (p--) {
+               char b = 0, sub;
+               int sl, tl, bl, t;
+               // consider each encoding from this point
+               // ASCII
+               sl = tl = 1;
+               if (isdigit(s[p]) && p + 1 < l && isdigit(s[p + 1]))
+                       sl = 2; // double digit
+               else if (s[p] & 0x80)
+                       tl = 2; // high shifted
+               bl = 0;
+               if (p + sl < l)
+                       for (e = 0; e < E_MAX; e++)
+                               if (enc[p + sl][e].t && ((t = enc[p + sl][e].t +
+                                                         switchcost[E_ASCII]
+                                                         [e]) < bl || !bl)) {
+                                       bl = t;
+                                       b = e;
+                               }
+               enc[p][E_ASCII].t = tl + bl;
+               enc[p][E_ASCII].s = sl;
+               if (bl && b == E_ASCII)
+                       enc[p][b].s += enc[p + sl][b].s;
+               // C40
+               sub = tl = sl = 0;
+               do {
+                       unsigned char c = s[p + sl++];
+                       if (c & 0x80) { // shift + upper
+                               sub += 2;
+                               c &= 0x7F;
+                       }
+                       if (c != ' ' && !isdigit(c) && !isupper(c))
+                               sub++;  // shift
+                       sub++;
+                       while (sub >= 3) {
+                               sub -= 3;
+                               tl += 2;
+                       }
+               } while (sub && p + sl < l);
+               if (exact && sub == 2 && p + sl == l) {
+                       // special case, can encode last block with shift 0 at end (Is this 
+                       // valid when not end of target buffer?)
+                       sub = 0;
+                       tl += 2;
+               }
+               if (!sub) {     // can encode C40
+                       bl = 0;
+                       if (p + sl < l)
+                               for (e = 0; e < E_MAX; e++)
+                                       if (enc[p + sl][e].t
+                                           &&
+                                           ((t =
+                                             enc[p + sl][e].t +
+                                             switchcost[E_C40][e]) < bl
+                                            || !bl)) {
+                                               bl = t;
+                                               b = e;
+                                       }
+                       if (exact && enc[p + sl][E_ASCII].t == 1 && 1 < bl) {
+                               // special case, switch to ASCII for last bytes
+                               bl = 1;
+                               b = E_ASCII;
+                       }
+                       enc[p][E_C40].t = tl + bl;
+                       enc[p][E_C40].s = sl;
+                       if (bl && b == E_C40)
+                               enc[p][b].s += enc[p + sl][b].s;
+               }
+               // Text
+               sub = tl = sl = 0;
+               do {
+                       unsigned char c = s[p + sl++];
+                       if (c & 0x80) { // shift + upper
+                               sub += 2;
+                               c &= 0x7F;
+                       }
+                       if (c != ' ' && !isdigit(c) && !islower(c))
+                               sub++;  // shift
+                       sub++;
+                       while (sub >= 3) {
+                               sub -= 3;
+                               tl += 2;
+                       }
+               } while (sub && p + sl < l);
+               if (exact && sub == 2 && p + sl == l) {
+                       // special case, can encode last block with shift 0 at end (Is this 
+                       // valid when not end of target buffer?)
+                       sub = 0;
+                       tl += 2;
+               }
+               if (!sub && sl) {       // can encode Text
+                       bl = 0;
+                       if (p + sl < l)
+                               for (e = 0; e < E_MAX; e++)
+                                       if (enc[p + sl][e].t
+                                           &&
+                                           ((t =
+                                             enc[p + sl][e].t +
+                                             switchcost[E_TEXT][e]) < bl
+                                            || !bl)) {
+                                               bl = t;
+                                               b = e;
+                                       }
+                       if (exact && enc[p + sl][E_ASCII].t == 1 && 1 < bl) {   // special case, switch to ASCII for last bytes
+                               bl = 1;
+                               b = E_ASCII;
+                       }
+                       enc[p][E_TEXT].t = tl + bl;
+                       enc[p][E_TEXT].s = sl;
+                       if (bl && b == E_TEXT)
+                               enc[p][b].s += enc[p + sl][b].s;
+               }
+               // X12
+               sub = tl = sl = 0;
+               do {
+                       unsigned char c = s[p + sl++];
+                       if (c != 13 && c != '*' && c != '>' && c != ' '
+                           && !isdigit(c) && !isupper(c)) {
+                               sl = 0;
+                               break;
+                       }
+                       sub++;
+                       while (sub >= 3) {
+                               sub -= 3;
+                               tl += 2;
+                       }
+               } while (sub && p + sl < l);
+               if (!sub && sl) {       // can encode X12
+                       bl = 0;
+                       if (p + sl < l)
+                               for (e = 0; e < E_MAX; e++)
+                                       if (enc[p + sl][e].t
+                                           &&
+                                           ((t =
+                                             enc[p + sl][e].t +
+                                             switchcost[E_X12][e]) < bl
+                                            || !bl)) {
+                                               bl = t;
+                                               b = e;
+                                       }
+                       if (exact && enc[p + sl][E_ASCII].t == 1 && 1 < bl) {
+                               // special case, switch to ASCII for last bytes
+                               bl = 1;
+                               b = E_ASCII;
+                       }
+                       enc[p][E_X12].t = tl + bl;
+                       enc[p][E_X12].s = sl;
+                       if (bl && b == E_X12)
+                               enc[p][b].s += enc[p + sl][b].s;
+               }
+               // EDIFACT
+               sl = bl = 0;
+               if (s[p + 0] >= 32 && s[p + 0] <= 94) { // can encode 1
+                       char bs = 0;
+                       if (p + 1 == l && (!bl || bl < 2)) {
+                               bl = 2;
+                               bs = 1;
+                       } else
+                               for (e = 0; e < E_MAX; e++)
+                                       if (e != E_EDIFACT && enc[p + 1][e].t
+                                           &&
+                                           ((t =
+                                             2 + enc[p + 1][e].t +
+                                             switchcost[E_ASCII][e])
+                                            < bl || !bl))      // E_ASCII as allowed for unlatch
+                                       {
+                                               bs = 1;
+                                               bl = t;
+                                               b = e;
+                                       }
+                       if (p + 1 < l && s[p + 1] >= 32 && s[p + 1] <= 94) {    // can encode 2
+                               if (p + 2 == l && (!bl || bl < 2)) {
+                                       bl = 3;
+                                       bs = 2;
+                               } else
+                                       for (e = 0; e < E_MAX; e++)
+                                               if (e != E_EDIFACT
+                                                   && enc[p + 2][e].t
+                                                   &&
+                                                   ((t =
+                                                     3 + enc[p + 2][e].t +
+                                                     switchcost[E_ASCII][e])
+                                                    < bl || !bl))      // E_ASCII as allowed for unlatch
+                                               {
+                                                       bs = 2;
+                                                       bl = t;
+                                                       b = e;
+                                               }
+                               if (p + 2 < l && s[p + 2] >= 32 && s[p + 2] <= 94) {    // can encode 3
+                                       if (p + 3 == l && (!bl || bl < 3)) {
+                                               bl = 3;
+                                               bs = 3;
+                                       } else
+                                               for (e = 0; e < E_MAX; e++)
+                                                       if (e != E_EDIFACT
+                                                           && enc[p + 3][e].t
+                                                           &&
+                                                           ((t =
+                                                             3 + enc[p +
+                                                                     3][e].t +
+                                                             switchcost
+                                                             [E_ASCII][e])
+                                                            < bl || !bl))      // E_ASCII as allowed for unlatch
+                                                       {
+                                                               bs = 3;
+                                                               bl = t;
+                                                               b = e;
+                                                       }
+                                       if (p + 4 < l && s[p + 3] >= 32 && s[p + 3] <= 94) {    // can encode 4
+                                               if (p + 4 == l
+                                                   && (!bl || bl < 3)) {
+                                                       bl = 3;
+                                                       bs = 4;
+                                               } else {
+                                                       for (e = 0; e < E_MAX;
+                                                            e++)
+                                                               if (enc[p + 4]
+                                                                   [e].t
+                                                                   &&
+                                                                   ((t =
+                                                                     3 +
+                                                                     enc[p +
+                                                                         4][e].
+                                                                     t +
+                                                                     switchcost
+                                                                     [E_EDIFACT]
+                                                                     [e]) < bl
+                                                                    || !bl)) {
+                                                                       bs = 4;
+                                                                       bl = t;
+                                                                       b = e;
+                                                               }
+                                                       if (exact
+                                                           && enc[p +
+                                                                  4][E_ASCII].t
+                                                           && enc[p +
+                                                                  4][E_ASCII].
+                                                           t <= 2
+                                                           && (t =
+                                                               3 + enc[p +
+                                                                       4]
+                                                               [E_ASCII].t) <
+                                                           bl) {
+                                                               // special case, switch to ASCII for last 1 ot two bytes
+                                                               bs = 4;
+                                                               bl = t;
+                                                               b = E_ASCII;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+                       enc[p][E_EDIFACT].t = bl;
+                       enc[p][E_EDIFACT].s = bs;
+                       if (bl && b == E_EDIFACT)
+                               enc[p][b].s += enc[p + bs][b].s;
+               }
+               // Binary
+               bl = 0;
+               for (e = 0; e < E_MAX; e++)
+                       if (enc[p + 1][e].t
+                           &&
+                           ((t =
+                             enc[p + 1][e].t + switchcost[E_BINARY][e] +
+                             ((e == E_BINARY
+                               && enc[p + 1][e].t == 249) ? 1 : 0))
+                            < bl || !bl)) {
+                               bl = t;
+                               b = e;
+                       }
+               enc[p][E_BINARY].t = 1 + bl;
+               enc[p][E_BINARY].s = 1;
+               if (bl && b == E_BINARY)
+                       enc[p][b].s += enc[p + 1][b].s;
+               /*
+                * fprintf (stderr, "%d:", p); for (e = 0; e < E_MAX; e++) fprintf \
+                * (stderr, " %c*%d/%d", encchr[e], enc[p][e].s, enc[p][e].t); \
+                * fprintf (stderr, "\n");
+                */
+       }
+       encoding = safemalloc(l + 1);
+       p = 0;
+       {
+               char cur = E_ASCII;     // starts ASCII
+               while (p < l) {
+                       int t, m = 0;
+                       char b = 0;
+                       for (e = 0; e < E_MAX; e++)
+                               if (enc[p][e].t
+                                   && ((t = enc[p][e].t + switchcost[cur][e]) <
+                                       m || t == m && e == cur || !m)) {
+                                       b = e;
+                                       m = t;
+                               }
+                       cur = b;
+                       m = enc[p][b].s;
+                       if (!p && lenp)
+                               *lenp = enc[p][b].t;
+                       while (p < l && m--)
+                               encoding[p++] = encchr[b];
+               }
+       }
+       encoding[p] = 0;
+       return encoding;
+}
+
+/*
+ * Main encoding function
+ * Returns the grid (malloced) containing the matrix. L corner at 0,0.
+ * Takes suggested size in *Wptr, *Hptr, or 0,0. Fills in actual size.
+ * Takes barcodelen and barcode to be encoded
+ * Note, if *encodingptr is null, then fills with auto picked (malloced) 
+ * encoding
+ * If lenp not null, then the length of encoded data before any final 
+ * unlatch or pad is stored
+ * If maxp not null, then the max storage of this size code is stored
+ * If eccp not null, then the number of ecc bytes used in this size is 
+ * stored
+ * Returns 0 on error (writes to stderr with details).
+ */
+
+unsigned char *iec16022ecc200(int *Wptr, int *Hptr, char **encodingptr,
+                             int barcodelen, unsigned char *barcode,
+                             int *lenp, int *maxp, int *eccp)
+{
+       unsigned char binary[3000];     // encoded raw data and ecc to place in barcode
+       int W = 0, H = 0;
+       char *encoding = 0;
+       unsigned char *grid = 0;
+       struct ecc200matrix_s *matrix;
+       memset(binary, 0, sizeof(binary));
+       if (encodingptr)
+               encoding = *encodingptr;
+       if (Wptr)
+               W = *Wptr;
+       if (Hptr)
+               H = *Hptr;
+
+       // encoding
+       if (W) {                // known size
+               for (matrix = ecc200matrix; matrix->W && (matrix->W != W ||
+                                                         matrix->H != H);
+                    matrix++) ;
+               if (!matrix->W) {
+                       fprintf(stderr, "Invalid size %dx%d\n", W, H);
+                       return 0;
+               }
+               if (!encoding) {
+                       int len;
+                       char *e = encmake(barcodelen, barcode, &len, 1);
+                       if (e && len != matrix->bytes) {        // try not an exact fit
+                               free(e);
+                               e = encmake(barcodelen, barcode, &len, 0);
+                               if (len > matrix->bytes) {
+                                       fprintf(stderr,
+                                               "Cannot make barcode fit %dx%d\n",
+                                               W, H);
+                                       return 0;
+                               }
+                       }
+                       encoding = e;
+               }
+       } else {
+               // find a suitable encoding
+               if (encoding == NULL)
+                       encoding = encmake(barcodelen, barcode, NULL, 1);
+
+               if (encoding) { // find one that fits chosen encoding
+                       for (matrix = ecc200matrix; matrix->W; matrix++)
+                               if (ecc200encode
+                                   (binary, matrix->bytes, barcode, barcodelen,
+                                    encoding, 0))
+                                       break;
+               } else {
+                       int len;
+                       char *e;
+                       e = encmake(barcodelen, barcode, &len, 1);
+                       for (matrix = ecc200matrix;
+                            matrix->W && matrix->bytes != len; matrix++) ;
+                       if (e && !matrix->W) {  // try for non exact fit
+                               free(e);
+                               e = encmake(barcodelen, barcode, &len, 0);
+                               for (matrix = ecc200matrix;
+                                    matrix->W && matrix->bytes < len;
+                                    matrix++) ;
+                       }
+                       encoding = e;
+               }
+               if (!matrix->W) {
+                       fprintf(stderr,
+                               "Cannot find suitable size, barcode too long\n");
+                       return 0;
+               }
+               W = matrix->W;
+               H = matrix->H;
+       }
+       if (!ecc200encode(binary, matrix->bytes, barcode, barcodelen,
+                         encoding, lenp)) {
+               fprintf(stderr, "Barcode too long for %dx%d\n", W, H);
+               return 0;
+       }
+       // ecc code
+       ecc200(binary, matrix->bytes, matrix->datablock, matrix->rsblock);
+       {                       // placement
+               int x, y, NC, NR, *places;
+               NC = W - 2 * (W / matrix->FW);
+               NR = H - 2 * (H / matrix->FH);
+               places = safemalloc(NC * NR * sizeof(int));
+               ecc200placement(places, NR, NC);
+               grid = safemalloc(W * H);
+               memset(grid, 0, W * H);
+               for (y = 0; y < H; y += matrix->FH) {
+                       for (x = 0; x < W; x++)
+                               grid[y * W + x] = 1;
+                       for (x = 0; x < W; x += 2)
+                               grid[(y + matrix->FH - 1) * W + x] = 1;
+               }
+               for (x = 0; x < W; x += matrix->FW) {
+                       for (y = 0; y < H; y++)
+                               grid[y * W + x] = 1;
+                       for (y = 0; y < H; y += 2)
+                               grid[y * W + x + matrix->FW - 1] = 1;
+               }
+               for (y = 0; y < NR; y++) {
+                       for (x = 0; x < NC; x++) {
+                               int v = places[(NR - y - 1) * NC + x];
+                               //fprintf (stderr, "%4d", v);
+                               if (v == 1 || v > 7
+                                   && (binary[(v >> 3) - 1] & (1 << (v & 7))))
+                                       grid[(1 + y +
+                                             2 * (y / (matrix->FH - 2))) * W +
+                                            1 + x +
+                                            2 * (x / (matrix->FW - 2))] = 1;
+                       }
+                       //fprintf (stderr, "\n");
+               }
+               free(places);
+       }
+       if (Wptr)
+               *Wptr = W;
+       if (Hptr)
+               *Hptr = H;
+       if (encodingptr)
+               *encodingptr = encoding;
+       if (maxp)
+               *maxp = matrix->bytes;
+       if (eccp)
+               *eccp =
+                   (matrix->bytes + 2) / matrix->datablock * matrix->rsblock;
+       return grid;
+}
diff --git a/iec16022-0.2.1/iec16022ecc200.h b/iec16022-0.2.1/iec16022ecc200.h
new file mode 100644 (file)
index 0000000..08678f0
--- /dev/null
@@ -0,0 +1,47 @@
+/** 
+ *
+ * IEC16022 bar code generation
+ * Adrian Kennard, Andrews & Arnold Ltd
+ * with help from Cliff Hones on the RS coding
+ *
+ * (c) 2004 Adrian Kennard, Andrews & Arnold Ltd
+ * (c) 2006 Stefan Schmidt <stefan@datenfreihafen.org>
+ * 
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ *
+ * Main encoding function
+ * Returns the grid (malloced) containing the matrix. L corner at 0,0.
+ * Takes suggested size in *Wptr, *Hptr, or 0,0. Fills in actual size.
+ * Takes barcodelen and barcode to be encoded
+ * Note, if *encodingptr is null, then fills with auto picked (malloced) 
+ * encoding.
+ * If lenp not null, then the length of encoded data before any final unlatch 
+ * or pad is stored.
+ * If maxp not null, then the max storage of this size code is stored
+ * If eccp not null, then the number of ecc bytes used in this size is stored
+ * Returns 0 on error (writes to stderr with details).
+ *
+ */
+
+#ifndef __IEC16022ECC200_H
+#define __IEC16022ECC200_H
+
+unsigned char *iec16022ecc200(int *Wptr, int *Hptr, char **encodingptr,
+                             int barcodelen, unsigned char *barcode,
+                             int *lenp, int *maxp, int *eccp);
+#define MAXBARCODE 3116
+
+#endif                         /* __IEC16022ECC200_H */
diff --git a/iec16022-0.2.1/image.c b/iec16022-0.2.1/image.c
new file mode 100644 (file)
index 0000000..f7dc305
--- /dev/null
@@ -0,0 +1,668 @@
+/** 
+ *
+ * Image handling tools, (c) AJK 2001-2005
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#include <stdio.h>
+#include <malloc.h>
+#include <string.h>
+#include <ctype.h>
+#include "image.h"
+
+#define        INTERLACE
+#define CLEAR
+#define USEZLIB
+
+#ifdef USEZLIB
+#include <zlib.h>
+#endif
+
+unsigned char const bbc[] = {
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //  
+       0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00, // !
+       0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, // "
+       0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00, // #
+       0x0C, 0x3F, 0x68, 0x3E, 0x0B, 0x7E, 0x18, 0x00, // $
+       0x60, 0x66, 0x0C, 0x18, 0x30, 0x66, 0x06, 0x00, // %
+       0x38, 0x6C, 0x6C, 0x38, 0x6D, 0x66, 0x3B, 0x00, // &
+       0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, // '
+       0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, // (
+       0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, // )
+       0x00, 0x18, 0x7E, 0x3C, 0x7E, 0x18, 0x00, 0x00, // *
+       0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, // +
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, // ,
+       0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, // -
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, // .
+       0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, // /
+       0x18, 0x24, 0x66, 0x66, 0x66, 0x24, 0x18, 0x00, // 0 (non crossed)
+       0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, // 1
+       0x3C, 0x66, 0x06, 0x0C, 0x18, 0x30, 0x7E, 0x00, // 2
+       0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00, // 3
+       0x0C, 0x1C, 0x3C, 0x6C, 0x7E, 0x0C, 0x0C, 0x00, // 4
+       0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C, 0x00, // 5
+       0x1C, 0x30, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00, // 6
+       0x7E, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, // 7
+       0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, // 8
+       0x3C, 0x66, 0x66, 0x3E, 0x06, 0x0C, 0x38, 0x00, // 9
+       0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, // :
+       0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30, // ;
+       0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, // <
+       0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00, // =
+       0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, // >
+       0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00, // ?
+       0x3C, 0x66, 0x6E, 0x6A, 0x6E, 0x60, 0x3C, 0x00, // @
+       0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, // A
+       0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00, // B
+       0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00, // C
+       0x78, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x00, // D
+       0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00, // E
+       0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x00, // F
+       0x3C, 0x66, 0x60, 0x6E, 0x66, 0x66, 0x3C, 0x00, // G
+       0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, // H
+       0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, // I
+       0x3E, 0x0C, 0x0C, 0x0C, 0x0C, 0x6C, 0x38, 0x00, // J
+       0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00, // K
+       0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00, // L
+       0x63, 0x77, 0x7F, 0x6B, 0x6B, 0x63, 0x63, 0x00, // M
+       0x66, 0x66, 0x76, 0x7E, 0x6E, 0x66, 0x66, 0x00, // N
+       0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, // O
+       0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00, // P
+       0x3C, 0x66, 0x66, 0x66, 0x6A, 0x6C, 0x36, 0x00, // Q
+       0x7C, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x00, // R
+       0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 0x00, // S
+       0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // T
+       0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, // U
+       0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, // V
+       0x63, 0x63, 0x6B, 0x6B, 0x7F, 0x77, 0x63, 0x00, // W
+       0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, // X
+       0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, // Y
+       0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00, // Z
+       0x7C, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x00, // [
+       0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, // 
+       0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3E, 0x00, // ]
+       0x18, 0x3C, 0x66, 0x42, 0x00, 0x00, 0x00, 0x00, // ^
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, // _
+       0x1C, 0x36, 0x30, 0x7C, 0x30, 0x30, 0x7E, 0x00, // `
+       0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, // a
+       0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00, // b
+       0x00, 0x00, 0x3C, 0x66, 0x60, 0x66, 0x3C, 0x00, // c
+       0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x3E, 0x00, // d
+       0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, // e
+       0x1C, 0x30, 0x30, 0x7C, 0x30, 0x30, 0x30, 0x00, // f
+       0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x3C, // g
+       0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00, // h
+       0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, // i
+       0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x70, // j
+       0x60, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0x00, // k
+       0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, // l
+       0x00, 0x00, 0x36, 0x7F, 0x6B, 0x6B, 0x63, 0x00, // m
+       0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00, // n
+       0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, // o
+       0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, // p
+       0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x07, // q
+       0x00, 0x00, 0x6C, 0x76, 0x60, 0x60, 0x60, 0x00, // r
+       0x00, 0x00, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x00, // s
+       0x30, 0x30, 0x7C, 0x30, 0x30, 0x30, 0x1C, 0x00, // t
+       0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, // u
+       0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, // v
+       0x00, 0x00, 0x63, 0x6B, 0x6B, 0x7F, 0x36, 0x00, // w
+       0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, // x
+       0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x3C, // y
+       0x00, 0x00, 0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00, // z
+       0x0C, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0C, 0x00, // {
+       0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, // |
+       0x30, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x30, 0x00, // }
+       0x31, 0x6B, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, // ~
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, //
+};
+
+const char smallc[] = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+&()/[];%";
+unsigned char const small[] = {
+       0x00, 0x00, 0x00,       //
+       0x1F, 0x11, 0x1F,       //0
+       0x11, 0x1F, 0x10,       //1
+       0x1D, 0x15, 0x17,       //2
+       0x11, 0x15, 0x1F,       //3
+       0x07, 0x04, 0x1F,       //4
+       0x17, 0x15, 0x1D,       //5
+       0x1F, 0x15, 0x1D,       //6
+       0x01, 0x01, 0x1F,       //7
+       0x1F, 0x15, 0x1F,       //8
+       0x17, 0x15, 0x1F,       //9
+       0x1E, 0x05, 0x1E,       //A
+       0x1F, 0x15, 0x0A,       //B
+       0x0E, 0x11, 0x11,       //C
+       0x1F, 0x11, 0x0E,       //D
+       0x1F, 0x15, 0x11,       //E
+       0x1F, 0x05, 0x01,       //F
+       0x0E, 0x11, 0x19,       //G
+       0x1F, 0x04, 0x1F,       //H
+       0x11, 0x1F, 0x11,       //I
+       0x11, 0x0F, 0x01,       //J
+       0x1F, 0x04, 0x1B,       //K
+       0x1F, 0x10, 0x10,       //L
+       0x1F, 0x03, 0x1F,       //M
+       0x1F, 0x01, 0x1F,       //N
+       0x0E, 0x11, 0x0E,       //O
+       0x1F, 0x05, 0x02,       //P
+       0x0E, 0x19, 0x1E,       //Q
+       0x1F, 0x05, 0x1A,       //R
+       0x12, 0x15, 0x09,       //S
+       0x01, 0x1F, 0x01,       //T
+       0x1F, 0x10, 0x1F,       //U
+       0x0F, 0x10, 0x0F,       //V
+       0x1F, 0x18, 0x1F,       //W
+       0x1B, 0x04, 0x1B,       //X
+       0x03, 0x1C, 0x03,       //Y
+       0x19, 0x15, 0x13,       //Z
+       0x04, 0x04, 0x04,       //-
+       0x04, 0x0E, 0x04,       //+
+       0x04, 0x0E, 0x04,       //& (+)
+       0x00, 0x0E, 0x11,       //(
+       0x11, 0x0E, 0x00,       //)
+       0x08, 0x04, 0x02,       ///
+       0x00, 0x1F, 0x11,       //[
+       0x11, 0x1F, 0x00,       //]
+       0x10, 0x0A, 0x00,       //;
+       0x09, 0x04, 0x12,       //%
+};
+
+Image *ImageNew(int w, int h, int c)
+{                              // create a new blank image
+       Image *i;
+       if (!w || !h)
+               return 0;
+       i = malloc(sizeof(*i));
+       if (!i)
+               return 0;
+       memset(i, 0, sizeof(*i));
+       i->W = w;
+       i->L = w + 1;
+       i->H = h;
+       i->C = c;
+       i->Image = malloc((w + 1) * h);
+       if (!i->Image) {
+               free(i);
+               return 0;
+       }
+       memset(i->Image, 0, (w + 1) * h);
+       if (c) {
+               i->Colour = malloc(sizeof(Colour) * c);
+               if (!i->Colour) {
+                       free(i->Image);
+                       free(i);
+                       return 0;
+               }
+               memset(i->Colour, 0, sizeof(Colour) * c);
+       }
+       return i;
+}
+
+void ImageFree(Image * i)
+{                              // free an image
+       if (i) {
+               if (i->Image)
+                       free(i->Image);
+               if (i->Colour)
+                       free(i->Colour);
+               free(i);
+       }
+}
+
+#define        MAXLZW  4096
+typedef short LZW[256];
+typedef LZW LZWTree[MAXLZW];
+typedef struct strPrivate {
+       int cols;               // number of colours, power of 2
+       unsigned char colbits;  // number of bits for colours
+       int fh;                 // file handle
+       int lzwnext;            // next code
+       int lzwlast;            // last code in current bit size
+       int lzwbits;            // current bit size
+       LZWTree lzw;            // encode tree
+       unsigned char block[256];       // block so far, with count at start
+       int blockv;             // pending value
+       int blockb;             // bits used in pending value
+       short lzwcode;          // which code we are on now
+} Private;
+
+static LZWFlush(Private * p)
+{                              // flush this block
+       write(p->fh, p->block, *p->block + 1);
+       *p->block = 0;
+}
+
+static LZWOut(Private * p, short v)
+{                              // output a value
+       p->blockv |= (v << p->blockb);
+       p->blockb += p->lzwbits;
+       while (p->blockb >= 8) {
+               p->block[++*p->block] = p->blockv;      // last partial byte
+               p->blockv >>= 8;
+               p->blockb -= 8;
+               if (*p->block == 255)
+                       LZWFlush(p);
+       }
+}
+
+static LZWClear(Private * p)
+{
+       int c;
+       p->lzwbits = p->colbits + 1;
+       p->lzwnext = p->cols + 2;
+       p->lzwlast = (1 << p->lzwbits) - 1;
+       p->lzwcode = p->cols;   // starting point
+       for (c = 0; c < p->cols; c++) {
+               p->lzw[p->cols][c] = c; // links to literal entries
+               // links from literals, dead ends initially
+               memset(&p->lzw[c], -1, p->cols * 2);
+       }
+}
+
+static ImageStart(Private * p)
+{
+       unsigned char b = p->colbits;
+       write(p->fh, &b, 1);
+       *p->block = 0;
+       p->blockb = 0;
+       p->blockv = 0;
+       LZWClear(p);
+       LZWOut(p, p->cols);     // clear code
+}
+
+static ImageEnd(Private * p)
+{
+       LZWOut(p, p->lzwcode);  // last prefix
+       LZWOut(p, p->cols + 1); // end code
+       if (p->blockb)
+               p->block[++*p->block] = p->blockv;      // last partial byte
+       LZWFlush(p);
+}
+
+static ImageOut(Private * p, unsigned char c)
+{
+       short next = p->lzw[p->lzwcode][c];
+       if (next == -1) {       // dead end
+               LZWOut(p, p->lzwcode);  // prefix
+#ifdef CLEAR
+               if (p->lzwnext + 1 == MAXLZW) {
+                       LZWOut(p, p->cols);     // clear code
+                       LZWClear(p);
+               } else
+#endif
+               if (p->lzwnext < MAXLZW) {
+                       memset(p->lzw[p->lzwnext], -1, p->cols * 2);    // init dead ends
+                       p->lzw[p->lzwcode][c] = p->lzwnext;
+                       if (p->lzwnext > p->lzwlast) {  // bigger code
+                               p->lzwbits++;
+                               p->lzwlast = (1 << p->lzwbits) - 1;
+                       }
+                       p->lzwnext++;
+               }
+               p->lzwcode = c;
+       } else
+               p->lzwcode = next;      // not a dead end
+}
+
+// write GIF image
+void ImageWriteGif(Image * i, int fh, int back, int trans, char *comment)
+{
+       struct strPrivate p;
+       p.fh = fh;
+       // count colours, min 4
+       for (p.colbits = 2, p.cols = 4; p.cols < i->C;
+            p.cols *= 2, p.colbits++) ;
+       {                       // headers
+               char buf[1500];
+               int n = 0;
+               strcpy(buf, "GIF87a");
+#ifndef INTERLACE
+               if (comment || trans >= 0)
+#endif
+                       buf[4] = '9';   // needs gif89 format
+               n = 6;
+               buf[n++] = (i->W & 255);
+               buf[n++] = (i->W >> 8);
+               buf[n++] = (i->H & 255);
+               buf[n++] = (i->H >> 8);
+               buf[n++] = (i->Colour ? 0x80 : 0) + 0x70 + (p.colbits - 1);
+               buf[n++] = back;        // background
+               buf[n++] = 0;   // aspect
+               if (i->Colour) {
+                       int c;
+                       for (c = 0; c < p.cols; c++) {
+                               if (c < i->C) {
+                                       buf[n++] = (i->Colour[c] >> 16 & 255);
+                                       buf[n++] = (i->Colour[c] >> 8 & 255);
+                                       buf[n++] = (i->Colour[c] & 255);
+                               } else {        // extra, unused, colour
+                                       buf[n++] = 0;
+                                       buf[n++] = 0;
+                                       buf[n++] = 0;
+                               }
+                       }
+               }
+               // comment
+               if (comment && strlen(comment) < 256) { // comment
+                       buf[n++] = 0x21;        //extension
+                       buf[n++] = 0xFE;        //comment
+                       buf[n++] = strlen(comment);
+                       strcpy(buf + n, comment);
+                       n += buf[n - 1];
+                       buf[n++] = 0;   // end of block
+               }
+               if (trans >= 0) {       // transparrent
+                       buf[n++] = 0x21;        // extension
+                       buf[n++] = 0xF9;        // graphic control
+                       buf[n++] = 4;   // len
+                       buf[n++] = 1;   // transparrent
+                       buf[n++] = 0;   // delay
+                       buf[n++] = 0;
+                       buf[n++] = trans;
+                       buf[n++] = 0;   // terminator
+               }
+               // image
+               buf[n++] = 0x2C;
+               buf[n++] = 0;   // offset X
+               buf[n++] = 0;
+               buf[n++] = 0;   // offset Y
+               buf[n++] = 0;
+               buf[n++] = (i->W & 255);
+               buf[n++] = (i->W >> 8);
+               buf[n++] = (i->H & 255);
+               buf[n++] = (i->H >> 8);
+#ifdef INTERLACE
+               buf[n++] = 0x40;        // interlaced, no local colour table
+#else
+               buf[n++] = 0x00;        // non interlaced, no local colour table
+#endif
+               write(fh, buf, n);
+       }
+       // image data
+       {
+               unsigned char *b;
+               int x, y;
+               ImageStart(&p);
+#ifdef INTERLACE
+               for (y = 0; y < i->H; y += 8)
+                       for (b = &ImagePixel(i, 0, y), x = 0; x < i->W; x++)
+                               ImageOut(&p, *b++);
+               for (y = 4; y < i->H; y += 8)
+                       for (b = &ImagePixel(i, 0, y), x = 0; x < i->W; x++)
+                               ImageOut(&p, *b++);
+               for (y = 2; y < i->H; y += 4)
+                       for (b = &ImagePixel(i, 0, y), x = 0; x < i->W; x++)
+                               ImageOut(&p, *b++);
+               for (y = 1; y < i->H; y += 2)
+                       for (b = &ImagePixel(i, 0, y), x = 0; x < i->W; x++)
+                               ImageOut(&p, *b++);
+#else
+               for (y = 0; y < i->H; y++)
+                       for (b = &ImagePixel(i, 0, y), x = 0; x < i->W; x++)
+                               ImageOut(&p, *b++);
+#endif
+               ImageEnd(&p);
+       }
+       write(fh, "\0", 1);     // end of image data
+       write(fh, "\x3B", 1);   // trailer
+}
+
+void ImageText(Image * i, int x, int y, int col, char *text)
+{                              // writes 8x8 text
+       if (i && text)
+               while (*text) {
+                       if (*text >= ' ' && *text) {
+                               int r;
+                               unsigned const char *b =
+                                   bbc + (*text - ' ') * 8;
+                               for (r = 0; r < 8; r++) {
+                                       unsigned char v = *b++;
+                                       unsigned char *p =
+                                           &ImagePixel(i, x, y + r);
+                                       unsigned char m;
+                                       for (m = 0x80; m; m >>= 1, p++)
+                                               if (v & m)
+                                                       *p = col;
+                               }
+                       }
+                       x += 8;
+                       text++;
+               }
+}
+
+void ImageSmall(Image * i, int x, int y, int col, char *text)
+{                              // writes 4x6 digits
+       if (i && text)
+               while (*text) {
+                       char *p = strchr(smallc, toupper(*text));
+                       if (p) {
+                               int r;
+                               char m = 1;
+                               unsigned const char *b =
+                                   small + (p - smallc) * 3;
+                               for (r = 0; r < 5; r++) {
+                                       int c;
+                                       for (c = 0; c < 3; c++)
+                                               if (b[c] & m)
+                                                       ImagePixel(i, x + c,
+                                                                  y + r) = col;
+                                       m <<= 1;
+                               }
+                               x += 4;
+                       } else if (*text == '.') {
+                               ImagePixel(i, x, y + 4) = col;
+                               x += 2;
+                       } else if (*text == ':') {
+                               ImagePixel(i, x, y + 1) = col;
+                               ImagePixel(i, x, y + 3) = col;
+                               x += 2;
+                       }
+                       text++;
+               }
+}
+
+void ImageRect(Image * i, int x, int y, int w, int h, int c)
+{                              // fill a box
+       if (i && w && h) {
+               while (h--) {
+                       unsigned char *p = &ImagePixel(i, x, y);
+                       int n = w;
+                       while (n--)
+                               *p++ = c;
+                       y++;
+               }
+       }
+}
+
+// PNG code
+
+      /* Table of CRCs of all 8-bit messages. */
+static unsigned int crc_table[256];
+
+      /* Make the table for a fast CRC. */
+void make_crc_table(void)
+{
+       unsigned int c;
+       int n, k;
+       for (n = 0; n < 256; n++) {
+               c = (unsigned int)n;
+               for (k = 0; k < 8; k++) {
+                       if (c & 1)
+                               c = 0xedb88320L ^ (c >> 1);
+                       else
+                               c = c >> 1;
+               }
+               crc_table[n] = c;
+       }
+}
+
+      /* Update a running CRC with the bytes buf[0..len-1]--the CRC
+         should be initialized to all 1's, and the transmitted value
+         is the 1's complement of the final running CRC (see the
+         crc() routine below)). */
+
+unsigned int update_crc(unsigned int crc, unsigned char *buf, int len)
+{
+       unsigned int c = crc;
+       int n;
+
+       for (n = 0; n < len; n++)
+               c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8);
+
+       return c;
+}
+
+      /* Return the CRC of the bytes buf[0..len-1]. */
+unsigned int crc(unsigned char *buf, int len)
+{
+       return update_crc(0xffffffffL, buf, len) ^ 0xffffffffL;
+}
+
+unsigned int writecrc(int fh, char *ptr, int len, unsigned int c)
+{
+       write(fh, ptr, len);
+       while (len--)
+               c = crc_table[(c ^ *ptr++) & 0xff] ^ (c >> 8);
+       return c;
+}
+
+void writechunk(int fh, char *typ, void *ptr, int len)
+{
+       unsigned int v = htonl(len), crc;
+       write(fh, &v, 4);
+       crc = writecrc(fh, typ, 4, ~0);
+       if (len)
+               crc = writecrc(fh, ptr, len, crc);
+       v = htonl(~crc);
+       write(fh, &v, 4);
+}
+
+#ifndef USEZLIB
+unsigned int adlersum(unsigned char *p, int l, unsigned int adler)
+{
+       unsigned int s1 = (adler & 65535), s2 = (adler >> 16);
+       while (l--) {
+               s1 += *p++;
+               s2 += s1;
+       }
+       s1 %= 65521;            // can be delayed due to sensible "l" values...
+       s2 %= 65521;
+       return (s2 << 16) + s1;
+}
+#endif
+
+// write PNG image
+void ImageWritePNG(Image * i, int fh, int back, int trans, char *comment)
+{
+       make_crc_table();
+       write(fh, "\211PNG\r\n\032\n", 8);      // PNG header
+       {                       // IHDR
+               struct {
+                       unsigned int width;
+                       unsigned int height;
+                       unsigned char depth;
+                       unsigned char colour;
+                       unsigned char compress;
+                       unsigned char filter;
+                       unsigned char interlace;
+               } ihdr = {
+               0, 0, 8, 3, 0, 0};
+               ihdr.width = htonl(i->W);
+               ihdr.height = htonl(i->H);
+               writechunk(fh, "IHDR", &ihdr, 13);
+       }
+       {                       // PLTE
+               unsigned int v = htonl(i->C * 3), crc, n;
+               write(fh, &v, 4);
+               crc = writecrc(fh, "PLTE", 4, ~0);
+               for (n = 0; n < i->C; n++) {
+                       v = htonl(i->Colour[n] << 8);
+                       crc = writecrc(fh, (void *)&v, 3, crc);
+               }
+               v = htonl(~crc);
+               write(fh, &v, 4);
+       }
+       if (back >= 0) {        // bKGD
+               unsigned char b = back;
+               writechunk(fh, "bKGD", &b, 1);
+       }
+       if (*comment) {         // tEXt
+               char c[] = "Comment";
+               unsigned int v = htonl(strlen(c) + strlen(comment) + 1), crc;
+               write(fh, &v, 4);
+               crc = writecrc(fh, "tEXt", 4, ~0);
+               crc = writecrc(fh, c, strlen(c) + 1, crc);
+               crc = writecrc(fh, comment, strlen(comment), crc);
+               v = htonl(~crc);
+               write(fh, &v, 4);
+       }
+       {                       // tRNS
+               unsigned char alpha[256];
+               int n;
+               for (n = 0; n < i->C; n++)
+                       // 4th palette byte treated as 0=opaque, 255-transparren
+                       alpha[n] = 255 - (i->Colour[n] >> 24);
+               if (trans >= 0 && trans < i->C)
+                       // manual set of specific transparrent colour
+                       alpha[trans] = 0;
+               writechunk(fh, "tRNS", alpha, i->C);
+       }
+#ifndef USEZLIB
+       {                       // IDAT
+               unsigned int v = htonl(i->H * (i->L + 5) + 6),
+                   crc, adler = 1, n;
+               unsigned char *p = i->Image;
+               write(fh, &v, 4);
+               crc = writecrc(fh, "IDAT", 4, ~0);
+               crc = writecrc(fh, "\170\001", 2, crc); // zlib header for deflate
+               n = i->H;
+               while (n--) {
+                       unsigned char h[5];
+                       h[0] = (n ? 0 : 1);     // last chunk in deflate, un compressed
+                       h[1] = (i->L & 255);    // Len, LSB first as per deflate spec
+                       h[2] = (i->L / 256);
+                       h[3] = ~(i->L & 255);   // Inverse of Len
+                       h[4] = ~(i->L / 256);
+                       *p = 0; // filter 0 (NONE)
+                       crc = writecrc(fh, h, 5, crc);
+                       crc = writecrc(fh, p, i->L, crc);
+                       adler = adlersum(p, i->L, adler);
+                       p += i->L;
+               }
+               v = htonl(adler);
+               crc = writecrc(fh, (void *)&v, 4, crc);
+               v = htonl(~crc);
+               write(fh, &v, 4);
+       }
+#else
+       {                       // IDAT
+               unsigned char *temp;
+               unsigned long n;
+               for (n = 0; n < i->H; n++)
+                       i->Image[n * i->L] = 0; // filter 0
+               n = i->H * i->L * 1001 / 1000 + 12;
+               temp = malloc(n);
+               if (compress2(temp, &n, i->Image, i->L * i->H, 9) != Z_OK)
+                       fprintf(stderr, "Deflate error\n");
+               else
+                       writechunk(fh, "IDAT", temp, n);
+               free(temp);
+       }
+#endif
+       writechunk(fh, "IEND", 0, 0);   // IEND
+}
diff --git a/iec16022-0.2.1/image.h b/iec16022-0.2.1/image.h
new file mode 100644 (file)
index 0000000..92d6d06
--- /dev/null
@@ -0,0 +1,49 @@
+/** 
+ *
+ * Image handling tools, (c) AJK 2001-2005
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifndef __IMAGE_H
+#define __IMAGE_H
+
+typedef unsigned int Colour;   // RGB value
+
+// Image object
+typedef struct {
+       int W,                  // width
+        L,                     // Line length in Image (W+1)
+        H;                     // height
+       unsigned char *Image;   // image array, one byte per pixel
+       int C;                  // colours (can be non power of 2, max 256)
+       Colour *Colour;         // colour map (must have entry for each colour)
+} Image;
+
+// macros and functions
+
+#define ImagePixel(i,x,y)      ((i)->Image[1+(i)->L*(y)+(x)])
+
+Image *ImageNew(int w, int h, int c);  // create a new blank image
+void ImageFree(Image * i);     // free an image
+void ImageWriteGif(Image * i, int fh, int back, int trans, char *comment);
+void ImageWritePNG(Image * i, int fh, int back, int trans, char *comment);
+void ImageText(Image * i, int x, int y, int c, char *text);    // write 8x8 text
+void ImageSmall(Image * i, int x, int y, int c, char *text);   // write 4x6 text
+void ImageRect(Image * i, int x, int y, int w, int h, int c);  // fill a box
+#define ImageWrite ImageWritePNG       // default
+
+#endif                         /* __IMAGE_H */
diff --git a/iec16022-0.2.1/reedsol.c b/iec16022-0.2.1/reedsol.c
new file mode 100644 (file)
index 0000000..a950241
--- /dev/null
@@ -0,0 +1,172 @@
+/** 
+ *
+ * This is a simple Reed-Solomon encoder
+ * (C) Cliff Hones 2004
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+// It is not written with high efficiency in mind, so is probably
+// not suitable for real-time encoding.  The aim was to keep it
+// simple, general and clear.
+//
+// <Some notes on the theory and implementation need to be added here>
+
+// Usage:
+// First call rs_init_gf(poly) to set up the Galois Field parameters.
+// Then  call rs_init_code(size, index) to set the encoding size
+// Then  call rs_encode(datasize, data, out) to encode the data.
+//
+// These can be called repeatedly as required - but note that
+// rs_init_code must be called following any rs_init_gf call.
+//
+// If the parameters are fixed, some of the statics below can be
+// replaced with constants in the obvious way, and additionally
+// malloc/free can be avoided by using static arrays of a suitable
+// size.
+
+#include <stdio.h>             // only needed for debug (main)
+#include <stdlib.h>            // only needed for malloc/free
+
+static int gfpoly;
+static int symsize;            // in bits
+static int logmod;             // 2**symsize - 1
+static int rlen;
+
+static int *log = NULL, *alog = NULL, *rspoly = NULL;
+
+// rs_init_gf(poly) initialises the parameters for the Galois Field.
+// The symbol size is determined from the highest bit set in poly
+// This implementation will support sizes up to 30 bits (though that
+// will result in very large log/antilog tables) - bit sizes of
+// 8 or 4 are typical
+//
+// The poly is the bit pattern representing the GF characteristic
+// polynomial.  e.g. for ECC200 (8-bit symbols) the polynomial is
+// a**8 + a**5 + a**3 + a**2 + 1, which translates to 0x12d.
+
+void rs_init_gf(int poly)
+{
+       int m, b, p, v;
+
+       // Return storage from previous setup
+       if (log) {
+               free(log);
+               free(alog);
+               free(rspoly);
+               rspoly = NULL;
+       }
+       // Find the top bit, and hence the symbol size
+       for (b = 1, m = 0; b <= poly; b <<= 1)
+               m++;
+       b >>= 1;
+       m--;
+       gfpoly = poly;
+       symsize = m;
+
+       // Calculate the log/alog tables
+       logmod = (1 << m) - 1;
+       log = (int *)malloc(sizeof(int) * (logmod + 1));
+       alog = (int *)malloc(sizeof(int) * logmod);
+
+       for (p = 1, v = 0; v < logmod; v++) {
+               alog[v] = p;
+               log[p] = v;
+               p <<= 1;
+               if (p & b)
+                       p ^= poly;
+       }
+}
+
+// rs_init_code(nsym, index) initialises the Reed-Solomon encoder
+// nsym is the number of symbols to be generated (to be appended
+// to the input data).  index is usually 1 - it is the index of
+// the constant in the first term (i) of the RS generator polynomial:
+// (x + 2**i)*(x + 2**(i+1))*...   [nsym terms]
+// For ECC200, index is 1.
+
+void rs_init_code(int nsym, int index)
+{
+       int i, k;
+
+       if (rspoly)
+               free(rspoly);
+       rspoly = (int *)malloc(sizeof(int) * (nsym + 1));
+
+       rlen = nsym;
+
+       rspoly[0] = 1;
+       for (i = 1; i <= nsym; i++) {
+               rspoly[i] = 1;
+               for (k = i - 1; k > 0; k--) {
+                       if (rspoly[k])
+                               rspoly[k] =
+                                   alog[(log[rspoly[k]] + index) % logmod];
+                       rspoly[k] ^= rspoly[k - 1];
+               }
+               rspoly[0] = alog[(log[rspoly[0]] + index) % logmod];
+               index++;
+       }
+}
+
+// Note that the following uses byte arrays, so is only suitable for
+// symbol sizes up to 8 bits.  Just change the data type of data and res
+// to unsigned int * for larger symbols.
+
+void rs_encode(int len, unsigned char *data, unsigned char *res)
+{
+       int i, k, m;
+       for (i = 0; i < rlen; i++)
+               res[i] = 0;
+       for (i = 0; i < len; i++) {
+               m = res[rlen - 1] ^ data[i];
+               for (k = rlen - 1; k > 0; k--) {
+                       if (m && rspoly[k])
+                               res[k] =
+                                   res[k -
+                                       1] ^ alog[(log[m] +
+                                                  log[rspoly[k]]) % logmod];
+                       else
+                               res[k] = res[k - 1];
+               }
+               if (m && rspoly[0])
+                       res[0] = alog[(log[m] + log[rspoly[0]]) % logmod];
+               else
+                       res[0] = 0;
+       }
+}
+
+#ifndef LIB
+// The following tests the routines with the ISO/IEC 16022 Annexe R data
+int main(void)
+{
+       register int i;
+
+       unsigned char data[9] = { 142, 164, 186 };
+       unsigned char out[5];
+
+       rs_init_gf(0x12d);
+       rs_init_code(5, 1);
+
+       rs_encode(3, data, out);
+
+       printf("Result of Annexe R encoding:\n");
+       for (i = 4; i >= 0; i--)
+               printf("  %d\n", out[i]);
+
+       return 0;
+}
+#endif
diff --git a/iec16022-0.2.1/reedsol.h b/iec16022-0.2.1/reedsol.h
new file mode 100644 (file)
index 0000000..0181a8d
--- /dev/null
@@ -0,0 +1,29 @@
+/** 
+ *
+ * This is a simple Reed-Solomon encoder
+ * (C) Cliff Hones 2004
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifndef __REEDSOL_H
+#define __REEDSOL_H
+
+void rs_init_gf(int poly);
+void rs_init_code(int nsym, int index);
+void rs_encode(int len, unsigned char *data, unsigned char *res);
+
+#endif                         /* __REEDSOL_H */
diff --git a/iec16022-0.2.1/test/testsuite-example.bin b/iec16022-0.2.1/test/testsuite-example.bin
new file mode 100644 (file)
index 0000000..02a4436
--- /dev/null
@@ -0,0 +1 @@
+ÿÿÿÿ¿`ï\1aÁ϶mÜ>ý\ 6Ü\1fÏÃð\8a¼N¯·«9\9a\82±¤Ë»¾\83Ð@¨ÄÌEÙù£,Æ<°\17Ü-öb°:Çw×ɪªªªÿÿÿÿ\9fÀ\8eöÊÕï\ f\97¦\91\ 4¸%\8fkûh\8eÔ«-¨\eÛ\12£0ËQ³kâ\1aÛ\1e\80Éôå£ÂÍ~\84\19ögëTåà½\83絪ªªª
\ No newline at end of file
diff --git a/iec16022-0.2.1/test/testsuite-example.eps b/iec16022-0.2.1/test/testsuite-example.eps
new file mode 100644 (file)
index 0000000..9f97c22
--- /dev/null
@@ -0,0 +1,15 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: IEC16022 barcode/stamp generator
+%%BarcodeData: Aolash3l dee6Ieke OhBohm1C MengaR9m zaHaoQu2 huW3Uer8 ieg7chaJ haiKua1o
+%%BarcodeSize: 32x32
+%%BarcodeFormat: ECC200
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%BoundingBox: 0 0 34 34
+%%EndComments
+%%Page: 1 1
+32 32 1[1 0 0 1 -1 -1]{<
+00000000 409F10E5 3E304992 23C102F9 23E0303C 0F7543B1 504854C6 657D4E5B 3444417C 2FBF573B 33BA2606 5CD339C3 4FE823D2 099D4FC5 38882836 55555555 
+00000000 603F7109 352A10F0 68596EFB 47DA7094 0497712B 54D257E4 24ED5CCF 34AE4C94 1DE524E1 7F360B1A 5C3D3281 7BE60998 14AB1A1F 427C184A 55555555 
+>}image
diff --git a/iec16022-0.2.1/test/testsuite-example.hex b/iec16022-0.2.1/test/testsuite-example.hex
new file mode 100644 (file)
index 0000000..874101c
--- /dev/null
@@ -0,0 +1,2 @@
+FFFFFFFF BF60EF1A C1CFB66D DC3EFD06 DC1FCFC3 F08ABC4E AFB7AB39 9A82B1A4 CBBBBE83 D040A8C4 CC45D9F9 A32CC63C B017DC2D F662B03A C777D7C9 AAAAAAAA 
+FFFFFFFF 9FC08EF6 CAD5EF0F 97A69104 B8258F6B FB688ED4 AB2DA81B DB12A330 CB51B36B E21ADB1E 80C9F4E5 A3C2CD7E 8419F667 EB54E5E0 BD83E7B5 AAAAAAAA 
diff --git a/iec16022-0.2.1/test/testsuite-example.png b/iec16022-0.2.1/test/testsuite-example.png
new file mode 100644 (file)
index 0000000..050d1f0
Binary files /dev/null and b/iec16022-0.2.1/test/testsuite-example.png differ
diff --git a/iec16022-0.2.1/test/testsuite-example.text b/iec16022-0.2.1/test/testsuite-example.text
new file mode 100644 (file)
index 0000000..097a7d1
--- /dev/null
@@ -0,0 +1,32 @@
+* * * * * * * * * * * * * * * * 
+* **** **     *****  **** ** * *
+*** * ** * * *  ***  * ****     
+*    *     **  ***** **  **  ***
+* *   ****    * **  ** * ****** 
+*       **  *  ***** *  ***  * *
+***   *    ** * ** ** **   **** 
+**  * ** * *   ** **  ** ** * **
+** ** **   *  * * *   **  **    
+* * * **  * ** ** * *      ** **
+***** ** ** *   *   *** ** * *  
+* ***     *  * **   **** ** * **
+*  * **** *  ** *  *   *     *  
+**  * * ** * * **** ****    ****
+*  *******      *   *** **** ** 
+********************************
+* * * * * * * * * * * * * * * * 
+**   *** *** ***** * *****  *  *
+**** **  **   * * **      *** * 
+* **       * ***** ***    * ** *
+* *   **  * **  **   **   ****  
+**  **   *   * *** **  ******  *
+** *     *      * * *   **   *  
+**  * *** *** *** ***** *     **
+*  ** * *     * * **   ** *  *  
+* * ***** ** **** * * **  ***  *
+****    *   * * * ****   *  *** 
+** ***     *******  ******    **
+** ***    ***** ****** *     ** 
+**     ***  ***** ** **  ** ** *
+* ****** **     *** ****   ** * 
+********************************
diff --git a/iec16022-0.2.1/test/testsuite.sh b/iec16022-0.2.1/test/testsuite.sh
new file mode 100755 (executable)
index 0000000..82a100a
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+FAILED=0
+
+../iec16022 -o testsuite-test.text -f Text -c "Aolash3l dee6Ieke OhBohm1C MengaR9m zaHaoQu2 huW3Uer8 ieg7chaJ haiKua1o"
+../iec16022 -o testsuite-test.eps -f EPS -c "Aolash3l dee6Ieke OhBohm1C MengaR9m zaHaoQu2 huW3Uer8 ieg7chaJ haiKua1o"
+../iec16022 -o testsuite-test.png -f PNG -c "Aolash3l dee6Ieke OhBohm1C MengaR9m zaHaoQu2 huW3Uer8 ieg7chaJ haiKua1o"
+../iec16022 -o testsuite-test.bin -f Bin -c "Aolash3l dee6Ieke OhBohm1C MengaR9m zaHaoQu2 huW3Uer8 ieg7chaJ haiKua1o"
+../iec16022 -o testsuite-test.hex -f Hex -c "Aolash3l dee6Ieke OhBohm1C MengaR9m zaHaoQu2 huW3Uer8 ieg7chaJ haiKua1o"
+
+diff -b testsuite-test.text testsuite-example.text && echo "Text test passed" || echo "Text test FAILED" || FAILED=1
+diff -b testsuite-test.eps testsuite-example.eps && echo "EPS test passed" || echo "EPS test FAILED" || FAILED=1
+diff -b testsuite-test.png testsuite-example.png && echo "PNG test passed" || echo "PNG test FAILED" || FAILED=1
+diff -b testsuite-test.bin testsuite-example.bin && echo "Bin test passed" || echo "Bin test FAILED" || FAILED=1
+diff -b testsuite-test.hex testsuite-example.hex && echo "Hex test passed" || echo "Hex test FAILED" || FAILED=1
+
+rm testsuite-test.*
+
+exit $FAILED
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..6781b98
--- /dev/null
@@ -0,0 +1,520 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2009-04-28.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# 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.
+
+nl='
+'
+IFS=" ""       $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+       shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+       case $mode in
+         *' '* | *'    '* | *'
+'*       | *'*'* | *'?'* | *'['*)
+           echo "$0: invalid mode: $mode" >&2
+           exit 1;;
+       esac
+       shift;;
+
+    -o) chowncmd="$chownprog $2"
+       shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+       shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)        shift
+       break;;
+
+    -*)        echo "$0: invalid option: $1" >&2
+       exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dst_arg: Is a directory" >&2
+       exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+       (dirname "$dst") 2>/dev/null ||
+       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+            X"$dst" : 'X\(//\)[^/]' \| \
+            X"$dst" : 'X\(//\)$' \| \
+            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+       echo X"$dst" |
+           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)[^/].*/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\).*/{
+                  s//\1/
+                  q
+                }
+                s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+       # Create intermediate dirs using mode 755 as modified by the umask.
+       # This is like FreeBSD 'install' as of 1997-10-28.
+       umask=`umask`
+       case $stripcmd.$umask in
+         # Optimize common cases.
+         *[2367][2367]) mkdir_umask=$umask;;
+         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+         *[0-7])
+           mkdir_umask=`expr $umask + 22 \
+             - $umask % 100 % 40 + $umask % 20 \
+             - $umask % 10 % 4 + $umask % 2
+           `;;
+         *) mkdir_umask=$umask,go-w;;
+       esac
+
+       # With -d, create the new directory with the user-specified mode.
+       # Otherwise, rely on $mkdir_umask.
+       if test -n "$dir_arg"; then
+         mkdir_mode=-m$mode
+       else
+         mkdir_mode=
+       fi
+
+       posix_mkdir=false
+       case $umask in
+         *[123567][0-7][0-7])
+           # POSIX mkdir -p sets u+wx bits regardless of umask, which
+           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+           ;;
+         *)
+           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+           if (umask $mkdir_umask &&
+               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+           then
+             if test -z "$dir_arg" || {
+                  # Check for POSIX incompatibilities with -m.
+                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                  # other-writeable bit of parent directory when it shouldn't.
+                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                  case $ls_ld_tmpdir in
+                    d????-?r-*) different_mode=700;;
+                    d????-?--*) different_mode=755;;
+                    *) false;;
+                  esac &&
+                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                  }
+                }
+             then posix_mkdir=:
+             fi
+             rmdir "$tmpdir/d" "$tmpdir"
+           else
+             # Remove any dirs left behind by ancient mkdir implementations.
+             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+           fi
+           trap '' 0;;
+       esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+       umask $mkdir_umask &&
+       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+       /*) prefix='/';;
+       -*) prefix='./';;
+       *)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+       test -z "$d" && continue
+
+       prefix=$prefix$d
+       if test -d "$prefix"; then
+         prefixes=
+       else
+         if $posix_mkdir; then
+           (umask=$mkdir_umask &&
+            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+           # Don't fail if two instances are running concurrently.
+           test -d "$prefix" || exit 1
+         else
+           case $prefix in
+             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+             *) qprefix=$prefix;;
+           esac
+           prefixes="$prefixes '$qprefix'"
+         fi
+       fi
+       prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+       # Don't fail if two instances are running concurrently.
+       (umask $mkdir_umask &&
+        eval "\$doit_exec \$mkdirprog $prefixes") ||
+         test -d "$dstdir" || exit 1
+       obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # 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 $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+       # Now remove or move aside any old file at destination location.
+       # We try this two ways since rm can't unlink itself on some
+       # systems and the destination file might be busy for other
+       # reasons.  In this case, the final cleanup might fail but the new
+       # file should still install successfully.
+       {
+         test ! -f "$dst" ||
+         $doit $rmcmd -f "$dst" 2>/dev/null ||
+         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+         } ||
+         { echo "$0: cannot unlink or rename $dst" >&2
+           (exit 1); exit 1
+         }
+       } &&
+
+       # Now rename the file to the real destination.
+       $doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/intltool-extract.in b/intltool-extract.in
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/intltool-merge.in b/intltool-merge.in
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/intltool-update.in b/intltool-update.in
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/libglabels/Makefile.am b/libglabels/Makefile.am
new file mode 100644 (file)
index 0000000..2d1228a
--- /dev/null
@@ -0,0 +1,58 @@
+templatesdir = $(datadir)/glabels/templates
+
+INCLUDES = \
+       $(LIBGLABELS_CFLAGS)                            \
+       -DDATADIR=\""$(datadir)"\"                      \
+       -DLIBGLABELS_TEMPLATE_DIR=\""$(templatesdir)"\" \
+       $(DISABLE_DEPRECATED_CFLAGS)
+
+libglabels_la_LDFLAGS=\
+        -version-info $(LIBGLABELS_VERSION_INFO) \
+        $(LIBGLABELS_LIBS) \
+        -no-undefined 
+
+lib_LTLIBRARIES = libglabels.la
+
+libglabelsincludedir=$(includedir)/libglabels
+
+libglabels_la_SOURCES =                \
+       libglabels-private.h    \
+       db.h                    \
+       db.c                    \
+       enums.h                 \
+       paper.h                 \
+       paper.c                 \
+       category.h              \
+       category.c              \
+       template.h              \
+       template.c              \
+       xml-paper.h             \
+       xml-paper.c             \
+       xml-category.h          \
+       xml-category.c          \
+       xml-template.h          \
+       xml-template.c          \
+       xml.h                   \
+       xml.c                   \
+       str.h                   \
+       str.c
+
+libglabelsinclude_HEADERS =    \
+       libglabels.h            \
+       db.h                    \
+       enums.h                 \
+       paper.h                 \
+       category.h              \
+       template.h              \
+       xml-paper.h             \
+       xml-category.h          \
+       xml-template.h          \
+       xml.h                   \
+       str.h                   
+
+EXTRA_DIST =                   \
+       libglabels.pc.in
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libglabels.pc
+
diff --git a/libglabels/Makefile.in b/libglabels/Makefile.in
new file mode 100644 (file)
index 0000000..9d289c7
--- /dev/null
@@ -0,0 +1,681 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = libglabels
+DIST_COMMON = $(libglabelsinclude_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/libglabels.pc.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = libglabels.pc
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \
+       "$(DESTDIR)$(libglabelsincludedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+libglabels_la_LIBADD =
+am_libglabels_la_OBJECTS = db.lo paper.lo category.lo template.lo \
+       xml-paper.lo xml-category.lo xml-template.lo xml.lo str.lo
+libglabels_la_OBJECTS = $(am_libglabels_la_OBJECTS)
+libglabels_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libglabels_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libglabels_la_SOURCES)
+DIST_SOURCES = $(libglabels_la_SOURCES)
+DATA = $(pkgconfig_DATA)
+HEADERS = $(libglabelsinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+templatesdir = $(datadir)/glabels/templates
+INCLUDES = \
+       $(LIBGLABELS_CFLAGS)                            \
+       -DDATADIR=\""$(datadir)"\"                      \
+       -DLIBGLABELS_TEMPLATE_DIR=\""$(templatesdir)"\" \
+       $(DISABLE_DEPRECATED_CFLAGS)
+
+libglabels_la_LDFLAGS = \
+        -version-info $(LIBGLABELS_VERSION_INFO) \
+        $(LIBGLABELS_LIBS) \
+        -no-undefined 
+
+lib_LTLIBRARIES = libglabels.la
+libglabelsincludedir = $(includedir)/libglabels
+libglabels_la_SOURCES = \
+       libglabels-private.h    \
+       db.h                    \
+       db.c                    \
+       enums.h                 \
+       paper.h                 \
+       paper.c                 \
+       category.h              \
+       category.c              \
+       template.h              \
+       template.c              \
+       xml-paper.h             \
+       xml-paper.c             \
+       xml-category.h          \
+       xml-category.c          \
+       xml-template.h          \
+       xml-template.c          \
+       xml.h                   \
+       xml.c                   \
+       str.h                   \
+       str.c
+
+libglabelsinclude_HEADERS = \
+       libglabels.h            \
+       db.h                    \
+       enums.h                 \
+       paper.h                 \
+       category.h              \
+       template.h              \
+       xml-paper.h             \
+       xml-category.h          \
+       xml-template.h          \
+       xml.h                   \
+       str.h                   
+
+EXTRA_DIST = \
+       libglabels.pc.in
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libglabels.pc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libglabels/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu libglabels/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+libglabels.pc: $(top_builddir)/config.status $(srcdir)/libglabels.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+       @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+       list2=; for p in $$list; do \
+         if test -f $$p; then \
+           list2="$$list2 $$p"; \
+         else :; fi; \
+       done; \
+       test -z "$$list2" || { \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+       }
+
+uninstall-libLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+       for p in $$list; do \
+         $(am__strip_dir) \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+       done
+
+clean-libLTLIBRARIES:
+       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libglabels.la: $(libglabels_la_OBJECTS) $(libglabels_la_DEPENDENCIES) 
+       $(libglabels_la_LINK) -rpath $(libdir) $(libglabels_la_OBJECTS) $(libglabels_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/category.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/template.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml-category.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml-paper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml-template.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-pkgconfigDATA: $(pkgconfig_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+       done
+
+uninstall-pkgconfigDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+install-libglabelsincludeHEADERS: $(libglabelsinclude_HEADERS)
+       @$(NORMAL_INSTALL)
+       test -z "$(libglabelsincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libglabelsincludedir)"
+       @list='$(libglabelsinclude_HEADERS)'; test -n "$(libglabelsincludedir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libglabelsincludedir)'"; \
+         $(INSTALL_HEADER) $$files "$(DESTDIR)$(libglabelsincludedir)" || exit $$?; \
+       done
+
+uninstall-libglabelsincludeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(libglabelsinclude_HEADERS)'; test -n "$(libglabelsincludedir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(libglabelsincludedir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(libglabelsincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libglabelsincludedir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libglabelsincludeHEADERS \
+       install-pkgconfigDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES \
+       uninstall-libglabelsincludeHEADERS uninstall-pkgconfigDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libLTLIBRARIES clean-libtool ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am \
+       install-libLTLIBRARIES install-libglabelsincludeHEADERS \
+       install-man install-pdf install-pdf-am install-pkgconfigDATA \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-libLTLIBRARIES \
+       uninstall-libglabelsincludeHEADERS uninstall-pkgconfigDATA
+
+
+# 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/libglabels/category.c b/libglabels/category.c
new file mode 100644 (file)
index 0000000..e82e084
--- /dev/null
@@ -0,0 +1,129 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  category.c:  template category module
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+#include <config.h>
+
+#include "category.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+#include <string.h>
+
+#include "libglabels-private.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Functions.                                */
+/*===========================================*/
+/**
+ * lgl_category_new:
+ * @id:     Id of category definition. (E.g. label, card, etc.)  Should be
+ *          unique.
+ * @name:   Localized name of category.
+ *
+ * Allocates and constructs a new #lglCategory structure.
+ *
+ * Returns: a pointer to a newly allocated #lglCategory structure.
+ *
+ */
+lglCategory *
+lgl_category_new (gchar             *id,
+                  gchar             *name)
+{
+       lglCategory *category;
+
+       category         = g_new0 (lglCategory,1);
+       category->id     = g_strdup (id);
+       category->name   = g_strdup (name);
+
+       return category;
+}
+
+
+/**
+ * lgl_category_dup:
+ * @orig:  #lglCategory structure to be duplicated.
+ *
+ * Duplicates an existing #lglCategory structure.
+ *
+ * Returns: a pointer to a newly allocated #lglCategory structure.
+ *
+ */
+lglCategory *lgl_category_dup (const lglCategory *orig)
+{
+       lglCategory       *category;
+
+       g_return_val_if_fail (orig, NULL);
+
+       category = g_new0 (lglCategory,1);
+
+       category->id     = g_strdup (orig->id);
+       category->name   = g_strdup (orig->name);
+
+       return category;
+}
+
+
+/**
+ * lgl_category_free:
+ * @category:  pointer to #lglCategory structure to be freed.
+ *
+ * Free all memory associated with an existing #lglCategory structure.
+ *
+ */
+void lgl_category_free (lglCategory *category)
+{
+
+       if ( category != NULL ) {
+
+               g_free (category->id);
+               category->id = NULL;
+
+               g_free (category->name);
+               category->name = NULL;
+
+               g_free (category);
+       }
+
+}
+
+
diff --git a/libglabels/category.h b/libglabels/category.h
new file mode 100644 (file)
index 0000000..3727d47
--- /dev/null
@@ -0,0 +1,59 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  category.h:  template category module header file
+ *
+ *  Copyright (C) 2006  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __CATEGORY_H__
+#define __CATEGORY_H__
+
+#include <glib/gtypes.h>
+#include <glib/glist.h>
+
+G_BEGIN_DECLS
+
+/*
+ *   Template class
+ */
+typedef struct _lglCategory lglCategory;
+
+struct _lglCategory {
+       gchar               *id;     /* Unique ID of category */
+       gchar               *name;   /* Localized name of category */
+};
+
+
+/*
+ * Category construction
+ */
+lglCategory      *lgl_category_new                 (gchar            *id,
+                                                    gchar            *name);
+
+lglCategory      *lgl_category_dup                 (const lglCategory *orig);
+void              lgl_category_free                (lglCategory       *category);
+
+
+G_END_DECLS
+
+#endif
diff --git a/libglabels/db.c b/libglabels/db.c
new file mode 100644 (file)
index 0000000..a727904
--- /dev/null
@@ -0,0 +1,1615 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  db.c:  template db module
+ *
+ *  Copyright (C) 2003-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+#include <config.h>
+
+#include "db.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gdir.h>
+#include <glib/gmessages.h>
+#include <glib/ghash.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "libglabels-private.h"
+
+#include "xml-paper.h"
+#include "xml-category.h"
+#include "xml-template.h"
+
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+static GList *papers     = NULL;
+static GList *categories = NULL;
+static GList *templates  = NULL;
+
+static GHashTable *template_cache = NULL;
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void   init_template_cache          (void);
+static void   add_to_template_cache        (lglTemplate *template);
+
+static GList *read_papers                  (void);
+static GList *read_paper_files_from_dir    (GList       *papers,
+                                           const gchar *dirname);
+
+static GList *read_categories              (void);
+static GList *read_category_files_from_dir (GList       *categories,
+                                            const gchar *dirname);
+
+static GList *read_templates               (void);
+static GList *read_template_files_from_dir (GList       *templates,
+                                            const gchar *dirname);
+
+static lglTemplate *template_full_page     (const gchar *page_size);
+
+
+
+/*===========================================*/
+/* Module initialization                     */
+/*===========================================*/
+
+/**
+ * lgl_db_init:
+ *
+ * Initialize all libglabels subsystems.  It is not necessary for an application to call
+ * lgl_db_init(), because libglabels will initialize on demand.  An application programmer may
+ * choose to call lgl_db_init() at startup to minimize the impact of the first libglabels call
+ * on GUI response time.
+ *
+ * This function initializes its paper definitions, category definitions, and its template
+ * database.. It will search both system and user template directories to locate
+ * this data.
+ */
+void
+lgl_db_init (void)
+{
+       lglPaper    *paper_other;
+        lglCategory *category_user_defined;
+        GList       *page_sizes;
+        GList       *p;
+
+        /*
+         * Paper definitions
+         */
+       if (!papers)
+        {
+
+                papers = read_papers ();
+
+                /* Create and append an "Other" entry. */
+                paper_other = lgl_paper_new ("Other", _("Other"), 0.0, 0.0, NULL);
+                papers = g_list_append (papers, paper_other);
+
+       }
+
+        /*
+         * Categories
+         */
+       if (!categories)
+        {
+                categories = read_categories ();
+
+                /* Create and append a "User defined" entry. */
+                category_user_defined = lgl_category_new ("user-defined", _("User defined"));
+                categories = g_list_append (categories, category_user_defined);
+       }
+
+        /*
+         * Templates
+         */
+       if (!templates)
+        {
+
+                templates = read_templates ();
+
+                /* Create and append generic full page templates. */
+                page_sizes = lgl_db_get_paper_id_list ();
+                for ( p=page_sizes; p != NULL; p=p->next )
+                {
+                        if ( !lgl_db_is_paper_id_other (p->data) )
+                        {
+                                templates = g_list_append (templates,
+                                                           template_full_page (p->data));
+                        }
+                }
+                lgl_db_free_paper_id_list (page_sizes);
+
+                init_template_cache ();
+       }
+}
+
+
+
+/*===========================================*/
+/* Paper db functions.                       */
+/*===========================================*/
+
+/**
+ * lgl_db_get_paper_id_list:
+ *
+ * Get a list of all paper ids known to libglabels.
+ *
+ * Returns: a list of paper ids.
+ *
+ */
+GList *
+lgl_db_get_paper_id_list (void)
+{
+       GList           *ids = NULL;
+       GList           *p;
+       lglPaper        *paper;
+
+       if (!papers)
+        {
+               lgl_db_init ();
+       }
+
+       for ( p=papers; p != NULL; p=p->next )
+        {
+               paper = (lglPaper *)p->data;
+               ids = g_list_append (ids, g_strdup (paper->id));
+       }
+
+       return ids;
+}
+
+
+/**
+ * lgl_db_free_paper_id_list:
+ * @ids: List of id strings to be freed.
+ *
+ * Free up all storage associated with an id list obtained with
+ * lgl_db_get_paper_id_list().
+ *
+ */
+void
+lgl_db_free_paper_id_list (GList *ids)
+{
+       GList *p;
+
+       for (p = ids; p != NULL; p = p->next)
+        {
+               g_free (p->data);
+               p->data = NULL;
+       }
+
+       g_list_free (ids);
+}
+
+
+/**
+ * lgl_db_get_paper_name_list:
+ *
+ * Get a list of all localized paper names known to libglabels.
+ *
+ * Returns: a list of localized paper names.
+ *
+ */
+GList *
+lgl_db_get_paper_name_list (void)
+{
+       GList           *names = NULL;
+       GList           *p;
+       lglPaper        *paper;
+
+       if (!papers)
+        {
+               lgl_db_init ();
+       }
+
+       for ( p=papers; p != NULL; p=p->next )
+        {
+               paper = (lglPaper *)p->data;
+               names = g_list_append (names, g_strdup (paper->name));
+       }
+
+       return names;
+}
+
+
+/**
+ * lgl_db_free_paper_name_list:
+ * @names: List of localized paper name strings to be freed.
+ *
+ * Free up all storage associated with a name list obtained with
+ * lgl_db_get_paper_name_list().
+ *
+ */
+void
+lgl_db_free_paper_name_list (GList *names)
+{
+       GList *p;
+
+       for (p = names; p != NULL; p = p->next)
+        {
+               g_free (p->data);
+               p->data = NULL;
+       }
+
+       g_list_free (names);
+}
+
+
+/**
+ * lgl_db_lookup_paper_from_name:
+ * @name: localized paper name string
+ *
+ * Lookup paper definition from localized paper name string.
+ *
+ * Returns: pointer to a newly allocated #lglPaper structure.
+ *
+ */
+lglPaper *
+lgl_db_lookup_paper_from_name (const gchar *name)
+{
+       GList       *p;
+       lglPaper    *paper;
+
+       if (!papers)
+        {
+               lgl_db_init ();
+       }
+
+       if (name == NULL)
+        {
+               /* If no name, return first paper as a default */
+               return lgl_paper_dup ((lglPaper *) papers->data);
+       }
+
+       for (p = papers; p != NULL; p = p->next)
+        {
+               paper = (lglPaper *) p->data;
+               if (UTF8_EQUAL (paper->name, name))
+                {
+                       return lgl_paper_dup (paper);
+               }
+       }
+
+       return NULL;
+}
+
+
+/**
+ * lgl_db_lookup_paper_from_id:
+ * @id: paper id string
+ *
+ * Lookup paper definition from id string.
+ *
+ * Returns: pointer to a newly allocated #lglPaper structure.
+ *
+ */
+lglPaper *
+lgl_db_lookup_paper_from_id (const gchar *id)
+{
+       GList       *p;
+       lglPaper    *paper;
+
+       if (!papers)
+        {
+               lgl_db_init ();
+       }
+
+       if (id == NULL)
+        {
+               /* If no id, return first paper as a default */
+               return lgl_paper_dup ((lglPaper *) papers->data);
+       }
+
+       for (p = papers; p != NULL; p = p->next)
+        {
+               paper = (lglPaper *) p->data;
+               if (ASCII_EQUAL (paper->id, id))
+                {
+                       return lgl_paper_dup (paper);
+               }
+       }
+
+       return NULL;
+}
+
+
+/**
+ * lgl_db_lookup_paper_id_from_name:
+ * @name: localized paper name stringp
+ *
+ * Lookup paper name string from localized paper name string.
+ *
+ * Returns: pointer to a newly allocated id string.
+ *
+ */
+gchar *
+lgl_db_lookup_paper_id_from_name (const gchar *name)
+{
+       lglPaper *paper = NULL;
+       gchar    *id = NULL;
+
+       if (name != NULL)
+       {
+               paper = lgl_db_lookup_paper_from_name (name);
+               if ( paper != NULL )
+               {
+                       id = g_strdup (paper->id);
+                       lgl_paper_free (paper);
+                       paper = NULL;
+               }
+       }
+
+       return id;
+}
+
+
+/**
+ * lgl_db_lookup_paper_name_from_id:
+ * @id: paper id string
+ *
+ * Lookup localized paper name string from paper id string.
+ *
+ * Returns: pointer to a newly allocated localized paper name string.
+ *
+ */
+gchar *
+lgl_db_lookup_paper_name_from_id (const gchar         *id)
+{
+       lglPaper *paper = NULL;
+       gchar    *name = NULL;
+
+       if (id != NULL)
+       {
+               paper = lgl_db_lookup_paper_from_id (id);
+               if ( paper != NULL )
+               {
+                       name = g_strdup (paper->name);
+                       lgl_paper_free (paper);
+                       paper = NULL;
+               }
+       }
+
+       return name;
+}
+
+
+/**
+ * lgl_db_is_paper_id_known:
+ * @id: paper id to test
+ *
+ * Determine if given paper id is known to libglabels.
+ *
+ * Returns: TRUE if id is known, otherwise FALSE.
+ *
+ */
+gboolean
+lgl_db_is_paper_id_known (const gchar *id)
+{
+       GList       *p;
+       lglPaper    *paper;
+
+       if (!papers)
+        {
+               lgl_db_init ();
+       }
+
+       if (id == NULL)
+        {
+               return FALSE;
+       }
+
+       for (p = papers; p != NULL; p = p->next)
+        {
+               paper = (lglPaper *) p->data;
+               if (ASCII_EQUAL (paper->id, id))
+                {
+                       return TRUE;
+               }
+       }
+
+       return FALSE;
+}
+
+/**
+ * lgl_db_is_paper_id_other:
+ * @id: paper id to test
+ *
+ * Determine if given paper id is the special id "Other."
+ *
+ * Returns: TRUE if id is "Other", otherwise FALSE.
+ *
+ */
+gboolean
+lgl_db_is_paper_id_other (const gchar *id)
+{
+       if (id == NULL)
+        {
+               return FALSE;
+       }
+
+       return (ASCII_EQUAL (id, "Other"));
+}
+
+
+static GList *
+read_papers (void)
+{
+       gchar *data_dir;
+       GList *papers = NULL;
+
+       data_dir = LGL_SYSTEM_DATA_DIR;
+       papers = read_paper_files_from_dir (papers, data_dir);
+       g_free (data_dir);
+
+       data_dir = LGL_USER_DATA_DIR;
+       papers = read_paper_files_from_dir (papers, data_dir);
+       g_free (data_dir);
+
+       if (papers == NULL) {
+               g_critical (_("Unable to locate paper size definitions.  Libglabels may not be installed correctly!"));
+       }
+
+       return papers;
+}
+
+
+static GList *
+read_paper_files_from_dir (GList       *papers,
+                          const gchar *dirname)
+{
+       GDir        *dp;
+       const gchar *filename, *extension;
+       gchar       *full_filename = NULL;
+       GError      *gerror = NULL;
+       GList       *new_papers = NULL;
+
+       if (dirname == NULL) {
+               return papers;
+       }
+
+       if (!g_file_test (dirname, G_FILE_TEST_EXISTS)) {
+               return papers;
+       }
+
+       dp = g_dir_open (dirname, 0, &gerror);
+       if (gerror != NULL) {
+               g_message ("cannot open data directory: %s", gerror->message );
+               return papers;
+       }
+
+       while ((filename = g_dir_read_name (dp)) != NULL) {
+
+               extension = strrchr (filename, '.');
+
+               if (extension != NULL) {
+
+                       if ( ASCII_EQUAL (extension, ".paper") ||
+                            ASCII_EQUAL (filename, "paper-sizes.xml") )
+                        {
+
+                               full_filename =
+                                   g_build_filename (dirname, filename, NULL);
+                               new_papers =
+                                   lgl_xml_paper_read_papers_from_file (full_filename);
+                               g_free (full_filename);
+
+                               papers = g_list_concat (papers, new_papers);
+                               new_papers = NULL;
+
+                       }
+
+               }
+
+       }
+
+       g_dir_close (dp);
+
+       return papers;
+}
+
+
+/**
+ * lgl_db_print_known_papers:
+ *
+ * For debugging purposes: print a list of all paper definitions known to
+ * libglabels.
+ *
+ */
+void
+lgl_db_print_known_papers (void)
+{
+       GList       *p;
+       lglPaper    *paper;
+
+       if (!papers) {
+               lgl_db_init ();
+       }
+
+       g_print ("%s():\n", __FUNCTION__);
+       for (p = papers; p != NULL; p = p->next) {
+               paper = (lglPaper *) p->data;
+
+               g_print ("PAPER id=\"%s\", name=\"%s\", width=%gpts, height=%gpts\n",
+                        paper->id, paper->name, paper->width, paper->height);
+
+       }
+       g_print ("\n");
+
+}
+
+
+/*===========================================*/
+/* Category db functions.                    */
+/*===========================================*/
+
+/**
+ * lgl_db_get_category_id_list:
+ *
+ * Get a list of all category ids known to libglabels.
+ *
+ * Returns: a list of category ids.
+ *
+ */
+GList *
+lgl_db_get_category_id_list (void)
+{
+       GList           *ids = NULL;
+       GList           *p;
+       lglCategory     *category;
+
+       if (!categories)
+        {
+               lgl_db_init ();
+       }
+
+       for ( p=categories; p != NULL; p=p->next )
+        {
+               category = (lglCategory *)p->data;
+               ids = g_list_append (ids, g_strdup (category->id));
+       }
+
+       return ids;
+}
+
+
+/**
+ * lgl_db_free_category_id_list:
+ * @ids: List of id strings to be freed.
+ *
+ * Free up all storage associated with an id list obtained with
+ * lgl_db_get_category_id_list().
+ *
+ */
+void
+lgl_db_free_category_id_list (GList *ids)
+{
+       GList *p;
+
+       for (p = ids; p != NULL; p = p->next)
+        {
+               g_free (p->data);
+               p->data = NULL;
+       }
+
+       g_list_free (ids);
+}
+
+
+/**
+ * lgl_db_get_category_name_list:
+ *
+ * Get a list of all localized category names known to libglabels.
+ *
+ * Returns: a list of localized category names.
+ *
+ */
+GList *
+lgl_db_get_category_name_list (void)
+{
+       GList           *names = NULL;
+       GList           *p;
+       lglCategory     *category;
+
+       if (!categories)
+        {
+               lgl_db_init ();
+       }
+
+       for ( p=categories; p != NULL; p=p->next )
+        {
+               category = (lglCategory *)p->data;
+               names = g_list_append (names, g_strdup (category->name));
+       }
+
+       return names;
+}
+
+
+/**
+ * lgl_db_free_category_name_list:
+ * @names: List of localized category name strings to be freed.
+ *
+ * Free up all storage associated with a name list obtained with
+ * lgl_db_get_category_name_list().
+ *
+ */
+void
+lgl_db_free_category_name_list (GList *names)
+{
+       GList *p;
+
+       for (p = names; p != NULL; p = p->next)
+        {
+               g_free (p->data);
+               p->data = NULL;
+       }
+
+       g_list_free (names);
+}
+
+
+/**
+ * lgl_db_lookup_category_from_name:
+ * @name: localized category name string
+ *
+ * Lookup category definition from localized category name string.
+ *
+ * Returns: pointer to a newly allocated #lglCategory structure.
+ *
+ */
+lglCategory *
+lgl_db_lookup_category_from_name (const gchar *name)
+{
+       GList       *p;
+       lglCategory *category;
+
+       if (!categories)
+        {
+               lgl_db_init ();
+       }
+
+       if (name == NULL)
+        {
+               /* If no name, return first category as a default */
+               return lgl_category_dup ((lglCategory *) categories->data);
+       }
+
+       for (p = categories; p != NULL; p = p->next)
+        {
+               category = (lglCategory *) p->data;
+               if (UTF8_EQUAL (category->name, name))
+                {
+                       return lgl_category_dup (category);
+               }
+       }
+
+       return NULL;
+}
+
+
+/**
+ * lgl_db_lookup_category_from_id:
+ * @id: category id string
+ *
+ * Lookup category definition from id string.
+ *
+ * Returns: pointer to a newly allocated #lglCategory structure.
+ *
+ */
+lglCategory *
+lgl_db_lookup_category_from_id (const gchar *id)
+{
+       GList       *p;
+       lglCategory *category;
+
+       if (!categories)
+        {
+               lgl_db_init ();
+       }
+
+       if (id == NULL)
+        {
+               /* If no id, return first category as a default */
+               return lgl_category_dup ((lglCategory *) categories->data);
+       }
+
+       for (p = categories; p != NULL; p = p->next)
+        {
+               category = (lglCategory *) p->data;
+               if (ASCII_EQUAL (category->id, id))
+                {
+                       return lgl_category_dup (category);
+               }
+       }
+
+       return NULL;
+}
+
+
+/**
+ * lgl_db_lookup_category_id_from_name:
+ * @name: localized category name stringp
+ *
+ * Lookup category name string from localized category name string.
+ *
+ * Returns: pointer to a newly allocated id string.
+ *
+ */
+gchar *
+lgl_db_lookup_category_id_from_name (const gchar *name)
+{
+       lglCategory *category = NULL;
+       gchar       *id = NULL;
+
+       if (name != NULL)
+       {
+               category = lgl_db_lookup_category_from_name (name);
+               if ( category != NULL )
+               {
+                       id = g_strdup (category->id);
+                       lgl_category_free (category);
+                       category = NULL;
+               }
+       }
+
+       return id;
+}
+
+
+/**
+ * lgl_db_lookup_category_name_from_id:
+ * @id: category id string
+ *
+ * Lookup localized category name string from category id string.
+ *
+ * Returns: pointer to a newly allocated localized category name string.
+ *
+ */
+gchar *
+lgl_db_lookup_category_name_from_id (const gchar         *id)
+{
+       lglCategory *category = NULL;
+       gchar       *name = NULL;
+
+       if (id != NULL)
+       {
+               category = lgl_db_lookup_category_from_id (id);
+               if ( category != NULL )
+               {
+                       name = g_strdup (category->name);
+                       lgl_category_free (category);
+                       category = NULL;
+               }
+       }
+
+       return name;
+}
+
+
+/**
+ * lgl_db_is_category_id_known:
+ * @id: category id to test
+ *
+ * Determine if given category id is known to libglabels.
+ *
+ * Returns: TRUE if id is known, otherwise FALSE.
+ *
+ */
+gboolean
+lgl_db_is_category_id_known (const gchar *id)
+{
+       GList       *p;
+       lglCategory *category;
+
+       if (!categories)
+        {
+               lgl_db_init ();
+       }
+
+       if (id == NULL)
+        {
+               return FALSE;
+       }
+
+       for (p = categories; p != NULL; p = p->next)
+        {
+               category = (lglCategory *) p->data;
+               if (ASCII_EQUAL (category->id, id))
+                {
+                       return TRUE;
+               }
+       }
+
+       return FALSE;
+}
+
+
+static GList *
+read_categories (void)
+{
+       gchar *data_dir;
+       GList *categories = NULL;
+
+       data_dir = LGL_SYSTEM_DATA_DIR;
+       categories = read_category_files_from_dir (categories, data_dir);
+       g_free (data_dir);
+
+       data_dir = LGL_USER_DATA_DIR;
+       categories = read_category_files_from_dir (categories, data_dir);
+       g_free (data_dir);
+
+       if (categories == NULL) {
+               g_critical (_("Unable to locate category definitions.  Libglabels may not be installed correctly!"));
+       }
+
+       return categories;
+}
+
+
+static GList *
+read_category_files_from_dir (GList       *categories,
+                              const gchar *dirname)
+{
+       GDir        *dp;
+       const gchar *filename, *extension;
+       gchar       *full_filename = NULL;
+       GError      *gerror = NULL;
+       GList       *new_categories = NULL;
+
+       if (dirname == NULL) {
+               return categories;
+       }
+
+       if (!g_file_test (dirname, G_FILE_TEST_EXISTS)) {
+               return categories;
+       }
+
+       dp = g_dir_open (dirname, 0, &gerror);
+       if (gerror != NULL) {
+               g_message ("cannot open data directory: %s", gerror->message );
+               return categories;
+       }
+
+       while ((filename = g_dir_read_name (dp)) != NULL) {
+
+               extension = strrchr (filename, '.');
+
+               if (extension != NULL) {
+
+                       if ( ASCII_EQUAL (extension, ".category") ||
+                            ASCII_EQUAL (filename, "categories.xml") )
+                        {
+
+                               full_filename =
+                                   g_build_filename (dirname, filename, NULL);
+                               new_categories =
+                                   lgl_xml_category_read_categories_from_file (full_filename);
+                               g_free (full_filename);
+
+                               categories = g_list_concat (categories, new_categories);
+                               new_categories = NULL;
+
+                       }
+
+               }
+
+       }
+
+       g_dir_close (dp);
+
+       return categories;
+}
+
+
+/**
+ * lgl_db_print_known_categories:
+ *
+ * For debugging purposes: print a list of all category definitions known to
+ * libglabels.
+ *
+ */
+void
+lgl_db_print_known_categories (void)
+{
+       GList       *p;
+       lglCategory *category;
+
+       if (!categories) {
+               lgl_db_init ();
+       }
+
+       g_print ("%s():\n", __FUNCTION__);
+       for (p = categories; p != NULL; p = p->next) {
+               category = (lglCategory *) p->data;
+
+               g_print ("CATEGORY id=\"%s\", name=\"%s\"\n", category->id, category->name);
+
+       }
+       g_print ("\n");
+
+}
+
+
+
+/*===========================================*/
+/* Brand db functions.                       */
+/*===========================================*/
+
+/**
+ * lgl_db_get_brand_list:
+ * @paper_id: If non NULL, limit results to given page size.
+ * @category_id: If non NULL, limit results to given template category.
+ *
+ * Get a list of all valid brands of templates in the template database.
+ * Results can be filtered by page size and/or template category.  A list of valid page
+ * sizes can be obtained using lgl_db_get_paper_id_list().  A list of valid template
+ * categories can be obtained using lgl_db_get_category_id_list().
+ *
+ * Returns: a list of brands
+ */
+GList *
+lgl_db_get_brand_list (const gchar *paper_id,
+                       const gchar *category_id)
+{
+       GList            *p_tmplt, *p_alias;
+       lglTemplate      *template;
+       lglTemplateAlias *alias;
+       GList            *brands = NULL;
+
+       if (!templates)
+        {
+               lgl_db_init ();
+       }
+
+       for (p_tmplt = templates; p_tmplt != NULL; p_tmplt = p_tmplt->next)
+        {
+               template = (lglTemplate *) p_tmplt->data;
+               if (lgl_template_does_page_size_match (template, paper_id) &&
+                    lgl_template_does_category_match (template, category_id))
+                {
+                       for (p_alias = template->aliases; p_alias != NULL;
+                            p_alias = p_alias->next)
+                        {
+                                alias = (lglTemplateAlias *)p_alias->data;
+
+                                if ( !g_list_find_custom (brands, alias->brand,
+                                                          (GCompareFunc)lgl_str_utf8_casecmp) )
+                                {
+                                        brands = g_list_insert_sorted (brands,
+                                                                       g_strdup (alias->brand),
+                                                                       (GCompareFunc)lgl_str_utf8_casecmp);
+                                }
+                       }
+               }
+       }
+
+       return brands;
+}
+
+
+/**
+ * lgl_db_free_brand_list:
+ * @brands: List of template brand strings to be freed.
+ *
+ * Free up all storage associated with a list of template names obtained with
+ * lgl_db_get_brand_list().
+ *
+ */
+void
+lgl_db_free_brand_list (GList *brands)
+{
+       GList *p_brand;
+
+       for (p_brand = brands; p_brand != NULL; p_brand = p_brand->next)
+        {
+               g_free (p_brand->data);
+               p_brand->data = NULL;
+       }
+
+       g_list_free (brands);
+}
+
+
+
+/*===========================================*/
+/* Template db functions.                    */
+/*===========================================*/
+
+/**
+ * lgl_db_register_template:
+ * @template:  Pointer to a template structure to add to database.
+ *
+ * Register a template.  This function adds a template to the template database.
+ * The template will be stored in an individual XML file in the user template directory.
+ *
+ * Returns: Status of registration attempt (#lglDbRegStatus)
+ */
+lglDbRegStatus
+lgl_db_register_template (const lglTemplate *template)
+{
+        lglTemplate *template_copy;
+        gchar       *dir, *filename, *abs_filename;
+        gint         bytes_written;
+
+       if (!templates)
+        {
+               lgl_db_init ();
+       }
+
+        if (lgl_db_does_template_exist (template->brand, template->part))
+        {
+                return LGL_DB_REG_BRAND_PART_EXISTS;
+        }
+
+       if (lgl_db_is_paper_id_known (template->paper_id))
+        {
+               dir = LGL_USER_DATA_DIR;
+               mkdir (dir, 0775); /* Try to make sure directory exists. */
+               filename = g_strdup_printf ("%s_%s.template", template->brand, template->part);
+               abs_filename = g_build_filename (dir, filename, NULL);
+               bytes_written = lgl_xml_template_write_template_to_file (template, abs_filename);
+               g_free (dir);
+               g_free (filename);
+               g_free (abs_filename);
+
+                if (bytes_written > 0)
+                {
+                        template_copy = lgl_template_dup (template);
+                        lgl_template_add_category (template_copy, "user-defined");
+                        templates = g_list_append (templates, template_copy);
+                        add_to_template_cache (template_copy);
+                        return LGL_DB_REG_OK;
+                }
+                else
+                {
+                        return LGL_DB_REG_FILE_WRITE_ERROR;
+                }
+       }
+        else
+        {
+               g_message ("Cannot register new template with unknown page size.");
+                return LGL_DB_REG_BAD_PAPER_ID;
+       }
+
+}
+
+
+/**
+ * lgl_db_does_template_exist:
+ * @brand: Brand name.
+ * @part:  Part name/number.
+ *
+ * This function tests whether a template with the given brand and part name/number exists.
+ *
+ * Returns:  TRUE if such a template exists in the database.
+ */
+gboolean
+lgl_db_does_template_exist (const gchar *brand,
+                            const gchar *part)
+{
+       GList            *p_tmplt, *p_alias;
+       lglTemplate      *template;
+        lglTemplateAlias *alias;
+
+       if (!templates)
+        {
+               lgl_db_init ();
+       }
+
+       if ((brand == NULL) || (part == NULL))
+        {
+               return FALSE;
+       }
+
+       for (p_tmplt = templates; p_tmplt != NULL; p_tmplt = p_tmplt->next)
+        {
+               template = (lglTemplate *) p_tmplt->data;
+               for (p_alias = template->aliases; p_alias != NULL; p_alias = p_alias->next)
+                {
+                        alias = (lglTemplateAlias *)p_alias->data;
+
+                       if ( UTF8_EQUAL (brand, alias->brand) &&
+                             UTF8_EQUAL (part, alias->part) )
+                        {
+                               return TRUE;
+                       }
+               }
+       }
+
+       return FALSE;
+}
+
+
+/**
+ * lgl_db_does_template_name_exist:
+ * @name: name string
+ *
+ * This function test whether a template with the given name exists.
+ *
+ * Returns: TRUE if such a template exists in the database.
+ *
+ */
+gboolean
+lgl_db_does_template_name_exist (const gchar *name)
+{
+       GList            *p_tmplt, *p_alias;
+        lglTemplate      *template;
+        lglTemplateAlias *alias;
+        gchar            *candidate_name;
+
+       if (!templates)
+        {
+               lgl_db_init ();
+       }
+
+       if (name == NULL)
+        {
+               return FALSE;
+       }
+
+       for (p_tmplt = templates; p_tmplt != NULL; p_tmplt = p_tmplt->next)
+        {
+               template = (lglTemplate *) p_tmplt->data;
+               for (p_alias = template->aliases; p_alias != NULL; p_alias = p_alias->next)
+                {
+                        alias = (lglTemplateAlias *)p_alias->data;
+                        candidate_name = g_strdup_printf ("%s %s", alias->brand, alias->part);
+
+                       if ( UTF8_EQUAL (candidate_name, name) ) {
+                                g_free (candidate_name);
+                                return TRUE;
+                       }
+                        g_free (candidate_name);
+               }
+       }
+
+       return FALSE;
+}
+
+
+/**
+ * lgl_db_get_template_name_list_unique:
+ * @brand:     If non NULL, limit results to given brand
+ * @paper_id: If non NULL, limit results to given page size.
+ * @category_id: If non NULL, limit results to given template category.
+ *
+ * Get a list of valid names of unique templates in the template database.  Results
+ * can be filtered by page size and/or template category.  A list of valid page sizes
+ * can be obtained using lgl_db_get_paper_id_list().  A list of valid template categories
+ * can be obtained using lgl_db_get_category_id_list().
+ *
+ * This function differs from lgl_db_get_template_name_list_all(), because it does not
+ * return multiple names for the same template.
+ *
+ * Returns: a list of template names.
+ */
+GList *
+lgl_db_get_template_name_list_unique (const gchar *brand,
+                                      const gchar *paper_id,
+                                      const gchar *category_id)
+{
+       GList       *p_tmplt;
+       lglTemplate *template;
+        gchar       *name;
+       GList       *names = NULL;
+
+       if (!templates)
+        {
+               lgl_db_init ();
+       }
+
+       for (p_tmplt = templates; p_tmplt != NULL; p_tmplt = p_tmplt->next)
+        {
+               template = (lglTemplate *) p_tmplt->data;
+
+                if (lgl_template_does_brand_match (template, brand) &&
+                    lgl_template_does_page_size_match (template, paper_id) &&
+                    lgl_template_does_category_match (template, category_id))
+                {
+                        name = g_strdup_printf ("%s %s", template->brand, template->part);
+                        names = g_list_insert_sorted (names, name,
+                                                      (GCompareFunc)g_utf8_collate);
+                }
+       }
+
+       return names;
+}
+
+
+/**
+ * lgl_db_get_template_name_list_all:
+ * @brand:     If non NULL, limit results to given brand
+ * @paper_id: If non NULL, limit results to given page size.
+ * @category_id: If non NULL, limit results to given template category.
+ *
+ * Get a list of all valid names and aliases of templates in the template database.
+ * Results can be filtered by page size and/or template category.  A list of valid page
+ * sizes can be obtained using lgl_db_get_paper_id_list().  A list of valid template
+ * categories can be obtained using lgl_db_get_category_id_list().
+ *
+ * This function differs from lgl_db_get_template_name_list_unique(), because it will
+ * return multiple names for the same template.
+ *
+ * Returns: a list of template names and aliases.
+ */
+GList *
+lgl_db_get_template_name_list_all (const gchar *brand,
+                                   const gchar *paper_id,
+                                   const gchar *category_id)
+{
+       GList            *p_tmplt, *p_alias;
+       lglTemplate      *template;
+       lglTemplateAlias *alias;
+        gchar            *name;
+       GList            *names = NULL;
+
+       if (!templates)
+        {
+               lgl_db_init ();
+       }
+
+       for (p_tmplt = templates; p_tmplt != NULL; p_tmplt = p_tmplt->next)
+        {
+               template = (lglTemplate *) p_tmplt->data;
+               if (lgl_template_does_page_size_match (template, paper_id) &&
+                    lgl_template_does_category_match (template, category_id))
+                {
+                       for (p_alias = template->aliases; p_alias != NULL;
+                            p_alias = p_alias->next)
+                        {
+                                alias = (lglTemplateAlias *)p_alias->data;
+
+                                if ( !brand || UTF8_EQUAL( alias->brand, brand) )
+                                {
+                                        name = g_strdup_printf ("%s %s", alias->brand, alias->part);
+                                        names = g_list_insert_sorted (names, name,
+                                                                      (GCompareFunc)g_utf8_collate);
+                                }
+                       }
+               }
+       }
+
+       return names;
+}
+
+
+/**
+ * lgl_db_free_template_name_list:
+ * @names: List of template name strings to be freed.
+ *
+ * Free up all storage associated with a list of template names obtained with
+ * lgl_db_get_template_name_list_all() or lgl_db_get_template_name_list_unique().
+ *
+ */
+void
+lgl_db_free_template_name_list (GList *names)
+{
+       GList *p_name;
+
+       for (p_name = names; p_name != NULL; p_name = p_name->next)
+        {
+               g_free (p_name->data);
+               p_name->data = NULL;
+       }
+
+       g_list_free (names);
+}
+
+
+/**
+ * lgl_db_lookup_template_from_name:
+ * @name: name string
+ *
+ * Lookup template in template database from name string.
+ *
+ * Returns: pointer to a newly allocated #lglTemplate structure.
+ *
+ */
+lglTemplate *
+lgl_db_lookup_template_from_name (const gchar *name)
+{
+       GList            *p_alias;
+       lglTemplate      *template;
+        lglTemplateAlias *alias;
+        gchar            *candidate_name;
+       lglTemplate      *new_template;
+
+       if (!templates)
+        {
+               lgl_db_init ();
+       }
+
+       if (name == NULL)
+        {
+               /* If no name, return first template as a default */
+               return lgl_template_dup ((lglTemplate *) templates->data);
+       }
+
+        template = g_hash_table_lookup (template_cache, name);
+
+        if (template)
+        {
+                for (p_alias = template->aliases; p_alias != NULL; p_alias = p_alias->next)
+                {
+                        alias = (lglTemplateAlias *)p_alias->data;
+                        candidate_name = g_strdup_printf ("%s %s", alias->brand, alias->part);
+
+                        if ( UTF8_EQUAL (candidate_name, name) )
+                        {
+                                g_free (candidate_name);
+                                new_template = lgl_template_dup (template);
+                                g_free (new_template->brand);
+                                new_template->brand = g_strdup (alias->brand);
+                                g_free (new_template->part);
+                                new_template->part = g_strdup (alias->part);
+                                return new_template;
+                        }
+
+                        g_free (candidate_name);
+                }
+        }
+
+       /* No matching template has been found so return the first template */
+       return lgl_template_dup ((lglTemplate *) templates->data);
+}
+
+
+static void
+init_template_cache (void)
+{
+       GList            *p_tmplt, *p_alias;
+       lglTemplate      *template;
+        lglTemplateAlias *alias;
+        gchar            *name;
+
+        template_cache = g_hash_table_new (g_str_hash, g_str_equal);
+
+        for ( p_tmplt=templates; p_tmplt != NULL; p_tmplt=p_tmplt->next )
+        {
+               template = (lglTemplate *) p_tmplt->data;
+
+                for ( p_alias=template->aliases; p_alias != NULL; p_alias=p_alias->next )
+                {
+                        alias = (lglTemplateAlias *)p_alias->data;
+                        name = g_strdup_printf ("%s %s", alias->brand, alias->part);
+
+                        g_hash_table_insert (template_cache, name, template);
+                }
+        }
+}
+
+
+static void
+add_to_template_cache (lglTemplate *template)
+{
+       GList            *p_alias;
+        lglTemplateAlias *alias;
+        gchar            *name;
+
+        for ( p_alias=template->aliases; p_alias != NULL; p_alias=p_alias->next )
+        {
+                alias = (lglTemplateAlias *)p_alias->data;
+                name = g_strdup_printf ("%s %s", alias->brand, alias->part);
+
+                g_hash_table_insert (template_cache, name, template);
+        }
+}
+
+
+static GList *
+read_templates (void)
+{
+       gchar       *data_dir;
+       GList       *templates = NULL;
+        GList       *p;
+        lglTemplate *template;
+
+        /*
+         * User defined templates.  Add to user-defined category.
+         */
+       data_dir = LGL_USER_DATA_DIR;
+       templates = read_template_files_from_dir (templates, data_dir);
+       g_free (data_dir);
+        for ( p=templates; p != NULL; p=p->next )
+        {
+                template = (lglTemplate *)p->data;
+                lgl_template_add_category (template, "user-defined");
+        }
+
+        /*
+         * System templates.
+         */
+       data_dir = LGL_SYSTEM_DATA_DIR;
+       templates = read_template_files_from_dir (templates, data_dir);
+       g_free (data_dir);
+
+       if (templates == NULL)
+        {
+               g_critical (_("Unable to locate any template files.  Libglabels may not be installed correctly!"));
+       }
+
+       return templates;
+}
+
+
+static GList *
+read_template_files_from_dir (GList       *templates,
+                             const gchar *dirname)
+{
+       GDir        *dp;
+       const gchar *filename, *extension, *extension2;
+       gchar       *full_filename = NULL;
+       GError      *gerror = NULL;
+       GList       *new_templates = NULL;
+
+       if (dirname == NULL)
+               return templates;
+
+       if (!g_file_test (dirname, G_FILE_TEST_EXISTS))
+        {
+               return templates;
+       }
+
+       dp = g_dir_open (dirname, 0, &gerror);
+       if (gerror != NULL)
+        {
+               g_message ("cannot open data directory: %s", gerror->message );
+               return templates;
+       }
+
+       while ((filename = g_dir_read_name (dp)) != NULL)
+        {
+
+               extension = strrchr (filename, '.');
+               extension2 = strrchr (filename, '-');
+
+               if ( (extension && ASCII_EQUAL (extension, ".template")) ||
+                    (extension2 && ASCII_EQUAL (extension2, "-templates.xml")) )
+                {
+
+                       full_filename = g_build_filename (dirname, filename, NULL);
+                       new_templates =
+                               lgl_xml_template_read_templates_from_file (full_filename);
+                       g_free (full_filename);
+
+                       templates = g_list_concat (templates, new_templates);
+                       new_templates = NULL;
+               }
+
+       }
+
+       g_dir_close (dp);
+
+       return templates;
+}
+
+
+static lglTemplate *
+template_full_page (const gchar *paper_id)
+{
+       lglPaper              *paper = NULL;
+       lglTemplate           *template = NULL;
+       lglTemplateFrame      *frame = NULL;
+        gchar                 *part;
+        gchar                 *desc;
+
+       g_return_val_if_fail (paper_id, NULL);
+
+       paper = lgl_db_lookup_paper_from_id (paper_id);
+       if ( paper == NULL )
+        {
+               return NULL;
+       }
+
+       part = g_strdup_printf ("%s-Full-Page", paper->id);
+       desc = g_strdup_printf (_("Generic %s full page template"), paper->name);
+
+       template = lgl_template_new ("Generic", part, desc,
+                                     paper_id, paper->width, paper->height);
+
+
+       frame = lgl_template_frame_rect_new ("0",
+                                             paper->width,
+                                             paper->height,
+                                             0.0,
+                                             0.0,
+                                             0.0);
+       lgl_template_add_frame (template, frame);
+
+       lgl_template_frame_add_layout (frame, lgl_template_layout_new (1, 1, 0., 0., 0., 0.));
+
+       lgl_template_frame_add_markup (frame, lgl_template_markup_margin_new (9.0));
+
+       g_free (desc);
+       desc = NULL;
+       lgl_paper_free (paper);
+       paper = NULL;
+
+       return template;
+}
+
+
+/**
+ * lgl_db_print_known_templates:
+ *
+ * Print all known templates (for debugging purposes).
+ *
+ */
+void
+lgl_db_print_known_templates (void)
+{
+       GList       *p;
+       lglTemplate *template;
+
+       g_print ("%s():\n", __FUNCTION__);
+       for (p=templates; p!=NULL; p=p->next)
+        {
+               template = (lglTemplate *)p->data;
+
+               g_print("TEMPLATE brand=\"%s\", part=\"%s\", description=\"%s\"\n",
+                       template->brand, template->part, template->description);
+
+       }
+       g_print ("\n");
+
+}
+
+/**
+ * lgl_db_print_aliases:
+ *   @template: template
+ *
+ * Print all aliases of a template (for debugging purposes).
+ *
+ */
+void
+lgl_db_print_aliases (const lglTemplate *template)
+{
+       GList            *p;
+        lglTemplateAlias *alias;
+
+       g_print ("%s():\n", __FUNCTION__);
+       for (p=template->aliases; p!=NULL; p=p->next)
+        {
+                alias = (lglTemplateAlias *)p->data;
+               
+               g_print("Alias: brand=\"%s\", part=\"%s\"\n", alias->brand, alias->part);
+
+       }
+       g_print ("\n");
+
+}
+
+
diff --git a/libglabels/db.h b/libglabels/db.h
new file mode 100644 (file)
index 0000000..c6b6f7e
--- /dev/null
@@ -0,0 +1,148 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  db.h:  template db module header file
+ *
+ *  Copyright (C) 2006-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __DB_H__
+#define __DB_H__
+
+#include <glib/gtypes.h>
+#include <glib/glist.h>
+
+#include "paper.h"
+#include "category.h"
+#include "template.h"
+
+G_BEGIN_DECLS
+
+typedef enum
+{
+        LGL_DB_REG_OK                =  0,
+        LGL_DB_REG_BAD_PAPER_ID      = -1,
+        LGL_DB_REG_BRAND_PART_EXISTS = -2,
+        LGL_DB_REG_FILE_WRITE_ERROR  = -3
+} lglDbRegStatus;
+
+/*
+ * Module initialization
+ */
+void           lgl_db_init                           (void);
+
+
+/*
+ * Paper
+ */
+GList         *lgl_db_get_paper_id_list              (void);
+
+void           lgl_db_free_paper_id_list             (GList               *ids);
+
+GList         *lgl_db_get_paper_name_list            (void);
+
+void           lgl_db_free_paper_name_list           (GList               *names);
+
+lglPaper      *lgl_db_lookup_paper_from_name         (const gchar         *name);
+
+lglPaper      *lgl_db_lookup_paper_from_id           (const gchar         *id);
+
+gchar         *lgl_db_lookup_paper_id_from_name      (const gchar         *name);
+
+gchar         *lgl_db_lookup_paper_name_from_id      (const gchar         *id);
+
+gboolean       lgl_db_is_paper_id_known              (const gchar         *id);
+
+gboolean       lgl_db_is_paper_id_other              (const gchar         *id);
+
+
+
+/*
+ * Template categories
+ */
+GList         *lgl_db_get_category_id_list           (void);
+
+void           lgl_db_free_category_id_list          (GList              *ids);
+
+GList         *lgl_db_get_category_name_list         (void);
+
+void           lgl_db_free_category_name_list        (GList               *names);
+
+lglCategory   *lgl_db_lookup_category_from_name      (const gchar         *name);
+
+lglCategory   *lgl_db_lookup_category_from_id        (const gchar         *id);
+
+gchar         *lgl_db_lookup_category_id_from_name   (const gchar         *name);
+
+gchar         *lgl_db_lookup_category_name_from_id   (const gchar         *id);
+
+gboolean       lgl_db_is_category_id_known           (const gchar         *id);
+
+
+/*
+ * Template brands
+ */
+GList         *lgl_db_get_brand_list                 (const gchar         *paper_id,
+                                                      const gchar         *category_id);
+
+void           lgl_db_free_brand_list                (GList               *brands);
+
+
+/*
+ * Templates
+ */
+lglDbRegStatus lgl_db_register_template              (const lglTemplate   *template);
+
+gboolean       lgl_db_does_template_exist            (const gchar         *brand,
+                                                      const gchar         *part);
+
+gboolean       lgl_db_does_template_name_exist       (const gchar         *name);
+
+GList         *lgl_db_get_template_name_list_unique  (const gchar         *brand,
+                                                      const gchar         *paper_id,
+                                                      const gchar         *category_id);
+
+GList         *lgl_db_get_template_name_list_all     (const gchar         *brand,
+                                                      const gchar         *paper_id,
+                                                      const gchar         *category_id);
+
+void           lgl_db_free_template_name_list        (GList               *names);
+
+lglTemplate   *lgl_db_lookup_template_from_name      (const gchar         *name);
+
+
+/*
+ * Debugging functions
+ */
+void           lgl_db_print_known_papers             (void);
+
+void           lgl_db_print_known_categories         (void);
+
+void           lgl_db_print_known_templates          (void);
+
+void           lgl_db_print_aliases                  (const lglTemplate    *template);
+
+
+
+G_END_DECLS
+
+#endif
diff --git a/libglabels/enums.h b/libglabels/enums.h
new file mode 100644 (file)
index 0000000..d139dc2
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  enums.h:  common libGLabels enumerations header file
+ *
+ *  Copyright (C) 2003, 2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __ENUMS_H__
+#define __ENUMS_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/* Units of distance */
+typedef enum {
+       LGL_UNITS_POINT, /* encoded as "pt" */
+       LGL_UNITS_INCH,  /* encoded as "in" */
+       LGL_UNITS_MM,    /* encoded as "mm" */
+       LGL_UNITS_CM,    /* encoded as "cm" */
+       LGL_UNITS_PICA,  /* encoded as "pc" */
+
+       LGL_UNITS_FIRST = LGL_UNITS_POINT,
+       LGL_UNITS_LAST  = LGL_UNITS_PICA,
+} lglUnitsType;
+
+
+G_END_DECLS
+
+
+#endif /* __ENUMS_H__ */
diff --git a/libglabels/libglabels-private.h b/libglabels/libglabels-private.h
new file mode 100644 (file)
index 0000000..dd8bda8
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  libglabels-private.h:  libglabels private header file
+ *
+ *  Copyright (C) 2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __LIBGLABELS_PRIVATE_H__
+#define __LIBGLABELS_PRIVATE_H__
+
+#include <glib/gutils.h>
+#include <glib/gfileutils.h>
+#include <glib/gunicode.h>
+
+#include "str.h"
+
+/* Data system and user data directories.  (must free w/ g_free()) */
+#define LGL_SYSTEM_DATA_DIR g_build_filename (LIBGLABELS_TEMPLATE_DIR, NULL)
+#define LGL_USER_DATA_DIR   g_build_filename (g_get_home_dir (), ".glabels", NULL)
+
+#undef  G_LOG_DOMAIN
+#define G_LOG_DOMAIN "LibGlabels"
+
+#define UTF8_EQUAL(s1,s2) (!lgl_str_utf8_casecmp (s1, s2))
+#define ASCII_EQUAL(s1,s2) (!g_ascii_strcasecmp (s1, s2))
+
+
+#endif /* __LIBGLABELS_PRIVATE_H__ */
diff --git a/libglabels/libglabels.h b/libglabels/libglabels.h
new file mode 100644 (file)
index 0000000..c74fbe0
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  libglabels.h:  libglabels master header file
+ *
+ *  Copyright (C) 2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __LIBGLABELS_H__
+#define __LIBGLABELS_H__
+
+#include <libglabels/db.h>
+#include <libglabels/paper.h>
+#include <libglabels/category.h>
+#include <libglabels/template.h>
+#include <libglabels/enums.h>
+#include <libglabels/str.h>
+#include <libglabels/xml-paper.h>
+#include <libglabels/xml-category.h>
+#include <libglabels/xml-template.h>
+#include <libglabels/xml.h>
+
+#endif /* __LIBGLABELS_H__ */
diff --git a/libglabels/libglabels.pc.in b/libglabels/libglabels.pc.in
new file mode 100644 (file)
index 0000000..c16e8f4
--- /dev/null
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libglabels
+Description: GLabels Template Library
+Requires: glib-2.0 libxml-2.0
+Version: @VERSION@
+Libs: -L${libdir} -lglabels
+Cflags: -I${includedir}
+
diff --git a/libglabels/paper.c b/libglabels/paper.c
new file mode 100644 (file)
index 0000000..98826c9
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  paper.c:  paper module
+ *
+ *  Copyright (C) 2003, 2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+#include <config.h>
+
+#include "paper.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+#include <string.h>
+
+#include "libglabels-private.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Functions.                                */
+/*===========================================*/
+
+/**
+ * lgl_paper_new:
+ * @id:       Id of paper definition. (E.g. US-Letter, A4, etc.)  Should be
+ *            unique.
+ * @name:     Localized name of paper.
+ * @width:    Width of paper in points.
+ * @height:   Height of paper in points.
+ * @pwg_size: PWG 5101.1-2002 size name.
+ *
+ * Allocates and constructs a new #lglPaper structure.
+ *
+ * Returns: a pointer to a newly allocated #lglPaper structure.
+ *
+ */
+lglPaper *
+lgl_paper_new (gchar             *id,
+              gchar             *name,
+              gdouble            width,
+              gdouble            height,
+              gchar             *pwg_size)
+{
+       lglPaper *paper;
+
+       paper           = g_new0 (lglPaper,1);
+
+       paper->id       = g_strdup (id);
+       paper->name     = g_strdup (name);
+       paper->width    = width;
+       paper->height   = height;
+       paper->pwg_size = g_strdup (pwg_size);
+
+       return paper;
+}
+
+
+/**
+ * lgl_paper_dup:
+ * @orig:  #lglPaper structure to be duplicated.
+ *
+ * Duplicates an existing #lglPaper structure.
+ *
+ * Returns: a pointer to a newly allocated #lglPaper structure.
+ *
+ */
+lglPaper *lgl_paper_dup (const lglPaper *orig)
+{
+       lglPaper       *paper;
+
+       g_return_val_if_fail (orig, NULL);
+
+       paper = g_new0 (lglPaper,1);
+
+       paper->id       = g_strdup (orig->id);
+       paper->name     = g_strdup (orig->name);
+       paper->width    = orig->width;
+       paper->height   = orig->height;
+       paper->pwg_size = g_strdup (orig->pwg_size);
+
+       return paper;
+}
+
+
+/**
+ * lgl_paper_free:
+ * @paper:  pointer to #lglPaper structure to be freed.
+ *
+ * Free all memory associated with an existing #lglPaper structure.
+ *
+ */
+void lgl_paper_free (lglPaper *paper)
+{
+
+       if ( paper != NULL ) {
+
+               g_free (paper->id);
+               paper->id = NULL;
+
+               g_free (paper->name);
+               paper->name = NULL;
+
+               g_free (paper->pwg_size);
+               paper->pwg_size = NULL;
+
+               g_free (paper);
+       }
+
+}
+
+
diff --git a/libglabels/paper.h b/libglabels/paper.h
new file mode 100644 (file)
index 0000000..0fb4238
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  paper.h:  paper module header file
+ *
+ *  Copyright (C) 2003, 2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __PAPER_H__
+#define __PAPER_H__
+
+#include <glib/gtypes.h>
+#include <glib/glist.h>
+
+G_BEGIN_DECLS
+
+
+/*
+ *   lglPaper structure
+ */
+typedef struct _lglPaper lglPaper;
+
+struct _lglPaper {
+       gchar               *id;       /* Unique ID of paper definition */
+       gchar               *name;     /* Localized name of paper */
+       gdouble              width;    /* Width (in points) */
+       gdouble              height;   /* Height (in points) */
+       gchar               *pwg_size; /* PWG 5101.1-2002 size name */
+};
+
+
+/*
+ * Paper construction
+ */
+lglPaper            *lgl_paper_new                 (gchar           *id,
+                                                   gchar           *name,
+                                                   gdouble          width,
+                                                   gdouble          height,
+                                                   gchar           *pwg_size);
+
+lglPaper             *lgl_paper_dup                (const lglPaper   *orig);
+
+void                 lgl_paper_free                (lglPaper         *paper);
+
+
+G_END_DECLS
+
+#endif
diff --git a/libglabels/str.c b/libglabels/str.c
new file mode 100644 (file)
index 0000000..7c1f59a
--- /dev/null
@@ -0,0 +1,84 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  str.c:  libGLabels string utilities
+ *
+ *  Copyright (C) 2007  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+#include <config.h>
+
+#include "str.h"
+
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Functions.                                */
+/*===========================================*/
+
+/**
+ * lgl_str_utf8_casecmp:
+ * @s1: string to compare with s2.
+ * @s2: string to compare with s1.
+ *
+ * Compare two UTF-8 strings, ignoring the case of characters.
+ *
+ * This function should be used only on strings that are known to be encoded
+ * in UTF-8 or a compatible UTF-8 subset.
+ *
+ * Returns: 0 if the strings match, a negative value if s1 < s2,
+ *          or a positive value if s1 > s2.
+ *
+ */
+gint
+lgl_str_utf8_casecmp (const gchar *s1,
+                      const gchar *s2)
+{
+        gchar *folded_s1;
+        gchar *folded_s2;
+        gint   result;
+
+        folded_s1 = g_utf8_casefold (s1, -1);
+        folded_s2 = g_utf8_casefold (s2, -1);
+
+        result = g_utf8_collate (folded_s1, folded_s2);
+
+        g_free (folded_s1);
+        g_free (folded_s2);
+
+        return result;
+}
+
+
diff --git a/libglabels/str.h b/libglabels/str.h
new file mode 100644 (file)
index 0000000..bc6312f
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  str.h:  libGLabels string utilities header file
+ *
+ *  Copyright (C) 2007  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __STR_H__
+#define __STR_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+gint  lgl_str_utf8_casecmp (const gchar *s1,
+                           const gchar *s2);
+
+G_END_DECLS
+
+
+#endif /* __STR_H__ */
diff --git a/libglabels/template.c b/libglabels/template.c
new file mode 100644 (file)
index 0000000..f6d6d21
--- /dev/null
@@ -0,0 +1,1121 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  template.c:  template module
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+#include <config.h>
+
+#include "template.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gqsort.h>
+#include <glib/gmessages.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "libglabels-private.h"
+
+#include "paper.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static gint         compare_origins              (gconstpointer           a,
+                                                  gconstpointer           b,
+                                                  gpointer                user_data);
+
+/*===========================================*/
+/* Functions.                                */
+/*===========================================*/
+
+/**
+ * lgl_template_new:
+ *   @brand:        Template brand
+ *   @part:         Template part name/number
+ *   @description:  Template descriptions
+ *   @paper_id:     Page size id
+ *   @page_width:   Page width in points, set to zero unless paper_id="Other"
+ *   @page_height:  Page height in points, set to zero unless paper_id="Other"
+ *
+ * Create a new template structure, with the given top-level attributes.  The
+ * created template will have no initial aliases, categories, or frames
+ * associated with it.  See lgl_template_add_alias(), lgl_template_add_category(),
+ * and lgl_template_add_frame() to add these.
+ *
+ * Returns: pointer to a newly allocated #lglTemplate structure.
+ *
+ */
+lglTemplate *
+lgl_template_new (const gchar         *brand,
+                  const gchar         *part,
+                  const gchar         *description,
+                  const gchar         *paper_id,
+                  gdouble              page_width,
+                  gdouble              page_height)
+{
+       lglTemplate      *template;
+       lglTemplateAlias *alias;
+
+       template = g_new0 (lglTemplate,1);
+
+       template->brand       = g_strdup (brand);
+       template->part        = g_strdup (part);
+       template->description = g_strdup (description);
+       template->paper_id    = g_strdup (paper_id);
+       template->page_width  = page_width;
+       template->page_height = page_height;
+
+       /* Always include primary name in alias list. */
+       template->aliases = NULL;
+        alias = lgl_template_alias_new (brand, part);
+        lgl_template_add_alias (template, alias);
+
+       return template;
+}
+
+
+/**
+ * lgl_template_get_name:
+ *   @template:  Pointer to template structure to test
+ *
+ * This function returns the name of the given template.  The name is the concetenation
+ * of the brand and part name/number.
+ *
+ * Returns:  A pointer to a newly allocated name string.  Should be freed with g_free().
+ *
+ */
+gchar *
+lgl_template_get_name (const lglTemplate  *template)
+{
+       g_return_val_if_fail (template, NULL);
+
+        return g_strdup_printf ("%s %s", template->brand, template->part);
+}
+
+
+/**
+ * lgl_template_do_templates_match:
+ *   @template1:  Pointer to 1st template structure to test
+ *   @template2:  Pointer to 2nd template structure to test
+ *
+ * This function tests if the given templates match.  This is a simple test that only tests
+ * the brand and part name/number. It does not test if they are actually identical.
+ *
+ * Returns:  TRUE if the two template matche.
+ *
+ */
+gboolean
+lgl_template_do_templates_match (const lglTemplate  *template1,
+                                 const lglTemplate  *template2)
+{
+       g_return_val_if_fail (template1, FALSE);
+       g_return_val_if_fail (template2, FALSE);
+
+        return (UTF8_EQUAL (template1->brand, template2->brand) &&
+                UTF8_EQUAL (template1->part, template2->part));
+}
+
+
+/**
+ * lgl_template_does_brand_match:
+ *   @template:  Pointer to template structure to test
+ *   @brand:     Brand string
+ *
+ * This function tests if the brand of the template matches the given brand.
+ *
+ * Returns:  TRUE if the template matches the given brand.
+ *
+ */
+gboolean
+lgl_template_does_brand_match (const lglTemplate  *template,
+                               const gchar        *brand)
+{
+       g_return_val_if_fail (template, FALSE);
+
+        /* NULL matches everything. */
+        if (brand == NULL)
+        {
+                return TRUE;
+        }
+
+        return UTF8_EQUAL (template->brand, brand);
+}
+
+
+/**
+ * lgl_template_does_page_size_match:
+ *   @template:  Pointer to template structure to test
+ *   @paper_id:  Page size ID string
+ *
+ * This function tests if the page size of the template matches the given ID.
+ *
+ * Returns:  TRUE if the template matches the given page size ID.
+ *
+ */
+gboolean
+lgl_template_does_page_size_match (const lglTemplate  *template,
+                                   const gchar        *paper_id)
+{
+       g_return_val_if_fail (template, FALSE);
+
+        /* NULL matches everything. */
+        if (paper_id == NULL)
+        {
+                return TRUE;
+        }
+
+        return ASCII_EQUAL(paper_id, template->paper_id);
+}
+
+
+/**
+ * lgl_template_does_category_match:
+ *   @template:     Pointer to template structure to test
+ *   @category_id:  Category ID string
+ *
+ * This function tests if the given template belongs to the given category ID.
+ *
+ * Returns:  TRUE if the template matches the given category ID.
+ *
+ */
+gboolean
+lgl_template_does_category_match  (const lglTemplate  *template,
+                                   const gchar        *category_id)
+{
+        GList *p;
+
+       g_return_val_if_fail (template, FALSE);
+
+        /* NULL matches everything. */
+        if (category_id == NULL)
+        {
+                return TRUE;
+        }
+
+        for ( p=template->category_ids; p != NULL; p=p->next )
+        {
+                if (ASCII_EQUAL(category_id, p->data))
+                {
+                        return TRUE;
+                }
+        }
+
+        return FALSE;
+}
+
+
+/**
+ * lgl_template_alias_new:
+ *   @brand:        Alias brand
+ *   @part:         Alias part name/number
+ *
+ * Create a new template alias structure, with the given brand and part number.
+ *
+ * Returns: pointer to a newly allocated #lglTemplateAlias structure.
+ *
+ */
+lglTemplateAlias *
+lgl_template_alias_new (const gchar         *brand,
+                        const gchar         *part)
+{
+       lglTemplateAlias *alias;
+
+       alias = g_new0 (lglTemplateAlias,1);
+
+       alias->brand       = g_strdup (brand);
+       alias->part        = g_strdup (part);
+
+       return alias;
+}
+
+
+/**
+ * lgl_template_add_alias:
+ *   @template:  Pointer to template structure
+ *   @alias:     Alias string
+ *
+ * This function adds the given alias to a templates list of aliases.
+ *
+ */
+void
+lgl_template_add_alias (lglTemplate         *template,
+                        lglTemplateAlias    *alias)
+{
+       g_return_if_fail (template);
+       g_return_if_fail (alias);
+
+       template->aliases = g_list_append (template->aliases, alias);
+}
+
+/**
+ * lgl_template_add_frame:
+ *   @template:  Pointer to template structure
+ *   @frame:     Pointer to frame structure
+ *
+ * This function adds the given frame structure to the template.  Once added,
+ * the frame structure belongs to the given template; do not attempt to free
+ * it.
+ *
+ * Note: Currently glabels only supports a single frame per template.
+ *
+ */
+void
+lgl_template_add_frame (lglTemplate      *template,
+                        lglTemplateFrame *frame)
+{
+       g_return_if_fail (template);
+       g_return_if_fail (frame);
+
+       template->frames = g_list_append (template->frames, frame);
+}
+
+/**
+ * lgl_template_add_category:
+ *   @template:     Pointer to template structure
+ *   @category_id:  Category ID string
+ *
+ * This function adds the given category ID to a templates category list.
+ *
+ */
+void
+lgl_template_add_category (lglTemplate         *template,
+                           const gchar         *category_id)
+{
+       g_return_if_fail (template);
+       g_return_if_fail (category_id);
+
+       template->category_ids = g_list_append (template->category_ids,
+                                                g_strdup (category_id));
+}
+
+/**
+ * lgl_template_frame_rect_new:
+ *   @id:      ID of frame.  (This should currently always be "0").
+ *   @w:       width of frame in points.
+ *   @h:       height of frame in points.
+ *   @r:       radius of rounded corners in points.  (Should be 0 for square corners.)
+ *   @x_waste: Amount of overprint to allow in the horizontal direction.
+ *   @y_waste: Amount of overprint to allow in the vertical direction.
+ *
+ * This function creates a new template frame for a rectangular label or card.
+ *
+ * Returns: Pointer to newly allocated #lglTemplateFrame structure.
+ *
+ */
+lglTemplateFrame *
+lgl_template_frame_rect_new  (const gchar         *id,
+                              gdouble              w,
+                              gdouble              h,
+                              gdouble              r,
+                              gdouble              x_waste,
+                              gdouble              y_waste)
+{
+       lglTemplateFrame *frame;
+
+       frame = g_new0 (lglTemplateFrame, 1);
+
+       frame->shape = LGL_TEMPLATE_FRAME_SHAPE_RECT;
+       frame->rect.id = g_strdup (id);
+
+       frame->rect.w = w;
+       frame->rect.h = h;
+       frame->rect.r = r;
+       frame->rect.x_waste = x_waste;
+       frame->rect.y_waste = y_waste;
+
+       return frame;
+}
+
+
+/**
+ * lgl_template_frame_round_new:
+ *   @id:      ID of frame.  (This should currently always be "0").
+ *   @r:       radius of label in points.
+ *   @waste:   Amount of overprint to allow.
+ *
+ * This function creates a new template frame for a round label.
+ *
+ * Returns: Pointer to newly allocated #lglTemplateFrame structure.
+ *
+ */
+lglTemplateFrame *
+lgl_template_frame_round_new (const gchar         *id,
+                              gdouble              r,
+                              gdouble              waste)
+{
+       lglTemplateFrame *frame;
+
+       frame = g_new0 (lglTemplateFrame, 1);
+
+       frame->shape = LGL_TEMPLATE_FRAME_SHAPE_ROUND;
+       frame->round.id = g_strdup (id);
+
+       frame->round.r = r;
+       frame->round.waste = waste;
+
+       return frame;
+}
+
+                                                                               
+/**
+ * lgl_template_frame_cd_new:
+ *   @id:      ID of frame.  (This should currently always be "0").
+ *   @r1:      outer radius of label in points.
+ *   @r2:      radius of center hole in points.
+ *   @w:       clip width of frame in points for business card CDs.  Should be 0 for no clipping.
+ *   @h:       clip height of frame in points for business card CDs.  Should be 0 for no clipping.
+ *   @waste:   Amount of overprint to allow.
+ *
+ * This function creates a new template frame for a CD/DVD label.
+ *
+ * Returns: Pointer to newly allocated #lglTemplateFrame structure.
+ *
+ */
+lglTemplateFrame *
+lgl_template_frame_cd_new (const gchar         *id,
+                           gdouble              r1,
+                           gdouble              r2,
+                           gdouble              w,
+                           gdouble              h,
+                           gdouble              waste)
+{
+       lglTemplateFrame *frame;
+
+       frame = g_new0 (lglTemplateFrame, 1);
+
+       frame->shape = LGL_TEMPLATE_FRAME_SHAPE_CD;
+       frame->cd.id = g_strdup (id);
+
+       frame->cd.r1 = r1;
+       frame->cd.r2 = r2;
+       frame->cd.w  = w;
+       frame->cd.h  = h;
+       frame->cd.waste = waste;
+
+       return frame;
+}
+
+
+/**
+ * lgl_template_frame_get_size:
+ * @frame: #lglTemplateFrame structure to query
+ * @w: pointer to location to receive width of frame
+ * @h: pointer to location to receive height of frame
+ *
+ * Get size (width and height) of given #lglTemplateFrame in points.
+ *
+ */
+void
+lgl_template_frame_get_size (const lglTemplateFrame *frame,
+                             gdouble                *w,
+                             gdouble                *h)
+{
+       g_return_if_fail (frame);
+
+       switch (frame->shape) {
+       case LGL_TEMPLATE_FRAME_SHAPE_RECT:
+               *w = frame->rect.w;
+               *h = frame->rect.h;
+               break;
+       case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
+               *w = 2.0 * frame->round.r;
+               *h = 2.0 * frame->round.r;
+               break;
+       case LGL_TEMPLATE_FRAME_SHAPE_CD:
+               if (frame->cd.w == 0.0) {
+                       *w = 2.0 * frame->cd.r1;
+               } else {
+                       *w = frame->cd.w;
+               }
+               if (frame->cd.h == 0.0) {
+                       *h = 2.0 * frame->cd.r1;
+               } else {
+                       *h = frame->cd.h;
+               }
+               break;
+       default:
+               *w = 0.0;
+               *h = 0.0;
+               break;
+       }
+}
+
+
+/**
+ * lgl_template_frame_get_n_labels:
+ * @frame: #lglTemplateFrame structure to query
+ *
+ * Get total number of labels per sheet corresponding to the given frame.
+ *
+ * Returns: number of labels per sheet.
+ *
+ */
+gint
+lgl_template_frame_get_n_labels (const lglTemplateFrame *frame)
+{
+       gint               n_labels = 0;
+       GList             *p;
+       lglTemplateLayout *layout;
+
+       g_return_val_if_fail (frame, 0);
+
+       for ( p=frame->all.layouts; p != NULL; p=p->next ) {
+               layout = (lglTemplateLayout *)p->data;
+
+               n_labels += layout->nx * layout->ny;
+       }
+
+       return n_labels;
+}
+
+
+/**
+ * lgl_template_frame_get_origins:
+ * @frame: #lglTemplateFrame structure to query
+ *
+ * Get an array of label origins for the given frame.  These origins represent the
+ * upper left hand corner of each label on a page corresponding to the given frame.
+ * The origins will be ordered geometrically left to right and then top to bottom.
+ * The array should be freed using g_free().
+ *
+ * Returns: A newly allocated array of #lglTemplateOrigin structures.
+ *
+ */
+lglTemplateOrigin *
+lgl_template_frame_get_origins (const lglTemplateFrame *frame)
+{
+       gint               i_label, n_labels, ix, iy;
+       lglTemplateOrigin *origins;
+       GList             *p;
+       lglTemplateLayout *layout;
+
+       g_return_val_if_fail (frame, NULL);
+
+       n_labels = lgl_template_frame_get_n_labels (frame);
+       origins = g_new0 (lglTemplateOrigin, n_labels);
+
+       i_label = 0;
+       for ( p=frame->all.layouts; p != NULL; p=p->next ) {
+               layout = (lglTemplateLayout *)p->data;
+
+               for (iy = 0; iy < layout->ny; iy++) {
+                       for (ix = 0; ix < layout->nx; ix++, i_label++) {
+                               origins[i_label].x = ix*layout->dx + layout->x0;
+                               origins[i_label].y = iy*layout->dy + layout->y0;
+                       }
+               }
+       }
+
+       g_qsort_with_data (origins, n_labels, sizeof(lglTemplateOrigin),
+                          compare_origins, NULL);
+
+       return origins;
+}
+
+
+/**
+ * lgl_template_frame_add_layout:
+ *   @frame:  Pointer to template frame to add layout to.
+ *   @layout: Pointer to layout structure to add to frame.
+ *
+ * This function adds a layout structure to the given template frame.
+ *
+ */
+void
+lgl_template_frame_add_layout (lglTemplateFrame   *frame,
+                               lglTemplateLayout  *layout)
+{
+       g_return_if_fail (frame);
+       g_return_if_fail (layout);
+
+       frame->all.layouts = g_list_append (frame->all.layouts, layout);
+}
+
+/**
+ * lgl_template_frame_add_markup:
+ *   @frame:  Pointer to template frame to add markup to.
+ *   @markup: Pointer to markup structure to add to frame.
+ *
+ * This function adds a markup structure to the given template frame.
+ *
+ */
+void
+lgl_template_frame_add_markup (lglTemplateFrame   *frame,
+                               lglTemplateMarkup  *markup)
+{
+       g_return_if_fail (frame);
+       g_return_if_fail (markup);
+
+       frame->all.markups = g_list_append (frame->all.markups, markup);
+}
+
+/**
+ * lgl_template_layout_new:
+ *   @nx:  Number of labels across.
+ *   @ny:  Number of labels down.
+ *   @x0:  X coordinate of the top-left corner of the top-left label in the layout in points.
+ *   @y0:  Y coordinate of the top-left corner of the top-left label in the layout in points.
+ *   @dx:  Horizontal pitch in points.  This is the distance from left-edge to left-edge.
+ *   @dy:  Vertical pitch in points.  This is the distance from top-edge to top-edge.
+ *
+ * This function creates a new layout structure with the given parameters.
+ *
+ * Returns: a newly allocated #lglTemplateLayout structure.
+ *
+ */
+lglTemplateLayout *
+lgl_template_layout_new (gint    nx,
+                         gint    ny,
+                         gdouble x0,
+                         gdouble y0,
+                         gdouble dx,
+                         gdouble dy)
+{
+       lglTemplateLayout *layout;
+
+       layout = g_new0 (lglTemplateLayout, 1);
+
+       layout->nx = nx;
+       layout->ny = ny;
+       layout->x0 = x0;
+       layout->y0 = y0;
+       layout->dx = dx;
+       layout->dy = dy;
+
+       return layout;
+}
+
+
+/**
+ * lgl_template_markup_margin_new:
+ *   @size: margin size in points.
+ *
+ * This function creates a new margin markup structure.
+ *
+ * Returns: a newly allocated #lglTemplateMarkup structure.
+ *
+ */
+lglTemplateMarkup *
+lgl_template_markup_margin_new (gdouble size)
+{
+       lglTemplateMarkup *markup;
+
+       markup = g_new0 (lglTemplateMarkup, 1);
+
+       markup->type        = LGL_TEMPLATE_MARKUP_MARGIN;
+       markup->margin.size = size;
+
+       return markup;
+}
+
+
+/**
+ * lgl_template_markup_line_new:
+ *   @x1: x coordinate of first endpoint.
+ *   @y1: y coordinate of first endpoint.
+ *   @x2: x coordinate of second endpoint.
+ *   @y2: y coordinate of second endpoint.
+ *
+ * This function creates a new line markup structure.
+ *
+ * Returns: a newly allocated #lglTemplateMarkup structure.
+ *
+ */
+lglTemplateMarkup *
+lgl_template_markup_line_new (gdouble x1,
+                              gdouble y1,
+                              gdouble x2,
+                              gdouble y2)
+{
+       lglTemplateMarkup *markup;
+
+       markup = g_new0 (lglTemplateMarkup, 1);
+
+       markup->type        = LGL_TEMPLATE_MARKUP_LINE;
+       markup->line.x1     = x1;
+       markup->line.y1     = y1;
+       markup->line.x2     = x2;
+       markup->line.y2     = y2;
+
+       return markup;
+}
+
+
+/**
+ * lgl_template_markup_circle_new:
+ *   @x0: x coordinate of center of circle.
+ *   @y0: y coordinate of center of circle.
+ *   @r:  radius of circle.
+ *
+ * This function creates a new circle markup structure.
+ *
+ * Returns: a newly allocated #lglTemplateMarkup structure.
+ *
+ */
+lglTemplateMarkup *
+lgl_template_markup_circle_new (gdouble x0,
+                                gdouble y0,
+                                gdouble r)
+{
+       lglTemplateMarkup *markup;
+
+       markup = g_new0 (lglTemplateMarkup, 1);
+
+       markup->type        = LGL_TEMPLATE_MARKUP_CIRCLE;
+       markup->circle.x0   = x0;
+       markup->circle.y0   = y0;
+       markup->circle.r    = r;
+
+       return markup;
+}
+
+
+/**
+ * lgl_template_markup_rect_new:
+ *   @x1: x coordinate of top-left corner of rectangle.
+ *   @y1: y coordinate of top-left corner of rectangle.
+ *   @w:  width of rectangle.
+ *   @h:  height of rectangle.
+ *   @r:  radius of rounded corner.
+ *
+ * This function creates a new rectangle markup structure.
+ *
+ * Returns: a newly allocated #lglTemplateMarkup structure.
+ *
+ */
+lglTemplateMarkup *
+lgl_template_markup_rect_new (gdouble x1,
+                              gdouble y1,
+                              gdouble w,
+                              gdouble h,
+                              gdouble r)
+{
+       lglTemplateMarkup *markup;
+
+       markup = g_new0 (lglTemplateMarkup, 1);
+
+       markup->type        = LGL_TEMPLATE_MARKUP_RECT;
+       markup->rect.x1     = x1;
+       markup->rect.y1     = y1;
+       markup->rect.w      = w;
+       markup->rect.h      = h;
+       markup->rect.r      = r;
+
+       return markup;
+}
+
+
+/**
+ * lgl_template_dup:
+ *   @orig_template: Template to duplicate.
+ *
+ * This function duplicates a template structure.
+ *
+ * Returns:  a newly allocated #lglTemplate structure.
+ *
+ */
+lglTemplate *
+lgl_template_dup (const lglTemplate *orig_template)
+{
+       lglTemplate         *template;
+       lglTemplateAlias    *alias;
+       GList               *p;
+       lglTemplateFrame    *frame;
+
+       g_return_val_if_fail (orig_template, NULL);
+
+       template = lgl_template_new (orig_template->brand,
+                                     orig_template->part,
+                                     orig_template->description,
+                                     orig_template->paper_id,
+                                     orig_template->page_width,
+                                     orig_template->page_height);
+
+       for ( p=orig_template->aliases; p != NULL; p=p->next )
+        {
+                alias = (lglTemplateAlias *)p->data;
+
+               if ( !(UTF8_EQUAL (template->brand, alias->brand) &&
+                       UTF8_EQUAL (template->part, alias->part)) )
+                {
+                       lgl_template_add_alias (template, lgl_template_alias_dup (alias));
+               }
+
+       }
+
+       for ( p=orig_template->category_ids; p != NULL; p=p->next )
+        {
+                lgl_template_add_category (template, p->data);
+       }
+
+       for ( p=orig_template->frames; p != NULL; p=p->next )
+        {
+               frame = (lglTemplateFrame *)p->data;
+
+               lgl_template_add_frame (template, lgl_template_frame_dup (frame));
+       }
+
+       return template;
+}
+
+
+/**
+ * lgl_template_free:
+ *   @template: Template to free.
+ *
+ * This function frees all memory associated with given template structure.
+ *
+ */
+void
+lgl_template_free (lglTemplate *template)
+{
+       GList            *p;
+       lglTemplateFrame *frame;
+
+       if ( template != NULL ) {
+
+               g_free (template->brand);
+               template->brand = NULL;
+
+               g_free (template->part);
+               template->part = NULL;
+
+               g_free (template->description);
+               template->description = NULL;
+
+               g_free (template->paper_id);
+               template->paper_id = NULL;
+
+               for ( p=template->aliases; p != NULL; p=p->next ) {
+
+                       lgl_template_alias_free (p->data);
+                       p->data = NULL;
+
+               }
+               g_list_free (template->aliases);
+               template->aliases = NULL;
+
+               for ( p=template->category_ids; p != NULL; p=p->next ) {
+
+                       g_free (p->data);
+                       p->data = NULL;
+
+               }
+               g_list_free (template->category_ids);
+               template->category_ids = NULL;
+
+               for ( p=template->frames; p != NULL; p=p->next ) {
+
+                       frame = (lglTemplateFrame *)p->data;
+
+                       lgl_template_frame_free (frame);
+                       p->data = NULL;
+               }
+               g_list_free (template->frames);
+               template->frames = NULL;
+
+               g_free (template);
+
+       }
+
+}
+
+
+/**
+ * lgl_template_alias_dup:
+ *   @orig_alias: Alias to duplicate.
+ *
+ * This function duplicates a template alias structure.
+ *
+ * Returns:  a newly allocated #lglTemplateAlias structure.
+ *
+ */
+lglTemplateAlias *
+lgl_template_alias_dup (const lglTemplateAlias *orig_alias)
+{
+       g_return_val_if_fail (orig_alias, NULL);
+
+       return lgl_template_alias_new (orig_alias->brand, orig_alias->part);
+}
+
+
+/**
+ * lgl_template_alias_free:
+ *   @alias: Alias to free.
+ *
+ * This function frees all memory associated with given template alias structure.
+ *
+ */
+void
+lgl_template_alias_free (lglTemplateAlias *alias)
+{
+
+       if ( alias != NULL )
+        {
+               g_free (alias->brand);
+               alias->brand = NULL;
+
+               g_free (alias->part);
+               alias->part = NULL;
+
+               g_free (alias);
+       }
+}
+
+
+/**
+ * lgl_template_frame_dup:
+ *   @orig_frame: Frame to duplicate.
+ *
+ * This function duplicates a template frame structure.
+ *
+ * Returns:  a newly allocated #lglTemplateFrame structure.
+ *
+ */
+lglTemplateFrame *
+lgl_template_frame_dup (const lglTemplateFrame *orig_frame)
+{
+       lglTemplateFrame    *frame;
+       GList               *p;
+       lglTemplateLayout   *layout;
+       lglTemplateMarkup   *markup;
+
+       g_return_val_if_fail (orig_frame, NULL);
+
+       switch (orig_frame->shape) {
+
+       case LGL_TEMPLATE_FRAME_SHAPE_RECT:
+               frame =
+                       lgl_template_frame_rect_new (orig_frame->all.id,
+                                                     orig_frame->rect.w,
+                                                     orig_frame->rect.h,
+                                                     orig_frame->rect.r,
+                                                     orig_frame->rect.x_waste,
+                                                     orig_frame->rect.y_waste);
+               break;
+
+       case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
+               frame =
+                       lgl_template_frame_round_new (orig_frame->all.id,
+                                                      orig_frame->round.r,
+                                                      orig_frame->round.waste);
+               break;
+
+       case LGL_TEMPLATE_FRAME_SHAPE_CD:
+               frame =
+                       lgl_template_frame_cd_new (orig_frame->all.id,
+                                                   orig_frame->cd.r1,
+                                                   orig_frame->cd.r2,
+                                                   orig_frame->cd.w,
+                                                   orig_frame->cd.h,
+                                                   orig_frame->cd.waste);
+               break;
+
+       default:
+               return NULL;
+               break;
+       }
+
+       for ( p=orig_frame->all.layouts; p != NULL; p=p->next ) {
+
+               layout = (lglTemplateLayout *)p->data;
+
+               lgl_template_frame_add_layout (frame, lgl_template_layout_dup (layout));
+       }
+
+       for ( p=orig_frame->all.markups; p != NULL; p=p->next ) {
+
+               markup = (lglTemplateMarkup *)p->data;
+
+               lgl_template_frame_add_markup (frame, lgl_template_markup_dup (markup));
+       }
+
+       return frame;
+}
+
+
+/**
+ * lgl_template_frame_free:
+ *   @frame: Frame to free.
+ *
+ * This function frees all memory associated with given template frame structure.
+ *
+ */
+void
+lgl_template_frame_free (lglTemplateFrame *frame)
+{
+       GList                *p;
+       lglTemplateLayout    *layout;
+       lglTemplateMarkup    *markup;
+
+       if ( frame != NULL ) {
+
+               g_free (frame->all.id);
+               frame->all.id = NULL;
+
+               for ( p=frame->all.layouts; p != NULL; p=p->next ) {
+
+                       layout = (lglTemplateLayout *)p->data;
+
+                       lgl_template_layout_free (layout);
+                       p->data = NULL;
+               }
+               g_list_free (frame->all.layouts);
+               frame->all.layouts = NULL;
+
+               for ( p=frame->all.markups; p != NULL; p=p->next ) {
+
+                       markup = (lglTemplateMarkup *)p->data;
+
+                       lgl_template_markup_free (markup);
+                       p->data = NULL;
+               }
+               g_list_free (frame->all.markups);
+               frame->all.markups = NULL;
+
+               g_free (frame);
+
+       }
+
+}
+
+
+/**
+ * lgl_template_layout_dup:
+ *   @orig_layout: Layout to duplicate.
+ *
+ * This function duplicates a template layout structure.
+ *
+ * Returns:  a newly allocated #lglTemplateLayout structure.
+ *
+ */
+lglTemplateLayout *
+lgl_template_layout_dup (const lglTemplateLayout *orig_layout)
+{
+       lglTemplateLayout *layout;
+
+       g_return_val_if_fail (orig_layout, NULL);
+
+       layout = g_new0 (lglTemplateLayout, 1);
+
+       /* copy contents */
+       *layout = *orig_layout;
+
+       return layout;
+}
+
+
+/**
+ * lgl_template_layout_free:
+ *   @layout: Layout to free.
+ *
+ * This function frees all memory associated with given template layout structure.
+ *
+ */
+void
+lgl_template_layout_free (lglTemplateLayout *layout)
+{
+       g_free (layout);
+}
+
+
+/**
+ * lgl_template_markup_dup:
+ *   @orig_markup: Markup to duplicate.
+ *
+ * This function duplicates a template markup structure.
+ *
+ * Returns:  a newly allocated #lglTemplateMarkup structure.
+ *
+ */
+lglTemplateMarkup *
+lgl_template_markup_dup (const lglTemplateMarkup *orig_markup)
+{
+       lglTemplateMarkup *markup;
+
+       g_return_val_if_fail (orig_markup, NULL);
+
+       markup = g_new0 (lglTemplateMarkup, 1);
+
+       *markup = *orig_markup;
+
+       return markup;
+}
+
+
+/**
+ * lgl_template_markup_free:
+ *   @markup: Markup to free.
+ *
+ * This function frees all memory associated with given template markup structure.
+ *
+ */
+void
+lgl_template_markup_free (lglTemplateMarkup *markup)
+{
+       g_free (markup);
+}
+
+
+static gint
+compare_origins (gconstpointer a,
+                gconstpointer b,
+                gpointer      user_data)
+{
+       const lglTemplateOrigin *a_origin = a, *b_origin = b;
+
+       if ( a_origin->y < b_origin->y ) {
+               return -1;
+       } else if ( a_origin->y > b_origin->y ) {
+               return +1;
+       } else {
+               if ( a_origin->x < b_origin->x ) {
+                       return -1;
+               } else if ( a_origin->x > b_origin->x ) {
+                       return +1;
+               } else {
+                       return 0; /* hopefully 2 labels won't have the same origin */
+               }
+       }
+}
+
diff --git a/libglabels/template.h b/libglabels/template.h
new file mode 100644 (file)
index 0000000..cbcbccf
--- /dev/null
@@ -0,0 +1,380 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  template.h:  template module header file
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __TEMPLATE_H__
+#define __TEMPLATE_H__
+
+#include <glib/gtypes.h>
+#include <glib/glist.h>
+
+G_BEGIN_DECLS
+
+typedef struct _lglTemplate                lglTemplate;
+
+typedef struct _lglTemplateAlias           lglTemplateAlias;
+
+typedef union  _lglTemplateFrame           lglTemplateFrame;
+typedef struct _lglTemplateFrameAll        lglTemplateFrameAll;
+typedef struct _lglTemplateFrameRect       lglTemplateFrameRect;
+typedef struct _lglTemplateFrameRound      lglTemplateFrameRound;
+typedef struct _lglTemplateFrameCD         lglTemplateFrameCD;
+
+typedef struct _lglTemplateLayout          lglTemplateLayout;
+
+typedef union  _lglTemplateMarkup          lglTemplateMarkup;
+typedef struct _lglTemplateMarkupMargin    lglTemplateMarkupMargin;
+typedef struct _lglTemplateMarkupLine      lglTemplateMarkupLine;
+typedef struct _lglTemplateMarkupCircle    lglTemplateMarkupCircle;
+typedef struct _lglTemplateMarkupRect      lglTemplateMarkupRect;
+
+typedef struct _lglTemplateOrigin          lglTemplateOrigin;
+
+/*
+ *   Top-level Template Structure
+ */
+struct _lglTemplate {
+
+       gchar               *brand;
+        gchar               *part;
+       gchar               *description;
+       gchar               *paper_id;
+       gdouble              page_width;
+       gdouble              page_height;
+
+       /* List of (lglTemplateAlias *) aliase structures. */
+       GList               *aliases;
+
+        /* List of (gchar *) category ids. */
+       GList               *category_ids;
+
+       /* List of (lglTemplateFrame *) label frame structures.
+        * Currently glabels only supports a single label frame per
+        * template. */
+       GList               *frames;
+
+};
+
+
+/*
+ *   Top-level Template Structure
+ */
+struct _lglTemplateAlias {
+
+       gchar               *brand;
+        gchar               *part;
+
+};
+
+/*
+ *   Possible Frame Shapes
+ */
+typedef enum {
+       LGL_TEMPLATE_FRAME_SHAPE_RECT,
+       LGL_TEMPLATE_FRAME_SHAPE_ROUND,
+       LGL_TEMPLATE_FRAME_SHAPE_CD,
+} lglTemplateFrameShape;
+
+
+/*
+ *   Frame Structure
+ */
+struct _lglTemplateFrameAll {
+
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+};
+
+struct _lglTemplateFrameRect {
+
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;    /* Always LGL_TEMPLATE_FRAME_SHAPE_RECT. */
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+
+        gdouble               w;        /* Width */
+        gdouble               h;        /* Height */
+        gdouble               r;        /* Corner radius */
+        gdouble               x_waste;  /* Amount of horiz overprint allowed. */
+        gdouble               y_waste;  /* Amount of vert overprint allowed. */
+};
+
+struct _lglTemplateFrameRound {
+
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;    /* Always LGL_TEMPLATE_FRAME_SHAPE_ROUND. */
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+
+        gdouble               r;      /* Radius */
+        gdouble               waste;  /* Amount of overprint allowed. */
+};
+
+struct _lglTemplateFrameCD {
+
+        /* Begin Common Fields */
+       lglTemplateFrameShape shape;    /* Always LGL_TEMPLATE_FRAME_SHAPE_CD. */
+
+       gchar                *id;       /* Id, currently always "0" */
+       GList                *layouts;  /* List of lglTemplateLayouts */
+       GList                *markups;  /* List of lglTemplateMarkups */
+        /* End Common Fields */
+
+        gdouble               r1;     /* Outer radius */
+        gdouble               r2;     /* Inner radius (hole) */
+        gdouble               w;      /* Clip width, business card CDs */
+        gdouble               h;      /* Clip height, business card CDs */
+        gdouble               waste;  /* Amount of overprint allowed. */
+};
+
+union _lglTemplateFrame{
+
+       lglTemplateFrameShape shape;
+
+       lglTemplateFrameAll   all;
+       lglTemplateFrameRect  rect;
+       lglTemplateFrameRound round;
+       lglTemplateFrameCD    cd;
+};
+
+
+/*
+ *   Label Layout Structure
+ */
+struct _lglTemplateLayout {
+
+       gint                  nx;  /* Number of labels across */
+       gint                  ny;  /* Number of labels up and down */
+
+       gdouble               x0;  /* Left of grid from left edge of paper */
+       gdouble               y0;  /* Top of grid from top edge of paper */
+
+       gdouble               dx;  /* Horizontal pitch of grid */
+       gdouble               dy;  /* Vertical pitch of grid */
+
+};
+
+
+/*
+ * Possible Markup Types
+ */
+typedef enum {
+       LGL_TEMPLATE_MARKUP_MARGIN,
+       LGL_TEMPLATE_MARKUP_LINE,
+       LGL_TEMPLATE_MARKUP_CIRCLE,
+       LGL_TEMPLATE_MARKUP_RECT,
+} lglTemplateMarkupType;
+
+
+/*
+ *   Label Markup Structure (Helpful lines drawn in glabels to help locate objects)
+ */
+struct _lglTemplateMarkupMargin {
+
+       lglTemplateMarkupType  type;  /* Always LGL_TEMPLATE_MARKUP_MARGIN */
+
+        gdouble                size;  /* Margin size */
+};
+
+struct _lglTemplateMarkupLine {
+
+       lglTemplateMarkupType  type;   /* Always LGL_TEMPLATE_MARKUP_LINE */
+
+        gdouble                x1, y1; /* 1st endpoint */
+        gdouble                x2, y2; /* 2nd endpoint */
+};
+
+struct _lglTemplateMarkupCircle {
+
+       lglTemplateMarkupType  type;   /* Always LGL_TEMPLATE_MARKUP_CIRCLE */
+
+        gdouble                x0, y0; /* Center of circle */
+        gdouble                r;      /* Radius of circle */
+};
+
+struct _lglTemplateMarkupRect {
+
+       lglTemplateMarkupType  type;   /* Always LGL_TEMPLATE_MARKUP_RECT */
+
+        gdouble                x1, y1; /* Upper left corner */
+        gdouble                w, h;   /* Width and height. */
+        gdouble                r;      /* Radius of corners. */
+};
+
+union _lglTemplateMarkup {
+
+       lglTemplateMarkupType   type;
+
+       lglTemplateMarkupMargin margin;
+       lglTemplateMarkupLine   line;
+       lglTemplateMarkupCircle circle;
+       lglTemplateMarkupRect   rect;
+};
+
+
+/*
+ *  Origin coordinates
+ */
+struct _lglTemplateOrigin {
+
+       gdouble               x, y; /* Label origin relative to upper 
+                                    * upper left hand corner of paper */
+
+};
+
+
+
+/* 
+ * Template query functions
+ */
+gchar                     *lgl_template_get_name             (const lglTemplate   *template);
+
+gboolean                   lgl_template_do_templates_match   (const lglTemplate   *template1,
+                                                              const lglTemplate   *template2);
+
+gboolean                   lgl_template_does_brand_match     (const lglTemplate   *template,
+                                                              const gchar         *brand);
+
+gboolean                   lgl_template_does_page_size_match (const lglTemplate   *template,
+                                                              const gchar         *paper_id);
+
+gboolean                   lgl_template_does_category_match  (const lglTemplate   *template,
+                                                              const gchar         *category_id);
+
+
+/*
+ * Frame query functions
+ */
+void                 lgl_template_frame_get_size       (const lglTemplateFrame    *frame,
+                                                        gdouble                   *w,
+                                                        gdouble                   *h);
+
+gint                 lgl_template_frame_get_n_labels   (const lglTemplateFrame    *frame);
+
+lglTemplateOrigin   *lgl_template_frame_get_origins    (const lglTemplateFrame    *frame);
+
+
+/*
+ * Template Construction
+ */
+lglTemplate         *lgl_template_new                  (const gchar          *brand,
+                                                        const gchar          *part,
+                                                        const gchar          *description,
+                                                        const gchar          *paper_id,
+                                                        gdouble               page_width,
+                                                        gdouble               page_height);
+
+void                 lgl_template_add_alias            (lglTemplate          *template,
+                                                        lglTemplateAlias     *alias);
+
+void                 lgl_template_add_category         (lglTemplate          *template,
+                                                        const gchar          *category_id);
+
+void                 lgl_template_add_frame            (lglTemplate          *template,
+                                                        lglTemplateFrame     *frame);
+
+lglTemplateFrame    *lgl_template_frame_rect_new       (const gchar          *id,
+                                                        gdouble               w,
+                                                        gdouble               h,
+                                                        gdouble               r,
+                                                        gdouble               x_waste,
+                                                        gdouble               y_waste);
+
+lglTemplateAlias    *lgl_template_alias_new            (const gchar          *brand,
+                                                        const gchar          *part);
+
+lglTemplateFrame    *lgl_template_frame_round_new      (const gchar          *id,
+                                                        gdouble               r,
+                                                        gdouble               waste);
+
+lglTemplateFrame    *lgl_template_frame_cd_new         (const gchar          *id,
+                                                        gdouble               r1,
+                                                        gdouble               r2,
+                                                        gdouble               w,
+                                                        gdouble               h,
+                                                        gdouble               waste);
+
+void                 lgl_template_frame_add_layout     (lglTemplateFrame     *frame,
+                                                        lglTemplateLayout    *layout);
+
+void                 lgl_template_frame_add_markup     (lglTemplateFrame     *frame,
+                                                        lglTemplateMarkup    *markup);
+
+lglTemplateLayout   *lgl_template_layout_new           (gint                  nx,
+                                                        gint                  ny,
+                                                        gdouble               x0,
+                                                        gdouble               y0,
+                                                        gdouble               dx,
+                                                        gdouble               dy);
+
+lglTemplateMarkup   *lgl_template_markup_margin_new    (gdouble               size);
+
+lglTemplateMarkup   *lgl_template_markup_line_new      (gdouble               x1,
+                                                        gdouble               y1,
+                                                        gdouble               x2,
+                                                        gdouble               y2);
+
+lglTemplateMarkup   *lgl_template_markup_circle_new    (gdouble               x0,
+                                                        gdouble               y0,
+                                                        gdouble               r);
+
+lglTemplateMarkup   *lgl_template_markup_rect_new      (gdouble               x1,
+                                                        gdouble               y1,
+                                                        gdouble               w,
+                                                        gdouble               h,
+                                                        gdouble               r);
+
+lglTemplate         *lgl_template_dup                  (const lglTemplate    *orig_template);
+
+void                 lgl_template_free                 (lglTemplate          *template);
+
+lglTemplateAlias    *lgl_template_alias_dup            (const lglTemplateAlias     *orig_alias);
+void                 lgl_template_alias_free           (lglTemplateAlias           *alias);
+
+lglTemplateFrame    *lgl_template_frame_dup            (const lglTemplateFrame     *orig_frame);
+void                 lgl_template_frame_free           (lglTemplateFrame           *frame);
+
+lglTemplateLayout   *lgl_template_layout_dup           (const lglTemplateLayout    *orig_layout);
+void                 lgl_template_layout_free          (lglTemplateLayout          *layout);
+
+lglTemplateMarkup   *lgl_template_markup_dup           (const lglTemplateMarkup    *orig_markup);
+void                 lgl_template_markup_free          (lglTemplateMarkup          *markup);
+
+
+G_END_DECLS
+
+#endif
diff --git a/libglabels/xml-category.c b/libglabels/xml-category.c
new file mode 100644 (file)
index 0000000..0e759c9
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  xml-category.c:  category xml module
+ *
+ *  Copyright (C) 2006  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+#include <config.h>
+
+#include "xml-category.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmessages.h>
+#include <string.h>
+#include <libintl.h>
+
+#include "libglabels-private.h"
+
+#include "xml.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+
+/**
+ * lgl_xml_category_read_categories_from_file:
+ * @utf8_filename:       Filename of categories file (name encoded as UTF-8)
+ *
+ * Read category definitions from a file.
+ *
+ * Returns: a list of #lglCategory structures.
+ *
+ */
+GList *
+lgl_xml_category_read_categories_from_file (gchar *utf8_filename)
+{
+       gchar      *filename;
+       GList      *categories;
+       xmlDocPtr   categories_doc;
+
+       LIBXML_TEST_VERSION;
+
+       filename = g_filename_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
+       if (!filename) {
+               g_message ("Utf8 filename conversion error");
+               return NULL;
+       }
+
+       categories_doc = xmlParseFile (filename);
+       if (!categories_doc) {
+               g_message ("\"%s\" is not a glabels category file (not XML)",
+                          filename);
+               return NULL;
+       }
+
+       categories = lgl_xml_category_parse_categories_doc (categories_doc);
+
+       g_free (filename);
+       xmlFreeDoc (categories_doc);
+
+       return categories;
+}
+
+
+/**
+ * lgl_xml_category_parse_categories_doc:
+ * @categories_doc:  libxml #xmlDocPtr tree, representing a categories
+ * definition file.
+ *
+ * Read category definitions from a libxml #xmlDocPtr tree.
+ *
+ * Returns: a list of #lglCategory structures.
+ *
+ */
+GList *
+lgl_xml_category_parse_categories_doc (xmlDocPtr  categories_doc)
+{
+       GList       *categories = NULL;
+       xmlNodePtr   root, node;
+       lglCategory *category;
+
+       LIBXML_TEST_VERSION;
+
+       root = xmlDocGetRootElement (categories_doc);
+       if (!root || !root->name) {
+               g_message ("\"%s\" is not a glabels category file (no root node)",
+                          categories_doc->name);
+               xmlFreeDoc (categories_doc);
+               return categories;
+       }
+       if (!lgl_xml_is_node (root, "Glabels-categories")) {
+               g_message ("\"%s\" is not a glabels category file (wrong root node)",
+                          categories_doc->name);
+               xmlFreeDoc (categories_doc);
+               return categories;
+       }
+
+       for (node = root->xmlChildrenNode; node != NULL; node = node->next) {
+
+               if (lgl_xml_is_node (node, "Category")) {
+                       category = lgl_xml_category_parse_category_node (node);
+                       categories = g_list_append (categories, category);
+               } else {
+                       if ( !xmlNodeIsText(node) ) {
+                               if (!lgl_xml_is_node (node, "comment")) {
+                                       g_message ("bad node =  \"%s\"",node->name);
+                               }
+                       }
+               }
+       }
+
+       return categories;
+}
+
+
+/**
+ * lgl_xml_category_parse_category_node:
+ * @category_node:  libxml #xmlNodePtr category node from a #xmlDocPtr tree.
+ *
+ * Read a single category definition from a libxml #xmlNodePtr node.
+ *
+ * Returns: a pointer to a newly created #lglCategory structure.
+ *
+ */
+lglCategory *
+lgl_xml_category_parse_category_node (xmlNodePtr category_node)
+{
+       lglCategory           *category;
+       gchar                 *id, *name;
+
+       LIBXML_TEST_VERSION;
+
+       id   = lgl_xml_get_prop_string (category_node, "id", NULL);
+       name = lgl_xml_get_prop_i18n_string (category_node, "name", NULL);
+
+       category = lgl_category_new (id, name);
+
+       g_free (id);
+       g_free (name);
+
+       return category;
+}
+
diff --git a/libglabels/xml-category.h b/libglabels/xml-category.h
new file mode 100644 (file)
index 0000000..ef01d9f
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  xml-category.h:  category xml module header file
+ *
+ *  Copyright (C) 2006  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __XML_CATEGORY_H__
+#define __XML_CATEGORY_H__
+
+#include <glib/gtypes.h>
+#include <glib/glist.h>
+#include <libxml/tree.h>
+
+#include "category.h"
+
+G_BEGIN_DECLS
+
+GList       *lgl_xml_category_read_categories_from_file (gchar        *utf8_filename);
+
+GList       *lgl_xml_category_parse_categories_doc      (xmlDocPtr     categories_doc);
+
+lglCategory *lgl_xml_category_parse_category_node       (xmlNodePtr    category_node);
+
+
+G_END_DECLS
+
+#endif /* __XML_CATEGORY_H__ */
diff --git a/libglabels/xml-paper.c b/libglabels/xml-paper.c
new file mode 100644 (file)
index 0000000..fc6f07f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  xml-paper.c:  paper xml module
+ *
+ *  Copyright (C) 2003, 2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+#include <config.h>
+
+#include "xml-paper.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmessages.h>
+#include <string.h>
+#include <libintl.h>
+
+#include "libglabels-private.h"
+
+#include "xml.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+
+/**
+ * lgl_xml_paper_read_papers_from_file:
+ * @utf8_filename:       Filename of papers file (name encoded as UTF-8)
+ *
+ * Read paper definitions from a file.
+ *
+ * Returns: a list of #lglPaper structures.
+ *
+ */
+GList *
+lgl_xml_paper_read_papers_from_file (gchar *utf8_filename)
+{
+       gchar      *filename;
+       GList      *papers;
+       xmlDocPtr   papers_doc;
+
+       LIBXML_TEST_VERSION;
+
+       filename = g_filename_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
+       if (!filename) {
+               g_message ("Utf8 filename conversion error");
+               return NULL;
+       }
+
+       papers_doc = xmlParseFile (filename);
+       if (!papers_doc) {
+               g_message ("\"%s\" is not a glabels paper file (not XML)",
+                          filename);
+               return NULL;
+       }
+
+       papers = lgl_xml_paper_parse_papers_doc (papers_doc);
+
+       g_free (filename);
+       xmlFreeDoc (papers_doc);
+
+       return papers;
+}
+
+
+/**
+ * lgl_xml_paper_parse_papers_doc:
+ * @papers_doc:  libxml #xmlDocPtr tree, representing a papers definition file.
+ *
+ * Read paper definitions from a libxml #xmlDocPtr tree.
+ *
+ * Returns: a list of #lglPaper structures.
+ *
+ */
+GList *
+lgl_xml_paper_parse_papers_doc (xmlDocPtr  papers_doc)
+{
+       GList      *papers = NULL;
+       xmlNodePtr  root, node;
+       lglPaper   *paper;
+
+       LIBXML_TEST_VERSION;
+
+       root = xmlDocGetRootElement (papers_doc);
+       if (!root || !root->name) {
+               g_message ("\"%s\" is not a glabels paper file (no root node)",
+                          papers_doc->name);
+               xmlFreeDoc (papers_doc);
+               return papers;
+       }
+       if (!lgl_xml_is_node (root, "Glabels-paper-sizes")) {
+               g_message ("\"%s\" is not a glabels paper file (wrong root node)",
+                          papers_doc->name);
+               xmlFreeDoc (papers_doc);
+               return papers;
+       }
+
+       for (node = root->xmlChildrenNode; node != NULL; node = node->next) {
+
+               if (lgl_xml_is_node (node, "Paper-size")) {
+                       paper = lgl_xml_paper_parse_paper_node (node);
+                       papers = g_list_append (papers, paper);
+               } else {
+                       if ( !xmlNodeIsText(node) ) {
+                               if (!lgl_xml_is_node (node, "comment")) {
+                                       g_message ("bad node =  \"%s\"",node->name);
+                               }
+                       }
+               }
+       }
+
+       return papers;
+}
+
+
+/**
+ * lgl_xml_paper_parse_paper_node:
+ * @paper_node:  libxml #xmlNodePtr paper node from a #xmlDocPtr tree.
+ *
+ * Read a single paper definition from a libxml #xmlNodePtr node.
+ *
+ * Returns: a pointer to a newly created #lglPaper structure.
+ *
+ */
+lglPaper *
+lgl_xml_paper_parse_paper_node (xmlNodePtr paper_node)
+{
+       lglPaper              *paper;
+       gchar                 *id, *name, *pwg_size;
+       gdouble                width, height;
+
+       LIBXML_TEST_VERSION;
+
+       id   = lgl_xml_get_prop_string (paper_node, "id", NULL);
+
+       name = lgl_xml_get_prop_i18n_string (paper_node, "name", NULL);
+
+       width  = lgl_xml_get_prop_length (paper_node, "width", 0);
+       height = lgl_xml_get_prop_length (paper_node, "height", 0);
+
+       pwg_size = lgl_xml_get_prop_string (paper_node, "pwg_size", NULL);
+
+       paper = lgl_paper_new (id, name, width, height, pwg_size);
+
+       g_free (id);
+       g_free (name);
+       g_free (pwg_size);
+
+       return paper;
+}
+
diff --git a/libglabels/xml-paper.h b/libglabels/xml-paper.h
new file mode 100644 (file)
index 0000000..df90bcf
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  xml-paper.h:  paper xml module header file
+ *
+ *  Copyright (C) 2003, 2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __XML_PAPER_H__
+#define __XML_PAPER_H__
+
+#include <glib/gtypes.h>
+#include <glib/glist.h>
+#include <libxml/tree.h>
+
+#include "paper.h"
+
+G_BEGIN_DECLS
+
+GList       *lgl_xml_paper_read_papers_from_file (gchar        *utf8_filename);
+
+GList       *lgl_xml_paper_parse_papers_doc      (xmlDocPtr     papers_doc);
+
+lglPaper    *lgl_xml_paper_parse_paper_node      (xmlNodePtr    paper_node);
+
+
+G_END_DECLS
+
+#endif /* __XML_PAPER_H__ */
diff --git a/libglabels/xml-template.c b/libglabels/xml-template.c
new file mode 100644 (file)
index 0000000..9ed25cd
--- /dev/null
@@ -0,0 +1,984 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  xml-template.c:  template xml module
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+#include <config.h>
+
+#include "xml-template.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmessages.h>
+#include <string.h>
+#include <libintl.h>
+
+#include "libglabels-private.h"
+
+#include "db.h"
+#include "xml.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+static void  xml_parse_meta_node            (xmlNodePtr              label_node,
+                                            lglTemplate            *template);
+static void  xml_parse_label_rectangle_node (xmlNodePtr              label_node,
+                                            lglTemplate            *template);
+static void  xml_parse_label_round_node     (xmlNodePtr              label_node,
+                                            lglTemplate            *template);
+static void  xml_parse_label_cd_node        (xmlNodePtr              label_node,
+                                            lglTemplate            *template);
+static void  xml_parse_layout_node          (xmlNodePtr              layout_node,
+                                            lglTemplateFrame       *frame);
+static void  xml_parse_markup_margin_node   (xmlNodePtr              markup_node,
+                                            lglTemplateFrame       *frame);
+static void  xml_parse_markup_line_node     (xmlNodePtr              markup_node,
+                                            lglTemplateFrame       *frame);
+static void  xml_parse_markup_circle_node   (xmlNodePtr              markup_node,
+                                            lglTemplateFrame       *frame);
+static void  xml_parse_markup_rect_node     (xmlNodePtr              markup_node,
+                                            lglTemplateFrame       *frame);
+static void  xml_parse_alias_node           (xmlNodePtr              alias_node,
+                                            lglTemplate            *template);
+
+static void  xml_create_meta_node           (const gchar                  *category,
+                                            xmlNodePtr                    root,
+                                            const xmlNsPtr                ns);
+static void  xml_create_label_node          (const lglTemplateFrame       *frame,
+                                            xmlNodePtr                    root,
+                                            const xmlNsPtr                ns);
+static void  xml_create_layout_node         (const lglTemplateLayout      *layout,
+                                            xmlNodePtr                    root,
+                                            const xmlNsPtr                ns);
+static void  xml_create_markup_margin_node  (const lglTemplateMarkup      *margin,
+                                            xmlNodePtr                    root,
+                                            const xmlNsPtr                ns);
+static void  xml_create_markup_line_node    (const lglTemplateMarkup      *line,
+                                            xmlNodePtr                    root,
+                                            const xmlNsPtr                ns);
+static void  xml_create_markup_circle_node  (const lglTemplateMarkup      *circle,
+                                            xmlNodePtr                    root,
+                                            const xmlNsPtr                ns);
+static void  xml_create_markup_rect_node    (const lglTemplateMarkup      *circle,
+                                            xmlNodePtr                    root,
+                                            const xmlNsPtr                ns);
+static void  xml_create_alias_node          (const lglTemplateAlias       *alias,
+                                            xmlNodePtr                    root,
+                                            const xmlNsPtr                ns);
+
+
+/**
+ * lgl_xml_template_read_templates_from_file:
+ * @utf8_filename:       Filename of papers file (name encoded as UTF-8)
+ *
+ * Read glabels templates from template file.
+ *
+ * Returns: a list of #lglTemplate structures.
+ *
+ */
+GList *
+lgl_xml_template_read_templates_from_file (const gchar *utf8_filename)
+{
+       gchar      *filename;
+       xmlDocPtr   templates_doc;
+       GList      *templates = NULL;
+
+       LIBXML_TEST_VERSION;
+
+       filename = g_filename_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
+       if (!filename) {
+               g_message ("Utf8 filename conversion error");
+               return NULL;
+       }
+
+       templates_doc = xmlParseFile (filename);
+       if (!templates_doc) {
+               g_message ("\"%s\" is not a glabels template file (not XML)",
+                     filename);
+               return templates;
+       }
+
+       templates = lgl_xml_template_parse_templates_doc (templates_doc);
+
+       g_free (filename);
+       xmlFreeDoc (templates_doc);
+
+       return templates;
+}
+
+
+/**
+ * lgl_xml_template_parse_templates_doc:
+ * @templates_doc:  libxml #xmlDocPtr tree, representing template file.
+ *
+ * Read glabels templates from a libxml #xmlDocPtr tree.
+ *
+ * Returns: a list of #lglTemplate structures.
+ *
+ */
+GList *
+lgl_xml_template_parse_templates_doc (const xmlDocPtr templates_doc)
+{
+       
+       GList       *templates = NULL;
+       xmlNodePtr   root, node;
+       lglTemplate *template;
+
+       LIBXML_TEST_VERSION;
+
+       root = xmlDocGetRootElement (templates_doc);
+       if (!root || !root->name) {
+               g_message ("\"%s\" is not a glabels template file (no root node)",
+                          templates_doc->URL);
+               return templates;
+       }
+       if (!lgl_xml_is_node (root, "Glabels-templates")) {
+               g_message ("\"%s\" is not a glabels template file (wrong root node)",
+                     templates_doc->URL);
+               return templates;
+       }
+
+       for (node = root->xmlChildrenNode; node != NULL; node = node->next) {
+
+               if (lgl_xml_is_node (node, "Template")) {
+                       template = lgl_xml_template_parse_template_node (node);
+                       templates = g_list_append (templates, template);
+               } else {
+                       if ( !xmlNodeIsText(node) ) {
+                               if (!lgl_xml_is_node (node,"comment")) {
+                                       g_message ("bad node =  \"%s\"",node->name);
+                               }
+                       }
+               }
+       }
+
+       return templates;
+}
+
+
+/**
+ * lgl_xml_template_parse_template_node:
+ * @template_node:  libxml #xmlNodePtr template node from a #xmlDocPtr tree.
+ *
+ * Read a single glabels template from a libxml #xmlNodePtr node.
+ *
+ * Returns: a pointer to a newly created #lglTemplate structure.
+ *
+ */
+lglTemplate *
+lgl_xml_template_parse_template_node (const xmlNodePtr template_node)
+{
+       gchar                 *brand;
+        gchar                 *part;
+       gchar                 *name;
+       gchar                 *description;
+       gchar                 *paper_id;
+       gdouble                page_width, page_height;
+       lglPaper               *paper = NULL;
+       lglTemplate           *template;
+       xmlNodePtr             node;
+        gchar                **v;
+
+       brand = lgl_xml_get_prop_string (template_node, "brand", NULL);
+       part  = lgl_xml_get_prop_string (template_node, "part", NULL);
+        if (!brand || !part)
+        {
+                name = lgl_xml_get_prop_string (template_node, "name", NULL);
+                if (name)
+                {
+                        v = g_strsplit (name, " ", 2);
+                        brand = g_strdup (v[0]);
+                        part  = g_strchug (g_strdup (v[1]));
+                        g_free (name);
+                        g_strfreev (v);
+                        
+                }
+                else
+                {
+                       g_message (_("Missing name or brand/part attributes."));
+                }
+        }
+
+       description = lgl_xml_get_prop_i18n_string (template_node, "description", NULL);
+       paper_id = lgl_xml_get_prop_string (template_node, "size", NULL);
+
+       if (lgl_db_is_paper_id_other (paper_id)) {
+
+               page_width = lgl_xml_get_prop_length (template_node, "width", 0);
+               page_height = lgl_xml_get_prop_length (template_node, "height", 0);
+
+       } else {
+               paper = lgl_db_lookup_paper_from_id (paper_id);
+               if (paper == NULL) {
+                       /* This should always be an id, but just in case a name
+                          slips by! */
+                       g_message (_("Unknown page size id \"%s\", trying as name"),
+                                  paper_id);
+                       paper = lgl_db_lookup_paper_from_name (paper_id);
+                       g_free (paper_id);
+                       paper_id = g_strdup (paper->id);
+               }
+               if (paper != NULL) {
+                       page_width  = paper->width;
+                       page_height = paper->height;
+               } else {
+                       page_width  = 612;
+                       page_height = 792;
+                       g_message (_("Unknown page size id or name \"%s\""),
+                                  paper_id);
+               }
+               lgl_paper_free (paper);
+               paper = NULL;
+       }
+
+       template = lgl_template_new (brand, part, description,
+                                     paper_id, page_width, page_height);
+
+       for (node = template_node->xmlChildrenNode; node != NULL;
+            node = node->next) {
+               if (lgl_xml_is_node (node, "Meta")) {
+                       xml_parse_meta_node (node, template);
+               } else if (lgl_xml_is_node (node, "Label-rectangle")) {
+                       xml_parse_label_rectangle_node (node, template);
+               } else if (lgl_xml_is_node (node, "Label-round")) {
+                       xml_parse_label_round_node (node, template);
+               } else if (lgl_xml_is_node (node, "Label-cd")) {
+                       xml_parse_label_cd_node (node, template);
+               } else if (lgl_xml_is_node (node, "Alias")) {
+                       xml_parse_alias_node (node, template);
+               } else {
+                       if (!xmlNodeIsText (node)) {
+                               if (!lgl_xml_is_node (node,"comment")) {
+                                       g_message ("bad node =  \"%s\"",node->name);
+                               }
+                       }
+               }
+       }
+
+       g_free (brand);
+       g_free (part);
+       g_free (description);
+       g_free (paper_id);
+
+        /*
+         * Create a default full-page frame, if a known frame type was not found.
+         */
+        if ( template->frames == NULL )
+        {
+                lglTemplateFrame    *frame;
+
+                frame = lgl_template_frame_rect_new ("0", page_width, page_height, 0, 0, 0);
+                lgl_template_frame_add_layout (frame, lgl_template_layout_new (1, 1, 0, 0, 0, 0));
+                lgl_template_add_frame (template, frame);
+        }
+
+       return template;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Meta Node.                                 */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_meta_node (xmlNodePtr   meta_node,
+                    lglTemplate *template)
+{
+       gchar               *category;
+
+       category = lgl_xml_get_prop_string (meta_node, "category", NULL);
+
+       if (category != NULL)
+       {
+               lgl_template_add_category (template, category);
+               g_free (category);
+       }
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Label-rectangle Node.                      */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_label_rectangle_node (xmlNodePtr   label_node,
+                               lglTemplate *template)
+{
+       gchar               *id;
+       gchar               *tmp;
+       gdouble              x_waste, y_waste;
+       gdouble              w, h, r;
+       lglTemplateFrame    *frame;
+       xmlNodePtr           node;
+
+       id      = lgl_xml_get_prop_string (label_node, "id", NULL);
+
+       if ((tmp = lgl_xml_get_prop_string (label_node, "waste", NULL))) {
+               /* Handle single "waste" property. */
+               x_waste = y_waste = lgl_xml_get_prop_length (label_node, "waste", 0);
+               g_free (tmp);
+       } else {
+               x_waste = lgl_xml_get_prop_length (label_node, "x_waste", 0);
+               y_waste = lgl_xml_get_prop_length (label_node, "y_waste", 0);
+       }
+
+       w       = lgl_xml_get_prop_length (label_node, "width", 0);
+       h       = lgl_xml_get_prop_length (label_node, "height", 0);
+       r       = lgl_xml_get_prop_length (label_node, "round", 0);
+
+       frame = lgl_template_frame_rect_new ((gchar *)id, w, h, r, x_waste, y_waste);
+       lgl_template_add_frame (template, frame);
+
+       for (node = label_node->xmlChildrenNode; node != NULL;
+            node = node->next) {
+               if (lgl_xml_is_node (node, "Layout")) {
+                       xml_parse_layout_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-margin")) {
+                       xml_parse_markup_margin_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-line")) {
+                       xml_parse_markup_line_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-circle")) {
+                       xml_parse_markup_circle_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-rect")) {
+                       xml_parse_markup_rect_node (node, frame);
+               } else if (!xmlNodeIsText (node)) {
+                       if (!lgl_xml_is_node (node, "comment")) {
+                               g_message ("bad node =  \"%s\"",node->name);
+                       }
+               }
+       }
+
+       g_free (id);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Label-round Node.                          */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_label_round_node (xmlNodePtr   label_node,
+                           lglTemplate *template)
+{
+       gchar               *id;
+       gdouble              waste;
+       gdouble              r;
+       lglTemplateFrame    *frame;
+       xmlNodePtr           node;
+
+       id    = lgl_xml_get_prop_string (label_node, "id", NULL);
+       waste = lgl_xml_get_prop_length (label_node, "waste", 0);
+       r     = lgl_xml_get_prop_length (label_node, "radius", 0);
+
+       frame = lgl_template_frame_round_new ((gchar *)id, r, waste);
+       lgl_template_add_frame (template, frame);
+
+       for (node = label_node->xmlChildrenNode; node != NULL;
+            node = node->next) {
+               if (lgl_xml_is_node (node, "Layout")) {
+                       xml_parse_layout_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-margin")) {
+                       xml_parse_markup_margin_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-line")) {
+                       xml_parse_markup_line_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-circle")) {
+                       xml_parse_markup_circle_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-rect")) {
+                       xml_parse_markup_rect_node (node, frame);
+               } else if (!xmlNodeIsText (node)) {
+                       if (!lgl_xml_is_node (node, "comment")) {
+                               g_message ("bad node =  \"%s\"",node->name);
+                       }
+               }
+       }
+
+       g_free (id);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Label-cd Node.                             */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_label_cd_node (xmlNodePtr   label_node,
+                        lglTemplate *template)
+{
+       gchar               *id;
+       gdouble              waste;
+       gdouble              r1, r2, w, h;
+       lglTemplateFrame    *frame;
+       xmlNodePtr           node;
+
+       id    = lgl_xml_get_prop_string (label_node, "id", NULL);
+       waste = lgl_xml_get_prop_length (label_node, "waste", 0);
+       r1    = lgl_xml_get_prop_length (label_node, "radius", 0);
+       r2    = lgl_xml_get_prop_length (label_node, "hole", 0);
+       w     = lgl_xml_get_prop_length (label_node, "width", 0);
+       h     = lgl_xml_get_prop_length (label_node, "height", 0);
+
+       frame = lgl_template_frame_cd_new ((gchar *)id, r1, r2, w, h, waste);
+       lgl_template_add_frame (template, frame);
+
+       for (node = label_node->xmlChildrenNode; node != NULL;
+            node = node->next) {
+               if (lgl_xml_is_node (node, "Layout")) {
+                       xml_parse_layout_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-margin")) {
+                       xml_parse_markup_margin_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-line")) {
+                       xml_parse_markup_line_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-circle")) {
+                       xml_parse_markup_circle_node (node, frame);
+               } else if (lgl_xml_is_node (node, "Markup-rect")) {
+                       xml_parse_markup_rect_node (node, frame);
+               } else if (!xmlNodeIsText (node)) {
+                       if (!lgl_xml_is_node (node, "comment")) {
+                               g_message ("bad node =  \"%s\"",node->name);
+                       }
+               }
+       }
+
+       g_free (id);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Label->Layout Node.                        */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_layout_node (xmlNodePtr          layout_node,
+                      lglTemplateFrame   *frame)
+{
+       gint        nx, ny;
+       gdouble     x0, y0, dx, dy;
+       xmlNodePtr  node;
+
+       nx = lgl_xml_get_prop_int (layout_node, "nx", 1);
+       ny = lgl_xml_get_prop_int (layout_node, "ny", 1);
+
+       x0 = lgl_xml_get_prop_length (layout_node, "x0", 0);
+       y0 = lgl_xml_get_prop_length (layout_node, "y0", 0);
+
+       dx = lgl_xml_get_prop_length (layout_node, "dx", 0);
+       dy = lgl_xml_get_prop_length (layout_node, "dy", 0);
+
+       lgl_template_frame_add_layout (frame, lgl_template_layout_new (nx, ny, x0, y0, dx, dy));
+
+       for (node = layout_node->xmlChildrenNode; node != NULL;
+            node = node->next) {
+               if (!xmlNodeIsText (node)) {
+                       if (!lgl_xml_is_node (node, "comment")) {
+                               g_message ("bad node =  \"%s\"",node->name);
+                       }
+               }
+       }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Label->Markup-margin Node.                 */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_markup_margin_node (xmlNodePtr          markup_node,
+                             lglTemplateFrame   *frame)
+{
+       gdouble     size;
+       xmlNodePtr  node;
+
+       size = lgl_xml_get_prop_length (markup_node, "size", 0);
+
+       lgl_template_frame_add_markup (frame, lgl_template_markup_margin_new (size));
+
+       for (node = markup_node->xmlChildrenNode; node != NULL;
+            node = node->next) {
+               if (!xmlNodeIsText (node)) {
+                       if (!lgl_xml_is_node (node, "comment")) {
+                               g_message ("bad node =  \"%s\"",node->name);
+                       }
+               }
+       }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Label->Markup-line Node.                   */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_markup_line_node (xmlNodePtr          markup_node,
+                           lglTemplateFrame   *frame)
+{
+       gdouble     x1, y1, x2, y2;
+       xmlNodePtr  node;
+
+       x1 = lgl_xml_get_prop_length (markup_node, "x1", 0);
+       y1 = lgl_xml_get_prop_length (markup_node, "y1", 0);
+       x2 = lgl_xml_get_prop_length (markup_node, "x2", 0);
+       y2 = lgl_xml_get_prop_length (markup_node, "y2", 0);
+
+       lgl_template_frame_add_markup (frame, lgl_template_markup_line_new (x1, y1, x2, y2));
+
+       for (node = markup_node->xmlChildrenNode; node != NULL;
+            node = node->next) {
+               if (!xmlNodeIsText (node)) {
+                       if (!lgl_xml_is_node (node, "comment")) {
+                               g_message ("bad node =  \"%s\"",node->name);
+                       }
+               }
+       }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Label->Markup-circle Node.                 */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_markup_circle_node (xmlNodePtr          markup_node,
+                             lglTemplateFrame   *frame)
+{
+       gdouble     x0, y0, r;
+       xmlNodePtr  node;
+
+       x0 = lgl_xml_get_prop_length (markup_node, "x0", 0);
+       y0 = lgl_xml_get_prop_length (markup_node, "y0", 0);
+       r  = lgl_xml_get_prop_length (markup_node, "radius", 0);
+
+       lgl_template_frame_add_markup (frame, lgl_template_markup_circle_new (x0, y0, r));
+
+       for (node = markup_node->xmlChildrenNode; node != NULL;
+            node = node->next) {
+               if (!xmlNodeIsText (node)) {
+                       if (!lgl_xml_is_node (node, "comment")) {
+                               g_message ("bad node =  \"%s\"",node->name);
+                       }
+               }
+       }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Label->Markup-rect Node.                   */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_markup_rect_node (xmlNodePtr          markup_node,
+                           lglTemplateFrame   *frame)
+{
+       gdouble     x1, y1, w, h, r;
+       xmlNodePtr  node;
+
+       x1 = lgl_xml_get_prop_length (markup_node, "x1", 0);
+       y1 = lgl_xml_get_prop_length (markup_node, "y1", 0);
+       w  = lgl_xml_get_prop_length (markup_node, "w", 0);
+       h  = lgl_xml_get_prop_length (markup_node, "h", 0);
+       r  = lgl_xml_get_prop_length (markup_node, "r", 0);
+
+       lgl_template_frame_add_markup (frame, lgl_template_markup_rect_new (x1, y1, w, h, r));
+
+       for (node = markup_node->xmlChildrenNode; node != NULL;
+            node = node->next) {
+               if (!xmlNodeIsText (node)) {
+                       if (!lgl_xml_is_node (node, "comment")) {
+                               g_message ("bad node =  \"%s\"",node->name);
+                       }
+               }
+       }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Template->Alias Node.                                */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_alias_node (xmlNodePtr   alias_node,
+                     lglTemplate *template)
+{
+       gchar             *brand;
+       gchar             *part;
+       gchar             *name;
+        gchar            **v;
+
+       brand = lgl_xml_get_prop_string (alias_node, "brand", NULL);
+       part  = lgl_xml_get_prop_string (alias_node, "part", NULL);
+        if (!brand || !part)
+        {
+                name = lgl_xml_get_prop_string (alias_node, "name", NULL);
+                if (name)
+                {
+                       g_message (_("Missing required \"brand\" or \"part\" attribute, trying deprecated name."));
+                        v = g_strsplit (name, " ", 2);
+                        brand = g_strdup (v[0]);
+                        part  = g_strdup (v[1]);
+                        g_free (name);
+                        g_strfreev (v);
+                        
+                }
+                else
+                {
+                       g_message (_("Name attribute also missing."));
+                }
+        }
+
+       lgl_template_add_alias (template, lgl_template_alias_new (brand, part));
+
+       g_free (brand);
+       g_free (part);
+}
+
+/**
+ * lgl_xml_template_write_templates_to_file:
+ * @templates:      List of #lglTemplate structures
+ * @utf8_filename:  Filename of templates file (name encoded as UTF-8)
+ *
+ * Write a list of #lglTemplate structures to a glabels XML template file.
+ *
+ * Returns: the number of bytes written or -1 in case of failure
+ *
+ */
+gint
+lgl_xml_template_write_templates_to_file (GList       *templates,
+                                          const gchar *utf8_filename)
+{
+       xmlDocPtr    doc;
+       xmlNsPtr     ns;
+       gint         bytes_written;
+       GList       *p;
+       lglTemplate *template;
+       gchar       *filename;
+
+       doc = xmlNewDoc ((xmlChar *)"1.0");
+       doc->xmlRootNode = xmlNewDocNode (doc, NULL, (xmlChar *)"Glabels-templates", NULL);
+
+       ns = xmlNewNs (doc->xmlRootNode, (xmlChar *)LGL_XML_NAME_SPACE, NULL);
+       xmlSetNs (doc->xmlRootNode, ns);
+
+       for (p=templates; p!=NULL; p=p->next) {
+               template = (lglTemplate *)p->data;
+               lgl_xml_template_create_template_node (template, doc->xmlRootNode, ns);
+       }
+
+       filename = g_filename_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
+       if (!filename)
+        {
+               g_message (_("Utf8 conversion error."));
+                return -1;
+        }
+       else
+        {
+               xmlSetDocCompressMode (doc, 0);
+               bytes_written = xmlSaveFormatFile (filename, doc, TRUE);
+               xmlFreeDoc (doc);
+               g_free (filename);
+                return bytes_written;
+       }
+
+}
+
+
+/**
+ * lgl_xml_template_write_template_to_file:
+ * @template:       #lglTemplate structure to be written
+ * @utf8_filename:  Filename of templates file (name encoded as UTF-8)
+ *
+ * Write a single #lglTemplate structures to a glabels XML template file.
+ *
+ * Returns: the number of bytes written or -1 in case of failure
+ *
+ */
+gint
+lgl_xml_template_write_template_to_file (const lglTemplate  *template,
+                                         const gchar        *utf8_filename)
+{
+       GList     *templates = NULL;
+       gint       bytes_written;
+
+       templates = g_list_append (templates, (gpointer)template);
+
+       bytes_written = lgl_xml_template_write_templates_to_file (templates, utf8_filename);
+
+       g_list_free (templates);
+
+        return bytes_written;
+}
+
+
+/**
+ * lgl_xml_template_create_template_node:
+ * @template:       #lglTemplate structure to be written
+ * @root:           parent node to receive new child node
+ * @ns:             a libxml #xmlNsPtr
+ *
+ * Add a single #lglTemplate child node to given #xmlNodePtr.
+ *
+ */
+void
+lgl_xml_template_create_template_node (const lglTemplate *template,
+                                       xmlNodePtr         root,
+                                       const xmlNsPtr     ns)
+{
+       xmlNodePtr          node;
+       GList              *p;
+       lglTemplateAlias   *alias;
+       lglTemplateFrame   *frame;
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Template", NULL);
+
+       lgl_xml_set_prop_string (node, "brand", template->brand);
+       lgl_xml_set_prop_string (node, "part", template->part);
+
+       lgl_xml_set_prop_string (node, "size", template->paper_id);
+       if (xmlStrEqual ((xmlChar *)template->paper_id, (xmlChar *)"Other"))
+        {
+
+               lgl_xml_set_prop_length (node, "width", template->page_width);
+               lgl_xml_set_prop_length (node, "height", template->page_height);
+
+       }
+
+       lgl_xml_set_prop_string (node, "description", template->description);
+
+       for ( p=template->aliases; p != NULL; p=p->next ) {
+                alias = (lglTemplateAlias *)p->data;
+               if ( !(xmlStrEqual ((xmlChar *)template->brand, (xmlChar *)alias->brand) &&
+                       xmlStrEqual ((xmlChar *)template->part, (xmlChar *)alias->part)) )
+                {
+                       xml_create_alias_node ( alias, node, ns );
+               }
+       }
+       for ( p=template->category_ids; p != NULL; p=p->next )
+        {
+                xml_create_meta_node ( p->data, node, ns );
+       }
+       for ( p=template->frames; p != NULL; p=p->next )
+        {
+               frame = (lglTemplateFrame *)p->data;
+               xml_create_label_node (frame, node, ns);
+       }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Template->Meta Node.                                   */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_meta_node (const gchar      *category,
+                     xmlNodePtr        root,
+                     const xmlNsPtr    ns)
+{
+       xmlNodePtr node;
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Meta", NULL);
+       lgl_xml_set_prop_string (node, "category", category);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Template->Label Node.                                  */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_label_node (const lglTemplateFrame  *frame,
+                      xmlNodePtr               root,
+                      const xmlNsPtr           ns)
+{
+       xmlNodePtr        node;
+       GList            *p;
+       lglTemplateMarkup *markup;
+       lglTemplateLayout *layout;
+
+       switch (frame->shape) {
+
+       case LGL_TEMPLATE_FRAME_SHAPE_RECT:
+               node = xmlNewChild(root, ns, (xmlChar *)"Label-rectangle", NULL);
+               lgl_xml_set_prop_string (node, "id",      frame->all.id);
+               lgl_xml_set_prop_length (node, "width",   frame->rect.w);
+               lgl_xml_set_prop_length (node, "height",  frame->rect.h);
+               lgl_xml_set_prop_length (node, "round",   frame->rect.r);
+               lgl_xml_set_prop_length (node, "x_waste", frame->rect.x_waste);
+               lgl_xml_set_prop_length (node, "y_waste", frame->rect.y_waste);
+               break;
+
+       case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
+               node = xmlNewChild(root, ns, (xmlChar *)"Label-round", NULL);
+               lgl_xml_set_prop_string (node, "id",      frame->all.id);
+               lgl_xml_set_prop_length (node, "radius",  frame->round.r);
+               lgl_xml_set_prop_length (node, "waste",   frame->round.waste);
+               break;
+
+       case LGL_TEMPLATE_FRAME_SHAPE_CD:
+               node = xmlNewChild(root, ns, (xmlChar *)"Label-cd", NULL);
+               lgl_xml_set_prop_string (node, "id",     frame->all.id);
+               lgl_xml_set_prop_length (node, "radius", frame->cd.r1);
+               lgl_xml_set_prop_length (node, "hole",   frame->cd.r2);
+               if (frame->cd.w != 0.0) {
+                       lgl_xml_set_prop_length (node, "width",  frame->cd.w);
+               }
+               if (frame->cd.h != 0.0) {
+                       lgl_xml_set_prop_length (node, "height", frame->cd.h);
+               }
+               lgl_xml_set_prop_length (node, "waste",  frame->cd.waste);
+               break;
+
+       default:
+               g_message ("Unknown label style");
+               return;
+               break;
+
+       }
+
+       for ( p=frame->all.markups; p != NULL; p=p->next ) {
+               markup = (lglTemplateMarkup *)p->data;
+               switch (markup->type) {
+               case LGL_TEMPLATE_MARKUP_MARGIN:
+                       xml_create_markup_margin_node (markup, node, ns);
+                       break;
+               case LGL_TEMPLATE_MARKUP_LINE:
+                       xml_create_markup_line_node (markup, node, ns);
+                       break;
+               case LGL_TEMPLATE_MARKUP_CIRCLE:
+                       xml_create_markup_circle_node (markup, node, ns);
+                       break;
+               case LGL_TEMPLATE_MARKUP_RECT:
+                       xml_create_markup_rect_node (markup, node, ns);
+                       break;
+               default:
+                       g_message ("Unknown markup type");
+                       break;
+               }
+       }
+
+       for ( p=frame->all.layouts; p != NULL; p=p->next ) {
+               layout = (lglTemplateLayout *)p->data;
+               xml_create_layout_node (layout, node, ns);
+       }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Template->Label->Layout Node.                          */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_layout_node (const lglTemplateLayout *layout,
+                       xmlNodePtr               root,
+                       const xmlNsPtr           ns)
+{
+       xmlNodePtr  node;
+
+       node = xmlNewChild(root, ns, (xmlChar *)"Layout", NULL);
+       lgl_xml_set_prop_int (node, "nx", layout->nx);
+       lgl_xml_set_prop_int (node, "ny", layout->ny);
+       lgl_xml_set_prop_length (node, "x0", layout->x0);
+       lgl_xml_set_prop_length (node, "y0", layout->y0);
+       lgl_xml_set_prop_length (node, "dx", layout->dx);
+       lgl_xml_set_prop_length (node, "dy", layout->dy);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Template->Label->Markup-margin Node.                   */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_markup_margin_node (const lglTemplateMarkup  *markup,
+                              xmlNodePtr                root,
+                              const xmlNsPtr            ns)
+{
+       xmlNodePtr  node;
+
+       node = xmlNewChild(root, ns, (xmlChar *)"Markup-margin", NULL);
+
+       lgl_xml_set_prop_length (node, "size", markup->margin.size);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Template->Label->Markup-line Node.                     */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_markup_line_node (const lglTemplateMarkup *markup,
+                            xmlNodePtr               root,
+                            const xmlNsPtr           ns)
+{
+       xmlNodePtr  node;
+
+       node = xmlNewChild(root, ns, (xmlChar *)"Markup-line", NULL);
+
+       lgl_xml_set_prop_length (node, "x1", markup->line.x1);
+       lgl_xml_set_prop_length (node, "y1", markup->line.y1);
+       lgl_xml_set_prop_length (node, "x2", markup->line.x2);
+       lgl_xml_set_prop_length (node, "y2", markup->line.y2);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Template->Label->Markup-circle Node.                   */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_markup_circle_node (const lglTemplateMarkup *markup,
+                              xmlNodePtr               root,
+                              const xmlNsPtr           ns)
+{
+       xmlNodePtr  node;
+
+       node = xmlNewChild(root, ns, (xmlChar *)"Markup-circle", NULL);
+
+       lgl_xml_set_prop_length (node, "x0",     markup->circle.x0);
+       lgl_xml_set_prop_length (node, "y0",     markup->circle.y0);
+       lgl_xml_set_prop_length (node, "radius", markup->circle.r);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Template->Label->Markup-rect Node.                     */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_markup_rect_node (const lglTemplateMarkup *markup,
+                            xmlNodePtr               root,
+                            const xmlNsPtr           ns)
+{
+       xmlNodePtr  node;
+
+       node = xmlNewChild(root, ns, (xmlChar *)"Markup-rect", NULL);
+
+       lgl_xml_set_prop_length (node, "x1", markup->rect.x1);
+       lgl_xml_set_prop_length (node, "y1", markup->rect.y1);
+       lgl_xml_set_prop_length (node, "w",  markup->rect.w);
+       lgl_xml_set_prop_length (node, "h",  markup->rect.h);
+       lgl_xml_set_prop_length (node, "r",  markup->rect.r);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Template->Alias Node.                                  */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_alias_node (const lglTemplateAlias *alias,
+                      xmlNodePtr              root,
+                      const xmlNsPtr          ns)
+{
+       xmlNodePtr node;
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Alias", NULL);
+
+       lgl_xml_set_prop_string (node, "brand", alias->brand);
+       lgl_xml_set_prop_string (node, "part",  alias->part);
+
+}
+
diff --git a/libglabels/xml-template.h b/libglabels/xml-template.h
new file mode 100644 (file)
index 0000000..b940db3
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  xml-template.h:  template xml module header file
+ *
+ *  Copyright (C) 2001-2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __XML_TEMPLATE_H__
+#define __XML_TEMPLATE_H__
+
+#include <glib.h>
+#include <libxml/tree.h>
+
+#include "template.h"
+
+G_BEGIN_DECLS
+
+GList       *lgl_xml_template_read_templates_from_file (const gchar       *utf8_filename);
+
+GList       *lgl_xml_template_parse_templates_doc      (const xmlDocPtr    templates_doc);
+
+lglTemplate *lgl_xml_template_parse_template_node      (const xmlNodePtr   template_node);
+
+
+gint         lgl_xml_template_write_templates_to_file  (GList             *templates,
+                                                       const gchar       *utf8_filename);
+
+gint         lgl_xml_template_write_template_to_file   (const lglTemplate *template,
+                                                       const gchar       *utf8_filename);
+
+void         lgl_xml_template_create_template_node     (const lglTemplate *template,
+                                                       xmlNodePtr         root,
+                                                       const xmlNsPtr     ns);
+
+G_END_DECLS
+
+#endif /* __XML_TEMPLATE_H__ */
diff --git a/libglabels/xml.c b/libglabels/xml.c
new file mode 100644 (file)
index 0000000..0943d90
--- /dev/null
@@ -0,0 +1,539 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  xml.c:  GLabels xml utilities module
+ *
+ *  Copyright (C) 2003, 2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+#include <config.h>
+
+#include "xml.h"
+
+#include <glib/gi18n.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+#include <string.h>
+
+#include "libglabels-private.h"
+
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+#define POINTS_PER_POINT    1.0 /* internal units are points. */
+#define POINTS_PER_INCH    72.0
+#define POINTS_PER_MM       2.83464566929
+#define POINTS_PER_CM       (10.0*POINTS_PER_MM)
+#define POINTS_PER_PICA     (1.0/12.0)
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+typedef struct {
+       xmlChar     *name;
+       gdouble      points_per_unit;
+} UnitTableEntry;
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+static UnitTableEntry unit_table[] = {
+
+       /* These names are identical to the absolute length units supported in
+          the CSS2 Specification (Section 4.3.2) */
+
+       /* This table must be sorted exactly as the enumerations in lglUnitsType */
+
+       /* [LGL_UNITS_POINT] */   {(xmlChar *)"pt",      POINTS_PER_POINT},
+       /* [LGL_UNITS_INCH]  */   {(xmlChar *)"in",      POINTS_PER_INCH},
+       /* [LGL_UNITS_MM]    */   {(xmlChar *)"mm",      POINTS_PER_MM},
+       /* [LGL_UNITS_CM]    */   {(xmlChar *)"cm",      POINTS_PER_CM},
+       /* [LGL_UNITS_PICA]  */   {(xmlChar *)"pc",      POINTS_PER_PICA},
+
+};
+
+static lglUnitsType  default_units        = LGL_UNITS_POINT;
+
+
+/****************************************************************************/
+
+/**
+ * lgl_xml_get_prop_string:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @default_val: a default value to return if property not found
+ *
+ * Return value of property as a string.
+ *
+ * Returns: the property as a pointer to a gchar string.  This string should
+ *          be freed with g_free().
+ *
+ */
+gchar *
+lgl_xml_get_prop_string (xmlNodePtr   node,
+                        const gchar *property,
+                        const gchar *default_val)
+{
+       gchar   *val;
+       xmlChar *string;
+
+       string = xmlGetProp (node, (xmlChar *)property);
+       if ( string != NULL ) {
+               val = g_strdup ((gchar *)string);
+               xmlFree (string);
+               return val;
+       }
+
+       if (default_val) {
+               return g_strdup (default_val);
+       }
+
+       return NULL;
+}
+
+
+/**
+ * lgl_xml_get_prop_i18n_string:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @default_val: a default value to return if property not found
+ *
+ * Return value of a translatable property as a string.
+ *
+ * Returns: the property as a pointer to a gchar string.  This string should
+ *          be freed with g_free().
+ *
+ */
+gchar *
+lgl_xml_get_prop_i18n_string (xmlNodePtr   node,
+                             const gchar *property,
+                             const gchar *default_val)
+{
+       gchar   *_property;
+       gchar   *val;
+       xmlChar *string;
+
+       _property = g_strdup_printf ("_%s", property);
+       string = xmlGetProp (node, (xmlChar *)_property);
+       g_free (_property);
+
+       if ( string != NULL ) {
+
+               val = g_strdup (gettext ((char *)string));
+               xmlFree (string);
+               return val;
+
+       }
+
+       string = xmlGetProp (node, (xmlChar *)property);
+       if ( string != NULL ) {
+               val = g_strdup ((gchar *)string);
+               xmlFree (string);
+               return val;
+       }
+
+       if (default_val) {
+               return g_strdup (default_val);
+       }
+
+       return NULL;
+}
+
+
+/**
+ * lgl_xml_get_prop_double:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @default_val: a default value to return if property not found
+ *
+ * Return value of property as a double.
+ *
+ * Returns: the property as a double.
+ *
+ */
+gdouble
+lgl_xml_get_prop_double (xmlNodePtr   node,
+                        const gchar *property,
+                        gdouble      default_val)
+{
+       gdouble  val;
+       xmlChar *string;
+
+       string = xmlGetProp (node, (xmlChar *)property);
+       if ( string != NULL ) {
+               val = g_strtod ((gchar *)string, NULL);
+               xmlFree (string);
+               return val;
+       }
+
+       return default_val;
+}
+
+
+/**
+ * lgl_xml_get_prop_boolean:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @default_val: a default value to return if property not found
+ *
+ * Return value of property as a boolean.
+ *
+ * Returns: the property as a boolean.
+ *
+ */
+gboolean
+lgl_xml_get_prop_boolean (xmlNodePtr   node,
+                        const gchar *property,
+                        gboolean     default_val)
+{
+       gboolean  val;
+       xmlChar  *string;
+
+       string = xmlGetProp (node, (xmlChar *)property);
+       if ( string != NULL ) {
+               val = !((xmlStrcasecmp (string, (xmlChar *)"false") == 0) ||
+                       xmlStrEqual (string, (xmlChar *)"0"));;
+               xmlFree (string);
+               return val;
+       }
+
+       return default_val;
+}
+
+
+/**
+ * lgl_xml_get_prop_int:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @default_val: a default value to return if property not found
+ *
+ * Return value of property as an integer.
+ *
+ * Returns: the property as an integer.
+ *
+ */
+gint
+lgl_xml_get_prop_int (xmlNodePtr   node,
+                     const gchar *property,
+                     gint         default_val)
+{
+       gint     val;
+       xmlChar *string;
+
+       string = xmlGetProp (node, (xmlChar *)property);
+       if ( string != NULL ) {
+               val = strtol ((char *)string, NULL, 0);
+               xmlFree (string);
+               return val;
+       }
+
+       return default_val;
+}
+
+
+/**
+ * lgl_xml_get_prop_uint:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @default_val: a default value to return if property not found
+ *
+ * Return value of property (usually formatted in hex) as an unsigned integer.
+ *
+ * Returns: the property as an unsigned integer.
+ *
+ */
+guint
+lgl_xml_get_prop_uint (xmlNodePtr   node,
+                      const gchar *property,
+                      guint        default_val)
+{
+       guint    val;
+       xmlChar *string;
+
+       string = xmlGetProp (node, (xmlChar *)property);
+       if ( string != NULL ) {
+               val = strtoul ((char *)string, NULL, 0);
+               xmlFree (string);
+               return val;
+       }
+
+       return default_val;
+}
+
+
+/**
+ * lgl_xml_get_prop_length:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @default_val: a default value to return if property not found
+ *
+ * Return value of a length property as a double, converting to internal
+ * units (points).  The property is expected to be formatted as a number
+ * followed by a units string.  If there is no units string, the length
+ * is assumed to be in points.  Valid units strings are "pt" for points,
+ * "in" for inches, "mm" for millimeters, "cm" for centimeters, and
+ * "pc" for picas.
+ *
+ * Returns: the length in points.
+ *
+ */
+gdouble
+lgl_xml_get_prop_length (xmlNodePtr   node,
+                        const gchar *property,
+                        gdouble      default_val)
+{
+       gdouble  val;
+       xmlChar *string;
+       xmlChar *unit;
+       gint     i;
+
+       string = xmlGetProp (node, (xmlChar *)property);
+       if ( string != NULL ) {
+
+               val = g_strtod ((gchar *)string, (gchar **)&unit);
+
+               if (unit != string) {
+                       unit = (xmlChar *)g_strchug ((gchar *)unit);
+                       if (strlen ((char *)unit) > 0 ) {
+                               for (i=LGL_UNITS_FIRST; i<=LGL_UNITS_LAST; i++) {
+                                       if (xmlStrcasecmp (unit, unit_table[i].name) == 0) {
+                                               val *= unit_table[i].points_per_unit;
+                                               break;
+                                       }
+                               }
+                               if (i>LGL_UNITS_LAST) {
+                                       g_message ("Line %ld, Node \"%s\", Property \"%s\": Unknown unit \"%s\", assuming points",
+                                                  xmlGetLineNo (node), node->name, property,
+                                                  unit);
+                               }
+                       }
+               }
+               else {
+                       val = 0.0;
+               }
+
+               xmlFree (string);
+               return val;
+       }
+
+       return default_val;
+}
+
+
+/**
+ * lgl_xml_set_prop_string:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @val:         the value to set
+ *
+ * Set a property from a string.
+ *
+ */
+void
+lgl_xml_set_prop_string (xmlNodePtr    node,
+                        const gchar  *property,
+                        const gchar  *val)
+{
+       if (val != NULL) {
+               xmlSetProp (node, (xmlChar *)property, (xmlChar *)val);
+       }
+}
+
+
+/**
+ * lgl_xml_set_prop_double:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @val:         the value to set
+ *
+ * Set a property from a double.
+ *
+ */
+void
+lgl_xml_set_prop_double (xmlNodePtr    node,
+                        const gchar  *property,
+                        gdouble       val)
+{
+       gchar  *string, buffer[G_ASCII_DTOSTR_BUF_SIZE];
+
+       /* Guarantee "C" locale by use of g_ascii_formatd */
+       string = g_ascii_formatd (buffer, G_ASCII_DTOSTR_BUF_SIZE, "%g", val);
+
+       xmlSetProp (node, (xmlChar *)property, (xmlChar *)string);
+}
+
+
+/**
+ * lgl_xml_set_prop_boolean:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @val:         the value to set
+ *
+ * Set a property from a boolean.
+ *
+ */
+void
+lgl_xml_set_prop_boolean (xmlNodePtr    node,
+                         const gchar  *property,
+                         gboolean      val)
+{
+       xmlSetProp (node, (xmlChar *)property, (xmlChar *)(val ? "True" : "False"));
+}
+
+/**
+ * lgl_xml_set_prop_int:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @val:         the value to set
+ *
+ * Set a property from an integer.
+ *
+ */
+void
+lgl_xml_set_prop_int (xmlNodePtr    node,
+                     const gchar  *property,
+                     gint          val)
+{
+       gchar  *string;
+
+       string = g_strdup_printf ("%d", val);
+       xmlSetProp (node, (xmlChar *)property, (xmlChar *)string);
+       g_free (string);
+}
+
+/**
+ * lgl_xml_set_prop_uint_hex:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @val:         the value to set
+ *
+ * Set a property from an unsigned integer and format in hex.
+ *
+ */
+void
+lgl_xml_set_prop_uint_hex (xmlNodePtr    node,
+                          const gchar  *property,
+                          guint         val)
+{
+       gchar  *string;
+
+       string = g_strdup_printf ("0x%08x", val);
+       xmlSetProp (node, (xmlChar *)property, (xmlChar *)string);
+       g_free (string);
+}
+
+/**
+ * lgl_xml_set_prop_length:
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @property:    the property name
+ * @val:         the length to set in internal units (points)
+ *
+ * Set a property from a length, performing any necessary conversion.
+ * Length properties are formatted as a number followed by a units string.
+ * The units of the formatted property is determined by the most recent call to
+ * lgl_xml_set_default_units().
+ *
+ */
+void
+lgl_xml_set_prop_length (xmlNodePtr    node,
+                        const gchar  *property,
+                        gdouble       val)
+{
+       gchar  *string, buffer[G_ASCII_DTOSTR_BUF_SIZE];
+       gchar  *string_unit;
+
+       /* Convert to default units */
+       val /= unit_table[default_units].points_per_unit;
+
+       /* Guarantee "C" locale by use of g_ascii_formatd */
+       string = g_ascii_formatd (buffer, G_ASCII_DTOSTR_BUF_SIZE, "%g", val);
+
+       string_unit = g_strdup_printf ("%s%s", string, unit_table[default_units].name);
+       xmlSetProp (node, (xmlChar *)property, (xmlChar *)string_unit);
+        g_free (string_unit);
+}
+
+/**
+ * lgl_xml_is_node
+ * @node:        the libxml2 #xmlNodePtr of the node
+ * @name    :    the node name
+ *
+ * Test if a node name matches given name.
+ *
+ * Returns: TRUE if the name of the node matches.  Otherwise FALSE.
+ *
+ */
+gboolean
+lgl_xml_is_node (xmlNodePtr   node,
+                const gchar *name)
+{
+       return xmlStrEqual (node->name, (xmlChar *)name);
+}
+
+
+/**
+ * lgl_xml_get_node_content
+ * @node:        the libxml2 #xmlNodePtr of the node
+ *
+ * Get the content of a node.
+ *
+ * Returns: the property as a pointer to a gchar string.  This string should
+ *          be freed with g_free().
+ */
+gchar *
+lgl_xml_get_node_content (xmlNodePtr   node)
+{
+       xmlChar *xml_content;
+       gchar   *g_content;
+
+       xml_content = xmlNodeGetContent (node);
+
+       if (xml_content != NULL) {
+
+               g_content = g_strdup ((gchar *)xml_content);
+               xmlFree (xml_content);
+               return g_content;
+
+       }
+
+       return NULL;
+}
+
+
+/**
+ * lgl_xml_set_default_units:
+ * @units:       default units selection (#lglUnitsType)
+ *
+ * Set the default units when formatting lengths.  See
+ * lgl_xml_set_prop_length().
+ *
+ */
+void
+lgl_xml_set_default_units (lglUnitsType   units)
+{
+       g_return_if_fail ((units >= LGL_UNITS_FIRST) && (units <= LGL_UNITS_LAST));
+
+       default_units = units;
+}
+
+
diff --git a/libglabels/xml.h b/libglabels/xml.h
new file mode 100644 (file)
index 0000000..3ef2e49
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ *  (LIBGLABELS) Template library for GLABELS
+ *
+ *  xml.h:  GLabels xml utilities header file
+ *
+ *  Copyright (C) 2003, 2004  Jim Evins <evins@snaught.com>.
+ *
+ *  This file is part of the LIBGLABELS library.
+ *
+ *  This 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.
+ *
+ *  This 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 this library; if not, write to the Free
+ *  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ *  MA 02111-1307, USA
+ */
+
+#ifndef __XML_H__
+#define __XML_H__
+
+#include <glib/gtypes.h>
+#include <libxml/tree.h>
+
+#include "enums.h"
+
+#define LGL_XML_NAME_SPACE "http://snaught.com/glabels/2.2/"
+
+G_BEGIN_DECLS
+
+/*
+ * Get property functions
+ */
+gchar *  lgl_xml_get_prop_string   (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   const gchar  *default_val);
+
+gchar *  lgl_xml_get_prop_i18n_string (xmlNodePtr    node,
+                                      const gchar  *property,
+                                      const gchar  *default_val);
+
+gdouble  lgl_xml_get_prop_double   (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   gdouble       default_val);
+
+gboolean lgl_xml_get_prop_boolean  (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   gboolean      default_val);
+
+gint     lgl_xml_get_prop_int      (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   gint          default_val);
+
+guint    lgl_xml_get_prop_uint     (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   guint         default_val);
+
+gdouble  lgl_xml_get_prop_length   (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   gdouble       default_val);
+
+
+/*
+ * Set property functions
+ */
+void     lgl_xml_set_prop_string   (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   const gchar  *val);
+
+void     lgl_xml_set_prop_double   (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   gdouble       val);
+
+void     lgl_xml_set_prop_boolean  (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   gboolean      val);
+
+void     lgl_xml_set_prop_int      (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   gint          val);
+
+void     lgl_xml_set_prop_uint_hex (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   guint         val);
+
+void     lgl_xml_set_prop_length   (xmlNodePtr    node,
+                                   const gchar  *property,
+                                   gdouble       val);
+
+/*
+ * Other node functions
+ */
+gboolean lgl_xml_is_node           (xmlNodePtr    node,
+                                   const gchar  *name);
+
+gchar *  lgl_xml_get_node_content  (xmlNodePtr    node);
+
+/*
+ * Misc functions
+ */
+void     lgl_xml_set_default_units (lglUnitsType   units);
+
+G_END_DECLS
+
+
+#endif /* __XML_H__ */
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100755 (executable)
index 0000000..a72f2fd
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,8406 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.6b
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 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.
+
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#     --config             show all configuration variables
+#     --debug              enable verbose shell tracing
+# -n, --dry-run            display commands without modifying any files
+#     --features           display basic configuration information and exit
+#     --mode=MODE          use operation mode MODE
+#     --preserve-dup-deps  don't remove duplicate dependency libraries
+#     --quiet, --silent    don't print informational messages
+#     --tag=TAG            use configuration variables from tag TAG
+# -v, --verbose            print informational messages (default)
+#     --version            print version information
+# -h, --help               print short or long help message
+#
+# MODE must be one of the following:
+#
+#       clean              remove files from the build directory
+#       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 `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#       host-triplet:  $host
+#       shell:         $SHELL
+#       compiler:              $LTCC
+#       compiler flags:                $LTCFLAGS
+#       linker:                $LD (gnu? $with_gnu_ld)
+#       $progname:             (GNU libtool) 2.2.6b
+#       automake:              $automake_version
+#       autoconf:              $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=2.2.6b
+TIMESTAMP=""
+package_revision=1.3017
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# 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).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+         export $lt_var
+         lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+         lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+       fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS="  $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+  -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+       IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+       func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+       my_arg=`$ECHO "X$1" | $Xsed \
+           -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+           $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+       s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $SED -n '/^# Usage:/,/# -h/ {
+        s/^# //
+       s/^# *$//
+       s/\$progname/'$progname'/
+       p
+    }' < "$progpath"
+    $ECHO
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+        s/^# //
+       s/^# *$//
+       s*\$progname*'$progname'*
+       s*\$host*'"$host"'*
+       s*\$SHELL*'"$SHELL"'*
+       s*\$LTCC*'"$LTCC"'*
+       s*\$LTCFLAGS*'"$LTCFLAGS"'*
+       s*\$LD*'"$LD"'*
+       s/\$with_gnu_ld/'"$with_gnu_ld"'/
+       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       p
+     }' < "$progpath"
+    exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    func_error "missing argument for $1"
+    exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell, and then maybe $ECHO will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_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 $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+       taglist="$taglist $tagname"
+
+       # Evaluate the configuration.  Be careful to quote the path
+       # and the sed script, to avoid splitting on whitespace, but
+       # also don't use non-portable quotes within backquotes within
+       # quotes we have to do it in 2 steps:
+       extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+       eval "$extractedcf"
+      else
+       func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# Parse options once, thoroughly.  This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+  # Shorthand for --mode=foo, only valid as the first argument
+  case $1 in
+  clean|clea|cle|cl)
+    shift; set dummy --mode clean ${1+"$@"}; shift
+    ;;
+  compile|compil|compi|comp|com|co|c)
+    shift; set dummy --mode compile ${1+"$@"}; shift
+    ;;
+  execute|execut|execu|exec|exe|ex|e)
+    shift; set dummy --mode execute ${1+"$@"}; shift
+    ;;
+  finish|finis|fini|fin|fi|f)
+    shift; set dummy --mode finish ${1+"$@"}; shift
+    ;;
+  install|instal|insta|inst|ins|in|i)
+    shift; set dummy --mode install ${1+"$@"}; shift
+    ;;
+  link|lin|li|l)
+    shift; set dummy --mode link ${1+"$@"}; shift
+    ;;
+  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+    shift; set dummy --mode uninstall ${1+"$@"}; shift
+    ;;
+  esac
+
+  # Parse non-mode specific arguments:
+  while test "$#" -gt 0; do
+    opt="$1"
+    shift
+
+    case $opt in
+      --config)                func_config                                     ;;
+
+      --debug)         preserve_args="$preserve_args $opt"
+                       func_echo "enabling shell trace mode"
+                       opt_debug='set -x'
+                       $opt_debug
+                       ;;
+
+      -dlopen)         test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       execute_dlfiles="$execute_dlfiles $1"
+                       shift
+                       ;;
+
+      --dry-run | -n)  opt_dry_run=:                                   ;;
+      --features)       func_features                                  ;;
+      --finish)                mode="finish"                                   ;;
+
+      --mode)          test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       case $1 in
+                         # Valid mode arguments:
+                         clean)        ;;
+                         compile)      ;;
+                         execute)      ;;
+                         finish)       ;;
+                         install)      ;;
+                         link)         ;;
+                         relink)       ;;
+                         uninstall)    ;;
+
+                         # Catch anything else as an error
+                         *) func_error "invalid argument for $opt"
+                            exit_cmd=exit
+                            break
+                            ;;
+                       esac
+
+                       mode="$1"
+                       shift
+                       ;;
+
+      --preserve-dup-deps)
+                       opt_duplicate_deps=:                            ;;
+
+      --quiet|--silent)        preserve_args="$preserve_args $opt"
+                       opt_silent=:
+                       ;;
+
+      --verbose| -v)   preserve_args="$preserve_args $opt"
+                       opt_silent=false
+                       ;;
+
+      --tag)           test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       preserve_args="$preserve_args $opt $1"
+                       func_enable_tag "$1"    # tagname is set here
+                       shift
+                       ;;
+
+      # Separate optargs to long options:
+      -dlopen=*|--mode=*|--tag=*)
+                       func_opt_split "$opt"
+                       set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+                       shift
+                       ;;
+
+      -\?|-h)          func_usage                                      ;;
+      --help)          opt_help=:                                      ;;
+      --version)       func_version                                    ;;
+
+      -*)              func_fatal_help "unrecognized option \`$opt'"   ;;
+
+      *)               nonopt="$opt"
+                       break
+                       ;;
+    esac
+  done
+
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      ;;
+  esac
+
+  # Having warned about all mis-specified options, bail out if
+  # anything was wrong.
+  $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+$opt_help || {
+  # Sanity checks first:
+  func_check_version_match
+
+  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+    func_fatal_configuration "not configured to build any kind of library"
+  fi
+
+  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+  # Darwin sucks
+  eval std_shrext=\"$shrext_cmds\"
+
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    func_error "unrecognized option \`-dlopen'"
+    $ECHO "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+       for lalib_p_l in 1 2 3 4
+       do
+           read lalib_p_line
+           case "$lalib_p_line" in
+               \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+           esac
+       done
+       exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_ltwrapper_scriptname_result=""
+    if func_ltwrapper_executable_p "$1"; then
+       func_dirname_and_basename "$1" "" "."
+       func_stripname '' '.exe' "$func_basename_result"
+       func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)        . "$1" ;;
+    *)         . "./$1" ;;
+    esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+        func_quote_for_eval "$arg"
+       CC_quoted="$CC_quoted $func_quote_for_eval_result"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+           # Evaluate the configuration.
+           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+             # Double-quote args containing other shell metacharacters.
+             func_quote_for_eval "$arg"
+             CC_quoted="$CC_quoted $func_quote_for_eval_result"
+           done
+           case "$@ " in
+             " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+             # The compiler in the base compile command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         func_echo "unable to infer tagged configuration"
+         func_fatal_error "specify a tag with \`--tag'"
+#      else
+#        func_verbose "using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg="$arg"
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj="$arg"
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         test -n "$libobj" && \
+           func_fatal_error "you cannot specify \`-o' more than once"
+         arg_mode=target
+         continue
+         ;;
+
+       -pie | -fpie | -fPIE)
+          pie_flag="$pie_flag $arg"
+         continue
+         ;;
+
+       -shared | -static | -prefer-pic | -prefer-non-pic)
+         later="$later $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         func_stripname '-Wc,' '' "$arg"
+         args=$func_stripname_result
+         lastarg=
+         save_ifs="$IFS"; IFS=','
+         for arg in $args; do
+           IFS="$save_ifs"
+           func_quote_for_eval "$arg"
+           lastarg="$lastarg $func_quote_for_eval_result"
+         done
+         IFS="$save_ifs"
+         func_stripname ' ' '' "$lastarg"
+         lastarg=$func_stripname_result
+
+         # Add the arguments to base_compile.
+         base_compile="$base_compile $lastarg"
+         continue
+         ;;
+
+       *)
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg="$srcfile"
+         srcfile="$arg"
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_quote_for_eval "$lastarg"
+      base_compile="$base_compile $func_quote_for_eval_result"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+       func_basename "$srcfile"
+       libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       continue
+       ;;
+
+      -static)
+       build_libtool_libs=no
+       build_old_libs=yes
+       continue
+       ;;
+
+      -prefer-pic)
+       pic_mode=yes
+       continue
+       ;;
+
+      -prefer-non-pic)
+       pic_mode=no
+       continue
+       ;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+       $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+      removelist="$removelist $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    removelist="$removelist $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # 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
+
+      if test "$pic_mode" != no; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       command="$command -o $lobj"
+      fi
+
+      func_show_eval_locale "$command" \
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+       func_show_eval '$MV "$output_obj" "$lobj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+       suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile$pie_flag"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+       command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+       func_show_eval '$MV "$output_obj" "$obj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+       removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build 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, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+
+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: $progname [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: $progname [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: $progname [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 following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [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
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+
+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, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [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."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$mode'"
+        ;;
+    esac
+
+    $ECHO
+    $ECHO "Try \`$progname --help' for more information about other modes."
+
+    exit $?
+}
+
+  # Now that we've collected a possible --mode arg, show help if necessary
+  $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      test -f "$file" \
+       || func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+       func_source "$file"
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && \
+           func_warning "\`$file' was not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         if test ! -f "$dir/$dlname"; then
+           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+         fi
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+       ;;
+
+      *)
+       func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+       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 func_ltwrapper_script_p "$file"; then
+         func_source "$file"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       elif func_ltwrapper_executable_p "$file"; then
+         func_ltwrapper_scriptname "$file"
+         func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_quote_for_eval "$file"
+      args="$args $func_quote_for_eval_result"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+       # Export the shlibpath_var.
+       eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+       eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+             else
+               $lt_unset $lt_var
+             fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       $ECHO "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libdirs="$nonopt"
+    admincmds=
+
+    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.
+         func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    $ECHO "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $ECHO "   $libdir"
+    done
+    $ECHO
+    $ECHO "If you ever happen to want to link against installed libraries"
+    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $ECHO "flag during linking and do at least 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 -n "$admincmds"; then
+      $ECHO "   - have your system administrator run these commands:$admincmds"
+    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"
+    case $host in
+      solaris2.[6789]|solaris2.1[0-9])
+        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+       $ECHO "pages."
+       ;;
+      *)
+        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+        ;;
+    esac
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    install_prog="$install_prog$func_quote_for_eval_result"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+       files="$files $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+       case " $install_prog " in
+       *[\\\ /]cp\ *) ;;
+       *) prev=$arg ;;
+       esac
+       ;;
+      -g | -m | -o)
+       prev=$arg
+       ;;
+      -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.
+      func_quote_for_eval "$arg"
+      install_prog="$install_prog $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       func_fatal_help "no file or destination specified"
+      else
+       func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+       func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         func_fatal_help "\`$destdir' must be an absolute directory name"
+         ;;
+       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
+      *.$libext)
+       # Do the static libraries later.
+       staticlibs="$staticlibs $file"
+       ;;
+
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$file' is not a valid libtool archive"
+
+       library_names=
+       old_library=
+       relink_command=
+       func_source "$file"
+
+       # 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
+
+       func_dirname "$file" "/" ""
+       dir="$func_dirname_result"
+       dir="$dir$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         test "$inst_prefix_dir" = "$destdir" && \
+           func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+         fi
+
+         func_warning "relinking \`$file'"
+         func_show_eval "$relink_command" \
+           'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names; shift
+       if test -n "$1"; then
+         realname="$1"
+         shift
+
+         srcname="$realname"
+         test -n "$relink_command" && srcname="$realname"T
+
+         # Install the shared library and build the symlinks.
+         func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+             'exit $?'
+         tstripme="$stripme"
+         case $host_os in
+         cygwin* | mingw* | pw32* | cegcc*)
+           case $realname in
+           *.dll.a)
+             tstripme=""
+             ;;
+           esac
+           ;;
+         esac
+         if test -n "$tstripme" && test -n "$striplib"; then
+           func_show_eval "$striplib $destdir/$realname" 'exit $?'
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try `ln -sf' first, because the `ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             test "$linkname" != "$realname" \
+               && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib="$destdir/$realname"
+         func_execute_cmds "$postinstall_cmds" 'exit $?'
+       fi
+
+       # Install the pseudo-library for information purposes.
+       func_basename "$file"
+       name="$func_basename_result"
+       instname="$dir/$name"i
+       func_show_eval "$install_prog $instname $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
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         func_lo2o "$destfile"
+         staticdest=$func_lo2o_result
+         ;;
+       *.$objext)
+         staticdest="$destfile"
+         destfile=
+         ;;
+       *)
+         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       test -n "$destfile" && \
+         func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+       # Install the old object if enabled.
+       if test "$build_old_libs" = yes; then
+         # Deduce the name of the old-style object file.
+         func_lo2o "$file"
+         staticobj=$func_lo2o_result
+         func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=""
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             func_stripname '' '.exe' "$file"
+             file=$func_stripname_result
+             stripped_ext=".exe"
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin* | *mingw*)
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             wrapper=$func_ltwrapper_scriptname_result
+           else
+             func_stripname '' '.exe' "$file"
+             wrapper=$func_stripname_result
+           fi
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if func_ltwrapper_script_p "$wrapper"; then
+         notinst_deplibs=
+         relink_command=
+
+         func_source "$wrapper"
+
+         # Check the variables that should have been set.
+         test -z "$generated_by_libtool_version" && \
+           func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+         finalize=yes
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             func_source "$lib"
+           fi
+           libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             func_warning "\`$lib' has not been installed in \`$libdir'"
+             finalize=no
+           fi
+         done
+
+         relink_command=
+         func_source "$wrapper"
+
+         outputname=
+         if test "$fast_install" = no && test -n "$relink_command"; then
+           $opt_dry_run || {
+             if test "$finalize" = yes; then
+               tmpdir=`func_mktempdir`
+               func_basename "$file$stripped_ext"
+               file="$func_basename_result"
+               outputname="$tmpdir/$file"
+               # Replace the output file specification.
+               relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+               $opt_silent || {
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
+               }
+               if eval "$relink_command"; then :
+                 else
+                 func_error "error: relink \`$file' with the above command before installing it"
+                 $opt_dry_run || ${RM}r "$tmpdir"
+                 continue
+               fi
+               file="$outputname"
+             else
+               func_warning "cannot relink \`$file'"
+             fi
+           }
+         else
+           # Install the binary that we compiled earlier.
+           file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       # remove .exe since cygwin /usr/bin/install will append another
+       # one anyway
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           func_stripname '' '.exe' "$destfile"
+           destfile=$func_stripname_result
+           ;;
+         esac
+         ;;
+       esac
+       func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+       $opt_dry_run || if test -n "$outputname"; then
+         ${RM}r "$tmpdir"
+       fi
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+       my_dlsyms="${my_outputname}S.c"
+      else
+       func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+       # Discover the nlist of each of the dlfiles.
+       nlist="$output_objdir/${my_outputname}.nm"
+
+       func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+       # Parse the name list into a source file.
+       func_verbose "creating $output_objdir/$my_dlsyms"
+
+       $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+       if test "$dlself" = yes; then
+         func_verbose "generating symbol list for \`$output'"
+
+         $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+         # Add our own program objects to the symbol list.
+         progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+         for progfile in $progfiles; do
+           func_verbose "extracting global C symbols from \`$progfile'"
+           $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -n "$exclude_expsyms"; then
+           $opt_dry_run || {
+             eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         if test -n "$export_symbols_regex"; then
+           $opt_dry_run || {
+             eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         # Prepare the list of exported symbols
+         if test -z "$export_symbols"; then
+           export_symbols="$output_objdir/$outputname.exp"
+           $opt_dry_run || {
+             $RM $export_symbols
+             eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             case $host in
+             *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+               ;;
+             esac
+           }
+         else
+           $opt_dry_run || {
+             eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+             case $host in
+               *cygwin | *mingw* | *cegcc* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                 ;;
+             esac
+           }
+         fi
+       fi
+
+       for dlprefile in $dlprefiles; do
+         func_verbose "extracting global C symbols from \`$dlprefile'"
+         func_basename "$dlprefile"
+         name="$func_basename_result"
+         $opt_dry_run || {
+           eval '$ECHO ": $name " >> "$nlist"'
+           eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+         }
+       done
+
+       $opt_dry_run || {
+         # Make sure we have at least an empty file.
+         test -f "$nlist" || : > "$nlist"
+
+         if test -n "$exclude_expsyms"; then
+           $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+           $MV "$nlist"T "$nlist"
+         fi
+
+         # Try sorting and uniquifying the output.
+         if $GREP -v "^: " < "$nlist" |
+             if sort -k 3 </dev/null >/dev/null 2>&1; then
+               sort -k 3
+             else
+               sort +2
+             fi |
+             uniq > "$nlist"S; then
+           :
+         else
+           $GREP -v "^: " < "$nlist" > "$nlist"S
+         fi
+
+         if test -f "$nlist"S; then
+           eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+         else
+           $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+         fi
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+"
+         case $host in
+         *cygwin* | *mingw* | *cegcc* )
+           $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs.  */"
+           lt_dlsym_const= ;;
+         *osf5*)
+           echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+           lt_dlsym_const= ;;
+         *)
+           lt_dlsym_const=const ;;
+         esac
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+         case $need_lib_prefix in
+         no)
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         *)
+           eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         esac
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+       } # !$opt_dry_run
+
+       pic_flag_for_symtable=
+       case "$compile_command " in
+       *" -static "*) ;;
+       *)
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+         *-*-hpux*)
+           pic_flag_for_symtable=" $pic_flag"  ;;
+         *)
+           if test "X$my_pic_p" != Xno; then
+             pic_flag_for_symtable=" $pic_flag"
+           fi
+           ;;
+         esac
+         ;;
+       esac
+       symtab_cflags=
+       for arg in $LTCFLAGS; do
+         case $arg in
+         -pie | -fpie | -fPIE) ;;
+         *) symtab_cflags="$symtab_cflags $arg" ;;
+         esac
+       done
+
+       # Now compile the dynamic symbol file.
+       func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+       # Clean up the generated files.
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+       # Transform the symbol file into the correct name.
+       symfileobj="$output_objdir/${my_outputname}S.$objext"
+       case $host in
+       *cygwin* | *mingw* | *cegcc* )
+         if test -f "$output_objdir/$my_outputname.def"; then
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+         else
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         fi
+         ;;
+       *)
+         compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         ;;
+       esac
+       ;;
+      *)
+       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       ;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # 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
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 |
+       $SED -n -e '
+           1,100{
+               / I /{
+                   s,.*,import,
+                   p
+                   q
+               }
+           }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+       *" $my_xlib_u "*)
+         func_arith $extracted_serial + 1
+         extracted_serial=$func_arith_result
+         my_xlib_u=lt$extracted_serial-$my_xlib ;;
+       *) break ;;
+       esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+       func_verbose "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       $opt_dry_run || {
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         darwin_base_archive=`basename "$darwin_archive"`
+         darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+         if test -n "$darwin_arches"; then
+           darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+           for darwin_arch in  $darwin_arches ; do
+             func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+             cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+             cd "$darwin_curdir"
+             $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+           done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+             $LIPO -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           $RM -rf unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd $darwin_orig_dir
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       } # !$opt_dry_run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+       ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper_part1 [arg=no]
+#
+# Emit the first part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part1 ()
+{
+       func_emit_wrapper_part1_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part1_arg1=$1
+       fi
+
+       $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $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 the build directory.
+# 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 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    ECHO=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$ECHO works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$ECHO will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+       $ECHO "\
+
+  # 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
+"
+}
+# end: func_emit_wrapper_part1
+
+# func_emit_wrapper_part2 [arg=no]
+#
+# Emit the second part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part2 ()
+{
+       func_emit_wrapper_part2_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part2_arg1=$1
+       fi
+
+       $ECHO "\
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test "$fast_install" = yes; then
+         $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+         $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+       $ECHO \"\$relink_command_output\" >&2
+       $RM \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+       else
+         $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       $ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # Export our shlibpath_var if we have one.
+       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       # fixup the dll searchpath if we need to.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       $ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+       case $host in
+       # Backslashes separate directories on plain windows
+       *-*-mingw | *-*-os2* | *-cegcc*)
+         $ECHO "\
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+         ;;
+
+       *)
+         $ECHO "\
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+         ;;
+       esac
+       $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      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\
+"
+}
+# end: func_emit_wrapper_part2
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+       func_emit_wrapper_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_arg1=$1
+       fi
+
+       # split this up so that func_emit_cwrapperexe_src
+       # can call each part independently.
+       func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+       func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+}
+
+
+# func_to_host_path arg
+#
+# Convert paths to host format when used with build tools.
+# Intended for use with "native" mingw (where libtool itself
+# is running under the msys shell), or in the following cross-
+# build environments:
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+# where wine is equipped with the `winepath' executable.
+# In the native mingw case, the (msys) shell automatically
+# converts paths for any non-msys applications it launches,
+# but that facility isn't available from inside the cwrapper.
+# Similar accommodations are necessary for $host mingw and
+# $build cygwin.  Calling this function does no harm for other
+# $host/$build combinations not listed above.
+#
+# ARG is the path (on $build) that should be converted to
+# the proper representation for $host. The result is stored
+# in $func_to_host_path_result.
+func_to_host_path ()
+{
+  func_to_host_path_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        case $build in
+          *mingw* ) # actually, msys
+            # awkward: cmd appends spaces to result
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_path_tmp1=`cygpath -w "$1"`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # Unfortunately, winepath does not exit with a non-zero
+            # error code, so we are forced to check the contents of
+            # stdout. On the other hand, if the command is not
+            # found, the shell will set an exit code of 127 and print
+            # *an error message* to stdout. So we must check for both
+            # error code of zero AND non-empty stdout, which explains
+            # the odd construction:
+            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+                $SED -e "$lt_sed_naive_backslashify"`
+            else
+              # Allow warning below.
+              func_to_host_path_result=""
+            fi
+            ;;
+        esac
+        if test -z "$func_to_host_path_result" ; then
+          func_error "Could not determine host path corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback:
+          func_to_host_path_result="$1"
+        fi
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_path
+
+# func_to_host_pathlist arg
+#
+# Convert pathlists to host format when used with build tools.
+# See func_to_host_path(), above. This function supports the
+# following $build/$host combinations (but does no harm for
+# combinations not listed here):
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+#
+# Path separators are also converted from $build format to
+# $host format. If ARG begins or ends with a path separator
+# character, it is preserved (but converted to $host format)
+# on output.
+#
+# ARG is a pathlist (on $build) that should be converted to
+# the proper representation on $host. The result is stored
+# in $func_to_host_pathlist_result.
+func_to_host_pathlist ()
+{
+  func_to_host_pathlist_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        # Remove leading and trailing path separator characters from
+        # ARG. msys behavior is inconsistent here, cygpath turns them
+        # into '.;' and ';.', and winepath ignores them completely.
+        func_to_host_pathlist_tmp2="$1"
+        # Once set for this call, this variable should not be
+        # reassigned. It is used in tha fallback case.
+        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+          $SED -e 's|^:*||' -e 's|:*$||'`
+        case $build in
+          *mingw* ) # Actually, msys.
+            # Awkward: cmd appends spaces to result.
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # unfortunately, winepath doesn't convert pathlists
+            func_to_host_pathlist_result=""
+            func_to_host_pathlist_oldIFS=$IFS
+            IFS=:
+            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+              IFS=$func_to_host_pathlist_oldIFS
+              if test -n "$func_to_host_pathlist_f" ; then
+                func_to_host_path "$func_to_host_pathlist_f"
+                if test -n "$func_to_host_path_result" ; then
+                  if test -z "$func_to_host_pathlist_result" ; then
+                    func_to_host_pathlist_result="$func_to_host_path_result"
+                  else
+                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
+                  fi
+                fi
+              fi
+              IFS=:
+            done
+            IFS=$func_to_host_pathlist_oldIFS
+            ;;
+        esac
+        if test -z "$func_to_host_pathlist_result" ; then
+          func_error "Could not determine the host path(s) corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback. This may break if $1 contains DOS-style drive
+          # specifications. The fix is not to complicate the expression
+          # below, but for the user to provide a working wine installation
+          # with winepath so that path translation in the cross-to-mingw
+          # case works properly.
+          lt_replace_pathsep_nix_to_dos="s|:|;|g"
+          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+            $SED -e "$lt_replace_pathsep_nix_to_dos"`
+        fi
+        # Now, add the leading and trailing path separators back
+        case "$1" in
+          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+            ;;
+        esac
+        case "$1" in
+          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
+            ;;
+        esac
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_pathlist
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+       cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "$SHELL $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+           cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+#  define HAVE_SETENV
+#  ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+#  endif
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+    va_list args;
+    va_start (args, fmt);
+    (void) vfprintf (stderr, fmt, args);
+    va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_opt_process_env_set (const char *arg);
+void lt_opt_process_env_prepend (const char *arg);
+void lt_opt_process_env_append (const char *arg);
+int lt_split_name_value (const char *arg, char** name, char** value);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+
+static const char *script_text_part1 =
+EOF
+
+           func_emit_wrapper_part1 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+           cat <<EOF
+
+static const char *script_text_part2 =
+EOF
+           func_emit_wrapper_part2 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+
+           cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+           if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_pathlist "$temp_rpath"
+             cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test -n "$dllsearchpath"; then
+              func_to_host_pathlist "$dllsearchpath:"
+             cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test "$fast_install" = yes; then
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+           else
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+           fi
+
+
+           cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
+
+static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+
+static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
+static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
+  /* argument is putenv-style "foo=bar", value of foo is set to bar */
+
+static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
+static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
+  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
+
+static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
+static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
+  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+  /* very simple arg parsing; don't want to rely on getopt */
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+       {
+EOF
+           case "$host" in
+             *mingw* | *cygwin* )
+               # make stdout use "unix" line endings
+               echo "          setmode(1,_O_BINARY);"
+               ;;
+             esac
+
+           cat <<"EOF"
+         printf ("%s", script_text_part1);
+         printf ("%s", script_text_part2);
+         return 0;
+       }
+    }
+
+  newargz = XMALLOC (char *, argc + 1);
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal ("Couldn't find %s", argv[0]);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+                         tmp_pathspec));
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+                         actual_cwrapper_path));
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+                         target_name));
+EOF
+
+           cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+                   strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+           cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+           case $host_os in
+             mingw*)
+           cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+       *p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+       *p = '/';
+      }
+  }
+EOF
+           ;;
+           esac
+
+           cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
+        {
+          if (argv[i][env_set_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_set_opt_len + 1;
+              lt_opt_process_env_set (p);
+            }
+          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_set (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_set_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
+        {
+          if (argv[i][env_prepend_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_prepend_opt_len + 1;
+              lt_opt_process_env_prepend (p);
+            }
+          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_prepend_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
+        {
+          if (argv[i][env_append_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_append_opt_len + 1;
+              lt_opt_process_env_append (p);
+            }
+          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_append (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_append_opt);
+          continue;
+        }
+      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal ("Unrecognized option in %s namespace: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  for (i = 0; i < newargc; i++)
+    {
+      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+    }
+
+EOF
+
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      return 127;
+    }
+  return rval;
+EOF
+               ;;
+             *)
+               cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+               ;;
+           esac
+
+           cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+                         string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
+                         wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+       return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+       {
+         concat_name = xstrdup (wrapper);
+         if (check_executable (concat_name))
+           return concat_name;
+         XFREE (concat_name);
+       }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+       has_slash = 1;
+       break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+       {
+         for (p = path; *p; p = p_next)
+           {
+             const char *q;
+             size_t p_len;
+             for (q = p; *q; q++)
+               if (IS_PATH_SEPARATOR (*q))
+                 break;
+             p_len = q - p;
+             p_next = (*q == '\0' ? q : q + 1);
+             if (p_len == 0)
+               {
+                 /* empty path: current directory */
+                 if (getcwd (tmp, LT_PATHMAX) == NULL)
+                   lt_fatal ("getcwd failed");
+                 tmp_len = strlen (tmp);
+                 concat_name =
+                   XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, tmp, tmp_len);
+                 concat_name[tmp_len] = '/';
+                 strcpy (concat_name + tmp_len + 1, wrapper);
+               }
+             else
+               {
+                 concat_name =
+                   XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, p, p_len);
+                 concat_name[p_len] = '/';
+                 strcpy (concat_name + p_len + 1, wrapper);
+               }
+             if (check_executable (concat_name))
+               return concat_name;
+             XFREE (concat_name);
+           }
+       }
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+                             tmp_pathspec));
+      if (lstat (tmp_pathspec, &s) == 0)
+       {
+         if (S_ISLNK (s.st_mode) != 0)
+           {
+             has_symlinks = 1;
+             break;
+           }
+
+         /* search backwards for last DIR_SEPARATOR */
+         p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+         while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           p--;
+         if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           {
+             /* no more DIR_SEPARATORS left */
+             break;
+           }
+         *p = '\0';
+       }
+      else
+       {
+         char *errstr = strerror (errno);
+         lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+       }
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal ("Could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+       *str = '\0';
+    }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+              const char *message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+int
+lt_split_name_value (const char *arg, char** name, char** value)
+{
+  const char *p;
+  int len;
+  if (!arg || !*arg)
+    return 1;
+
+  p = strchr (arg, (int)'=');
+
+  if (!p)
+    return 1;
+
+  *value = xstrdup (++p);
+
+  len = strlen (arg) - strlen (*value);
+  *name = XMALLOC (char, len);
+  strncpy (*name, arg, len-1);
+  (*name)[len - 1] = '\0';
+
+  return 0;
+}
+
+void
+lt_opt_process_env_set (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
+    }
+
+  lt_setenv (name, value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_prepend (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 0);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_append (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 1);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       break
+       ;;
+      -all-static | -static | -static-libtool-libs)
+       case $arg in
+       -all-static)
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+           func_warning "complete static linking is impossible in this configuration"
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       -static)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+         ;;
+       -static-libtool-libs)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       esac
+       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.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         func_append compile_command " @OUTPUT@"
+         func_append finalize_command " @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       dlfiles|dlprefiles)
+         if test "$preload" = no; then
+           # Add the symbol object into the linking commands.
+           func_append compile_command " @SYMFILE@"
+           func_append finalize_command " @SYMFILE@"
+           preload=yes
+         fi
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test "$dlself" = no; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test "$prev" = dlprefiles; then
+             dlself=yes
+           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test "$prev" = dlfiles; then
+             dlfiles="$dlfiles $arg"
+           else
+             dlprefiles="$dlprefiles $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols="$arg"
+         test -f "$arg" \
+           || func_fatal_error "symbol file \`$arg' does not exist"
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex="$arg"
+         prev=
+         continue
+         ;;
+       framework)
+         case $host in
+           *-*-darwin*)
+             case "$deplibs " in
+               *" $qarg.ltframework "*) ;;
+               *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+                  ;;
+             esac
+             ;;
+         esac
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir="$arg"
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat "$save_arg"`
+           do
+#            moreargs="$moreargs $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if func_lalib_unsafe_p "$arg"; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               func_source "$arg"
+
+               if test -z "$pic_object" ||
+                  test -z "$non_pic_object" ||
+                  test "$pic_object" = none &&
+                  test "$non_pic_object" = none; then
+                 func_fatal_error "cannot find name of object for \`$arg'"
+               fi
+
+               # Extract subdirectory from the argument.
+               func_dirname "$arg" "/" ""
+               xdir="$func_dirname_result"
+
+               if test "$pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object="$xdir$pic_object"
+
+                 if test "$prev" = dlfiles; then
+                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+                     dlfiles="$dlfiles $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test "$prev" = dlprefiles; then
+                   # Preload the old-style object.
+                   dlprefiles="$dlprefiles $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 func_append libobjs " $pic_object"
+                 arg="$pic_object"
+               fi
+
+               # Non-PIC object.
+               if test "$non_pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object="$xdir$non_pic_object"
+
+                 # A standard non-PIC object
+                 func_append non_pic_objects " $non_pic_object"
+                 if test -z "$pic_object" || test "$pic_object" = none ; then
+                   arg="$non_pic_object"
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object="$pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if $opt_dry_run; then
+                 # Extract subdirectory from the argument.
+                 func_dirname "$arg" "/" ""
+                 xdir="$func_dirname_result"
+
+                 func_lo2o "$arg"
+                 pic_object=$xdir$objdir/$func_lo2o_result
+                 non_pic_object=$xdir$func_lo2o_result
+                 func_append libobjs " $pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               else
+                 func_fatal_error "\`$arg' is not a valid libtool object"
+               fi
+             fi
+           done
+         else
+           func_fatal_error "link input file \`$arg' does not exist"
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex="$arg"
+         prev=
+         continue
+         ;;
+       release)
+         release="-$arg"
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           func_fatal_error "only absolute run-paths are allowed"
+           ;;
+         esac
+         if test "$prev" = rpath; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) rpath="$rpath $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) xrpath="$xrpath $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       shrext)
+         shrext_cmds="$arg"
+         prev=
+         continue
+         ;;
+       weak)
+         weak_libs="$weak_libs $arg"
+         prev=
+         continue
+         ;;
+       xcclinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xcompiler)
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xlinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $wl$qarg"
+         prev=
+         func_append compile_command " $wl$qarg"
+         func_append finalize_command " $wl$qarg"
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         # See comment for -static flag below, for more details.
+         func_append compile_command " $link_static_flag"
+         func_append finalize_command " $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         func_fatal_error "more than one -exported-symbols argument is not allowed"
+       fi
+       if test "X$arg" = "X-export-symbols"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework)
+       prev=framework
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       func_stripname '-L' '' "$arg"
+       dir=$func_stripname_result
+       if test -z "$dir"; then
+         if test "$#" -gt 0; then
+           func_fatal_error "require no space between \`-L' and \`$1'"
+         else
+           func_fatal_error "need path for \`-L' option"
+         fi
+       fi
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         test -z "$absdir" && \
+           func_fatal_error "cannot determine absolute directory name of \`$dir'"
+         dir="$absdir"
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "*) ;;
+       *)
+         deplibs="$deplibs -L$dir"
+         lib_search_path="$lib_search_path $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         ::) dllsearchpath=$dir;;
+         *) dllsearchpath="$dllsearchpath:$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           deplibs="$deplibs System.ltframework"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test "X$arg" = "X-lc" && continue
+           ;;
+         esac
+       elif test "X$arg" = "X-lc_r"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       case "$new_inherited_linker_flags " in
+           *" $arg "*) ;;
+           * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+       esac
+       continue
+       ;;
+
+      -multi_module)
+       single_module="${wl}-multi_module"
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+         # The PATH hackery in wrapper scripts is required on Windows
+         # and Darwin in order for the loader to find any dlls it needs.
+         func_warning "\`-no-install' is ignored for $host"
+         func_warning "assuming \`-no-fast-install' instead"
+         fast_install=no
+         ;;
+       *) no_install=yes ;;
+       esac
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -objectlist)
+       prev=objectlist
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+       prev=precious_regex
+       continue
+       ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       func_stripname '-R' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         func_fatal_error "only absolute run-paths are allowed"
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) xrpath="$xrpath $dir" ;;
+       esac
+       continue
+       ;;
+
+      -shared)
+       # The effects of -shared are defined in a previous loop.
+       continue
+       ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -static | -static-libtool-libs)
+       # The effects of -static are defined in a previous loop.
+       # We used to do the same as -all-static on platforms that
+       # didn't have a PIC flag, but the assumption that the effects
+       # would be equivalent was wrong.  It would break on at least
+       # Digital Unix and AIX.
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      -version-number)
+       prev=vinfo
+       vinfo_number=yes
+       continue
+       ;;
+
+      -weak)
+        prev=weak
+       continue
+       ;;
+
+      -Wc,*)
+       func_stripname '-Wc,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Wl,*)
+       func_stripname '-Wl,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+         linker_flags="$linker_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Xcompiler)
+       prev=xcompiler
+       continue
+       ;;
+
+      -Xlinker)
+       prev=xlinker
+       continue
+       ;;
+
+      -XCClinker)
+       prev=xcclinker
+       continue
+       ;;
+
+      # -msg_* for osf cc
+      -msg_*)
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -F/path gives path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      *.$objext)
+       # A standard object.
+       objs="$objs $arg"
+       ;;
+
+      *.lo)
+       # A libtool-controlled object.
+
+       # Check to see that this really is a libtool object.
+       if func_lalib_unsafe_p "$arg"; then
+         pic_object=
+         non_pic_object=
+
+         # Read the .lo file
+         func_source "$arg"
+
+         if test -z "$pic_object" ||
+            test -z "$non_pic_object" ||
+            test "$pic_object" = none &&
+            test "$non_pic_object" = none; then
+           func_fatal_error "cannot find name of object for \`$arg'"
+         fi
+
+         # Extract subdirectory from the argument.
+         func_dirname "$arg" "/" ""
+         xdir="$func_dirname_result"
+
+         if test "$pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           pic_object="$xdir$pic_object"
+
+           if test "$prev" = dlfiles; then
+             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+               dlfiles="$dlfiles $pic_object"
+               prev=
+               continue
+             else
+               # If libtool objects are unsupported, then we need to preload.
+               prev=dlprefiles
+             fi
+           fi
+
+           # CHECK ME:  I think I busted this.  -Ossama
+           if test "$prev" = dlprefiles; then
+             # Preload the old-style object.
+             dlprefiles="$dlprefiles $pic_object"
+             prev=
+           fi
+
+           # A PIC object.
+           func_append libobjs " $pic_object"
+           arg="$pic_object"
+         fi
+
+         # Non-PIC object.
+         if test "$non_pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           non_pic_object="$xdir$non_pic_object"
+
+           # A standard non-PIC object
+           func_append non_pic_objects " $non_pic_object"
+           if test -z "$pic_object" || test "$pic_object" = none ; then
+             arg="$non_pic_object"
+           fi
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object="$pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if $opt_dry_run; then
+           # Extract subdirectory from the argument.
+           func_dirname "$arg" "/" ""
+           xdir="$func_dirname_result"
+
+           func_lo2o "$arg"
+           pic_object=$xdir$objdir/$func_lo2o_result
+           non_pic_object=$xdir$func_lo2o_result
+           func_append libobjs " $pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         else
+           func_fatal_error "\`$arg' is not a valid libtool object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       deplibs="$deplibs $arg"
+       old_deplibs="$old_deplibs $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       if test "$prev" = dlfiles; then
+         # This library was specified with -dlopen.
+         dlfiles="$dlfiles $arg"
+         prev=
+       elif test "$prev" = dlprefiles; then
+         # The library was specified with -dlpreopen.
+         dlprefiles="$dlprefiles $arg"
+         prev=
+       else
+         deplibs="$deplibs $arg"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_duplicate_deps ; then
+       case "$libs " in
+       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+         esac
+         pre_post_deps="$pre_post_deps $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+       passes="conv dlpreopen link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=no
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+       ## FIXME: Find the place where the list is rebuilt in the wrong
+       ##        order, and fix it there properly
+        tmp_deplibs=
+       for deplib in $deplibs; do
+         tmp_deplibs="$deplib $tmp_deplibs"
+       done
+       deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+        test "$linkmode,$pass" = "prog,scan"; then
+       libs="$deplibs"
+       deplibs=
+      fi
+      if test "$linkmode" = prog; then
+       case $pass in
+       dlopen) libs="$dlfiles" ;;
+       dlpreopen) libs="$dlprefiles" ;;
+       link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+       esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+       # Collect and forward deplibs of preopened libtool libs
+       for lib in $dlprefiles; do
+         # Ignore non-libtool-libs
+         dependency_libs=
+         case $lib in
+         *.la) func_source "$lib" ;;
+         esac
+
+         # Collect preopened libtool deplibs, except any this library
+         # has declared as weak libs
+         for deplib in $dependency_libs; do
+            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+           case " $weak_libs " in
+           *" $deplib_base "*) ;;
+           *) deplibs="$deplibs $deplib" ;;
+           esac
+         done
+       done
+       libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+       # Collect dlpreopened libraries
+       save_deplibs="$deplibs"
+       deplibs=
+      fi
+
+      for deplib in $libs; do
+       lib=
+       found=no
+       case $deplib in
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           compiler_flags="$compiler_flags $deplib"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -l*)
+         if test "$linkmode" != lib && test "$linkmode" != prog; then
+           func_warning "\`-l' is ignored for archives/objects"
+           continue
+         fi
+         func_stripname '-l' '' "$deplib"
+         name=$func_stripname_result
+         if test "$linkmode" = lib; then
+           searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+         else
+           searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+         fi
+         for searchdir in $searchdirs; do
+           for search_ext in .la $std_shrext .so .a; do
+             # Search the libtool library
+             lib="$searchdir/lib${name}${search_ext}"
+             if test -f "$lib"; then
+               if test "$search_ext" = ".la"; then
+                 found=yes
+               else
+                 found=no
+               fi
+               break 2
+             fi
+           done
+         done
+         if test "$found" != yes; then
+           # deplib doesn't seem to be a libtool library
+           if test "$linkmode,$pass" = "prog,link"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
+         else # deplib is a libtool library
+           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+           # We need to do some special things here, and not later.
+           if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             case " $predeps $postdeps " in
+             *" $deplib "*)
+               if func_lalib_p "$lib"; then
+                 library_names=
+                 old_library=
+                 func_source "$lib"
+                 for l in $old_library $library_names; do
+                   ll="$l"
+                 done
+                 if test "X$ll" = "X$old_library" ; then # only static version available
+                   found=no
+                   func_dirname "$lib" "" "."
+                   ladir="$func_dirname_result"
+                   lib=$ladir/$old_library
+                   if test "$linkmode,$pass" = "prog,link"; then
+                     compile_deplibs="$deplib $compile_deplibs"
+                     finalize_deplibs="$deplib $finalize_deplibs"
+                   else
+                     deplibs="$deplib $deplibs"
+                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                   fi
+                   continue
+                 fi
+               fi
+               ;;
+             *) ;;
+             esac
+           fi
+         fi
+         ;; # -l
+       *.ltframework)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -L*)
+         case $linkmode in
+         lib)
+           deplibs="$deplib $deplibs"
+           test "$pass" = conv && continue
+           newdependency_libs="$deplib $newdependency_libs"
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         prog)
+           if test "$pass" = conv; then
+             deplibs="$deplib $deplibs"
+             continue
+           fi
+           if test "$pass" = scan; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         *)
+           func_warning "\`-L' is ignored for archives/objects"
+           ;;
+         esac # linkmode
+         continue
+         ;; # -L
+       -R*)
+         if test "$pass" = link; then
+           func_stripname '-R' '' "$deplib"
+           dir=$func_stripname_result
+           # Make sure the xrpath contains only unique directories.
+           case "$xrpath " in
+           *" $dir "*) ;;
+           *) xrpath="$xrpath $dir" ;;
+           esac
+         fi
+         deplibs="$deplib $deplibs"
+         continue
+         ;;
+       *.la) lib="$deplib" ;;
+       *.$libext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+           continue
+         fi
+         case $linkmode in
+         lib)
+           # Linking convenience modules into shared libraries is allowed,
+           # but linking other static libraries is non-portable.
+           case " $dlpreconveniencelibs " in
+           *" $deplib "*) ;;
+           *)
+             valid_a_lib=no
+             case $deplibs_check_method in
+               match_pattern*)
+                 set dummy $deplibs_check_method; shift
+                 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+                 if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                   valid_a_lib=yes
+                 fi
+               ;;
+               pass_all)
+                 valid_a_lib=yes
+               ;;
+             esac
+             if test "$valid_a_lib" != yes; then
+               $ECHO
+               $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+               $ECHO "*** that it is just a static archive that I should not use here."
+             else
+               $ECHO
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             fi
+             ;;
+           esac
+           continue
+           ;;
+         prog)
+           if test "$pass" != link; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+         elif test "$linkmode" = prog; then
+           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             newdlprefiles="$newdlprefiles $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             newdlfiles="$newdlfiles $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=yes
+         continue
+         ;;
+       esac # case $deplib
+
+       if test "$found" = yes || test -f "$lib"; then :
+       else
+         func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+       fi
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$lib" \
+         || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+       func_dirname "$lib" "" "."
+       ladir="$func_dirname_result"
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       inherited_linker_flags=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       func_source "$lib"
+
+       # Convert "-framework foo" to "foo.ltframework"
+       if test -n "$inherited_linker_flags"; then
+         tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+           case " $new_inherited_linker_flags " in
+             *" $tmp_inherited_linker_flag "*) ;;
+             *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+           esac
+         done
+       fi
+       dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       if test "$linkmode,$pass" = "lib,link" ||
+          test "$linkmode,$pass" = "prog,scan" ||
+          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+       fi
+
+       if test "$pass" = conv; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             func_fatal_error "cannot find name of link library for \`$lib'"
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           convenience="$convenience $ladir/$objdir/$old_library"
+           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+         elif test "$linkmode" != prog && test "$linkmode" != lib; then
+           func_fatal_error "\`$lib' is not a convenience library"
+         fi
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           deplibs="$deplib $deplibs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+         continue
+       fi # $pass = conv
+
+
+       # 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
+         func_fatal_error "cannot find name of link library for \`$lib'"
+       fi
+
+       # This library was specified with -dlopen.
+       if test "$pass" = dlopen; then
+         if test -z "$libdir"; then
+           func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+         fi
+         if test -z "$dlname" ||
+            test "$dlopen_support" != yes ||
+            test "$build_libtool_libs" = no; then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           dlprefiles="$dlprefiles $lib $dependency_libs"
+         else
+           newdlfiles="$newdlfiles $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           func_warning "cannot determine absolute directory name of \`$ladir'"
+           func_warning "passing it literally to the linker, although it might fail"
+           abs_ladir="$ladir"
+         fi
+         ;;
+       esac
+       func_basename "$lib"
+       laname="$func_basename_result"
+
+       # Find the relevant object directory and library name.
+       if test "X$installed" = Xyes; then
+         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           func_warning "library \`$lib' was moved."
+           dir="$ladir"
+           absdir="$abs_ladir"
+           libdir="$abs_ladir"
+         else
+           dir="$libdir"
+           absdir="$libdir"
+         fi
+         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           dir="$ladir"
+           absdir="$abs_ladir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         else
+           dir="$ladir/$objdir"
+           absdir="$abs_ladir/$objdir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         fi
+       fi # $installed = yes
+       func_stripname 'lib' '.la' "$laname"
+       name=$func_stripname_result
+
+       # This library was specified with -dlpreopen.
+       if test "$pass" = dlpreopen; then
+         if test -z "$libdir" && test "$linkmode" = prog; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+         fi
+         # Prefer using a static library (so that no silly _DYNAMIC symbols
+         # are required to link).
+         if test -n "$old_library"; then
+           newdlprefiles="$newdlprefiles $dir/$old_library"
+           # Keep a list of preopened convenience libraries to check
+           # that they are being used correctly in the link pass.
+           test -z "$libdir" && \
+               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+         # Otherwise, use the dlname, so that lt_dlopen finds it.
+         elif test -n "$dlname"; then
+           newdlprefiles="$newdlprefiles $dir/$dlname"
+         else
+           newdlprefiles="$newdlprefiles $dir/$linklib"
+         fi
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test "$linkmode" = lib; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test "$linkmode" = prog && test "$pass" != link; then
+         newlib_search_path="$newlib_search_path $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=no
+         if test "$link_all_deplibs" != no || test -z "$library_names" ||
+            test "$build_libtool_libs" = no; then
+           linkalldeplibs=yes
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) func_stripname '-L' '' "$deplib"
+                newlib_search_path="$newlib_search_path $func_stripname_result"
+                ;;
+           esac
+           # Need to link against all dependency_libs?
+           if test "$linkalldeplibs" = yes; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test "$linkmode,$pass" = "prog,link"; then
+         if test -n "$library_names" &&
+            { { test "$prefer_static_libs" = no ||
+                test "$prefer_static_libs,$installed" = "built,yes"; } ||
+              test -z "$old_library"; }; then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+             # Make sure the rpath contains only unique directories.
+             case "$temp_rpath:" in
+             *"$absdir:"*) ;;
+             *) temp_rpath="$temp_rpath$absdir:" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if test "$alldeplibs" = yes &&
+            { test "$deplibs_check_method" = pass_all ||
+              { test "$build_libtool_libs" = yes &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test "$use_static_libs" = built && test "$installed" = yes; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+         case $host in
+         *cygwin* | *mingw* | *cegcc*)
+             # No point in relinking DLLs because paths are not encoded
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=no
+           ;;
+         *)
+           if test "$installed" = no; then
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=yes
+           fi
+           ;;
+         esac
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on some
+         # systems (darwin).  Don't bleat about dlopened modules though!
+         dlopenmodule=""
+         for dlpremoduletest in $dlprefiles; do
+           if test "X$dlpremoduletest" = "X$lib"; then
+             dlopenmodule="$dlpremoduletest"
+             break
+           fi
+         done
+         if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+           $ECHO
+           if test "$linkmode" = prog; then
+             $ECHO "*** Warning: Linking the executable $output against the loadable module"
+           else
+             $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+           fi
+           $ECHO "*** $linklib is not portable!"
+         fi
+         if test "$linkmode" = lib &&
+            test "$hardcode_into_libs" = yes; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           shift
+           realname="$1"
+           shift
+           libname=`eval "\\$ECHO \"$libname_spec\""`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname="$dlname"
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw* | *cegcc*)
+               func_arith $current - $age
+               major=$func_arith_result
+               versuffix="-$major"
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname="$realname"
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot="$soname"
+           func_basename "$soroot"
+           soname="$func_basename_result"
+           func_stripname 'lib' '.dll' "$soname"
+           newlib=libimp-$func_stripname_result.a
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             func_verbose "extracting exported symbol list from \`$soname'"
+             func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             func_verbose "generating import library for \`$soname'"
+             func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test "$linkmode" = prog || test "$mode" != relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test "$hardcode_direct" = no; then
+               add="$dir/$linklib"
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir="-L$dir" ;;
+                 *-*-darwin* )
+                   # if the lib is a (non-dlopened) module then we can not
+                   # link against it, someone is ignoring the earlier warnings
+                   if /usr/bin/file -L $add 2> /dev/null |
+                        $GREP ": [^:]* bundle" >/dev/null ; then
+                     if test "X$dlopenmodule" != "X$lib"; then
+                       $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+                       if test -z "$old_library" ; then
+                         $ECHO
+                         $ECHO "*** And there doesn't seem to be a static archive available"
+                         $ECHO "*** The link will probably fail, sorry"
+                       else
+                         add="$dir/$old_library"
+                       fi
+                     elif test -n "$old_library"; then
+                       add="$dir/$old_library"
+                     fi
+                   fi
+               esac
+             elif test "$hardcode_minus_L" = no; then
+               case $host in
+               *-*-sunos*) add_shlibpath="$dir" ;;
+               esac
+               add_dir="-L$dir"
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = no; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test "$hardcode_direct" = yes &&
+                test "$hardcode_direct_absolute" = no; then
+               add="$dir/$linklib"
+             elif test "$hardcode_minus_L" = yes; then
+               add_dir="-L$dir"
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = yes; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test "$lib_linked" != yes; then
+             func_fatal_configuration "unsupported hardcode properties"
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             esac
+           fi
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test "$hardcode_direct" != yes &&
+                test "$hardcode_minus_L" != yes &&
+                test "$hardcode_shlibpath_var" = yes; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test "$linkmode" = prog || test "$mode" = relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test "$hardcode_direct" = yes &&
+              test "$hardcode_direct_absolute" = no; then
+             add="$libdir/$linklib"
+           elif test "$hardcode_minus_L" = yes; then
+             add_dir="-L$libdir"
+             add="-l$name"
+           elif test "$hardcode_shlibpath_var" = yes; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             esac
+             add="-l$name"
+           elif test "$hardcode_automatic" = yes; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib" ; then
+               add="$inst_prefix_dir$libdir/$linklib"
+             else
+               add="$libdir/$linklib"
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir="-L$libdir"
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add="-l$name"
+           fi
+
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test "$linkmode" = prog; then
+         # 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_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test "$build_libtool_libs" = yes; then
+         # Not a shared library
+         if test "$deplibs_check_method" != pass_all; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           $ECHO
+           $ECHO "*** Warning: This system can not link to static lib archive $lib."
+           $ECHO "*** I have the capability to make that library automatically link in when"
+           $ECHO "*** you link to this library.  But I can only do this if you have a"
+           $ECHO "*** shared version of the library, which you do not appear to have."
+           if test "$module" = yes; then
+             $ECHO "*** But as you try to build a module library, libtool will still create "
+             $ECHO "*** a static module, that should work as long as the dlopening application"
+             $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             if test -z "$global_symbol_pipe"; then
+               $ECHO
+               $ECHO "*** However, this would only work if libtool was able to extract symbol"
+               $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+               $ECHO "*** not find such a program.  So, this module is probably useless."
+               $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test "$build_old_libs" = no; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test "$linkmode" = lib; then
+         if test -n "$dependency_libs" &&
+            { test "$hardcode_into_libs" != yes ||
+              test "$build_old_libs" = yes ||
+              test "$link_static" = yes; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) func_stripname '-R' '' "$libdir"
+                  temp_xrpath=$func_stripname_result
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) xrpath="$xrpath $temp_xrpath";;
+                  esac;;
+             *) temp_deplibs="$temp_deplibs $libdir";;
+             esac
+           done
+           dependency_libs="$temp_deplibs"
+         fi
+
+         newlib_search_path="$newlib_search_path $absdir"
+         # Link against this library
+         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+
+         if test "$link_all_deplibs" != no; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             case $deplib in
+             -L*) path="$deplib" ;;
+             *.la)
+               func_dirname "$deplib" "" "."
+               dir="$func_dirname_result"
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   func_warning "cannot determine absolute directory name of \`$dir'"
+                   absdir="$dir"
+                 fi
+                 ;;
+               esac
+               if $GREP "^installed=no" $deplib > /dev/null; then
+               case $host in
+               *-*-darwin*)
+                 depdepl=
+                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names" ; then
+                   for tmp in $deplibrary_names ; do
+                     depdepl=$tmp
+                   done
+                   if test -f "$absdir/$objdir/$depdepl" ; then
+                     depdepl="$absdir/$objdir/$depdepl"
+                     darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+                     compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+                     linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+                     path=
+                   fi
+                 fi
+                 ;;
+               *)
+                 path="-L$absdir/$objdir"
+                 ;;
+               esac
+               else
+                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 test -z "$libdir" && \
+                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                 test "$absdir" != "$libdir" && \
+                   func_warning "\`$deplib' seems to be moved"
+
+                 path="-L$absdir"
+               fi
+               ;;
+             esac
+             case " $deplibs " in
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+       if test "$linkmode" = "prog"; then
+         compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+         finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+       else
+         compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test "$pass" != dlopen; then
+       if test "$pass" != conv; then
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) lib_search_path="$lib_search_path $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       fi
+
+       if test "$linkmode,$pass" != "prog,link"; then
+         vars="deplibs"
+       else
+         vars="compile_deplibs finalize_deplibs"
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) tmp_libs="$tmp_libs $deplib" ;;
+             esac
+             ;;
+           *) tmp_libs="$tmp_libs $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=""
+         ;;
+       esac
+       if test -n "$i" ; then
+         tmp_libs="$tmp_libs $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+       func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+       func_stripname 'lib' '.la' "$outputname"
+       name=$func_stripname_result
+       eval shared_ext=\"$shrext_cmds\"
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       test "$module" = no && \
+         func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+       if test "$need_lib_prefix" != no; then
+         # Add the "lib" prefix for modules if required
+         func_stripname '' '.la' "$outputname"
+         name=$func_stripname_result
+         eval shared_ext=\"$shrext_cmds\"
+         eval libname=\"$libname_spec\"
+       else
+         func_stripname '' '.la' "$outputname"
+         libname=$func_stripname_result
+       fi
+       ;;
+      esac
+
+      if test -n "$objs"; then
+       if test "$deplibs_check_method" != pass_all; then
+         func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+       else
+         $ECHO
+         $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+         $ECHO "*** objects $objs is not portable!"
+         libobjs="$libobjs $objs"
+       fi
+      fi
+
+      test "$dlself" != no && \
+       func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+       func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test "$build_libtool_libs" = yes; then
+         # Building a libtool convenience library.
+         # Some compilers have problems with a `.al' extension so
+         # convenience libraries should have the same extension an
+         # archive normally would.
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+
+       test -n "$vinfo" && \
+         func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+       test -n "$release" && \
+         func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+       # Parse the version information argument.
+       save_ifs="$IFS"; IFS=':'
+       set dummy $vinfo 0 0 0
+       shift
+       IFS="$save_ifs"
+
+       test -n "$7" && \
+         func_fatal_help "too many parameters to \`-version-info'"
+
+       # convert absolute version numbers to libtool ages
+       # this retains compatibility with .la files and attempts
+       # to make the code below a bit more comprehensible
+
+       case $vinfo_number in
+       yes)
+         number_major="$1"
+         number_minor="$2"
+         number_revision="$3"
+         #
+         # There are really only two kinds -- those that
+         # use the current revision as the major version
+         # and those that subtract age and use age as
+         # a minor version.  But, then there is irix
+         # which has an extra 1 added just for fun
+         #
+         case $version_type in
+         darwin|linux|osf|windows|none)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_revision"
+           ;;
+         freebsd-aout|freebsd-elf|sunos)
+           current="$number_major"
+           revision="$number_minor"
+           age="0"
+           ;;
+         irix|nonstopux)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_minor"
+           lt_irix_increment=no
+           ;;
+         esac
+         ;;
+       no)
+         current="$1"
+         revision="$2"
+         age="$3"
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "CURRENT \`$current' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $revision in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "REVISION \`$revision' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $age in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "AGE \`$age' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         func_error "AGE \`$age' is greater than the current interface number \`$current'"
+         func_fatal_error "\`$vinfo' is not valid version information"
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         # Darwin ld doesn't like 0 for these options...
+         func_arith $current + 1
+         minor_current=$func_arith_result
+         xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+         ;;
+
+       freebsd-aout)
+         major=".$current"
+         versuffix=".$current.$revision";
+         ;;
+
+       freebsd-elf)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       irix | nonstopux)
+         if test "X$lt_irix_increment" = "Xno"; then
+           func_arith $current - $age
+         else
+           func_arith $current - $age + 1
+         fi
+         major=$func_arith_result
+
+         case $version_type in
+           nonstopux) verstring_prefix=nonstopux ;;
+           *)         verstring_prefix=sgi ;;
+         esac
+         verstring="$verstring_prefix$major.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test "$loop" -ne 0; do
+           func_arith $revision - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring_prefix$major.$iface:$verstring"
+         done
+
+         # Before this point, $major must not contain `.'.
+         major=.$major
+         versuffix="$major.$revision"
+         ;;
+
+       linux)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         ;;
+
+       osf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=".$current.$age.$revision"
+         verstring="$current.$age.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test "$loop" -ne 0; do
+           func_arith $current - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring:${iface}.0"
+         done
+
+         # Make executables depend on our current version.
+         verstring="$verstring:${current}.0"
+         ;;
+
+       qnx)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       sunos)
+         major=".$current"
+         versuffix=".$current.$revision"
+         ;;
+
+       windows)
+         # Use '-' rather than '.', since we only want one
+         # extension on DOS 8.3 filesystems.
+         func_arith $current - $age
+         major=$func_arith_result
+         versuffix="-$major"
+         ;;
+
+       *)
+         func_fatal_configuration "unknown library version type \`$version_type'"
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         case $version_type in
+         darwin)
+           # we can't check for "0.0" in archive_cmds due to quoting
+           # problems, so we reset it completely
+           verstring=
+           ;;
+         *)
+           verstring="0.0"
+           ;;
+         esac
+         if test "$need_version" = no; then
+           versuffix=
+         else
+           versuffix=".0.0"
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test "$avoid_version" = yes && test "$need_version" = no; then
+         major=
+         versuffix=
+         verstring=""
+       fi
+
+       # Check to see if the archive will have undefined symbols.
+       if test "$allow_undefined" = yes; then
+         if test "$allow_undefined_flag" = unsupported; then
+           func_warning "undefined symbols not allowed in $host shared libraries"
+           build_libtool_libs=no
+           build_old_libs=yes
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag="$no_undefined_flag"
+       fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      libobjs="$libobjs $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$mode" != relink; then
+       # Remove our outputs, but don't remove object files since they
+       # may have been created when compiling PIC objects.
+       removelist=
+       tempremovelist=`$ECHO "$output_objdir/*"`
+       for p in $tempremovelist; do
+         case $p in
+           *.$objext | *.gcno)
+              ;;
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+              if test "X$precious_files_regex" != "X"; then
+                if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+                then
+                  continue
+                fi
+              fi
+              removelist="$removelist $p"
+              ;;
+           *) ;;
+         esac
+       done
+       test -n "$removelist" && \
+         func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+       oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #        lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+      #        deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       temp_xrpath=
+       for libdir in $xrpath; do
+         temp_xrpath="$temp_xrpath -R$libdir"
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+         dependency_libs="$temp_xrpath $dependency_libs"
+       fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+       case " $dlprefiles $dlfiles " in
+       *" $lib "*) ;;
+       *) dlfiles="$dlfiles $lib" ;;
+       esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+       case "$dlprefiles " in
+       *" $lib "*) ;;
+       *) dlprefiles="$dlprefiles $lib" ;;
+       esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+       if test -n "$rpath"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+           # these systems don't actually have a c library (as such)!
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C library is in the System framework
+           deplibs="$deplibs System.ltframework"
+           ;;
+         *-*-netbsd*)
+           # Don't link with libc until the a.out ld.so is fixed.
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test "$build_libtool_need_lc" = "yes"; then
+             deplibs="$deplibs -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=""
+       versuffix=""
+       major=""
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $opt_dry_run || $RM conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $opt_dry_run || $RM conftest
+         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   newdeplibs="$newdeplibs $i"
+                   i=""
+                   ;;
+                 esac
+               fi
+               if test -n "$i" ; then
+                 libname=`eval "\\$ECHO \"$libname_spec\""`
+                 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                 set dummy $deplib_matches; shift
+                 deplib_match=$1
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   newdeplibs="$newdeplibs $i"
+                 else
+                   droppeddeps=yes
+                   $ECHO
+                   $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                   $ECHO "*** I have the capability to make that library automatically link in when"
+                   $ECHO "*** you link to this library.  But I can only do this if you have a"
+                   $ECHO "*** shared version of the library, which I believe you do not have"
+                   $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+                   $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+                 fi
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               $opt_dry_run || $RM conftest
+               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+                 ldd_output=`ldd conftest`
+                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     newdeplibs="$newdeplibs $i"
+                     i=""
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i" ; then
+                   libname=`eval "\\$ECHO \"$libname_spec\""`
+                   deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                   set dummy $deplib_matches; shift
+                   deplib_match=$1
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                     newdeplibs="$newdeplibs $i"
+                   else
+                     droppeddeps=yes
+                     $ECHO
+                     $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                     $ECHO "*** I have the capability to make that library automatically link in when"
+                     $ECHO "*** you link to this library.  But I can only do this if you have a"
+                     $ECHO "*** shared version of the library, which you do not appear to have"
+                     $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+                     $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 $ECHO
+                 $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+                 $ECHO "*** make it link in!  You will probably need to install it or some"
+                 $ECHO "*** library that it depends on before this library will be fully"
+                 $ECHO "*** functional.  Installing it before continuing would be even better."
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method; shift
+         file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null |
+                        $GREP " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib="$potent_lib"
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+                       *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+                        $SED -e 10q |
+                        $EGREP "$file_magic_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method; shift
+         match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib="$potent_lib" # see symlink-check above in file_magic test
+                   if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+                      $EGREP "$match_pattern_regex" > /dev/null; then
+                     newdeplibs="$newdeplibs $a_deplib"
+                     a_deplib=""
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=""
+         tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+             -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+           for i in $predeps $postdeps ; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+           done
+         fi
+         if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[      ]//g' |
+            $GREP . >/dev/null; then
+           $ECHO
+           if test "X$deplibs_check_method" = "Xnone"; then
+             $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           $ECHO "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+         fi
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library with the System framework
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+         ;;
+       esac
+
+       if test "$droppeddeps" = yes; then
+         if test "$module" = yes; then
+           $ECHO
+           $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+           $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+           $ECHO "*** a static module, that should work as long as the dlopening"
+           $ECHO "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             $ECHO
+             $ECHO "*** However, this would only work if libtool was able to extract symbol"
+             $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             $ECHO "*** not find such a program.  So, this module is probably useless."
+             $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test "$build_old_libs" = no; then
+             oldlibs="$output_objdir/$libname.$libext"
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           $ECHO "*** The inter-library dependencies that have been dropped here will be"
+           $ECHO "*** automatically added whenever a program is linked with this library"
+           $ECHO "*** or is declared to -dlopen it."
+
+           if test "$allow_undefined" = no; then
+             $ECHO
+             $ECHO "*** Since this library must not contain undefined symbols,"
+             $ECHO "*** because either the platform does not support them or"
+             $ECHO "*** it was explicitly requested with -no-undefined,"
+             $ECHO "*** libtool will only create a static version of it."
+             if test "$build_old_libs" = no; then
+               oldlibs="$output_objdir/$libname.$libext"
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+       *-*-darwin*)
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+       if test "$hardcode_into_libs" = yes; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath="$finalize_rpath"
+         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         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
+                 hardcode_libdirs="$libdir"
+               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
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               dep_rpath="$dep_rpath $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) perm_rpath="$perm_rpath $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir="$hardcode_libdirs"
+           if test -n "$hardcode_libdir_flag_spec_ld"; then
+             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+           else
+             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+           fi
+         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
+           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+         fi
+         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+       fi
+
+       shlibpath="$finalize_shlibpath"
+       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       if test -n "$shlibpath"; then
+         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+       fi
+
+       # Get the real and link names of the library.
+       eval shared_ext=\"$shrext_cmds\"
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       shift
+       realname="$1"
+       shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname="$realname"
+       fi
+       if test -z "$dlname"; then
+         dlname=$soname
+       fi
+
+       lib="$output_objdir/$realname"
+       linknames=
+       for link
+       do
+         linknames="$linknames $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       test "X$libobjs" = "X " && libobjs=
+
+       delfiles=
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+         export_symbols="$output_objdir/$libname.uexp"
+         delfiles="$delfiles $export_symbols"
+       fi
+
+       orig_export_symbols=
+       case $host_os in
+       cygwin* | mingw* | cegcc*)
+         if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+           # exporting using user supplied symfile
+           if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+             # and it's NOT already a .def file. Must figure out
+             # which of the given symbols are data symbols and tag
+             # them as such. So, trigger use of export_symbols_cmds.
+             # export_symbols gets reassigned inside the "prepare
+             # the list of exported symbols" if statement, so the
+             # include_expsyms logic still works.
+             orig_export_symbols="$export_symbols"
+             export_symbols=
+             always_export_symbols=yes
+           fi
+         fi
+         ;;
+       esac
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $opt_dry_run || $RM $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             eval cmd=\"$cmd\"
+             func_len " $cmd"
+             len=$func_len_result
+             if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               func_verbose "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS="$save_ifs"
+           if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         tmp_export_symbols="$export_symbols"
+         test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+         $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+       fi
+
+       if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+         # The given exports_symbols file has to be filtered, so filter it.
+         func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+         # FIXME: $output_objdir/$libname.filter potentially contains lots of
+         # 's' commands which not all seds can handle. GNU sed should be fine
+         # though. Also, the filter scales superlinearly with the number of
+         # global variables. join(1) would be nice here, but unfortunately
+         # isn't a blessed tool.
+         $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+         delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+         export_symbols=$output_objdir/$libname.def
+         $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+         case " $convenience " in
+         *" $test_deplib "*) ;;
+         *)
+           tmp_deplibs="$tmp_deplibs $test_deplib"
+           ;;
+         esac
+       done
+       deplibs="$tmp_deplibs"
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec" &&
+           test "$compiler_needs_object" = yes &&
+           test -z "$libobjs"; then
+           # extract the archives, so we have objects to list.
+           # TODO: could optimize this to just extract one archive.
+           whole_archive_flag_spec=
+         fi
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         else
+           gentop="$output_objdir/${outputname}x"
+           generated="$generated $gentop"
+
+           func_extract_archives $gentop $convenience
+           libobjs="$libobjs $func_extract_archives_result"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+       fi
+
+       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         linker_flags="$linker_flags $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test "$module" = yes && test -n "$module_cmds" ; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           eval test_cmds=\"$archive_expsym_cmds\"
+           cmds=$archive_expsym_cmds
+         else
+           eval test_cmds=\"$archive_cmds\"
+           cmds=$archive_cmds
+         fi
+       fi
+
+       if test "X$skipped_export" != "X:" &&
+          func_len " $test_cmds" &&
+          len=$func_len_result &&
+          test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise
+         # or, if using GNU ld and skipped_export is not :, use a linker
+         # script.
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         last_robj=
+         k=1
+
+         if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+           output=${output_objdir}/${output_la}.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           $ECHO 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             $ECHO "$obj" >> $output
+           done
+           $ECHO ')' >> $output
+           delfiles="$delfiles $output"
+         elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+           output=${output_objdir}/${output_la}.lnk
+           func_verbose "creating linker input file list: $output"
+           : > $output
+           set x $save_libobjs
+           shift
+           firstobj=
+           if test "$compiler_needs_object" = yes; then
+             firstobj="$1 "
+             shift
+           fi
+           for obj
+           do
+             $ECHO "$obj" >> $output
+           done
+           delfiles="$delfiles $output"
+           output=$firstobj\"$file_list_spec$output\"
+         else
+           if test -n "$save_libobjs"; then
+             func_verbose "creating reloadable object files..."
+             output=$output_objdir/$output_la-${k}.$objext
+             eval test_cmds=\"$reload_cmds\"
+             func_len " $test_cmds"
+             len0=$func_len_result
+             len=$len0
+
+             # Loop over the list of objects to be linked.
+             for obj in $save_libobjs
+             do
+               func_len " $obj"
+               func_arith $len + $func_len_result
+               len=$func_arith_result
+               if test "X$objlist" = X ||
+                  test "$len" -lt "$max_cmd_len"; then
+                 func_append objlist " $obj"
+               else
+                 # The command $test_cmds is almost too long, add a
+                 # command to the queue.
+                 if test "$k" -eq 1 ; then
+                   # The first file doesn't have a previous command to add.
+                   eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+                 else
+                   # All subsequent reloadable object files will link in
+                   # the last one created.
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+                 fi
+                 last_robj=$output_objdir/$output_la-${k}.$objext
+                 func_arith $k + 1
+                 k=$func_arith_result
+                 output=$output_objdir/$output_la-${k}.$objext
+                 objlist=$obj
+                 func_len " $last_robj"
+                 func_arith $len0 + $func_len_result
+                 len=$func_arith_result
+               fi
+             done
+             # Handle the remaining objects by creating one last
+             # reloadable object file.  All subsequent reloadable object
+             # files will link in the last one created.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+             fi
+             delfiles="$delfiles $output"
+
+           else
+             output=
+           fi
+
+           if ${skipped_export-false}; then
+             func_verbose "generating symbol list for \`$libname.la'"
+             export_symbols="$output_objdir/$libname.exp"
+             $opt_dry_run || $RM $export_symbols
+             libobjs=$output
+             # Append the command to create the export file.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+           fi
+
+           test -n "$save_libobjs" &&
+             func_verbose "creating a temporary reloadable object file: $output"
+
+           # Loop through the commands generated above and execute them.
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $concat_cmds; do
+             IFS="$save_ifs"
+             $opt_silent || {
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
+             }
+             $opt_dry_run || eval "$cmd" || {
+               lt_exit=$?
+
+               # Restore the uninstalled library and exit
+               if test "$mode" = relink; then
+                 ( cd "$output_objdir" && \
+                   $RM "${realname}T" && \
+                   $MV "${realname}U" "$realname" )
+               fi
+
+               exit $lt_exit
+             }
+           done
+           IFS="$save_ifs"
+
+           if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+
+          if ${skipped_export-false}; then
+           if test -n "$export_symbols" && test -n "$include_expsyms"; then
+             tmp_export_symbols="$export_symbols"
+             test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+             $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+           fi
+
+           if test -n "$orig_export_symbols"; then
+             # The given exports_symbols file has to be filtered, so filter it.
+             func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+             # FIXME: $output_objdir/$libname.filter potentially contains lots of
+             # 's' commands which not all seds can handle. GNU sed should be fine
+             # though. Also, the filter scales superlinearly with the number of
+             # global variables. join(1) would be nice here, but unfortunately
+             # isn't a blessed tool.
+             $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+             delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+             export_symbols=$output_objdir/$libname.def
+             $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+           fi
+         fi
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test "$module" = yes && test -n "$module_cmds" ; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+           if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+             cmds=$archive_expsym_cmds
+           else
+             cmds=$archive_cmds
+           fi
+         fi
+       fi
+
+       if test -n "$delfiles"; then
+         # Append the command to remove temporary files to $cmds.
+         eval cmds=\"\$cmds~\$RM $delfiles\"
+       fi
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         libobjs="$libobjs $func_extract_archives_result"
+         test "X$libobjs" = "X " && libobjs=
+       fi
+
+       save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         eval cmd=\"$cmd\"
+         $opt_silent || {
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
+         }
+         $opt_dry_run || eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test "$mode" = relink; then
+             ( cd "$output_objdir" && \
+               $RM "${realname}T" && \
+               $MV "${realname}U" "$realname" )
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS="$save_ifs"
+
+       # Restore the uninstalled library and exit
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             func_show_eval '${RM}r "$gentop"'
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test "$module" = yes || test "$export_dynamic" = yes; then
+         # On all known operating systems, these are identical.
+         dlname="$soname"
+       fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+       test -n "$objs$old_deplibs" && \
+         func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+       libobj=$output
+       func_lo2o "$libobj"
+       obj=$func_lo2o_result
+       ;;
+      *)
+       libobj=
+       obj="$output"
+       ;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+         reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+       else
+         gentop="$output_objdir/${obj}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output="$libobj"
+       func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+       func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) func_stripname '' '.exe' "$output"
+                 output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+       && test "$dlopen_self" = unknown \
+       && test "$dlopen_self_static" = unknown && \
+         func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       ;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+       # Don't allow lazy linking, it breaks C++ global constructors
+       # But is supposedly fixed on 10.4 or later (yay!).
+       if test "$tagname" = CXX ; then
+         case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+           10.[0123])
+             compile_command="$compile_command ${wl}-bind_at_load"
+             finalize_command="$finalize_command ${wl}-bind_at_load"
+           ;;
+         esac
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           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
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         ::) dllsearchpath=$libdir;;
+         *) dllsearchpath="$dllsearchpath:$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           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
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+       func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *cegcc)
+        # Disable wrappers for cegcc, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+       # Replace the output file specification.
+       compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       link_command="$compile_command$compile_rpath"
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       exit_status=0
+       func_show_eval "$link_command" 'exit_status=$?'
+
+       # Delete the generated files.
+       if test -f "$output_objdir/${outputname}S.${objext}"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+       fi
+
+       exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test "$no_install" = yes; then
+       # We don't need to create a wrapper script.
+       link_command="$compile_var$compile_command$compile_rpath"
+       # Replace the output file specification.
+       link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       # Delete the old output file.
+       $opt_dry_run || $RM $output
+       # Link the executable and exit
+       func_show_eval "$link_command" 'exit $?'
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+       # Fast installation is not supported
+       link_command="$compile_var$compile_command$compile_rpath"
+       relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+       func_warning "this platform does not like uninstalled shared libraries"
+       func_warning "\`$output' will be relinked during installation"
+      else
+       if test "$fast_install" != no; then
+         link_command="$finalize_var$compile_command$finalize_rpath"
+         if test "$fast_install" = yes; then
+           relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+         else
+           # fast_install is set to needless
+           relink_command=
+         fi
+       else
+         link_command="$compile_var$compile_command$compile_rpath"
+         relink_command="$finalize_var$finalize_command$finalize_rpath"
+       fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+         if eval test -z \"\${$var+set}\"; then
+           relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+         elif eval var_value=\$$var; test -z "$var_value"; then
+           relink_command="$var=; export $var; $relink_command"
+         else
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+         fi
+       done
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $ECHO for shipping.
+      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+       case $progpath in
+       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+       esac
+       qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+       qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) func_stripname '' '.exe' "$output"
+                output=$func_stripname_result ;;
+       esac
+       # test for cygwin because mv fails w/o .exe extensions
+       case $host in
+         *cygwin*)
+           exeext=.exe
+           func_stripname '' '.exe' "$outputname"
+           outputname=$func_stripname_result ;;
+         *) exeext= ;;
+       esac
+       case $host in
+         *cygwin* | *mingw* )
+           func_dirname_and_basename "$output" "" "."
+           output_name=$func_basename_result
+           output_path=$func_dirname_result
+           cwrappersource="$output_path/$objdir/lt-$output_name.c"
+           cwrapper="$output_path/$output_name.exe"
+           $RM $cwrappersource $cwrapper
+           trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_cwrapperexe_src > $cwrappersource
+
+           # The wrapper executable is built using the $host compiler,
+           # because it contains $host paths and files. If cross-
+           # compiling, it, like the target executable, must be
+           # executed on the $host or under an emulation environment.
+           $opt_dry_run || {
+             $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+             $STRIP $cwrapper
+           }
+
+           # Now, create the wrapper script for func_source use:
+           func_ltwrapper_scriptname $cwrapper
+           $RM $func_ltwrapper_scriptname_result
+           trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+           $opt_dry_run || {
+             # note: this script will not be executed, so do not chmod.
+             if test "x$build" = "x$host" ; then
+               $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+             else
+               func_emit_wrapper no > $func_ltwrapper_scriptname_result
+             fi
+           }
+         ;;
+         * )
+           $RM $output
+           trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_wrapper no > $output
+           chmod +x $output
+         ;;
+       esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+       oldobjs="$libobjs_save $symfileobj"
+       addlibs="$convenience"
+       build_libtool_libs=no
+      else
+       if test "$build_libtool_libs" = module; then
+         oldobjs="$libobjs_save"
+         build_libtool_libs=no
+       else
+         oldobjs="$old_deplibs $non_pic_objects"
+         if test "$preload" = yes && test -f "$symfileobj"; then
+           oldobjs="$oldobjs $symfileobj"
+         fi
+       fi
+       addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       generated="$generated $gentop"
+
+       func_extract_archives $gentop $addlibs
+       oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         oldobjs="$oldobjs $func_extract_archives_result"
+       fi
+
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             func_basename "$obj"
+             $ECHO "$func_basename_result"
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         $ECHO "copying selected object files to avoid basename conflicts..."
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+         func_mkdir_p "$gentop"
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           func_basename "$obj"
+           objbase="$func_basename_result"
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               func_arith $counter + 1
+               counter=$func_arith_result
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             oldobjs="$oldobjs $gentop/$newobj"
+             ;;
+           *) oldobjs="$oldobjs $obj" ;;
+           esac
+         done
+       fi
+       eval cmds=\"$old_archive_cmds\"
+
+       func_len " $cmds"
+       len=$func_len_result
+       if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         func_verbose "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+         oldobjs=
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         eval test_cmds=\"$old_archive_cmds\"
+         func_len " $test_cmds"
+         len0=$func_len_result
+         len=$len0
+         for obj in $save_oldobjs
+         do
+           func_len " $obj"
+           func_arith $len + $func_len_result
+           len=$func_arith_result
+           func_append objlist " $obj"
+           if test "$len" -lt "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj" ; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             objlist=
+             len=$len0
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test "X$oldobjs" = "X" ; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+       relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+       for installed in no yes; do
+         if test "$installed" = yes; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output="$output_objdir/$outputname"i
+           # Replace all uninstalled libtool libraries with the installed ones
+           newdependency_libs=
+           for deplib in $dependency_libs; do
+             case $deplib in
+             *.la)
+               func_basename "$deplib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$deplib' is not a valid libtool archive"
+               newdependency_libs="$newdependency_libs $libdir/$name"
+               ;;
+             *) newdependency_libs="$newdependency_libs $deplib" ;;
+             esac
+           done
+           dependency_libs="$newdependency_libs"
+           newdlfiles=
+
+           for lib in $dlfiles; do
+             case $lib in
+             *.la)
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlfiles="$newdlfiles $libdir/$name"
+               ;;
+             *) newdlfiles="$newdlfiles $lib" ;;
+             esac
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+             *.la)
+               # Only pass preopened files to the pseudo-archive (for
+               # eventual linking with the app. that links it) if we
+               # didn't already link the preopened objects directly into
+               # the library:
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlprefiles="$newdlprefiles $libdir/$name"
+               ;;
+             esac
+           done
+           dlprefiles="$newdlprefiles"
+         else
+           newdlfiles=
+           for lib in $dlfiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlfiles="$newdlfiles $abs"
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlprefiles="$newdlprefiles $abs"
+           done
+           dlprefiles="$newdlprefiles"
+         fi
+         $RM $output
+         # place dlname in correct position for cygwin
+         tdlname=$dlname
+         case $host,$output,$installed,$module,$dlname in
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+         esac
+         $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+         if test "$installed" = no && test "$need_relink" = yes; then
+           $ECHO >> $output "\
+relink_command=\"$relink_command\""
+         fi
+       done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) RM="$RM $arg"; rmforce=yes ;;
+      -*) RM="$RM $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+       objdir="$origobjdir"
+      else
+       objdir="$dir/$origobjdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+       case " $rmdirs " in
+         *" $objdir "*) ;;
+         *) rmdirs="$rmdirs $objdir" ;;
+       esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+        { test -h "$file"; } >/dev/null 2>&1 ||
+        test -f "$file"; then
+       :
+      elif test -d "$file"; then
+       exit_status=1
+       continue
+      elif test "$rmforce" = yes; then
+       continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if func_lalib_p "$file"; then
+         func_source $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           rmfiles="$rmfiles $objdir/$n"
+         done
+         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+         case "$mode" in
+         clean)
+           case "  $library_names " in
+           # "  " in the beginning catches empty $dlname
+           *" $dlname "*) ;;
+           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           esac
+           test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if func_lalib_p "$file"; then
+
+         # Read the .lo file
+         func_source $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" &&
+            test "$pic_object" != none; then
+           rmfiles="$rmfiles $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" &&
+            test "$non_pic_object" != none; then
+           rmfiles="$rmfiles $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test "$mode" = clean ; then
+         noexename=$name
+         case $file in
+         *.exe)
+           func_stripname '' '.exe' "$file"
+           file=$func_stripname_result
+           func_stripname '' '.exe' "$name"
+           noexename=$func_stripname_result
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           rmfiles="$rmfiles $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if func_ltwrapper_p "$file"; then
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             relink_command=
+             func_source $func_ltwrapper_scriptname_result
+             rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+           else
+             relink_command=
+             func_source $dir/$noexename
+           fi
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           if test "$fast_install" = yes && test -n "$relink_command"; then
+             rmfiles="$rmfiles $objdir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name" ; then
+             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..28055d2
--- /dev/null
+++ b/missing
@@ -0,0 +1,376 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 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, see <http://www.gnu.org/licenses/>.
+
+# 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.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -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
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  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
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar*)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  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 $msg.  You should only need it if
+         you modified \`${configure_ac}'.  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 $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  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_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         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$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te*)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison*|yacc*)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  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 test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f y.tab.h; then
+       echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex*|flex*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  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 test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f lex.yy.c; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit $?
+    fi
+    ;;
+
+  makeinfo*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  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."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+       /^@setfilename/{
+         s/.* \([^ ]*\) *$/\1/
+         p
+         q
+       }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar*)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case $firstarg in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case $firstarg in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         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 prerequisites 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
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755 (executable)
index 0000000..4191a45
--- /dev/null
@@ -0,0 +1,162 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2009-04-28.21; # UTC
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+IFS=" ""       $nl"
+errstatus=0
+dirmode=
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage"
+      exit $?
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --version)
+      echo "$0 $scriptversion"
+      exit $?
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error.  This is a problem when calling mkinstalldirs
+# from a parallel make.  We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+  '')
+    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    else
+      # On NextStep and OpenStep, the `mkdir' command does not
+      # recognize any option.  It will interpret all options as
+      # directories to create, and then abort because `.' already
+      # exists.
+      test -d ./-p && rmdir ./-p
+      test -d ./--version && rmdir ./--version
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+       test ! -d ./--version; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    else
+      # Clean up after NextStep and OpenStep mkdir.
+      for d in ./-m ./-p ./--version "./$dirmode";
+      do
+        test -d $d && rmdir $d
+      done
+    fi
+    ;;
+esac
+
+for file
+do
+  case $file in
+    /*) pathcomp=/ ;;
+    *)  pathcomp= ;;
+  esac
+  oIFS=$IFS
+  IFS=/
+  set fnord $file
+  shift
+  IFS=$oIFS
+
+  for d
+  do
+    test "x$d" = x && continue
+
+    pathcomp=$pathcomp$d
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+       errstatus=$lasterr
+      else
+       if test ! -z "$dirmode"; then
+         echo "chmod $dirmode $pathcomp"
+         lasterr=
+         chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+         if test ! -z "$lasterr"; then
+           errstatus=$lasterr
+         fi
+       fi
+      fi
+    fi
+
+    pathcomp=$pathcomp/
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644 (file)
index 0000000..3e3d59e
--- /dev/null
@@ -0,0 +1,23 @@
+# glabels translations
+#
+# please keep this list sorted alphabetically
+#
+ca
+cs
+da
+de
+eo
+es
+fr
+it
+ja
+ko
+nb
+pl
+pt
+pt_BR
+ru
+sl
+sv
+zh_CN
+zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..cc8a222
--- /dev/null
@@ -0,0 +1,217 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+# Copyright (C) 2004-2008 Rodney Dawes <dobey.pwns@gmail.com>
+#
+# This file may be copied and used freely without restrictions.  It may
+# be used in projects which are not available under a GNU Public License,
+# but which still want to provide support for the GNU gettext functionality.
+#
+# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
+#   instead of PACKAGE and to look for po2tbl in ./ not in intl/
+#
+# - Modified by jacob berkman <jacob@ximian.com> to install
+#   Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
+#
+# - Modified by Rodney Dawes <dobey.pwns@gmail.com> for use with intltool
+#
+# We have the following line for use by intltoolize:
+# INTLTOOL_MAKEFILE
+
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = @top_builddir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+datarootdir = @datarootdir@
+libdir = @libdir@
+DATADIRNAME = @DATADIRNAME@
+itlocaledir = $(prefix)/$(DATADIRNAME)/locale
+subdir = po
+install_sh = @install_sh@
+# Automake >= 1.8 provides @mkdir_p@.
+# Until it can be supposed, use the safe fallback:
+mkdir_p = $(install_sh) -d
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
+GENPOT   = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
+
+ALL_LINGUAS = @ALL_LINGUAS@
+
+PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi)
+
+USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi)
+
+USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done)
+
+POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done)
+
+DISTFILES = Makefile.in.in POTFILES.in $(POFILES)
+EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS
+
+POTFILES = \
+# This comment gets stripped out
+
+CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done)
+
+.SUFFIXES:
+.SUFFIXES: .po .pox .gmo .mo .msg .cat
+
+.po.pox:
+       $(MAKE) $(GETTEXT_PACKAGE).pot
+       $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox
+
+.po.mo:
+       $(MSGFMT) -o $@ $<
+
+.po.gmo:
+       file=`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: $(CATALOGS)
+all-no:
+
+$(GETTEXT_PACKAGE).pot: $(POTFILES)
+       $(GENPOT)
+
+install: install-data
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+       linguas="$(USE_LINGUAS)"; \
+       for lang in $$linguas; do \
+         dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \
+         $(mkdir_p) $$dir; \
+         if test -r $$lang.gmo; then \
+           $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+           echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \
+         else \
+           $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
+           echo "installing $(srcdir)/$$lang.gmo as" \
+                "$$dir/$(GETTEXT_PACKAGE).mo"; \
+         fi; \
+         if test -r $$lang.gmo.m; then \
+           $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \
+           echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \
+         else \
+           if test -r $(srcdir)/$$lang.gmo.m ; then \
+             $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \
+               $$dir/$(GETTEXT_PACKAGE).mo.m; \
+             echo "installing $(srcdir)/$$lang.gmo.m as" \
+                  "$$dir/$(GETTEXT_PACKAGE).mo.m"; \
+           else \
+             true; \
+           fi; \
+         fi; \
+       done
+
+# Empty stubs to satisfy archaic automake needs
+dvi info ctags tags CTAGS TAGS ID:
+
+# Define this as empty until I found a useful application.
+install-exec installcheck:
+
+uninstall:
+       linguas="$(USE_LINGUAS)"; \
+       for lang in $$linguas; do \
+         rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \
+         rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \
+       done
+
+check: all $(GETTEXT_PACKAGE).pot
+       rm -f missing notexist
+       srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m
+       if [ -r missing -o -r notexist ]; then \
+         exit 1; \
+       fi
+
+mostlyclean:
+       rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp
+       rm -f .intltool-merge-cache
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES stamp-it
+       rm -f *.mo *.msg *.cat *.cat.m *.gmo
+
+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 Makefile.in.in
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       extra_dists="$(EXTRA_DISTFILES)"; \
+       for file in $$extra_dists; do \
+         test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \
+       done; \
+       for file in $$dists; do \
+         test -f $$file || file="$(srcdir)/$$file"; \
+         ln $$file $(distdir) 2> /dev/null \
+           || cp -p $$file $(distdir); \
+       done
+
+update-po: Makefile
+       $(MAKE) $(GETTEXT_PACKAGE).pot
+       tmpdir=`pwd`; \
+       linguas="$(USE_LINGUAS)"; \
+       for lang in $$linguas; do \
+         echo "$$lang:"; \
+         result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \
+         if $$result; then \
+           if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+             rm -f $$tmpdir/$$lang.new.po; \
+            else \
+             if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+               :; \
+             else \
+               echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+               rm -f $$tmpdir/$$lang.new.po; \
+               exit 1; \
+             fi; \
+           fi; \
+         else \
+           echo "msgmerge for $$lang.gmo failed!"; \
+           rm -f $$tmpdir/$$lang.new.po; \
+         fi; \
+       done
+
+Makefile POTFILES: stamp-it
+       @if test ! -f $@; then \
+         rm -f stamp-it; \
+         $(MAKE) stamp-it; \
+       fi
+
+stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in
+       cd $(top_builddir) \
+         && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \
+              $(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/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..65db50a
--- /dev/null
@@ -0,0 +1,186 @@
+# List of source files containing translatable strings.
+
+src/glabels.c
+src/glabels-batch.c
+src/window.c
+src/window.h
+src/stock.c
+src/stock.h
+src/ui.h
+src/ui.c
+src/ui-property-bar.h
+src/ui-property-bar.c
+src/ui-sidebar.h
+src/ui-sidebar.c
+src/ui-util.h
+src/ui-util.c
+src/ui-commands.h
+src/ui-commands.c
+src/file.h
+src/file.c
+src/recent.h
+src/recent.c
+src/prefs.c
+src/prefs.h
+src/prefs-model.c
+src/prefs-model.h
+src/prefs-dialog.c
+src/prefs-dialog.h
+src/hig.h
+src/view.c
+src/view.h
+src/view-object.c
+src/view-object.h
+src/view-box.c
+src/view-box.h
+src/view-ellipse.c
+src/view-ellipse.h
+src/view-line.c
+src/view-line.h
+src/view-image.c
+src/view-image.h
+src/view-text.c
+src/view-text.h
+src/view-barcode.c
+src/view-barcode.h
+src/object-editor.c
+src/object-editor.h
+src/object-editor-private.h
+src/object-editor-bc-page.c
+src/object-editor-data-page.c
+src/object-editor-edit-page.c
+src/object-editor-fill-page.c
+src/object-editor-image-page.c
+src/object-editor-line-page.c
+src/object-editor-lsize-page.c
+src/object-editor-position-page.c
+src/object-editor-size-page.c
+src/object-editor-text-page.c
+src/merge-properties-dialog.c
+src/merge-properties-dialog.h
+src/print.c
+src/print.h
+src/print-op.c
+src/template-designer.c
+src/template-designer.h
+src/bc.c
+src/bc.h
+src/bc-gnubarcode.c
+src/bc-gnubarcode.h
+src/bc-postnet.c
+src/bc-postnet.h
+src/label.c
+src/label.h
+src/label-object.c
+src/label-object.h
+src/label-text.c
+src/label-text.h
+src/label-box.c
+src/label-box.h
+src/label-line.c
+src/label-line.h
+src/label-ellipse.c
+src/label-ellipse.h
+src/label-image.c
+src/label-image.h
+src/label-barcode.c
+src/label-barcode.h
+src/xml-label.c
+src/xml-label.h
+src/xml-label-04.c
+src/xml-label-04.h
+src/pixbuf-cache.c
+src/pixbuf-cache.h
+src/base64.c
+src/base64.h
+src/merge.c
+src/merge.h
+src/merge-init.c
+src/merge-init.h
+src/merge-text.c
+src/merge-text.h
+src/merge-evolution.c
+src/text-node.c
+src/text-node.h
+src/wdgt-print-copies.c
+src/wdgt-print-copies.h
+src/wdgt-print-merge.c
+src/wdgt-print-merge.h
+src/wdgt-media-select.c
+src/wdgt-media-select.h
+src/wdgt-mini-preview.c
+src/wdgt-mini-preview.h
+src/wdgt-rotate-label.c
+src/wdgt-rotate-label.h
+src/wdgt-chain-button.c
+src/wdgt-chain-button.h
+src/util.c
+src/util.h
+src/color.c
+src/color.h
+src/debug.c
+src/debug.h
+src/mygal/color-group.c
+src/mygal/color-group.h
+src/mygal/color-palette.c
+src/mygal/color-palette.h
+src/mygal/e-colors.c
+src/mygal/e-colors.h
+src/mygal/e-util.h
+src/mygal/mygal-combo-box.c
+src/mygal/mygal-combo-box.h
+src/mygal/widget-color-combo.c
+src/mygal/widget-color-combo.h
+src/critical-error-handler.c
+src/warning-handler.c
+
+libglabels/category.c
+libglabels/category.h
+libglabels/db.c
+libglabels/db.h
+libglabels/enums.h
+libglabels/libglabels.h
+libglabels/libglabels-private.h
+libglabels/paper.c
+libglabels/paper.h
+libglabels/str.c
+libglabels/str.h
+libglabels/template.c
+libglabels/template.h
+libglabels/xml.c
+libglabels/xml.h
+libglabels/xml-category.c
+libglabels/xml-category.h
+libglabels/xml-paper.c
+libglabels/xml-paper.h
+libglabels/xml-template.c
+libglabels/xml-template.h
+
+data/glade/merge-properties-dialog.glade
+data/glade/new-label-dialog.glade
+data/glade/object-editor.glade
+data/glade/prefs-dialog.glade
+data/glade/print-custom-widget.glade
+data/glade/property-bar.glade
+data/glade/template-designer.glade
+data/glade/wdgt-media-select.glade
+data/glade/wdgt-rotate-label.glade
+
+data/templates/paper-sizes.xml
+data/templates/categories.xml
+data/templates/avery-iso-templates.xml
+data/templates/avery-other-templates.xml
+data/templates/avery-us-templates.xml
+data/templates/brother-other-templates.xml
+data/templates/dymo-other-templates.xml
+data/templates/misc-iso-templates.xml
+data/templates/misc-other-templates.xml
+data/templates/misc-us-templates.xml
+data/templates/zweckform-iso-templates.xml
+
+data/desktop/glabels.desktop.in
+
+data/mime/glabels.keys.in
+data/mime/glabels.xml.in
+
+barcode-0.98/compat/getopt.c
diff --git a/po/ca.po b/po/ca.po
new file mode 100644 (file)
index 0000000..5812736
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,2714 @@
+# Catalan translations for glabels package
+# Traduccions al català del paquet «glabels».
+# Copyright (C) 2009 THE glabels'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the glabels package.
+# David Planella <david.planella@gmail.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels 2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-02-08 11:57+0100\n"
+"PO-Revision-Date: 2009-02-08 22:00+0100\n"
+"Last-Translator: David Planella <david.planella@gmail.com>\n"
+"Language-Team: Catalan <tradgnome@softcatala.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/glabels.c:75 ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[FITXER...]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- dissenyador d'etiquetes gLabels"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr ""
+"estableix el nom del fitxer de sortida (valor predeterminat = «output.pdf»)"
+
+#: ../src/glabels-batch.c:54 ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "nom de fitxer"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "nombre de fulls (valor predeterminat = 1"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "fulls"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "nombre de còpies (valor predeterminat = 1"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "còpies"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "la primera etiqueta al primer full"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "primer"
+
+#: ../src/glabels-batch.c:62 ../data/builder/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "imprimeix els contorns (per a comprovar l'alineació de la impressora)"
+
+#: ../src/glabels-batch.c:64 ../data/builder/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "imprimeix invertit (és a dir, com una imatge reflectida en un mirall)"
+
+#: ../src/glabels-batch.c:66 ../data/builder/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "imprimeix les marques de tall"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "fitxer d'entrada per a fusionar"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "- processa en lot fitxers d'etiqueta del gLabels"
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "no es realitzar la fusió del document amb el fitxer %s del gLabels\n"
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "no es pot obrir el fitxer del gLabels %s\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(cap) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(modificat)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "Mode de _selecció"
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Text"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "_Línia"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "_Quadre"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_El·lipse"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "_Imatge"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "_Codi de barres"
+
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "Propietats de la _fusió"
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "_Propietats de l'objecte"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "Porta al p_rimer pla"
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "Envia al _fons"
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "Gira a l'_esquerra"
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "Gira a la _dreta"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "Capgira _horitzontalment"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "Capgira _verticalment"
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "_Esquerres"
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "_Dretes"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "_Centres"
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "Parts _superiors"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "Parts inferiors"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "Centres"
+
+#: ../src/stock.c:93 ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "Ce_ntre de l'etiqueta"
+
+#: ../src/stock.c:95 ../data/builder/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "Color de l'emplenat"
+
+#: ../src/stock.c:96 ../data/builder/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Color de la línia"
+
+#: ../src/stock.c:97 ../src/stock.c:99
+msgid "Linked"
+msgstr "Enllaçat"
+
+#: ../src/stock.c:98 ../src/stock.c:100
+msgid "Not Linked"
+msgstr "Sense enllaçar"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Fitxer"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "Obre els fitxers _recents"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "_Edita"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Visualitza"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "Personalitza la barra d'eines principal"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "Personalitza la barra d'eines de dibuix"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Personalitza la barra d'eines de les propietats"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "_Objectes"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Crea"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "_Ordena"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "_Gira/Capgira"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "Alinea _horitzontalment"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "Alinea _verticalment"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "A_juda"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Menú contextual"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Nou"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Crea un fitxer nou"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Obre..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Obre un fitxer"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Desa"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Desa el fitxer actual"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "_Anomena i desa..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Desa el fitxer actual amb un nom diferent"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "_Imprimeix..."
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Imprimeix el fitxer actual"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Propietats..."
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Modifica les propietats del document"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "Dissen_yador de plantilles..."
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Crea una plantilla personalitzada"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "_Tanca"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Tanca el fitxer actual"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "_Surt"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Surt del programa"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Retalla"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Retalla la selecció"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Copia"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Copia la selecció"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Enganxa"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Enganxa el contingut del porta-retalls"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Suprimeix"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Suprimeix els objectes seleccionats"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "Selecciona-ho tot"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Selecciona tots els objectes"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "No seleccionis res"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Desfés totes les seleccions"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Preferències"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Configura l'aplicació"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Amplia"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Incrementa l'ampliació"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Redueix"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Redueix l'ampliació"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Amplia a 1:1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "Refés l'escala a 100 %"
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "Millor ajust"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "Estableix l'escala per a encabir-ho a la finestra"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "Mode de selecció"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "Seleccioneu, moveu i modifiqueu objectes"
+
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/builder/object-editor.glade.h:32
+msgid "Text"
+msgstr "Text"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Crea un objecte de text"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Quadre"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "Crea un objecte quadre/rectangle"
+
+#: ../src/ui.c:282 ../data/builder/object-editor.glade.h:20
+msgid "Line"
+msgstr "Línia"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "Crea un objecte línia"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "El·lipse"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "Crea un objecte el·lipse/cercle"
+
+#: ../src/ui.c:296 ../data/builder/object-editor.glade.h:16
+msgid "Image"
+msgstr "Imatge"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "Crea un objecte d'imatge"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Codi de barres"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "Crea un objecte de codi de barres"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "Porta al primer pla"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "Alça l'objecte fins al primer pla"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "Porta al fons"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "Baixa l'objecte fins al fons"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Gira a l'esquerra"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr ""
+"Gira l'objecte 90 graus en el sentit contrari a les agulles del rellotge"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Gira a la dreta"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "Gira l'objecte 90 graus en el sentit de les agulles del rellotge"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "Capgira horitzontalment"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "Capgira l'objecte horitzontalment"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "Capgira verticalment"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "Capgira l'objecte verticalment"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Alinea a l'esquerra"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "Alinea els objectes a les vores esquerres"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Alinea a la dreta"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "Alinea els objectes a les vores dretes"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "Alinea als centre horitzontals"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "Alinea els objectes als centres horitzontals"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "Alinea a les vores superiors"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "Alinea els objectes a les vores superiors"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "Alinea a les vores inferiors"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "Alinea els objectes a les vores inferiors"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "Alinea als centre verticals"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "Alinea els objectes als centres verticals"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "Centra horitzontalment"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "Centra els objectes al centre horitzontal de l'etiqueta"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "Centra verticalment"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "Centra els objectes al centre vertical de l'etiqueta"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "Propietats de fusió"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "Edita les propietats de fusió"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Contingut"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "Obre el manual del gLabels"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "Quant a..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "Quant al gLabels"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "Barra d'eines de les propietats"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr ""
+"Canvia la visibilitat de la barra d'eines de les propietats a la finestra "
+"actual"
+
+#: ../src/ui.c:444 ../src/ui.c:489 ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Mostra els indicadors de funció"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "Mostra els indicadors de funció a la barra de les propietats"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Graella"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr "Canvia la visibilitat de la graella a la finestra actual"
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "Marques"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Canvia la visibilitat de les línies de marca a la finestra actual"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "Barra d'eines principal"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr ""
+"Canvia la visibilitat de la barra d'eines principal a la finestra actual"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "Barra d'eines de dibuix"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr ""
+"Canvia la visibilitat de la barra d'eines de dibuix a la finestra actual"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Mostra els indicadors de funció a la barra principal"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "Mostra els indicadors de funció a la barra de dibuix"
+
+#: ../src/ui-property-bar.c:280 ../src/prefs-dialog.c:328
+#: ../src/object-editor-bc-page.c:93 ../src/object-editor-text-page.c:93
+#: ../src/object-editor-shadow-page.c:93
+msgid "Default"
+msgstr "Predeterminat"
+
+#: ../src/ui-property-bar.c:292 ../src/prefs-dialog.c:334
+#: ../src/object-editor-fill-page.c:79
+msgid "No Fill"
+msgstr "Sense emplenament"
+
+#: ../src/ui-property-bar.c:304 ../src/prefs-dialog.c:331
+#: ../src/object-editor-line-page.c:81
+msgid "No Line"
+msgstr "Sense línia"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Propietats de l'objecte"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "El gLabels inclou col·laboracions de:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Consulteu el fitxer AUTHORS per a veure els crèdits addicionals"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "o aneu a http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Un programa de creació d'etiquetes i de targetes de visita.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr "David Planella <david.planella@gmail.com>"
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"El gLabels és programari lliure; podeu redistribuir-lo i/o modificar-lo \n"
+"sota els termes de la Llicència Pública General GNU tal i com ha estat \n"
+"publicada per la Free Software Foundation; ja sigui la versió 2 de la \n"
+"Llicència o (si ho preferiu) qualsevol versió posterior.\n"
+"\n"
+"El gLabels es distribueix amb l'expectativa que serà útil, però SENSE \n"
+"CAP GARANTIA; fins i tot sense la garantia implícita de COMERCIABILITAT o \n"
+"ADEQUACIÓ PER A UN PROPÒSIT PARTICULAR.  Vegeu la Llicència Pública "
+"General \n"
+"GNU per a obtenir-ne més detalls.\n"
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "gLabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Etiqueta o targeta nova"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Propietats de l'etiqueta"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "Tots els fitxers"
+
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "Documents del gLabel"
+
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "Selecció d'un nom de fitxer buit"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr "Seleccioneu un fitxer o introduïu un nom de fitxer vàlid"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "El fitxer no existeix"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "No s'ha pogut obrir el fitxer «%s»"
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "No és un format de fitxer admès"
+
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "No s'ha pogut desar el fitxer «%s»"
+
+#: ../src/file.c:517 ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "S'ha produït un error en desar. El fitxer no s'ha desat encara."
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Desa «%s» com a"
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "Introduïu un nom de fitxer vàlid"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Voleu sobreescriure el fitxer «%s»?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "El fitxer ja existeix."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Voleu desar els canvis al document «%s» abans de tancar-lo?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "Es perdran els vostres canvis si no els deseu."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Tanca sense desar"
+
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/builder/object-editor.glade.h:43
+#: ../data/builder/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "punts"
+
+#: ../src/prefs.c:161 ../data/builder/object-editor.glade.h:42
+#: ../data/builder/template-designer.glade.h:64
+msgid "inches"
+msgstr "polzades"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "mm"
+
+#: ../src/prefs-dialog.c:167 ../data/builder/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "Preferències del gLabels"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "Propietats de l'objecte quadre"
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "Propietats de l'objecte el·lipse"
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "Propietats de l'objecte línia"
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "Propietats de l'objecte imatge"
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "Propietats de l'objecte text"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "Propietats de l'objecte codi de barres"
+
+#: ../src/object-editor-image-page.c:267
+msgid "All Files"
+msgstr "Tots els fitxers"
+
+#: ../src/object-editor-image-page.c:272
+msgid "All Images"
+msgstr "Totes les imatges"
+
+#: ../src/object-editor-image-page.c:287
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:271
+msgid "Merge Properties"
+msgstr "Propietats de la fusió"
+
+#: ../src/merge-properties-dialog.c:297 ../src/merge-properties-dialog.c:405
+msgid "Select merge-database source"
+msgstr "Seleccioneu la font de la base de dades de la fusió"
+
+#: ../src/merge-properties-dialog.c:306 ../src/merge-properties-dialog.c:425
+msgid "N/A"
+msgstr "No disponible"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Select"
+msgstr "Seleccionat"
+
+#: ../src/merge-properties-dialog.c:340
+msgid "Record/Field"
+msgstr "Registre/camp"
+
+#: ../src/merge-properties-dialog.c:348
+#: ../data/builder/object-editor.glade.h:10
+msgid "Data"
+msgstr "Dades"
+
+#: ../src/merge-properties-dialog.c:418
+msgid "Fixed"
+msgstr "Fixe"
+
+#. ===================================================================
+#: ../src/print-op.c:242 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Etiquetes"
+
+#: ../src/template-designer.c:411
+msgid "gLabels Template Designer"
+msgstr "Dissenyador de plantilles del gLabels"
+
+#: ../src/template-designer.c:481
+msgid "Welcome"
+msgstr "Us donem la benvinguda"
+
+#: ../src/template-designer.c:534
+msgid "Name and Description"
+msgstr "Nom i descripció"
+
+#: ../src/template-designer.c:595
+msgid "Page Size"
+msgstr "Mida de la pàgina"
+
+#: ../src/template-designer.c:675
+msgid "Label or Card Shape"
+msgstr "Forma de l'etiqueta o targeta"
+
+#: ../src/template-designer.c:735
+msgid "Label or Card Size"
+msgstr "Mida de l'etiqueta o targeta"
+
+#: ../src/template-designer.c:844
+msgid "Label Size (round)"
+msgstr "Mida de 'etiqueta (circular)"
+
+#: ../src/template-designer.c:935
+msgid "Label Size (CD/DVD)"
+msgstr "Mida de 'etiqueta (CD/DVD)"
+
+#: ../src/template-designer.c:1036
+msgid "Number of Layouts"
+msgstr "Nombre de disposicions"
+
+#: ../src/template-designer.c:1110
+msgid "Layout(s)"
+msgstr "Disposicions"
+
+#: ../src/template-designer.c:1229
+msgid "Design Completed"
+msgstr "S'ha completat el disseny"
+
+#: ../src/template-designer.c:1396
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+"<span foreground='red' weight='bold'>La marca i el número de model "
+"coincideixen amb un a plantilla existent</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (qualsevol)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (només codi postal ZIP)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (codi postal ZIP+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (qualsevol)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A o UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Codi 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Codi 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Codi 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Codi 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Interfoliat 2 de 5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Sense títol"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "Les dades del codi de barres estan buides"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Les dades del codi de barres no són vàlides"
+
+#: ../src/xml-label.c:189 ../src/xml-label.c:226
+msgid "xmlParseFile error"
+msgstr "Error de la funció xmlParseFile"
+
+#: ../src/xml-label.c:262
+msgid "No document root"
+msgstr "No hi ha cap arrel del document"
+
+#: ../src/xml-label.c:270
+msgid "Importing from glabels 0.1 format"
+msgstr "S'està important del format del gLabels 0.1"
+
+#: ../src/xml-label.c:279
+msgid "Importing from glabels 0.4 format"
+msgstr "S'està important del format del gLabels 0.4"
+
+#: ../src/xml-label.c:288
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "Espai de noms del gLabels desconegut -- s'utilitzarà el %s"
+
+#: ../src/xml-label.c:319 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Node arrel incorrecte = «%s»"
+
+#: ../src/xml-label.c:356
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "node incorrecte en el node Document = «%s»"
+
+#: ../src/xml-label.c:401 ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "node incorrecte = «%s»"
+
+#: ../src/xml-label.c:840
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "node incorrecte en el node Data (dades) = «%s»"
+
+#: ../src/xml-label.c:1077 ../libglabels/xml-template.c:670
+msgid "Utf8 conversion error."
+msgstr "Error de conversió a l'UTF-8"
+
+#: ../src/xml-label.c:1084
+msgid "Problem saving xml file."
+msgstr "S'ha produït un problema en desar el fitxer"
+
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "Cap"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Fitxer de text amb comes delimitadores (CSV)"
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "Fitxer de text amb dos punts delimitadors"
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "Fitxer de text amb tabulacions delimitadores"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Dades de la llibreta d'adreces predeterminada de l'Evolution"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "Dades d'un fitxer que conté VCards"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "No s'ha pogut crear la sol·licitud"
+
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "No s'ha pogut obrir la llibreta d'adreces"
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "No s'ha pogut mostrar la llista dels camps disponibles."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "No s'han pogut obtenir els contactes."
+
+#: ../src/color-combo.c:210
+msgid "Default Color"
+msgstr "Color predeterminat"
+
+#: ../src/color-combo-menu.c:86
+msgid "Dark Red"
+msgstr "Vermell fosc"
+
+#: ../src/color-combo-menu.c:87
+msgid "Brown"
+msgstr "Marró"
+
+#: ../src/color-combo-menu.c:88
+msgid "Dark Goldenrod"
+msgstr "Vara d'or (goldenrod) fosc"
+
+#: ../src/color-combo-menu.c:89
+msgid "Dark Green"
+msgstr "Verd fosc"
+
+#: ../src/color-combo-menu.c:90
+msgid "Dark Cyan"
+msgstr "Cyan fosc"
+
+#: ../src/color-combo-menu.c:91
+msgid "Navy Blue"
+msgstr "Blau ultramarí"
+
+#: ../src/color-combo-menu.c:92
+msgid "Dark Violet"
+msgstr "Violeta fosc"
+
+#: ../src/color-combo-menu.c:94
+msgid "Red"
+msgstr "Vermell"
+
+#: ../src/color-combo-menu.c:95
+msgid "Orange"
+msgstr "Taronja"
+
+#: ../src/color-combo-menu.c:96
+msgid "Dark Yellow"
+msgstr "Groc fosc"
+
+#: ../src/color-combo-menu.c:97
+msgid "Medium green"
+msgstr "Verd mitjà"
+
+#: ../src/color-combo-menu.c:98
+msgid "Turquoise"
+msgstr "Turquesa"
+
+#: ../src/color-combo-menu.c:99
+msgid "Blue"
+msgstr "Blau"
+
+#: ../src/color-combo-menu.c:100
+msgid "Purple"
+msgstr "Porpra"
+
+#: ../src/color-combo-menu.c:102
+msgid "Salmon"
+msgstr "Salmó"
+
+#: ../src/color-combo-menu.c:103
+msgid "Gold"
+msgstr "Daurat"
+
+#: ../src/color-combo-menu.c:104
+msgid "Yellow"
+msgstr "Groc"
+
+#: ../src/color-combo-menu.c:105
+msgid "Green"
+msgstr "Verd"
+
+#: ../src/color-combo-menu.c:106
+msgid "Cyan"
+msgstr "Cyan"
+
+#: ../src/color-combo-menu.c:107
+msgid "SkyBlue"
+msgstr "Blau cel"
+
+#: ../src/color-combo-menu.c:108
+msgid "Violet"
+msgstr "Violeta"
+
+#: ../src/color-combo-menu.c:110
+msgid "Pink"
+msgstr "Rosa"
+
+#: ../src/color-combo-menu.c:111
+msgid "Khaki"
+msgstr "Caqui"
+
+#: ../src/color-combo-menu.c:112
+msgid "Light Yellow"
+msgstr "Groc clar"
+
+#: ../src/color-combo-menu.c:113
+msgid "Light Green"
+msgstr "Verd clar"
+
+#: ../src/color-combo-menu.c:114
+msgid "Light Cyan"
+msgstr "Cyan clar"
+
+#: ../src/color-combo-menu.c:115
+msgid "Slate Gray"
+msgstr "Gris de pissarra"
+
+#: ../src/color-combo-menu.c:116
+msgid "Thistle"
+msgstr "Calcida"
+
+#: ../src/color-combo-menu.c:118
+msgid "White"
+msgstr "Blanc"
+
+#: ../src/color-combo-menu.c:119
+#, c-format
+msgid "10% Gray"
+msgstr "10% Gris"
+
+#: ../src/color-combo-menu.c:120
+#, c-format
+msgid "25% Gray"
+msgstr "25% Gris"
+
+#: ../src/color-combo-menu.c:121
+#, c-format
+msgid "40% Gray"
+msgstr "40% Gris"
+
+#: ../src/color-combo-menu.c:122
+#, c-format
+msgid "50% Gray"
+msgstr "50% Gris"
+
+#: ../src/color-combo-menu.c:123
+#, c-format
+msgid "60% Gray"
+msgstr "60% Gris"
+
+#: ../src/color-combo-menu.c:124
+msgid "Black"
+msgstr "Negre"
+
+#: ../src/color-combo-menu.c:252 ../src/color-combo-menu.c:369
+msgid "Custom Color"
+msgstr "Color personalitzat"
+
+#: ../src/color-combo-menu.c:317
+#, c-format
+msgid "Custom Color #%u"
+msgstr "Color personalitzat núm. %u"
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "Fulls:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "de:"
+
+#: ../src/wdgt-print-copies.c:179
+msgid "to:"
+msgstr "a:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "Comença a l'etiqueta"
+
+#: ../src/wdgt-print-merge.c:162
+msgid "on 1st sheet"
+msgstr "al primer full"
+
+#: ../src/wdgt-print-merge.c:171
+msgid "Copies:"
+msgstr "Còpies"
+
+#: ../src/wdgt-print-merge.c:177
+msgid "Collate"
+msgstr "Compagina"
+
+#: ../src/wdgt-media-select.c:290 ../src/wdgt-media-select.c:294
+#: ../src/wdgt-media-select.c:299 ../src/wdgt-media-select.c:308
+#: ../src/wdgt-media-select.c:311 ../src/wdgt-media-select.c:404
+#: ../src/wdgt-media-select.c:611 ../src/wdgt-media-select.c:620
+msgid "Any"
+msgstr "Qualsevol"
+
+#: ../src/wdgt-media-select.c:645
+#, c-format
+msgid "%d per sheet"
+msgstr "%d per full"
+
+#: ../src/wdgt-media-select.c:675
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:680
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:691 ../src/wdgt-media-select.c:705
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s de diàmetre"
+
+#: ../src/wdgt-media-select.c:695 ../src/wdgt-media-select.c:709
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s de diàmetre"
+
+#: ../src/wdgt-media-select.c:783
+msgid "No recent templates found."
+msgstr "No s'ha trobat cap plantilla recent."
+
+#: ../src/wdgt-media-select.c:784
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr ""
+"Proveu de seleccionar una plantilla de la pàgina «Cerca totes les plantilles»"
+
+#: ../src/wdgt-media-select.c:863
+msgid "No match."
+msgstr "No hi ha cap coincidència."
+
+#: ../src/wdgt-media-select.c:864
+msgid "Try selecting a different brand, page size or category."
+msgstr "Proveu de seleccionar una marca, mida de pàgina o categoria diferents."
+
+#: ../src/wdgt-rotate-label.c:129
+msgid "Normal"
+msgstr "Normal"
+
+#: ../src/wdgt-rotate-label.c:130
+msgid "Rotated"
+msgstr "Girat"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "S'ha produït un error fatal del gLabels"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "S'ha produït un error del gLabels"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "Una altra"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Definit per l'usuari"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"No s'han trobat les definicions de les mides de paper. Pot ser que la "
+"libglables no s'hagi instal·lat correctametn"
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"No s'han trobat les definicions de les categories. Pot ser que la libglables "
+"no s'hagi instal·lat correctametn"
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"No s'ha trobat cap plantilla. Pot ser que la libglables no s'hagi instal·lat "
+"correctametn"
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "Plantilla de pàgina completa %s genèrica"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "Manca el nom o bé els atributs de marca/model"
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr ""
+"Es desconeix l'identificador de mida de pàgina «%s»; s'intentarà com a nom"
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Es desconeix l'identificador de mida de pàgina o nom «%s»"
+
+#: ../libglabels/xml-template.c:615
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+"Manca l'atribut requerit «brand» (marca) o «part» (model), s'intentarà amb el "
+"nom desaconsellat."
+
+#: ../libglabels/xml-template.c:625
+msgid "Name attribute also missing."
+msgstr "També manca l'atribut del nom."
+
+#: ../data/builder/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>Selecció de registres/previsualització</b>"
+
+#: ../data/builder/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Font</b>"
+
+#: ../data/builder/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Format:"
+
+#: ../data/builder/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Ubicació:"
+
+#: ../data/builder/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Selecciona-ho tot"
+
+#: ../data/builder/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "No seleccionis res"
+
+#: ../data/builder/merge-properties-dialog.glade.h:7
+#: ../data/builder/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialog1"
+
+#: ../data/builder/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Orientació de l'etiqueta</b>"
+
+#: ../data/builder/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Tipus de suport</b>"
+
+#: ../data/builder/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/builder/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/builder/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"larger\">Propietats de l'objecte Xxx</span>"
+
+#: ../data/builder/object-editor.glade.h:5
+#: ../data/builder/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Alineació:"
+
+#: ../data/builder/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "Permet que la fusió encongeixi el text automàticament"
+
+#: ../data/builder/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Angle:"
+
+#: ../data/builder/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Suma de verificació"
+
+#: ../data/builder/object-editor.glade.h:9
+#: ../data/builder/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Color:"
+
+#: ../data/builder/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Habilita l'ombra"
+
+#: ../data/builder/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Família:"
+
+#: ../data/builder/object-editor.glade.h:13
+msgid "File:"
+msgstr "Fitxer:"
+
+#: ../data/builder/object-editor.glade.h:14
+msgid "Fill"
+msgstr "Emplenat"
+
+#: ../data/builder/object-editor.glade.h:15
+#: ../data/builder/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Alçada:"
+
+#: ../data/builder/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "Inseriu el camp de fusió"
+
+#: ../data/builder/object-editor.glade.h:18
+msgid "Key:"
+msgstr "Clau:"
+
+#: ../data/builder/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Llargada:"
+
+#: ../data/builder/object-editor.glade.h:21
+#: ../data/builder/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "Espaiat de línia:"
+
+#: ../data/builder/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "Literal:"
+
+#: ../data/builder/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Opacitat:"
+
+#: ../data/builder/object-editor.glade.h:24
+msgid "Position"
+msgstr "Posició"
+
+#: ../data/builder/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Reinicialitza la mida de la imatge"
+
+#: ../data/builder/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Seleccioneu un fitxer"
+
+#: ../data/builder/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Ombra"
+
+#: ../data/builder/object-editor.glade.h:28
+msgid "Size"
+msgstr "Mida"
+
+#: ../data/builder/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Mida:"
+
+#: ../data/builder/object-editor.glade.h:30
+msgid "Style"
+msgstr "Estil"
+
+#: ../data/builder/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Estil:"
+
+#: ../data/builder/object-editor.glade.h:33
+#: ../data/builder/prefs-dialog.glade.h:20
+#: ../data/builder/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Amplada:"
+
+#: ../data/builder/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "Desplaçament X:"
+
+#: ../data/builder/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/builder/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Desplaçament Y:"
+
+#: ../data/builder/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/builder/object-editor.glade.h:38
+msgid "degrees"
+msgstr "graus"
+
+#: ../data/builder/object-editor.glade.h:40
+msgid "digits:"
+msgstr "dígits:"
+
+#: ../data/builder/object-editor.glade.h:41
+msgid "format:"
+msgstr "format:"
+
+#: ../data/builder/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/builder/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Mida de pàgina predeterminada</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Emplenat</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Línia</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Text</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Unitats</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Tipus de lletra"
+
+#: ../data/builder/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "A4 de l'ISO"
+
+#: ../data/builder/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Polzades"
+
+#: ../data/builder/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "Localització"
+
+#: ../data/builder/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Mil·límetres"
+
+#: ../data/builder/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Valors predeterminats dels objectes"
+
+#: ../data/builder/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Punts"
+
+#: ../data/builder/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "Seleccioneu els valors predeterminats dels objectes nous"
+
+#: ../data/builder/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "Seleccioneu el comportament específic de la localització"
+
+#. Most popular (at top of list)
+#: ../data/builder/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "Carta EUA"
+
+#: ../data/builder/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Opcions</b>"
+
+#: ../data/builder/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>Control d'impressió (fusió)</b>"
+
+#: ../data/builder/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>Control d'impressió (simple)</b>"
+
+#: ../data/builder/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Negreta"
+
+#: ../data/builder/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Alineació al centre"
+
+#: ../data/builder/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Família del tipus de lletra"
+
+#: ../data/builder/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Mida del tipus de lletra"
+
+#: ../data/builder/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Cursiva"
+
+#: ../data/builder/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Alineació a l'esquerra"
+
+#: ../data/builder/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Amplada de la línia"
+
+#: ../data/builder/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Alineació a la dreta"
+
+#: ../data/builder/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Color del text"
+
+#: ../data/builder/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(p.ex. «Etiquetes de correu», «Targetes de visita», etc.)"
+
+#: ../data/builder/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(p.ex. 8163A)"
+
+#: ../data/builder/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(p.ex. Avery, Acme, ...)"
+
+#: ../data/builder/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Radi exterior:"
+
+#: ../data/builder/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Radi:"
+
+#: ../data/builder/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Amplada:"
+
+#: ../data/builder/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Alçada:"
+
+#: ../data/builder/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Radi interior:"
+
+#: ../data/builder/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Residu (es pot imprimir fora dels límits):"
+
+#: ../data/builder/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. Amplada de retallada:"
+
+#: ../data/builder/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Marge"
+
+#: ../data/builder/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Corba (radi de la cantonada):"
+
+#: ../data/builder/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. Alçada de retallada"
+
+#: ../data/builder/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "2. Residu horitz. (es pot imprimir fora dels límits):"
+
+#: ../data/builder/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. Residu vert. (es pot imprimir fora dels límits):"
+
+#: ../data/builder/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "2. Residu (es pot imprimir fora dels límits):"
+
+#: ../data/builder/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Marge"
+
+#: ../data/builder/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "Marca/fabricant:"
+
+#: ../data/builder/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (també s'hi inclouen els CD de mida de targeta de crèdit)"
+
+#: ../data/builder/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Enhorabona!\n"
+"\n"
+"Heu completat el dissenyador de plantilles del gLabels.\n"
+"Si voleu acceptar i desar el vostre disseny, premeu «Aplica».\n"
+"\n"
+"En cas contrari, podeu fer clic a «Cancel·la» per a abandonar-lo \n"
+"o a «Enrere» per a continuar-lo editant."
+
+#: ../data/builder/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Descripció:"
+
+#: ../data/builder/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "Distància des de la vora esquerra (x0):"
+
+#: ../data/builder/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "Distància des de la vora superior (y0):"
+
+#: ../data/builder/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "Separació horitzontal (dx):"
+
+#: ../data/builder/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"Quantes disposicions contindrà la vostra plantilla?\n"
+"\n"
+"Una disposició és un conjunt d'etiquetes o targetes que es poden disposar \n"
+"en una graella simple. La majoria de les plantilles només necessiten una \n"
+"disposició, com podeu veure en el primer exemple.\n"
+"El segon exemple mostra en quins casos en calen dues."
+
+#: ../data/builder/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Disposició n. 1"
+
+#: ../data/builder/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Disposició n. 2"
+
+#: ../data/builder/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "Nombre per amplada (nx):"
+
+#: ../data/builder/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "Nombre per alçada (ny):"
+
+#: ../data/builder/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Nombre de disposicions:"
+
+#: ../data/builder/template-designer.glade.h:42
+#: ../data/builder/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Mida de la pàgina:"
+
+#: ../data/builder/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "Núm. de model:"
+
+#: ../data/builder/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+"Introduïu la informació d'identificació següent sobre la papereria de la "
+"plantilla."
+
+#: ../data/builder/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "Introduïu la informació de disposició següent."
+
+#: ../data/builder/template-designer.glade.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+"Introduïu els paràmetres de mida següents d'una etiqueta única a la vostra "
+"plantilla."
+
+#: ../data/builder/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"Introduïu els paràmetres de mida següents d'una etiqueta única o targeta a "
+"la vostra plantilla"
+
+#: ../data/builder/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "Seleccioneu la forma bàsica de les etiquetes o targetes."
+
+#: ../data/builder/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "Seleccioneu la mida de la pàgina de la papereria de la plantilla."
+
+#: ../data/builder/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "Imprimeix un full de mostra"
+
+#: ../data/builder/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Rectangular o quadrada (pot tenir cantonades arrodonides)"
+
+#: ../data/builder/template-designer.glade.h:52
+msgid "Round"
+msgstr "Circular"
+
+#: ../data/builder/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"Plantilles que requereixen\n"
+"dues disposicions."
+
+#: ../data/builder/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"Plantilles que requereixen\n"
+"una disposició."
+
+#: ../data/builder/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "Separació vertical (dy):"
+
+#: ../data/builder/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Us donem la benvinguda al dissenyador de plantilles del gLabels.\n"
+"\n"
+"Aquest diàleg us ajudarà a crear una plantilla personalitzada del \n"
+"gLabels."
+
+#: ../data/builder/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "cd_size_page"
+
+#: ../data/builder/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "finish_page"
+
+#: ../data/builder/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "layout_page"
+
+#: ../data/builder/template-designer.glade.h:66
+msgid "name_page"
+msgstr "name_page"
+
+#: ../data/builder/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "nlayouts_page"
+
+#: ../data/builder/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "pg_size_page"
+
+#: ../data/builder/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "rect_size_page"
+
+#: ../data/builder/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "round_size_page"
+
+#: ../data/builder/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "shape_page"
+
+#: ../data/builder/template-designer.glade.h:72
+msgid "start_page"
+msgstr "start_page"
+
+#: ../data/builder/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "Marca:"
+
+#: ../data/builder/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Categoria:"
+
+#: ../data/builder/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Plantilles recents"
+
+#: ../data/builder/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Cerca totes les plantilles"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10 "
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "   "
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6 "
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "Executiu EUA"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "Legal EUA"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "Qualsevol targeta"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "Qualsevol etiqueta"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Targetes de visita"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD o un altre suport"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "Productes de correu/facturació"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Etiquetes rectangulars"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Etiquetes arrodonides"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "Etiquetes quadrades"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Etiquetes d'adreça"
+
+#. ===================================================================
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Targetes de visita"
+
+#. ===================================================================
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "Etiquetes de CD/DVD"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "Etiquetes de CD/DVD (etiquetes del disc)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Etiquetes de CD/DVD (etiquetes del llom)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:12
+#: ../data/templates/avery-iso-templates.xml.h:16
+msgid "Diskette Labels"
+msgstr "Etiquetes de disquet"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "Etiquetes divisòries"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "Etiquetes d'arxivador"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "Etiquetes de full complet"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "Etiquetes d'identificació"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "Targetes d'índex"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Etiquetes rodones grans"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "Etiquetes d'acreditació"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "Postals"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "Etiquetes d'adreça de retorn"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+msgid "Round Labels"
+msgstr "Etiquetes arroronides"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "Etiquetes de facturació"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Etiquetes rodones petites"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "Etiquetes quadrades"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr "Targetes doblegades"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "Etiquetes de caràtula de cinta de vídeo"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "Etiquetes de llom de cinta de vídeo"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Etiquetes d'adreça"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr "Etiquetes d'ús general"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "Llibret de CD"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "Coberta interior de CD"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "Etiquetes de disquet"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-us-templates.xml.h:18
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "Etiquetes de correu"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "Etiquetes de correu"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "Etiquetes d'adreça miniatura"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+msgid "Shipping labels"
+msgstr "Etiquetes de facturació"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "Etiquetes d'arxivador"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "Etiquetes d'ús general 17 mm x 54 mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Etiquetes de facturació 62 mm x 100 mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "Etiquetes d'adreça estàndard 29 mm x 90 mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "Disquet de 3.5\\\""
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "Arxivador"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr "Carpeta penjant d'arxiu"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "Etiquetes d'adreça grans"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "Etiquetes d'adreça de facturació"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "CD de targeta de visita"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "Rectangles de plantilla de CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "Etiquetes de CD/DVD (només la caràtula)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:12
+#: ../data/templates/misc-iso-templates.xml.h:18
+msgid "CD/DVD Labels (face only)"
+msgstr "Etiquetes de CD/DVD (només la caràtula)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "Etiquetes de casset"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "Etiquetes per a cintes DLT"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:20
+msgid "Microtube labels"
+msgstr "Etiquetes de microtubs"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Mini-CD Labels"
+msgstr "Etiquetes de CD miniatura"
+
+#: ../data/templates/misc-us-templates.xml.h:23
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "Etiquetes PRO CD (2, només el llom)"
+
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "Etiquetes PRO CD (2, només la caràtula)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:26
+#: ../data/templates/misc-iso-templates.xml.h:42
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "Etiquetes PRO CD (2, només la caràtula)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "Slimline CD Case (rightside up)"
+msgstr "Capsa de CD prima (cara amunt)"
+
+#: ../data/templates/misc-us-templates.xml.h:29
+msgid "Slimline CD Case (upside down)"
+msgstr "Capsa de CD prima (cara avall)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "Etiquetes d'ús general"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "Etiquetes d'arxivador"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr "Etiquetes d'arxivador (grans)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr "Etiquetes d'arxivador (petites)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "Etiquetes de CD"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "Etiquetes CD/DVD amb format estàndard (només la caràtula)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "Etiquetes de disquet (només la caràtula)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "Fotografies adhesives d'EPSON (16)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Etiquetes"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "Enganxines d'imant de frigorífic"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Etiquetes generals"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "Etiquetes per a impressió a raig de tinta/làser 70 x 37 mm"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr "Etiquetes de correu - 2 columnes"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr "Etiquetes de correu - 3 columnes"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Etiquetes rectangulars"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr "Etiquetes de vídeo (només la caràtula)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "Etiquetes d'ús general"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Etiqueted de correcció i cobertura"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr "Etiquetes de llom d'arxivador"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr "Etiquetes d'arxivador"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "Etiquetes d'ús general reenganxables «Stick+Lift»"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "Etiquetes de targeta QSL 70 mm x 50,8 mm"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr "Etiquetes de copiadora rectangulars"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "Etiquetes de vídeo (part posterior)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Crea etiquetes, targetes de visita i caràtules de suports multimèdia"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "Dissenyador d'etiquetes gLabels"
+
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "Fitxer de projecte del gLabels"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: l'opció «%s» és ambigua\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: l'opció «--%s» no admet cap argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: l'opció «%c%s» no permet cap argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: l'opció «%s» requereix un argumetn\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: no es reconeix l'opció «--%s»\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: no es reconeix l'opció «%c%s»\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: l'opció --%c no és vàlida\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: l'opció --%c no és vàlida\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: l'opció --%c requereix un argument\n"
+
+                
diff --git a/po/cs.po b/po/cs.po
new file mode 100644 (file)
index 0000000..83678d1
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,2746 @@
+# cs translation of Glabels.
+# Copyright (C) 2005, 2009 THE Glabels'S COPYRIGHT HOLDER.
+# This file is distributed under the same license as the Glabels package.
+# David Makovský (Yakeen) <yakeen@sannyas-on.net>, 2005.
+# Zbynek Mrkvicka <zbynek@oachot.cz>, 2005.
+# Marek Černocký <marek@manet.cz>, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Glabels 2.0.2\n"
+"Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=46122&ati\n"
+"POT-Creation-Date: 2010-03-21 17:13+0000\n"
+"PO-Revision-Date: 2010-03-20 11:12+0100\n"
+"Last-Translator: Marek Černocký <marek@manet.cz>\n"
+"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Poedit-Language: Czech\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../src/glabels.c:75 ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[SOUBOR…]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- návrhář etiket gLabels"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "nastavit název výstupního souboru  (výchozí=„output.ps“)"
+
+#: ../src/glabels-batch.c:54 ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "název souboru"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "počet stran (výchozí=1)"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "stran"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "počet kopií (výchozí = 1)"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "kopií"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "první etiketa na prvním listu (výchozí=1)"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "první"
+
+#: ../src/glabels-batch.c:62 ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "tisk obrysů (test zarovnávání tiskárny)"
+
+#: ../src/glabels-batch.c:64 ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "obrácený tisk (např. zrcadlený obrázek)"
+
+#: ../src/glabels-batch.c:66 ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "tisknout značky pro ořez"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "vstupní soubor pro slučování"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "- dávkové zpracování souborů s etiketami gLabels"
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "nelze provést slučování dokumentu se souborem aplikace gLabels %s\n"
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "nelze otevřít soubor aplikace gLabels %s\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(žádné) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(změněno)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "Režim _výběru"
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Text"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "Čár_a"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "O_bdélník"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_Elipsa"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "Obrá_zek"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "Čárový _kód"
+
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "Vlastnosti _slučování"
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "Vlastnosti _objektu"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "Přenést do_předu"
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "Přenést do_zadu"
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "Otočit do_leva"
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "Otočit do_prava"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "Překlopit _vodorovně"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "Překlopit _svisle"
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "Do_leva"
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "Dop_rava"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "Na_střed"
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "Na_horu"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "_Dolů"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "Nastřed"
+
+#: ../src/stock.c:93 ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "Stře_d etikety"
+
+#: ../src/stock.c:95 ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "Barva výplně"
+
+#: ../src/stock.c:96 ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Barva obrysu"
+
+#: ../src/stock.c:97 ../src/stock.c:99
+msgid "Linked"
+msgstr "Svázáno"
+
+#: ../src/stock.c:98 ../src/stock.c:100
+msgid "Not Linked"
+msgstr "Nesvázáno"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Soubor"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "Otevřít nedávné _soubory"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "_Upravit"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Zobrazit"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "Přizpůsobit hlavní panel"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "Přizpůsobit panel kreslení"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Přizpůsobit panel vlastností"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "_Objekty"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Vytvořit"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "_Pořadí"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "_Otočit/Překlopit"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "Zarovnat _vodorovně"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "Zarovnat _svisle"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "_Nápověda"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Kontextová nabídka"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Nový"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Vytvořit nový soubor"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Otevřít…"
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Otevřít soubor"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Uložit"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Uložit současný soubor"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "Uložit _jako…"
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Uložit současný soubor s jiným názvem"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "_Tisk…"
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Vytisknout současný soubor"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Vlastnosti…"
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Upravit vlastnosti dokumentu"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "Návrhář š_ablon…"
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Vytvořit vlastní šablonu"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "_Zavřít"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Zavřít současný soubor"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "U_končit"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Ukončit aplikaci"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Vyjmout"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Vyjmout výběr"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Kopírovat"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Kopírovat výběr"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Vložit"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Vložit ze schránky"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Smazat"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Smazat vybrané objekty"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "Vybrat vše"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Vybrat všechny objekty"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "Zrušit výběr"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Zrušit výběr všecho"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Předvolby"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Nastavit aplikaci"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Přiblížit"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Zvětšit přiblížení"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Oddálit"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Zmenšit přiblížení"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Přiblížení 1:1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "Obnovit měřítko na 100%"
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "Přizpůsobit velikosti"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "Přizpůsobit měřítko velikosti okna"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "Režim výběru"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "Výběr, přesun a úpravy objektů"
+
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "Text"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Vytvořit textový objekt"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Obdélník"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "Vytvořit čtverec/obdélník"
+
+#: ../src/ui.c:282 ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "Čára"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "Vytvořit čáru"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "Elipsa"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "Vytvořit elipsu/kruh"
+
+#: ../src/ui.c:296 ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "Obrázek"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "Vytvořit objekt s obrázkem"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Čárový kód"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "Vytvořit objekt s čárovým kódem"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "Přenést dopředu"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "Vyzvednout objekt nahoru"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "Přenést dozadu"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "Poslat objekt dozadu"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Otočit doleva"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr "Otočit objekt o 90° proti směru hodinových ručiček"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Otočit doprava"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "Otočit objekt o 90° po směru hodinových ručiček"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "Překlopit vodorovně"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "Překlopit objekt vodorovně"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "Překlopit svisle"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "Překlopit objekt svisle"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Zarovnat doleva"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "Zarovnat objekty levou hranou"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Zarovnat doprava"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "Zarovnat objekty pravou hranou"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "Zarovnat vodorovně na střed"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "Zarovnat objekty vodorovně na střed"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "Zarovnat nahoru"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "Zarovnat objekty horní hranou"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "Zarovnat dolů"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "Zarovnat objekty dolní hranou"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "Zarovnat svisle na střed"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "Zarovnat objekty svisle na střed"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "Vystředit vodorovně"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "Vystředit objekty vodorovně na střed etikety"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "Vystředit  svisle"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "Vystředit  objekty svisle na střed etikety"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "Vlastnosti slučování"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "Upravit vlastnosti slučování"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Obsah"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "Otevřít příručku gLabels"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "O aplikaci…"
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "O aplikaci gLabels"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "Panel vlastností"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "Změnit zobrazení panelu vlastností v současném okně"
+
+#: ../src/ui.c:444 ../src/ui.c:489 ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Zobrazovat tipy"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "Zobrazovat tipy v panelu vlastností"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Mřížka"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr "Změnit zobrazení mřížky v současném okně"
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "Ohraničení"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Změnit zobrazení hraničních čar v současném okně"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "Hlavní panel"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Změnit zobrazení hlavního panelu nástrojů v současném okně"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "Panel kreslení"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "Změnit zobrazení panelu kreslení v současném okně"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Zobrazovat tipy v hlavním panelu"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "Zobrazovat tipy v panelu kreslení"
+
+#: ../src/ui-property-bar.c:1232 ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "Výchozí"
+
+#: ../src/ui-property-bar.c:1239 ../src/object-editor.c:599
+msgid "No line"
+msgstr "Bez obrysu"
+
+#: ../src/ui-property-bar.c:1247 ../src/object-editor.c:606
+msgid "No fill"
+msgstr "Bez výplně"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Vlastnosti objektu"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "Aplikace gLabels obsahuje příspěvky od:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Doplňující informace o zásluhách najdete v souboru AUTHORS,"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "nebo navštivte http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Program na vytváření etiket a vizitek.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr ""
+"David Makovský <yakeen@sannyas-on.net>\n"
+"Zbyněk Mrkvička <zbynek@oachot.cz>\n"
+"Marek Černocký <marek@manet.cz>"
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"Aplikace gLabels je svobodný software: Můžete jej dále šířit a/nebo "
+"upravovat za podmínek licence GNU General Public License v podobě, v jaké ji "
+"vydala Free Software Foundation, a to buď ve verzi 2 této licence nebo (dle "
+"vaší volby) v libovolné novější verzi.\n"
+"\n"
+"Tento program je šířen ve víře, že bude užitečný, ale BEZ JAKÝCHKOLIV ZÁRUK, "
+"a to i bez předpokládané záruky na PRODEJNOST nebo VHODNOST PRO KONKRÉTNÍ "
+"ÚČEL. Více podrobností najdete přímo v licenci GNU General Public License.\n"
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "glabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Nová etiketa či vizitka"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Vlastnosti etikety"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "Všechny soubory"
+
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "Dokumenty gLabels"
+
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "Prázdné pole s názvem souboru"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr "Vyberte, prosím, soubor, nebo zadejte platný název souboru"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "Soubor neexistuje"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Nelze otevřít soubor „%s“"
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "Formát tohoto souboru není podporován"
+
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Nelze uložit soubor „%s“"
+
+#: ../src/file.c:517 ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "Při ukládání se vyskytla chyba. Soubor nebyl uložen."
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Uložit „%s“ jako"
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "Zadejte prosím platný název souboru"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Přepsat soubor „%s“?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "Soubor již existuje."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Uložit před zavřením změny v dokumentu „%s“?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "Vaše změny budou ztraceny, pokud je neuložíte."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Zavřít bez uložení"
+
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "body"
+
+#: ../src/prefs.c:161 ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "palce"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "mm"
+
+#: ../src/prefs-dialog.c:162 ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "Předvolby gLabels"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "Vlastnosti obdélníku"
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "Vlastnosti elipsy"
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "Vlastnosti čáry"
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "Vlastnosti obrázku"
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "Vlastnosti textu"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "Vlastnosti čárového kódu"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "Všechny soubory"
+
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "Všechny obrázky"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr "Vlastnosti slučování"
+
+#: ../src/merge-properties-dialog.c:289 ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr "Výběr databázového zdroje pro slučování"
+
+#: ../src/merge-properties-dialog.c:298 ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr "Neurčeno"
+
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "Výběr"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr "Záznam/Pole"
+
+#: ../src/merge-properties-dialog.c:340 ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "Data"
+
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr "Napevno"
+
+#. ===================================================================
+#: ../src/print-op.c:237 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Etikety"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "Návrhář šablon gLabels"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "Vítejte"
+
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "Název a popis"
+
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "Velikost stránky"
+
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "Tvar etikety či vizitky"
+
+#: ../src/template-designer.c:637
+msgid "Label or Card Size"
+msgstr "Velikost etikety či vizitky"
+
+#: ../src/template-designer.c:737
+msgid "Label Size (round)"
+msgstr "Velikost etikety (oválná)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "Velikost etikety (CD/DVD)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "Počet rozvržení"
+
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "Rozvržení"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr "Návrh byl dokončen"
+
+#: ../src/template-designer.c:1253
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+"<span foreground='red' weight='bold'>Značka a produktové číslo odpovídají "
+"již existující šabloně!</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (jakýkoli)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (pouze PSČ)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (PSČ+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (jakýkoli)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A nebo UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Code 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Code 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Prokládaný 2 z 5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Nepojmenovaný"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "Data pro čárový kód jsou prázdná"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Data pro čárový kód jsou neplatná"
+
+#: ../src/xml-label.c:193
+msgid "xmlParseFile error"
+msgstr "chyba xmlParseFile"
+
+#: ../src/xml-label.c:234
+msgid "xmlParseDoc error"
+msgstr "chyba xmlParseDoc"
+
+#: ../src/xml-label.c:270
+msgid "No document root"
+msgstr "Schází kořen dokumentu"
+
+#: ../src/xml-label.c:278
+msgid "Importing from glabels 0.1 format"
+msgstr "Importuje se z formátu glabels verze 0.1"
+
+#: ../src/xml-label.c:287
+msgid "Importing from glabels 0.4 format"
+msgstr "Importuje se z formátu glabels verze 0.4"
+
+#: ../src/xml-label.c:296
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "Neznámý jmenný prostor pro gLabels -- použije se %s"
+
+#: ../src/xml-label.c:327 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Neplatný kořenový uzel = „%s“"
+
+#: ../src/xml-label.c:364
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "neplatný uzel v uzlu Document = „%s“"
+
+#: ../src/xml-label.c:409 ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "neplatný uzel = „%s“"
+
+#: ../src/xml-label.c:851
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "neplatný uzel v uzlu Data = „%s“"
+
+#: ../src/xml-label.c:1088 ../libglabels/xml-template.c:682
+msgid "Utf8 conversion error."
+msgstr "Chyba při převodu UTF-8"
+
+#: ../src/xml-label.c:1095
+msgid "Problem saving xml file."
+msgstr "Problém při ukládání do souboru xml."
+
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "Žádný"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Textový soubor se sloupci oddělenými čárkami (CSV)"
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "Textový soubor se sloupci oddělenými dvojtečkami"
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "Textový soubor se sloupci oddělenými tabulátory"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Data z výchozího adresáře Evolution"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "Data ze souboru obsahujícího kontakty ve formátu VCards"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "Nelze sestavit dotaz"
+
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "Nelze otevřít adresář."
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "Nelze vytvořit seznam dostupných polí."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "Nelze získat kontakt."
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "Stránky:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "od:"
+
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "do:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "Začít na etiketě"
+
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr "na první stránce"
+
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "Kopie:"
+
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "Seřadit"
+
+#: ../src/wdgt-media-select.c:288 ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297 ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309 ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609 ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "Libovolná"
+
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d na stránku"
+
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s × %s %s"
+
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g × %.5g %s"
+
+#: ../src/wdgt-media-select.c:689 ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "průměr %s %s"
+
+#: ../src/wdgt-media-select.c:693 ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "průměr %.5g %s"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "Nenalezeny žádné nedávno použité šablony."
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr "Zkuste vybrat šablonu na kartě „Vyhledat ve všech šablonách“."
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr "Žádná neodpovídá."
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr "Zkuste vybrat jinou značku, velikost stránky nebo kategorii."
+
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "vlastní"
+
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "Vlastní barva"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "Vyberte vlastní barvu"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "černá"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "světle hnědá"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr "zlatohnědá"
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "tmavě zelená č. 2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "námořnická modř"
+
+#: ../src/mygal/color-palette.c:577 ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "tmavě modrá"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "purpurová č. 2"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "velmi tmavě šedá"
+
+#: ../src/mygal/color-palette.c:582 ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "tmavě červená"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "červenooranžová"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "zlatá"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "tmavě zelená"
+
+#: ../src/mygal/color-palette.c:586 ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr "matná modrá"
+
+#: ../src/mygal/color-palette.c:587 ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "modrá"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr "matná purpurová"
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "tmavě šedá"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "červená"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "oranžová"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "citrónová"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr "matná zelená"
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr "matná modrá č. 2"
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "nebeská modř č. 2"
+
+#: ../src/mygal/color-palette.c:598 ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "purpurová"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "šedá"
+
+#: ../src/mygal/color-palette.c:602 ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "fialová"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "jasně oranžová"
+
+#: ../src/mygal/color-palette.c:604 ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "žludá"
+
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "zelená"
+
+#: ../src/mygal/color-palette.c:606 ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "azurová"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "jasně modrá"
+
+#: ../src/mygal/color-palette.c:608 ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "červenofialová"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "světle šedá"
+
+#: ../src/mygal/color-palette.c:612 ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "růžová"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "světle oranžová"
+
+#: ../src/mygal/color-palette.c:614 ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "světle žlutá"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "světle zelená"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "světle azurová"
+
+#: ../src/mygal/color-palette.c:617 ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "světle modrá"
+
+#: ../src/mygal/color-palette.c:618 ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "světle purpurová"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "bílá"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr "fialovomodrá"
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "tmavě purpurová"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "nebeská modř"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "Kritická chyba aplikace gLabels!"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "Chyba aplikace gLabels!"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "Jiné"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Definované uživatelem"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Nelze najít definice velikostí papíru. Možná není správně nainstalovaná "
+"knihovna libglabels!"
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Nelze najít definice kategorií. Možná není správně nainstalovaná knihovna "
+"libglabels!"
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Nelze najít žádný soubor s šablonou. Možná není správně nainstalovaná "
+"knihovna libglabels!"
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "Obecná šablona na celou stranu %s"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "Schází atributy název nebo značka/produkt."
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "Neznámé ID velikosti papíru „%s“, zkusí se použít jako název"
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Neznámé ID nebo název velikosti stránky „%s“"
+
+#: ../libglabels/xml-template.c:627
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+"Schází vyžadované atributy „značka“ nebo „produkt“, zkouší se použít "
+"nepřípustný název."
+
+#: ../libglabels/xml-template.c:637
+msgid "Name attribute also missing."
+msgstr "Schází také název atributu."
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>Výběr/náhled záznamu</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Zdroj</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Formát:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Umístění:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Vybrat vše"
+
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "Zrušit výběr"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialog1"
+
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Orientace etikety</b>"
+
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Typ média</b>"
+
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Vlastnosti objektu xxx</span>"
+
+#: ../data/glade/object-editor.glade.h:5 ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Zarovnání:"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "Při slučování povolit automatické zúžení textu"
+
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Úhel:"
+
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Kontrolní součet"
+
+#: ../data/glade/object-editor.glade.h:9 ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Barva:"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Zapnout stín"
+
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Rodina:"
+
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "Soubor:"
+
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr "Výplň"
+
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Výška:"
+
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "Vložit pole pro slučování"
+
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr "Klíč:"
+
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Délka:"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "Řádkování:"
+
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "Znaky:"
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Krytí:"
+
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "Pozice"
+
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Původní velikost obrázku"
+
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Výběr souboru"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Stín"
+
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "Velikost"
+
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Velikost:"
+
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "Styl"
+
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Styl:"
+
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Šířka:"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "Posun X:"
+
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Posun Y:"
+
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "stupně"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr "číslic:"
+
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "formát:"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Výchozí velikost stránky</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Výplň</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Obrys</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Text</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Jednotky</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Písmo:"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Palce"
+
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "Národní prostředí"
+
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Milimetry"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Výchozí hodnoty objektu"
+
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Body"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "Vyberte výchozí vlastnosti pro nové objekty."
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "Vyberte specifické chování pro národní prostředí."
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "US Letter"
+
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Volby</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>Ovládání tisku (slučování)</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>Ovládání tisku (jednoduchý)</b>"
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Tučně"
+
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Na střed"
+
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Rodina písma"
+
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Velikost písma"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Kurzíva"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Zarovnání vlevo"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Tloušťka obrysu"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Zarovnání vpravo"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Barva textu"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "Barva textu"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(např. „Adresní štítky“, „Vizitky“, …)"
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(např. 8163A)"
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(např. Avery, Acme, …)"
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Vnější poloměr:"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Poloměr:"
+
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Šířka:"
+
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Výška:"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Vnitřní poloměr:"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Odsazení (umožňuje přetisk):"
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. Šířka oříznutí:"
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Okraj"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Zaoblení (poloměr rohu):"
+
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. Výška oříznutí:"
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. Vodorovné odsazení (umožňuje přetisk):"
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. Svislé odsazení (umožňuje přetisk):"
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "5. Odsazení (umožňuje přetisk):"
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Okraj"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "Značka/Výrobce:"
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (včetně vizitkových CD)"
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Gratulujeme!\n"
+"\n"
+"Dokončili jste návrh šablony gLabels.\n"
+"Pokud si přejete návrh přijmout a uložit, klikněte na „Použít“.\n"
+"\n"
+"V opačném případě klikněte na „Zrušit“ pro zahození návrhu\n"
+"nebo na „Zpět“ pro další úpravy tohoto návrhu."
+
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Popis:"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "Vzdálenost od levého okraje (x0):"
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "Vzdálenost od horního okraje (y0):"
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "Vodorovná rozteč (dx):"
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"Kolik rozvržení obsahuje vaše šablona? \n"
+"\n"
+"Rozvržení je sada etiket nebo vizitek, které mohou být uspořádány na\n"
+"jednoduché mřížce. Většina šablon potřebuje jedno rozvržení jako v\n"
+"prvním příkladu. Druhý příklad ilustruje dvě rozvržení."
+
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Rozvržení č. 1"
+
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Rozvržení č. 2"
+
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "Počet napříč (nx):"
+
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "Počet svisle (ny):"
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Počet rozvržení:"
+
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Velikost stránky:"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "Produktové číslo:"
+
+#: ../data/glade/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+"Vyplňte, prosím, následující identifikační informace o papíru pro šablonu."
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "Vyplňte, prosím, následující informaci o rozvržení."
+
+#: ../data/glade/template-designer.glade.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+"Vyplňte, prosím, následující parametry velikosti jedné etikety ve vaší "
+"šabloně."
+
+#: ../data/glade/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"Vyplňte, prosím, následující parametry velikosti jedné etikety nebo vizitky "
+"ve vaší šabloně."
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "Vyberte, prosím, základní tvar etiket nebo vizitek."
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "Vyberte, prosím, velikost stránky papíru pro šablonu."
+
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "Vytisknout testovací stránku"
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Obdélníkový nebo čtvercový (může mít zaoblené rohy)"
+
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "Oválný"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"Šablony, které potřebují\n"
+"dvě rozvržení."
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"Šablony, které potřebují\n"
+"jedno rozvržení."
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "Svislá rozteč (dy):"
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Vítejte v návrháři šablon aplikace gLabels.\n"
+"\n"
+"Tento dialog vám pomůže při vytváření vlastní šablony gLabels."
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "karta_velikost_cd"
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "karta_dokončení"
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "karta_rozvržení"
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr "karta_název"
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "karta_počet_rozvržení"
+
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "karta_velikost_strany"
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "karta_velikost_obdélníku"
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "karta_velikost_ovalu"
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "karta_tvar"
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr "karta_úvod"
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "Značka:"
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Kategorie:"
+
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Nedávno použité šablony"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Vyhledat ve všech šablonách"
+
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "Otočit"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "US Executive"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "US Legal"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "Libovolná karta"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "Libovolná etiketa"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Vizitky"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD nebo jiná média"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "Poštovní/přepravní produkty"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Obdélníkové etikety"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Oválné etikety"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "Čtvercové etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Adresní etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Adresní etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr "Univerzální etikety"
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Vizitky"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "Přebal CD"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "Vsuvky do krabičky na CD"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "Etikety na CD/DVD"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr "Etikety na diskety"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "Etikety na diskety"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:20
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "Poštovní etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "Poštovní etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "Mini adresní etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+msgid "Mini Labels"
+msgstr "Mini etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "Přepravní etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "Etikety na složky"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "Etikety na CD/DVD (diskové etikety)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Etikety na CD/DVD (hřbetní etikety)"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "Rozdělovací etikety na karty"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "Etikety na kartotéky"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "Celostránkové etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "Identifikační etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "Indexové karty"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Velké oválné etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "Etikety na jmenovky"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "Pohlednice"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "Zpáteční adresa"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Round Labels"
+msgstr "Oválné etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "Dopravní etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Malé oválné etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "Čtvercové etikety"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr "Přáníčka"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "Etikety na čelní stranu videokazety"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "Etikety na hřbet videokazet"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "Víceúčelové etikety 17×54 mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Přepravní etikety 62×100 mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "Standardní adresní etikety 29×90 mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "3,5ʺ disketa"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "Kancelářská složka"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr "Závěsná složka"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "Velké adresní etikety"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "Přepravní adresní etikety"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "Univerzální etikety"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "Etikety na pořadače"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr "Etikety na pořadače (velké)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr "Etikety na pořadače (malé)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "Etikety na CD"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr "Etikety na CD/DVD (pouze předek)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "Etikety standardního formátu na CD/DVD (pouze předek)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "Etikety na diskety (pouze předek)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "Samolepky EPSON Photo Stickers 16"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Etikety"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "Reklamní magnetky na ledničku"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Obecné etikety"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "Etikety na inkoustový/laserový tisk 70×37 mm"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr "Poštovní etikety - 2 sloupce"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr "Poštovní etikety - 3 sloupce"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "PRO CD Labels 2-up (pouze povrch)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Obdélníkové etikety"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Universal Labels"
+msgstr "Univerzální etikety"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:48
+msgid "Video Labels (face only)"
+msgstr "Etikety na videokazety (pouze předek)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "Víceúčelové etikety"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "Vizitkové CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "Obdélníkové šablony na CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "Etikety na CD/DVD (pouze povrch)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "Etikety na kazety"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "Etikety na pásky DLT"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:18
+msgid "Jewel Case Booklet"
+msgstr "Přebal do krabičky na CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Microtube labels"
+msgstr "Etikety na zkumavky"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "Mini-CD Labels"
+msgstr "Etikety na Mini-CD"
+
+#: ../data/templates/misc-us-templates.xml.h:25
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "PRO CD Labels 2-up (pouze hřbet)"
+
+#: ../data/templates/misc-us-templates.xml.h:26
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "PRO CD Labels 2-up (pouze povrch)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:32
+msgid "Slimline CD Case (rightside up)"
+msgstr "Tenká krabička na CD (pravá strana)"
+
+#: ../data/templates/misc-us-templates.xml.h:33
+msgid "Slimline CD Case (upside down)"
+msgstr "Tenká krabička na CD (horní strana)"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Opravné a přelepovací etikety"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr "Etikety do diáře"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr "Etikety na pákové pořadače"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "Víceúčelové odnímatelné etikety"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "Etikety na QSL karty 70mm × 50,8mm"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr "Obdélníkové etikety do kopírky"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "Video etikety (zadní strana)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Vytvářejte etikety, vizitky a obaly médií"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "Návrhář etiket gLabels"
+
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "Projektový soubor gLabels"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: přepínač „%s“ je nejednoznačný\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: přepínač „--%s“ neumožňuje argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: přepínač „%c%s“ neumožňuje argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: přepínač „-%s“ vyžaduje argument\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nerozpoznaný přepínač „--%s“\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nerozpoznaný přepínač „%c%s“\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: nedovolený přepínač -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: neplatný přepínač -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: přepínač vyžaduje argument -- %c\n"
+
diff --git a/po/da.po b/po/da.po
new file mode 100644 (file)
index 0000000..bea2e2d
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,2766 @@
+# Danish translation for glabels.
+# Copyright (C) 2010 glabels's COPYRIGHT HOLDER.
+# This file is distributed under the same license as the glabels package.
+# Joe Hansen (joedalton2@yahoo.dk), 2010.
+#
+# https://sourceforge.net/tracker/?func=detail&aid=2955732&group_id=46122&atid=445116
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels glabels_2_2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-02-23 22:54+0100\n"
+"PO-Revision-Date: 2010-02-20 14:52+0000\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/glabels.c:75 ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[FIL...]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- glabels etiketdesigner"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "angiv filnavn for uddata (standard=output.pdf)"
+
+#: ../src/glabels-batch.c:54 ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "filnavn"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "antal ark (ark=1)"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "ark"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "antal kopier (standard=1)"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "kopier"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "første etiket på første ark (standard=1)"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "første"
+
+#: ../src/glabels-batch.c:62 ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "udskriv omkreds (for at teste printeropsætning)"
+
+#: ../src/glabels-batch.c:64 ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "udskriv omvendt (det vil sige et spejlbillede)"
+
+# tilføjet af joe: crop marks: Marks that show where a publication page will be trimmed
+#: ../src/glabels-batch.c:66 ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "udskriv beskæringsmærker"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "inddatafil for sammenflet"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "- kør gLabels' etiketfiler i skriptproces"
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "kan ikke udføre dokumentsammenfletning med glabelsfil %s\n"
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "kan ikke åbne glabelsfil %s\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(ingen) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(ændret)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "_Vælg tilstand"
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Tekst"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "_Linje"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "_Boks"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_Ellipse"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "_Billede"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "Streg_kode"
+
+# eller flet egenskaber
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "_Sammenføj egenskaber"
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "Objekt_egenskaber"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "Hent _frem"
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "Send til_bage"
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "Roter til _venstre"
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "Roter til _højre"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "Vend _vandret"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "Vend _lodret"
+
+# godt nok i tvivl her
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "_Venstredrejninger"
+
+# godt nok i tvivl her
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "_Højredrejninger"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "_Centrum"
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "_Øverste"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "Nederste kanter"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "Centrum"
+
+#: ../src/stock.c:93 ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "Etiketce_ntrum"
+
+#: ../src/stock.c:95 ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "Fyld farve"
+
+#: ../src/stock.c:96 ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Linjefarve"
+
+#: ../src/stock.c:97 ../src/stock.c:99
+msgid "Linked"
+msgstr "Forbundet"
+
+#: ../src/stock.c:98 ../src/stock.c:100
+msgid "Not Linked"
+msgstr "Ikke forbundet"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Fil"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "Åbn seneste _filer"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "_Rediger"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Vis"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "Tilpas hovedværktøjsbjælke"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "Tilpas tegneværktøjsbjælke"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Tilpas værktøjsbjælke for egenskaber"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "_Objekter"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Opret"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "_Orden"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "_Roter/vend"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "Juster _vandret"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "Juster _lodret"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "_Hjælp"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Kontekstmenu"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Ny"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Opret en ny fil"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Åbn..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Åbn en fil"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Gem"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Gem aktuel fil"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "Gem _som..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Gem den aktuelle fil med et andet navn"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "_Udskriv..."
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Udskriv den aktuelle fil"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Egenskaber..."
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Ændre dokumentegenskaber"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "Skabelon_designer..."
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Opret en tilpasset skabelon"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "_Luk"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Luk den nuværende fil"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "_Afslut"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Afslut programmet"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Klip"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Klip markeringen ud"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Kopier"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Kopier markeringen"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Indsæt"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Indsæt fra udklipsholderen"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Slet"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Slet de valgte objekter"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "Vælg alle"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Vælg alle objekter"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "Fravælg alle"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Fjern alle markeringer"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Indstillinger"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Konfigurere programmet"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Zoom ind"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Øg forstørrelse"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Zoom ud"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Formindsk forstørrelse"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Zoom 1 til 1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "Gendan skala til 100 %"
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "Zoomtilpasning"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "Angiv skala der passer til vinduet"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "Vælg tilstand"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "Vælg, flyt eller ændre objekter"
+
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "Tekst"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Opret tekstobjekt"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Boks"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "Opret boks-/rektangelobjekt"
+
+#: ../src/ui.c:282 ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "Linje"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "Opret linjeobjekt"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "Ellipse"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "Opret ellipse-/cirkelobjekt"
+
+#: ../src/ui.c:296 ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "Billede"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "Opret billedeobjekt"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Stregkode"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "Opret stregkodeobjekt"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "Hent frem"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "Hæv objekt til toppen"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "Send tilbage"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "Sænk objekt til bunden"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Roter mod venstre"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr "Roter objekt 90 grader mod uret"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Roter til højre"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "Roter objekt 90 grader med uret"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "Vend vandret"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "Vend objekt vandret"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "Vend lodret"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "Vend objekt lodret"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Juster venstre"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "Juster objekter til de venstre hjørner"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Juster højre"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "Juster objekter til højre hjørner"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "Juster vandret centrum"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "Juster objekter til vandrette centrum"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "Juster øverst"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "Juster objekter til øverste hjørner"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "Juster nederste kanter"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "Juster objekter til den nederste kants hjørner"
+
+# openoffice: juster lodret centreret
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "Juster lodret centreret"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "Juster objekter til lodret centreret"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "Centrer vandret"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "Centrer objekter til vandret etiketcentrum"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "Centrer lodret"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "Centrer objekter til lodret etiketcentrum"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "Sammenføj egenskaber"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "Rediger sammenføjningsegenskaber"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Indhold"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "Åbn glabels' manual"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "Om..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "Om glabels"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "Egenskabsværktøjsbjælke"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "Ændr synligheden på egenskabsværktøjsbjælken i det nuværende vindue"
+
+#: ../src/ui.c:444 ../src/ui.c:489 ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Vis værktøjsfif"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "Vis værktøjsfif for egenskabsværktøjsbjælke"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Gitter"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr "Ændr synligheden på gitteret i det nuværende vindue"
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "Opmærkning"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Ændr synligheden på opmærkningslinjerne i det nuværende vindue"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "Hovedværktøjsbjælke"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Ændr synligheden på hovedværktøjsbjælken i det nuværende vindue"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "Tegneværktøjsbjælke"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "Ændr synligheden på tegneværktøjsbjælken i det nuværende vindue"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Vis værktøjsfif for hovedværktøjsbjælken"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "Vis værktøjsfif for tegneværktøjsbjælken"
+
+#: ../src/ui-property-bar.c:1232 ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "Standard"
+
+#: ../src/ui-property-bar.c:1239 ../src/object-editor.c:599
+msgid "No line"
+msgstr "Ingen linje"
+
+#: ../src/ui-property-bar.c:1247 ../src/object-editor.c:606
+msgid "No fill"
+msgstr "Ingen fyld"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Objektegenskaber"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "Glabels har modtaget bidrag fra:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Se filen AUTHORS for yderligere oversigt over bidragydere,"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "eller besøg http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Et program til oprettelse af etiketter og forretningskort.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr ""
+"Joe Hansen, 2010.\n"
+"\n"
+"Dansk-gruppen <dansk@dansk-gruppen.dk>\n"
+"Mere info: http://www.dansk-gruppen.dk"
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"Glabels er er fri software. Du kan redistribuere og/eller modificere\n"
+"det under de betingelser som er angivet i GNU General Public License,\n"
+"som er udgivet af Free Software Foundation. Enten version 2 af licensen\n"
+"eller (efter eget valg) enhver senere version.\n"
+"\n"
+"Dette program distribueres i håb om at det vil vise sig nyttigt, men\n"
+"UDEN NOGEN FORM FOR GARANTI, uden selv de underforståede garantier\n"
+"omkring SALGBARHED eller EGNETHED TIL ET BESTEMT FORMÅL. Yderligere\n"
+"detaljer kan læses i GNU General Public License.\n"
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "glabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Ny etiket eller kort"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Etiketegenskaber"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "Alle filer"
+
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "Dokumenter for gLabels"
+
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "Tøm filnavnsmarkering"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr "Vælg venligst en fil eller angiv et gyldigt filnavn"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "Fil eksisterer ikke"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Kunne ikke åbne fil \"%s\""
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "Ikke et understøttet filformat"
+
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Kunne ikke gemme fil \"%s\""
+
+#: ../src/file.c:517 ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "Fejl opstod under gemmning. Filen er ikke gemt."
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Gem \"%s\" som"
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "Angiv venligst et gyldigt filnavn"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Overskriv fil \"%s\"?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "Filen eksisterer allerede."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Gem ændringer til dokument \"%s\" før lukning?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "Dine ændringer vil gå tabt, hvis du ikke gemmer dem."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Luk uden at gemme"
+
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "punkter"
+
+#: ../src/prefs.c:161 ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "tommer"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "mm"
+
+#: ../src/prefs-dialog.c:162 ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "Indstillinger for gLabels"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "Boksobjekt - egenskaber"
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "Egenskaber for ellipseobjekt"
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "Linjeobjekt - egenskaber"
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "Billedobjekt - egenskaber"
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "Tekstobjekt - egenskaber"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "Egenskaber for stregkodeobjekt"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "Alle filer"
+
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "Alle billeder"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr "Sammenføj egenskaber"
+
+# den forstår jeg ikke helt.
+#: ../src/merge-properties-dialog.c:289 ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr "Vælg sammenføj-databasekilde"
+
+#: ../src/merge-properties-dialog.c:298 ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr "-"
+
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "Vælg"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr "Optag/felt"
+
+#: ../src/merge-properties-dialog.c:340 ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "Data"
+
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr "Rettet"
+
+#. ===================================================================
+#: ../src/print-op.c:237 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Etiketter"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "gLabels - skabelondesigner"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "Velkommen"
+
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "Navn og beskrivelse"
+
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "Sidestørrelse"
+
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "Etiket- eller kortform"
+
+#: ../src/template-designer.c:637
+msgid "Label or Card Size"
+msgstr "Etiket- eller kortstørrelse"
+
+# rund eller afrundet!
+#: ../src/template-designer.c:737
+msgid "Label Size (round)"
+msgstr "Etiketstørrelse (rund)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "Etiketstørrelse (cd/dvd)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "Antal layout"
+
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "Layout"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr "Design færdigt"
+
+#: ../src/template-designer.c:1253
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+"<span foreground='red' weight='bold'>Mærk og del#-match en eksisterende "
+"skabelon!</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (alle)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (kun ZIP)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (alle)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A eller UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Kode 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Kode 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Kode 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Kode 128B"
+
+# joe kom.: to provide blank leaves in (a book) for notes or written comments.
+# kender ikke et dansk udtryk for det her. indflyttet, eller interfolierede
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Interfolierede 2 af 5"
+
+# hvad er dettte. Codabar is a linear barcode symbology developed in 1972 by Pitney Bowes Corp.
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+# navn? The Plessey Company plc was a British-based international electronics, defence and telecommunications company.
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Uden titel"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "Stregkodedata er tomme"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Ugyldige stregkodedata"
+
+#: ../src/xml-label.c:193
+msgid "xmlParseFile error"
+msgstr "xmlParseFile-fejl"
+
+#: ../src/xml-label.c:234
+msgid "xmlParseDoc error"
+msgstr "xmlParseDoc-fejl"
+
+#: ../src/xml-label.c:270
+msgid "No document root"
+msgstr "Ingen dokumentrod"
+
+#: ../src/xml-label.c:278
+msgid "Importing from glabels 0.1 format"
+msgstr "Importerer fra glabels 0.1 format"
+
+#: ../src/xml-label.c:287
+msgid "Importing from glabels 0.4 format"
+msgstr "Importerer fra glabels 0.4 format"
+
+#: ../src/xml-label.c:296
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "Ukendt glabelsnavnerum -- bruger %s"
+
+#: ../src/xml-label.c:327 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Ugyldig rodknude = \"%s\""
+
+#: ../src/xml-label.c:364
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "dårlig knude i dokumentknude =  \"%s\""
+
+#: ../src/xml-label.c:409 ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "dårlig knude =  \"%s\""
+
+#: ../src/xml-label.c:851
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "dårlig knude i dataknude =  \"%s\""
+
+#: ../src/xml-label.c:1088 ../libglabels/xml-template.c:682
+msgid "Utf8 conversion error."
+msgstr "Utf8 - konverteringsfejl."
+
+# Kunne ikke gemme xml-fil.
+#: ../src/xml-label.c:1095
+msgid "Problem saving xml file."
+msgstr "Problem under gemning af xml-fil."
+
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "Ingen"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Tekstfil med kommaadskillelsestegn (CSV)"
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "Tekstfil med kolonadskillelsestegn"
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "Tekstfil med indrykadskillelsestegn"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Data fra standardadressebog i Evolution"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "Data fra en fil indeholdende VKort (VCards)"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "Kunne ikke konstruere forespørgsel"
+
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "Kunne ikke åbne adressebog."
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "Kunne ikke vise tilgængelige felter."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "Kunne ikke få kontakt."
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "Ark:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "fra:"
+
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "til:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "Start på etiket"
+
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr "på 1. ark"
+
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "Kopier:"
+
+# oversættelse hentet fra dia
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "Saml ind"
+
+#: ../src/wdgt-media-select.c:288 ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297 ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309 ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609 ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "Alle"
+
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d per ark"
+
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:689 ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s diameter"
+
+#: ../src/wdgt-media-select.c:693 ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s diameter"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "Ingen seneste skabeloner fundet."
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr "Forsøg med at vælge en skabelon fra siden \"Søg i alle skabeloner\"."
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr "Intet resultat."
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr "Forsøg med at vælge et andet mærke, sidestørrrelse eller kategori."
+
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "tilpasset"
+
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "Tilpasset farve:"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "Vælg tilpasset farve"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "sort"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "lysebrun"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr "guldbrun"
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "mørkegrøn #2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "navyblå"
+
+#: ../src/mygal/color-palette.c:577 ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "mørkeblå"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "purple #2"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "meget mørkegrå"
+
+#: ../src/mygal/color-palette.c:582 ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "mørkerød"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "rød/orange"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "guld"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "mørkegrøn"
+
+# hentet fra GNOME gtkhtml (har dog ikke selv hørt om sløv blå før)
+#: ../src/mygal/color-palette.c:586 ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr "sløv blå"
+
+#: ../src/mygal/color-palette.c:587 ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "blå"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr "sløv lilla"
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "mørkegrå"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "rød"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "orange"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "lime"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr "sløv grøn"
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr "sløv blå #2"
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "skyblå #2"
+
+#: ../src/mygal/color-palette.c:598 ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "purple"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "grå"
+
+#: ../src/mygal/color-palette.c:602 ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "magenta"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "lys orange"
+
+#: ../src/mygal/color-palette.c:604 ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "gul"
+
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "grøn"
+
+# turkis eller cyan
+#: ../src/mygal/color-palette.c:606 ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "turkis"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "lyseblå"
+
+#: ../src/mygal/color-palette.c:608 ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "rød purple"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "lysegrå"
+
+#: ../src/mygal/color-palette.c:612 ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "lilla"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "lys orange"
+
+#: ../src/mygal/color-palette.c:614 ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "lysegul"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "lysegrøn"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "lys turkis"
+
+#: ../src/mygal/color-palette.c:617 ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "lyseblå"
+
+#: ../src/mygal/color-palette.c:618 ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "lys purple"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "hvid"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr "violet"
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "mørk lilla"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "skyblå"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "gLabels - fatal fejl!"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "gLabels - fejl!"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "Anden"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Brugerdefineret"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Kunne ikke finde definitioner for papirstørrelse. Libglabels er måske ikke "
+"installeret korrekt!"
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Kunne ikke finde definitioner for kategorier. Libglabels er måske ikke "
+"installeret korrekt!"
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Kunne ikke finde skabelonfiler. Libglabels er måske ikke installeret korrekt!"
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "Generisk %s hel sideskabelon"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "Manglende navn eller mærke-/delattributter."
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "Ukendt sidestørrelse-id \"%s\", forsøger som navn"
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Ukendt sidestørrelse-id eller navn \"%s\""
+
+#: ../libglabels/xml-template.c:627
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr "Mangler krævet mærke- eller delattribut, forsøger forældet navn."
+
+#: ../libglabels/xml-template.c:637
+msgid "Name attribute also missing."
+msgstr "Navneattribut mangler også."
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>Optag markering/forhåndsvisning</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Kilde</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Format:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Placering:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Vælg alle"
+
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "Fravælg alle"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialog 1"
+
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Etiketorientering</b>"
+
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Medietype</b>"
+
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Xxx-objektegenskaber</span>"
+
+#: ../data/glade/object-editor.glade.h:5 ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Justering:"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "Tillader automatisk at sammenføjning kan formindske tekst"
+
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Vinkel:"
+
+# Tjekbeløb
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Kontrolsum"
+
+#: ../data/glade/object-editor.glade.h:9 ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Farve:"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Slå skygge til"
+
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Familie:"
+
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "Fil:"
+
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr "Fyld"
+
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Højde:"
+
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "Indsæt sammenføjningsfelt"
+
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr "Nøgle:"
+
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Længde:"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "Linjemellemrum:"
+
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "Bogstavelig:"
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Ugennemsigtighed:"
+
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "Placering"
+
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Nulstil billedstørrelse"
+
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Vælg en fil"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Skygge"
+
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "Størrelse"
+
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Størrelse:"
+
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "Stil"
+
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Bredde:"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "X-forskydning:"
+
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Y-forskydning:"
+
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "grader"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr "tal:"
+
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "format:"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Standard for sidestørrelse</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Fyld</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Linje</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Tekst</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Enheder</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Skrifttype:"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Tommer"
+
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "Sprog"
+
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Millimeter"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Objektstandarder"
+
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Punkter"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "Vælg standardegenskaber for nye objekter."
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "Vælg opførsel specifikt efter lokalt område."
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "US Letter"
+
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Indstillinger</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>Udskrivningskontrol (sammenføj)</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>Udskrivningskontrol (enkel)</b>"
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Fed"
+
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Centrumjustering"
+
+# skrifttypefamilie
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Skriftfamilie"
+
+# skrifttypestørrelse
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Skriftstørrelse"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Kursiv"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Venstrejustering"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Linjebredde"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Højrejustering"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Tekstfarve"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "Tekstfarve"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(f.eks., \"E-post-etiketter,\" \"Forretningskort,\" ...)"
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(f.eks., 8163A)"
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(f.eks, Carlsberg, LEGO, ...)"
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Ydre radius:"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Radius:"
+
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Bredde:"
+
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Højde:"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Indre radius:"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Overskud (overudskrivning tilladt):"
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. Klippebredde:"
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Margen"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Rund (radius på hjørne):"
+
+# ingen forslag på open-tran
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. Klippehøjde:"
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. Vandret affald (overudskrivning tilladt):"
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. Lodret affald (overudskrivning tilladt):"
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "5. Affald (overudskrivning tilladt):"
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Margen"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "Mærke/producent:"
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "Cd/dvd (inklusiv kreditkorts-cd'er)"
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Tillykke!\n"
+"\n"
+"Du har fuldført glabels' skabelondesigner.\n"
+"Hvis du ønsker at acceptere og gemme dit design så klik på \"Anvend.\"\n"
+"\n"
+"Ellers kan du trykke \"Afbryd\" for at droppe dit design\n"
+"eller \"Tilbage\" for at fortsætte med at redigere dette design."
+
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Beskrivelse:"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "Afstand fra venstre hjørne (x0):"
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "Afstand fra øverste hjørne (y0):"
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "Vandret afstand (dx):"
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"Hvor mange layout vil din skabelon indeholde? \n"
+"\n"
+"Et layout er et sæt af etiketter eller kort som kan arrangeres i et simpelt\n"
+"gitter. De fleste skabeloner skal kun bruge et layout, som i det første\n"
+"eksempel. Det andet eksempel illustrerer hvornår 2 layout er nødvendige."
+
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Layout #1"
+
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Layout #2"
+
+# hvad er dette?
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "Antal på tværs (nx):"
+
+# hvad er dette?
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "Antal ned (ny):"
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Antal layout:"
+
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Sidestørrelse:"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "Del #:"
+
+#: ../data/glade/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+"Indtast venligst den følgende identifikationsinformation om den stationære "
+"skabelon."
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "Indtast venligst den følgende layoutinformation."
+
+#: ../data/glade/template-designer.glade.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+"Indtast de følgende størrelsesparametre på en enkelt etiket i din skabelon."
+
+#: ../data/glade/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"Indtast venligst de følgende størrelsesparametre på en enkelt etiket eller "
+"kort i din skabelon."
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "Vælg venligst den grundlæggende form på etiketterne eller kortene."
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "Vælg venligst sidestørrelsen på den stationære skabelon."
+
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "Udskriv testark"
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Rektangulær eller firkant (kan have afrundede hjørner)"
+
+# rund eller afrundet
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "Rund"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"Skabeloner der\n"
+"kræver to layout."
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"Skabeloner der kun\n"
+"kræver et layout."
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "Lodret afstand (dy):"
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Velkommen til gLabels' skabelondesigner.\n"
+"\n"
+"Denne guide vil assistere dig i oprettelsen af en tilpasset gLabels-skabelon."
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "cd_størrelse_side"
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "afslut_side"
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "layout_side"
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr "navn_side"
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "nlayout_side"
+
+# ingen ide om de her
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "pg_størrelse_side"
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "rect_størrelse_side"
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "rund_størrelse_side"
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "form_side"
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr "start_side"
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "Mærke:"
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Kategori:"
+
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Seneste skabeloner"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Søg i alle skabeloner"
+
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "Roter"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "US Executive"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "US Legal"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "Ethvert kort"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "Enhver etiket"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Forretningskort"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "Cd/dvd eller andet medie"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "Post-/forsendelsesprodukter"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Rektangulære etiketter"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Afrundede etiketter"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "Firkantede etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Adresseetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Adresseetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr "Allroundetiketter"
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Forretningskort"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "Cd-brochure"
+
+# nogen med et bedre ord?
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "Cd-inlet"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "Cd-/dvd-etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr "Disketteetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "Disketteetiketter"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:18
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "Postetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "Postetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "Miniadresseetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+msgid "Mini Labels"
+msgstr "Minietiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "Forsendelsesetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "Filmappeetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "Cd-/dvd-etiketter (disketteetiketter)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Cd/dvd-etiketter (rygetiketter)"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "Adskillelsesetiketter"
+
+# manglende l i filing? ja medmindre det betyder arkiveringsetiketter 
+# som måske også giver lidt mere mening.
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "Arkiveringsetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "Fuldarksetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "Id-etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "Indekskort"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Store afrundede etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "Navneskiltsetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "Postkort"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "Returadresseetiketter"
+
+# runde eller afrundede
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "Round Labels"
+msgstr "Runde etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "Forsendelsesetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Små runde etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "Firkantetiketter"
+
+# nogen der ved hvad tent er? Open-tran har den ikke.
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr "Tent-kort"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "Frontetiketter til videobånd"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "Rygetiketter til videobånd"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "Multietiketter 17mm x 54mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Forsendelsesetiketter 62mm x 100mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "Standardadresseetiketter 29mm x 90mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "3,5 tomme diskette"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "Filmappe"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr "Hængemappe"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "Store adresseetiketter"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "Forsendelsesadresseetiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "Allroundetiketter"
+
+# i tvivl om der med arch her menes buet
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "Buet filetiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr "Buet filetiketter (stor)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr "Buet filetiketter (lille)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "Cd-etiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr "Cd/dvd-etiketter (kun front)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "Cd/dvd-etiketter i standardformat (kun front)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "Disketteetiketter (kun front)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "EPSONs fotostickers 16"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Etiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "Klistermærker til køleskabsmagneter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Generelle etiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "Inkjet-/laseretiketter 70x37mm"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr "Postetiketter - 2 kolonner"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr "Postetiketter - 3 kolonner"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:26
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "PRO CD-etiketter 2-up (kun front)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Rektangulære etiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr "Videoetiketter (kun front)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "Etiketter til flere formål"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "Forretningskort-cd"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "Cd-skabelon - rektangler"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "Cd/dvd-etiketter (kun front)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "Kassetteetiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "DLT-etiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:20
+msgid "Microtube labels"
+msgstr "Mikrotubeetiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Mini-CD Labels"
+msgstr "Mini-cd-etiketter"
+
+#: ../data/templates/misc-us-templates.xml.h:23
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "PRO CD-etiketter 2-up (kun cd-ryg)"
+
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "PRO CD-etiketter 2-up (kun front)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Slimline CD Case (rightside up)"
+msgstr "Tynd cd-kasette (vendt korrekt)"
+
+#: ../data/templates/misc-us-templates.xml.h:31
+msgid "Slimline CD Case (upside down)"
+msgstr "Tynd cd-kasette (omvendt)"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Rettelses- og overdækningsetiketter"
+
+# helt blank på hvad det her er
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr "Filrygetiketter"
+
+# ved ikke hvad det her er for en sag!!!
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr "Leverbuetfiletiketter"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "Klister-/Løfteetiketter til flere formål"
+
+# er det mon en form for specifik tysk etiket?
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "QSL-Karten-etiketter 70mm x 50,8mm"
+
+# Copier = navn?
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr "Rektangulær Copieretiketter"
+
+# oe unormal sammensætning på dansk? derfor skal der være bindestreg?
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "Video-etiketter (bagside)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Opret etiketter, forretningskort og mediecovere"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "gLabels' etiketdesigner"
+
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "gLabels' projektfil"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: Tilvalg »%s« er tvetydigt\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: Tilvalg »--%s« tillader ikke et argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: Tilvalg »%c%s« tillader ikke et argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: Tilvalg »%s« kræver et argument\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: Ukendt tilvalg »--%s«\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: Ukendt tilvalg »%c%s«\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: Ugyldigt tilvalg -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: Ugyldigt tilvalg -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: Tilvalg kræver et argument -- %c\n"
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..d4501f7
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,2762 @@
+# German translation of glabels.
+# Copyright (C) 2001-2008 Jim Evins <evins@snaught.com>
+# Marcus Bauer <m@7n7.de>, 2001.
+# Christian Neumair <christian-neumair@web.de>, 2002.
+# Mario Blättermann <mariobl@gnome.org>, 2008-2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels_2_2\n"
+"Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=46122&ati\n"
+"POT-Creation-Date: 2010-03-17 06:38+0000\n"
+"PO-Revision-Date: 2010-03-20 15:04+0100\n"
+"Last-Translator: Mario Blättermann <mariobl@gnome.org>\n"
+"Language-Team: German <gnome-de@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Poedit-Language: German\n"
+"X-Poedit-Country: GERMANY\n"
+
+#: ../src/glabels.c:75 ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[DATEI...]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- gLabels Etiketten-Designer"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "Ausgabe-Dateiname festlegen (Vorgabe: »output.pdf«)"
+
+#: ../src/glabels-batch.c:54 ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "Dateiname"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "Anzahl der Blätter (Vorgabe: 1)"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "Blätter"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "Anzahl der Kopien (Vorgabe: 1)"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "Kopien"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "Erstes Etikett auf dem ersten Blatt (Vorgabe: 1)"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "Erste"
+
+#: ../src/glabels-batch.c:62 ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "Begrenzungen drucken (um Druckausrichtung zu testen)"
+
+#: ../src/glabels-batch.c:64 ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "Spiegelbildlich drucken"
+
+#: ../src/glabels-batch.c:66 ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "Schnittmarken drucken"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "Eingabedatei zum Mischen"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "- Stapelverarbeitung von gLabels-Dateien"
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr ""
+"Dokumentverarbeitung kann mit gLabels-Datei %s nicht ausgeführt werden\n"
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "glabels-Datei %s kann nicht geöffnet werden\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(Unbenannt) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(geändert)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "Modus au_swählen"
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Text"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "_Linie"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "_Rechteck"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_Ellipse"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "B_ild"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "Strich_code"
+
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "_Mischeinstellungen"
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "Objektei_genschaften"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "Ganz nach _vorn"
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "Ganz nach _hinten"
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "_Links drehen"
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "_Rechts drehen"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "_Horizontal spiegeln"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "_Vertikal spiegeln"
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "_Links"
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "_Rechts"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "_Mitte"
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "_Oben"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "Unten"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "Mitte"
+
+#: ../src/stock.c:93 ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "Etikett ze_ntrieren"
+
+#: ../src/stock.c:95 ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "Füllfarbe"
+
+#: ../src/stock.c:96 ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Linienfarbe"
+
+#: ../src/stock.c:97 ../src/stock.c:99
+msgid "Linked"
+msgstr "Verknüpft"
+
+#: ../src/stock.c:98 ../src/stock.c:100
+msgid "Not Linked"
+msgstr "Nicht verknüpft"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Datei"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "_Zuletzt geöffnete Dateien"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "_Bearbeiten"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Ansicht"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "Werkzeugleiste anpassen"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "Zeichenwerkzeugleiste anpassen"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Eigenschaften-Werkzeugleiste anpassen"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "_Objekte"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Erzeugen"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "_Anordnung"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "D_rehen/Spiegeln"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "_Horizontal"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "_Vertikal"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "_Hilfe"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Kontextmenü"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Neu"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Eine neue Datei erstellen"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "Ö_ffnen …"
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Eine Datei öffnen"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Speichern"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Die aktuelle Datei speichern"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "Speichern _unter …"
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Die aktuelle Datei unter einem anderen Dateinamen speichern"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "_Drucken …"
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Die aktuelle Datei drucken"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Einstellungen …"
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Dokumenteigenschaften ändern"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "Vorlagen-_Designer …"
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Eine neue benutzerdefinierte Vorlage erstellen"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "S_chließen"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Die aktuelle Datei schließen"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "_Beenden"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Das Programm beenden"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Die Markierung ausschneiden"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Kopieren"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Die Markierung kopieren"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Einfügen"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Inhalt der Zwischenablage einfügen"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Löschen"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Die markierten Objekte löschen"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "Alles markieren"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Alle Objekte markieren"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "Alle Markierungen löschen"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Alle Auswahlen aufheben"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Die Anwendung konfigurieren"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Vergrößern"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Vergrößern"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Verkleinern"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Verkleinern"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Vergrößerung 1:1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "Maßstab auf 100% wiederherstellen"
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "Einpassen"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "In Fenster einpassen"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "Modus auswählen"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "Objekte auswählen, bewegen, ändern"
+
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "Text"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Textobjekt erzeugen"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Rechteck"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "Rechteck-Objekt erzeugen"
+
+#: ../src/ui.c:282 ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "Linie"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "Linienobjekt erzeugen"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "Ellipse"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "Ellipsen- oder Kreisobjekt erzeugen"
+
+#: ../src/ui.c:296 ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "Bild"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "Bildobjekt erzeugen"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Strichcode"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "Strichcodeobjekt erzeugen"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "Ganz nach vorn"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "Objekt im Ebenenstapel nach oben verschieben"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "Ganz nach hinten"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "Objekt im Ebenenstapel nach unten verschieben"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Links drehen"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr "Objekt um 90 Grad gegen den Uhrzeigersinn drehen"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Rechts drehen"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "Objekt um 90 Grad im Uhrzeigersinn drehen"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "Horizontal spiegeln"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "Objekt horizontal spiegeln"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "Vertikal spiegeln"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "Objekt vertikal spiegeln"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Linksbündig"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "Objekte am linken Rand anordnen"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Rechtsbündig"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "Objekte am rechten Rand anordnen"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "Horizontal mittig anordnen"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "Objekte an der horizontalen Mitte anordnen"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "Oben bündig"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "Objekte am oberen Rand anordnen"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "Unten bündig"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "Objekte am unteren Rand anordnen"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "Vertikal mittig anordnen"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "Objekte an der vertikalen Mitte anordnen"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "Horizontal zentrieren"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "Objekte zur horizontalen Mitte des Etiketts zentrieren"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "Vertikal zentrieren"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "Objekte zur vertikalen Mitte des Etiketts zentrieren"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "Mischeinstellungen"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "Mischeinstellungen bearbeiten"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Inhalte"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "Das gLabels-Handbuch öffnen"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "Info …"
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "Info zu gLabels"
+
+# CHECK
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "Eigenschaften-Werkzeugleiste"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr ""
+"Die Sichtbarkeit der Werkzeugleiste im aktuellen Fenster ein- oder "
+"ausschalten"
+
+#: ../src/ui.c:444 ../src/ui.c:489 ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Minihilfen anzeigen"
+
+# CHECK
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "Minihilfen für Eigenschaften-Werkzeugleiste anzeigen"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Raster"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr ""
+"Die Sichtbarkeit des Rasters im aktuellen Fenster ein- oder ausschalten"
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "Markierungen"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Die Sichtbarkeit von Markierungslinien im aktuellen Fenster ändern"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "Haupt-Werkzeugleiste"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr ""
+"Die Sichtbarkeit der Haupt-Werkzeugleiste im aktuellen Fenster einschalten/"
+"ausschalten"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "Zeichenwerkzeugleiste"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr ""
+"Die Sichtbarkeit der Zeichenwerkzeugleiste im aktuellen Fenster einschalten/"
+"ausschalten"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Minihilfen für Hauptwerkzeugleiste anzeigen"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "Minihilfen für Zeichenwerkzeugleiste anzeigen"
+
+#: ../src/ui-property-bar.c:1232 ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "Standard"
+
+#: ../src/ui-property-bar.c:1239 ../src/object-editor.c:599
+msgid "No line"
+msgstr "Keine Linie"
+
+#: ../src/ui-property-bar.c:1247 ../src/object-editor.c:606
+msgid "No fill"
+msgstr "Keine Füllung"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Objekteigenschaften"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "Glabels entstand unter Mitwirkung von:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Lesen die Datei AUTHORS für zusätzliche Danksagungen,"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "oder besuchen Sie http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Eine Anwendung zum Erstellen von Etiketten und Visitenkarten.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr ""
+"Marcus Bauer <m@7n7.de>\n"
+"Christian Neumair <christian-neumair@web.de>\n"
+"Mario Blättermann <mariobl@gnome.org>"
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"Glabels ist freie Software; Sie können sie weiterverteilen und/oder ändern\n"
+"unter den Bedingungen der GNU General Public License, veröffentlicht von\n"
+"der Free Software Foundation, entweder Version 2 der Lizenz oder (optional)\n"
+"jeder späteren Version.\n"
+" \n"
+"Dieses Programm wird verteilt in der Hoffnung, dass es nützlich ist, aber\n"
+"OHNE JEDE GARANTIE; Weitere Details in der GNU General Public License.\n"
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "glabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Neues Etikett oder neue Karte"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Etiketten-Eigenschaften"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "Alle Dateien"
+
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "gLabels-Dokumente"
+
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "Auswahl des Dateinamens ist leer"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr ""
+"Bitte wählen Sie eine Datei oder geben Sie einen gültigen Dateinamen an"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "Datei existiert nicht"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Datei »%s« konnte nicht geöffnet werden"
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "Kein unterstütztes Dateiformat"
+
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Datei »%s« konnte nicht gespeichert werden"
+
+#: ../src/file.c:517 ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "Fehler während des Speicherns. Datei wurde noch nicht gespeichert."
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "»%s« speichern unter"
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "Bitte geben Sie einen gültigen Dateinamen an"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Datei »%s« überschreiben?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "Datei existiert bereits."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Änderungen am Dokument »%s« vor dem Schließen speichern?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr ""
+"Nicht gespeicherte Änderungen gehen verloren, wenn Sie nicht speichern."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Schließen, ohne zu speichern"
+
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "Punkte"
+
+#: ../src/prefs.c:161 ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "Zoll"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "mm"
+
+#: ../src/prefs-dialog.c:162 ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "gLabels-Einstellungen"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "Eigenschaften des Rechteck-Objekts"
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "Eigenschaften des Ellipsen-Objekts"
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "Eigenschaften des Linien-Objekts"
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "Eigenschaften des Bild-Objekts"
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "Eigenschaften des Text-Objekts"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "Eigenschaften des Strichcode-Objekts"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "Alle Dateien"
+
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "Alle Bilder"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr "Mischeinstellungen"
+
+#: ../src/merge-properties-dialog.c:289 ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr "Wählen Sie die einzumischende Datenquelle"
+
+#: ../src/merge-properties-dialog.c:298 ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr "Nicht verfügbar"
+
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "Markieren"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr "Feld"
+
+#: ../src/merge-properties-dialog.c:340 ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "Wert"
+
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr "Fixiert"
+
+#. ===================================================================
+#: ../src/print-op.c:237 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Labels"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "gLabels Vorlagen-Designer"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "Willkommen"
+
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "Name und Beschreibung"
+
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "Seitenformat"
+
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "Form des neuen Etiketts oder der neuen Karte"
+
+#: ../src/template-designer.c:637
+msgid "Label or Card Size"
+msgstr "Größe des neuen Etiketts oder der neuen Karte"
+
+#: ../src/template-designer.c:737
+msgid "Label Size (round)"
+msgstr "Etikettengröße (rund)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "Etikettengröße (CD/DVD)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "Anzahl der Layouts"
+
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "Layout(s)"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr "Design ist komplett"
+
+#: ../src/template-designer.c:1253
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+"<span foreground='red' weight='bold'>Für diese Marke und Nummer wurde eine "
+"Vorlage gefunden!</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (allgemein)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (nur ZIP)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (alle)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A oder UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Code 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Code 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Interleaved 2 of 5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Unbenannt"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "Strichcode-Daten sind leer"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Ungültige Strichcode-Daten"
+
+#: ../src/xml-label.c:193
+msgid "xmlParseFile error"
+msgstr "xmlParseFile-Fehler"
+
+#: ../src/xml-label.c:234
+msgid "xmlParseDoc error"
+msgstr "xmlParseDoc-Fehler"
+
+#: ../src/xml-label.c:270
+msgid "No document root"
+msgstr "Kein document root"
+
+#: ../src/xml-label.c:278
+msgid "Importing from glabels 0.1 format"
+msgstr "Aus dem glabels 0.1-Format wird importiert"
+
+#: ../src/xml-label.c:287
+msgid "Importing from glabels 0.4 format"
+msgstr "Aus dem glabels 0.4-Format wird importiert"
+
+#: ../src/xml-label.c:296
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "Unbekannter glabels-Namensraum -- %s wird verwendet"
+
+#: ../src/xml-label.c:327 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Fehlerhafter root node = »%s«"
+
+#: ../src/xml-label.c:364
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "Ungültiger Node im Dokument-Node = »%s«"
+
+#: ../src/xml-label.c:409 ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "fehlerhafter node =  »%s«"
+
+#: ../src/xml-label.c:851
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "Ungültiger Node im Daten-Node = »%s«"
+
+#: ../src/xml-label.c:1088 ../libglabels/xml-template.c:682
+msgid "Utf8 conversion error."
+msgstr "Fehler in der UTF8-Umwandlung."
+
+#: ../src/xml-label.c:1095
+msgid "Problem saving xml file."
+msgstr "Problem beim Speichern der xml-Datei."
+
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "Keine"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Textdatei mit Kommata als Trennern (CSV)"
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "Textdatei mit Semikola als Trennern"
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "Textdatei mit Tabulatoren als Trennern"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Daten aus dem vorgegebenen Evolution-Adressbuch"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "Daten aus einer Datei, die VCards enthält"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "Abfrage konnte nicht erstellt werden"
+
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "Adressbuch konnte nicht geöffnet werden"
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "Verfügbare Felder konnten nicht aufgelistet werden."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "Kontakte konnten nicht geholt werden."
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "Seiten:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "von:"
+
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "bis:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "Start bei Etikett"
+
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr "auf erster Seite"
+
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "Kopien:"
+
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "Zuordnen"
+
+#: ../src/wdgt-media-select.c:288 ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297 ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309 ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609 ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "Beliebig"
+
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d pro Seite"
+
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:689 ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s Durchmesser"
+
+#: ../src/wdgt-media-select.c:693 ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s Durchmesser"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "Keine zuletzt benutzten Vorlagen gefunden."
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr ""
+"Bitte versuchen Sie, eine Vorlage in »Alle Vorlagen durchsuchen« auszuwählen."
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr "Keine Treffer."
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr ""
+"Versuchen Sie eine andere Marke, Seitengröße oder Kategorie auszuwählen."
+
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "benutzerdefiniert"
+
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "Benutzerdefinierte Farbe:"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "Benutzerdefinierte Farbe wählen"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "Schwarz"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "Helles Braun"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr "goldbraun"
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "Dunkles Grün 2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "marineblau"
+
+#: ../src/mygal/color-palette.c:577 ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "Dunkles Blau"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "Purpur 2"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "sehr dunkles grau"
+
+#: ../src/mygal/color-palette.c:582 ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "Dunkelrot"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "Rot-Orange"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "Gold"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "Dunkles Grün"
+
+#: ../src/mygal/color-palette.c:586 ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr "Mattes Blau"
+
+#: ../src/mygal/color-palette.c:587 ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "Blau"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr "Mattes Purpur"
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "Dunkelgrau"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "Rot"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "Orange"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "hellgrün"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr "Mittelgrün"
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr "Mittelblau 2"
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "Himmelblau 2"
+
+#: ../src/mygal/color-palette.c:598 ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "Purpur"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "grau"
+
+#: ../src/mygal/color-palette.c:602 ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "Magenta"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "Helles Orange"
+
+#: ../src/mygal/color-palette.c:604 ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "Gelb"
+
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "Grün"
+
+#: ../src/mygal/color-palette.c:606 ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "Cyan-Blau"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "hellblau"
+
+#: ../src/mygal/color-palette.c:608 ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "Purpurrot"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "Helles Grau"
+
+#: ../src/mygal/color-palette.c:612 ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "Pink"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "Helles Orange"
+
+#: ../src/mygal/color-palette.c:614 ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "Helles Gelb"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "Helles Grün"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "Helles Cyan-Blau"
+
+#: ../src/mygal/color-palette.c:617 ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "Hellblau"
+
+#: ../src/mygal/color-palette.c:618 ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "Helles Purpur"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "Weiß"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr "purpurblau"
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "dunkles Purpur"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "Himmelblau"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "Schwerwiegender Fehler in gLabels!"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "gLabels-Fehler!"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "Andere"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Benutzerdefiniert"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Die Definitionen der Papiergrößen konnten nicht gefunden werden. Libglabels "
+"ist möglicherweise nicht korrekt installiert!"
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Es war nicht möglich, Kategorie-Definitionen zu finden. Libglabels könnte "
+"möglicherweise nicht korrekt installiert sein!"
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Es konnten keine Vorlagendateien gefunden werden. Möglicherweise ist "
+"libglabels nicht korrekt installiert!"
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "Allgemeine Ganzseitenvorlage %s"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "Name oder Attribute für Marke/Nummer fehlen."
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "Unbekannte Kennung der Seitengröße »%s«, wird als Name versucht"
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Unbekannte Kennung der Seitengröße oder Name »%s«"
+
+#: ../libglabels/xml-template.c:627
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+"Benötigtes Attribut »brand« oder »part« fehlt, missbilligter Name wird "
+"versucht. "
+
+#: ../libglabels/xml-template.c:637
+msgid "Name attribute also missing."
+msgstr "Name des Attributs fehlt ebenfalls."
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>Feldauswahl/Vorschau</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Quelle</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Format:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Ort:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Alles markieren"
+
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "Markierung aufheben"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialog1"
+
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Ausrichtung des Etiketts</b>"
+
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Medientyp</b>"
+
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Xxx-Objekteigenschaften</span>"
+
+#: ../data/glade/object-editor.glade.h:5 ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Ausrichtung:"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "Automatisches Anpassen der Textgröße erlauben"
+
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Winkel:"
+
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Prüfsumme"
+
+#: ../data/glade/object-editor.glade.h:9 ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Farbe:"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Schattierung aktivieren"
+
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Familie:"
+
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "Datei:"
+
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr "Füllen"
+
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Höhe"
+
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "Datenfeld einfügen"
+
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr "Schlüssel:"
+
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Länge:"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "Zeilenabstand:"
+
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "Literale:"
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Transparenz:"
+
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "Position"
+
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Bildgröße zurücksetzen"
+
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Datei auswählen"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Schattierung"
+
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "Breite"
+
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Größe:"
+
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "Stil"
+
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Breite:"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "X-Versatz:"
+
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Y-Versatz:"
+
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "Grad"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr "Zeichen:"
+
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "Format:"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Vorgegebene Seitengröße</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Füllung</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Linie</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Text</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Einheiten</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Schrift:"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "A4"
+
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Zoll"
+
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "Spracheinstellung"
+
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Millimeter"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Objekt-Vorgaben"
+
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Punkte"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "Wählen Sie die vorgegebenen Eigenschaften für neue Objekte."
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "Wählen Sie hier Einstellungen gemäß Ihrer Sprache/Ihres Landes."
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "US-Letter"
+
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Optionen</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>Drucksteuerung (Mischen)</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>Drucksteuerung (Einfach)</b>"
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Fett"
+
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Zentrieren"
+
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Schriftfamilie"
+
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Schriftgröße"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Kursiv"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Linksbündig"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Linienbreite"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Rechtsbündig"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Textfarbe"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "Textfarbe"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(z.B. »Adressaufkleber«, »Visitenkarten« …)"
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(z.B., 8163A)"
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(z.B., Avery, Acme, ...)"
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Äußerer Radius:"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Radius:"
+
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Breite:"
+
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Höhe:"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Innerer Radius:"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Überstand (Bedrucken erlaubt):"
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. Innere Breite:"
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Ränder"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Rundung (Radius der Ecken):"
+
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. Innere Höhe:"
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. Horiz. Überstand (Bedrucken erlaubt):"
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "3. Vert. Überstand (Bedrucken erlaubt):"
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "5. Überstand (Bedrucken erlaubt):"
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Rand"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "Marke/Hersteller:"
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (einschließlich Kreditkarten-CDs)"
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Herzlichen Glückwunsch!\n"
+"\n"
+"Das Erzeugen der Vorlage ist abgeschlossen.\n"
+"Falls Sie diese Vorlage akzeptieren und speichern wollen,\n"
+"klicken Sie auf »Akzeptieren«.\n"
+"\n"
+"Anderenfalls klicken Sie auf »Abbrechen«, um die\n"
+"Vorlage zu verwerfen, oder auf »Zurück«,\n"
+"um die Vorlage erneut zu bearbeiten."
+
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Beschreibung:"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "Abstand vom linken Rand (x0):"
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "Abstand vom oberen Rand (x0):"
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "Horizontaler Abstand (dx):"
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"Wie viele Layouts wird Ihre Vorlage enthalten?\n"
+"\n"
+"Ein Layout ist ein Satz von Etiketten oder Karten, die in einem einfachen "
+"Raster\n"
+"angeordnet sind. Die meisten Vorlagen verwenden nur ein Layout, wie im\n"
+"ersten Beispiel. Das zweite Beispiel zeigt die Verwendung zweier Layouts."
+
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Layout #1"
+
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Layout #2"
+
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "Anzahl horizontal (nx):"
+
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "Anzahl vertikal (ny):"
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Anzahl der Layouts:"
+
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Seitenformat:"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "Nummer:"
+
+#: ../data/glade/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+"Bitte geben Sie die folgenden Identifizierungsinformationen über die Vorlage "
+"an."
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "Bitte geben Sie die folgenden Layout-Informationen ein."
+
+#: ../data/glade/template-designer.glade.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+"Bitte geben Sie die folgenden Größenwerte des einzelnen Etiketts in Ihrer "
+"Vorlage an."
+
+#: ../data/glade/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"Bitte geben Sie die folgenden Größenwerte des einzelnen Etiketts oder der "
+"einzelnen Karte in Ihrer Vorlage an."
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "Bitte wählen Sie die Grundform der Etiketten oder Karten aus."
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "Bitte wählen Sie das Papierformat der Vorlage aus."
+
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "Textseite drucken"
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Rechteckig oder quadratisch (auch mit abgerundeten Ecken)"
+
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "Rund"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"Vorlagen benötigen\n"
+"zwei Layouts."
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"Vorlagen benötigen nur\n"
+"ein Layout."
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "Vertikaler Abstand (dy):"
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Willkommen zum gLabels Vorlagen-Designer.\n"
+"\n"
+"Dieser Dialog wird Sie beim Erstellen einer benutzerdefinierten\n"
+"gLabels-Vorlage unterstützen."
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "cd_size_page"
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "finish_page"
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "layout_page"
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr "name_page"
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "nlayouts_page"
+
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "pg_size_page"
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "rect_size_page"
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "round_size_page"
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "shape_page"
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr "start_page"
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "Marke:"
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Kategorie:"
+
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Zuletzt benutzte Vorlagen"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Alle Vorlagen durchsuchen"
+
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "Drehen"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "US Executive"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "US Legal"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "Beliebige Karte"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "Alle Etiketten"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Visitenkarten"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD oder andere Medien"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "Post- und Versandprodukte"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Rechteckige Etiketten"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Runde Etiketten"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "Quadratische Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Adressaufkleber"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Adressaufkleber"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr "Universal-Etiketten"
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Visitenkarten"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "CD-Einlegeheft"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "CD-Einleger"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "CD/DVD-Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr "Diskettenaufkleber"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "Diskettenaufkleber"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:20
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "Adressaufkleber"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "Adressaufkleber"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "Mini-Adressaufkleber"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+msgid "Mini Labels"
+msgstr "Mini-Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "Versandaufkleber"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "Aktenordner-Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "CD/DVD-Etiketten (Medienaufkleber)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "CD/DVD-Etiketten (Spine Labels)"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "Etiketten für Trennblätter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "Ordneretiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "Ganzseitige Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "Etiketten für Archivierungsordner"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "Indexkarten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Große runde Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "Namensschid-Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "Postkarten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "Rückantwort-Adressaufkleber"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Round Labels"
+msgstr "Runde Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "Versandetiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Kleine runde Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "Quadratische Etiketten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr "Klappkarten"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "Etiketten für Videokassetten (Vorderseite)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "Etiketten für Videokassetten (Rückseite)"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "Mehrzwecketiketten 17mm x 54mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Versandetiketten 62mm x 100mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "Standard-Adressaufkleber 29mm x 90mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "3.5-Zoll-Diskette"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "Aktenordner"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr "Hängemappe"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "Große Adressaufkleber"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "Versand-Adressaufkleber"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "Universal-Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "Etiketten für Archivierungsordner"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr "Etiketten für Archivierungsordner (groß)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr "Etiketten für Archivierungsordner (klein)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "CD-Aufkleber"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr "CD/DVD-Etiketten (nur Vorderseite)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "CD/DVD-Etiketten im Standardformat (nur Vorderseite)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "Diskettenaufkleber (nur Vorderseite)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "EPSON Photo Stickers 16"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "Aufkleber für Kühlschrankmagnete"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Allgemeine Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "Inkjet/Laseretiketten 70x37mm"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr "Adressaufkleber 2-spaltig"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr "Adressaufkleber 3-spaltig"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "PRO-CD-Etiketten 2-up (nur Vorderseite)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Rechteckige Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Universal Labels"
+msgstr "Universelle Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:48
+msgid "Video Labels (face only)"
+msgstr "Video-Etiketten (nur Vorderseite)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "Mehrzweck-Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "Visitenkarten-CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "CD-Vorlagen (rechteckig)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "CD/DVD-Etiketten (nur Vorderseite)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "Kassettenaufkleber"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "DLT-Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:18
+msgid "Jewel Case Booklet"
+msgstr "Einleger für CD-Boxen"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Microtube labels"
+msgstr "Microtube-Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "Mini-CD Labels"
+msgstr "Mini-CD-Etiketten"
+
+#: ../data/templates/misc-us-templates.xml.h:25
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "PRO-CD-Etiketten 2-up (nur CD-Spine)"
+
+#: ../data/templates/misc-us-templates.xml.h:26
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "PRO-CD-Etiketten 2-up (nur Vorderseite)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:32
+msgid "Slimline CD Case (rightside up)"
+msgstr "Slimline CD Case (normal)"
+
+#: ../data/templates/misc-us-templates.xml.h:33
+msgid "Slimline CD Case (upside down)"
+msgstr "Slimline CD Case (umgekehrt)"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Korrektur- und Abdeckaufkleber"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr "Ordnerrücken"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr "Lever Etiketten für Archivierungsordner"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "Mehrzweck-Stick+Lift-Aufkleber"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "QSL-Karten Etiketten 70mm x 50,8mm"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr "Rechteckige Kopieretiketten"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "Video-Etiketten (Rückseite)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Erstellen von Etiketten, Visitenkarten und Medien-Covern"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "gLabels Etiketten-Designer"
+
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "gLabels-Projektdatei"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: Option `%s' ist nicht eindeutig\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: Option `--%s' erlaubt kein Argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: Option `%c%s' erlaubt kein Argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: Option `%s' benötigt ein Argument\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: Nicht erkannte Option `--%s'\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: Nicht erkannte Option `%c%s'\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: Unerlaubte Option -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: Ungültige Option -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: Option benötigt ein Argument -- %c\n"
diff --git a/po/eo.po b/po/eo.po
new file mode 100644 (file)
index 0000000..cda51ce
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,2438 @@
+# translation of eo.po to
+# Italian translation of glabels.
+# Copyright (C) 2003 THE glabels'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the glabels package.
+#
+# Esperanto special letters: ĉŝĝĥĵŭ -- 2244
+# Antonio C. Codazzi "la Filozofo" <f_sophia@libero.it>, 2007.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: eo\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-06-19 20:43-0400\n"
+"PO-Revision-Date: 2007-06-06 16:48+0200\n"
+"Last-Translator: Antonio C. Codazzi <f_sophia@libero.it>\n"
+"Language-Team:  Esperanto <eo@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+#: src/glabels.c:116
+msgid "Could not initialize Bonobo!\n"
+msgstr "Estas neeble prepari Bonobon!\n"
+
+#: src/glabels-batch.c:52
+msgid "print this message"
+msgstr "presu tiun ĉi mesaĝon"
+
+#: src/glabels-batch.c:54
+msgid "print the version of glabels-batch being used"
+msgstr "presu version de uzata staplo de glabels"
+
+#: src/glabels-batch.c:56
+msgid "set output filename (default=\"output.ps\")"
+msgstr "agordu dosiernomon de eligo (defaŭlte \"output.ps\")"
+
+#: src/glabels-batch.c:56 src/glabels-batch.c:70
+msgid "filename"
+msgstr "dosiernomo"
+
+#: src/glabels-batch.c:58
+msgid "number of sheets (default=1)"
+msgstr "nombro da folioj (defaŭlte 1)"
+
+#: src/glabels-batch.c:58
+msgid "sheets"
+msgstr "folioj"
+
+#: src/glabels-batch.c:60
+msgid "number of copies (default=1)"
+msgstr "nombro da ekzempleroj (defaŭlte 1)"
+
+#: src/glabels-batch.c:60
+msgid "copies"
+msgstr "ekzempleroj"
+
+#: src/glabels-batch.c:62
+msgid "first label on first sheet (default=1)"
+msgstr "unua etikedo de unua folio (defaŭlte 1)"
+
+#: src/glabels-batch.c:62
+msgid "first"
+msgstr "unua"
+
+#: src/glabels-batch.c:64 src/print-dialog.c:336
+msgid "print outlines (to test printer alignment)"
+msgstr "presu konturojn (por testi alliniĝon de la printilo)"
+
+#: src/glabels-batch.c:66 src/print-dialog.c:344
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "presu inverse (ekz. iun spegulitan bildon)"
+
+#: src/glabels-batch.c:68 src/print-dialog.c:351
+msgid "print crop marks"
+msgstr "presu liniojn de tranĉo"
+
+#: src/glabels-batch.c:70
+msgid "input file for merging"
+msgstr "eniga dosiero por kunfandi"
+
+#: src/glabels-batch.c:107
+msgid "[OPTION...] GLABELS_FILE..."
+msgstr "[OPTION...] GLABELS_FILE..."
+
+#: src/glabels-batch.c:127
+#, c-format
+msgid "missing glabels file\n"
+msgstr "mankanta dosero de glabels\n"
+
+#: src/glabels-batch.c:158
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "estas neeble kunfandi dokumentojn kun dosiero de glabels %s\n"
+
+#: src/glabels-batch.c:182
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "estas neeble malfermi dosieron de glabels %s\n"
+
+#: src/window.c:244
+msgid "(none) - gLabels"
+msgstr "(nenio) - gLabels"
+
+#: src/window.c:414
+msgid "(modified)"
+msgstr "(modifita)"
+
+#: src/stock.c:65 data/ui/glabels-ui.xml.h:162
+msgid "_Select Mode"
+msgstr "Modu_so de Elektado"
+
+#: src/stock.c:66 data/ui/glabels-ui.xml.h:163
+msgid "_Text"
+msgstr "_Teksto"
+
+#: src/stock.c:67 data/ui/glabels-ui.xml.h:148
+msgid "_Line"
+msgstr "_Linio"
+
+#: src/stock.c:68 data/ui/glabels-ui.xml.h:130
+msgid "_Box"
+msgstr "_Fako"
+
+#: src/stock.c:69 data/ui/glabels-ui.xml.h:141
+msgid "_Ellipse"
+msgstr "_Elipso"
+
+#: src/stock.c:70 data/ui/glabels-ui.xml.h:146
+msgid "_Image"
+msgstr "_Bildo"
+
+#: src/stock.c:71 data/ui/glabels-ui.xml.h:11
+msgid "Bar_code"
+msgstr "Strek_kodo"
+
+#: src/stock.c:72
+msgid "_Merge Properties"
+msgstr "Ecoj de Ku_nfando"
+
+#: src/stock.c:73
+msgid "Object _Properties"
+msgstr "Ecoj de _Objekto"
+
+#: src/stock.c:74 data/ui/glabels-ui.xml.h:13
+msgid "Bring to _Front"
+msgstr "Portu _Fronten"
+
+#: src/stock.c:75 data/ui/glabels-ui.xml.h:109
+msgid "Send to _Back"
+msgstr "_Sendu Malantaŭen"
+
+#: src/stock.c:76 data/ui/glabels-ui.xml.h:96
+msgid "Rotate _Left"
+msgstr "Turnu _Maldekstren"
+
+#: src/stock.c:77 data/ui/glabels-ui.xml.h:97
+msgid "Rotate _Right"
+msgstr "Turnu _Dekstren"
+
+#: src/stock.c:78 data/ui/glabels-ui.xml.h:52
+msgid "Flip _Horizontally"
+msgstr "Renversu _Horizontale"
+
+#: src/stock.c:79 data/ui/glabels-ui.xml.h:53
+msgid "Flip _Vertically"
+msgstr "Renversu _Vertikale"
+
+#: src/stock.c:80 data/ui/glabels-ui.xml.h:147
+msgid "_Lefts"
+msgstr "_Maldekstre"
+
+#: src/stock.c:81 data/ui/glabels-ui.xml.h:159
+msgid "_Rights"
+msgstr "_Dekstre"
+
+#: src/stock.c:82 data/ui/glabels-ui.xml.h:131
+msgid "_Centers"
+msgstr "_Centre"
+
+#: src/stock.c:83 data/ui/glabels-ui.xml.h:164
+msgid "_Tops"
+msgstr "_Supre"
+
+#: src/stock.c:84
+msgid "Bottoms"
+msgstr "Sube"
+
+#: src/stock.c:85
+msgid "Centers"
+msgstr "Centre"
+
+#: src/stock.c:86 src/stock.c:87 data/ui/glabels-ui.xml.h:62
+msgid "Label Ce_nter"
+msgstr "Ce_ntrita Etikedo"
+
+#: src/stock.c:88 data/ui/glabels-ui.xml.h:51
+msgid "Fill color"
+msgstr "Koloro de plenigo"
+
+#: src/stock.c:89 data/ui/glabels-ui.xml.h:64
+msgid "Line color"
+msgstr "Koloro de linio"
+
+#: src/stock.c:90 src/stock.c:92
+msgid "Linked"
+msgstr "Kunligita"
+
+#: src/stock.c:91 src/stock.c:93
+msgid "Not Linked"
+msgstr "Neniu Kunligo"
+
+#: src/ui-property-bar.c:345 src/object-editor.c:499
+msgid "Default"
+msgstr "Defaŭlto"
+
+#: src/ui-property-bar.c:360 src/object-editor.c:512
+msgid "No fill"
+msgstr "Neniu Plenigo"
+
+#: src/ui-property-bar.c:375 src/object-editor.c:505
+msgid "No line"
+msgstr "Neniu Linio"
+
+#: src/ui-sidebar.c:180
+msgid "Object properties"
+msgstr "Ecoj de objekto"
+
+#: src/commands.c:385
+msgid ""
+"A label and business card creation program for GNOME.\n"
+" \n"
+"Glabels 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.\n"
+" \n"
+"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.\n"
+msgstr ""
+
+#: src/commands.c:399
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Vidigu la dosieron nomitan AUTHORS por pluaj informoj,"
+
+#: src/commands.c:400
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "aŭ vizitu http://glabels.sourceforge.net/"
+
+#: src/commands.c:409
+msgid " "
+msgstr " "
+
+#: src/commands.c:424
+msgid "glabels"
+msgstr "glabels"
+
+#: src/file.c:100
+msgid "New Label or Card"
+msgstr "Nova Etikedo aŭ Karto"
+
+#: src/file.c:132 src/file.c:304
+msgid "Media Type"
+msgstr "Speco de plurmedio"
+
+#: src/file.c:138 src/file.c:310
+msgid "Label orientation"
+msgstr "Orientado de etikedo"
+
+#: src/file.c:269
+msgid "Label properties"
+msgstr "Ecoj de etikedo"
+
+#: src/file.c:452 src/file.c:870
+msgid "All files"
+msgstr "Ĉiuj dosieroj"
+
+#: src/file.c:457 src/file.c:875
+msgid "gLabels documents"
+msgstr "Dokumentoj de gLabels"
+
+#: src/file.c:505 src/file.c:617 src/file.c:934 src/file.c:1130
+msgid "Empty file name selection"
+msgstr "Elektado de nomon de vakua dosiero"
+
+#: src/file.c:506 src/file.c:520 src/file.c:618 src/file.c:632
+msgid "Please select a file or supply a valid file name"
+msgstr "Bonvolu indiki dosieron aŭ validan dosiernomon"
+
+#: src/file.c:519 src/file.c:631
+msgid "File does not exist"
+msgstr "la dosiero ne ekzistas"
+
+#: src/file.c:563 data/ui/glabels-ui.xml.h:74
+msgid "Open"
+msgstr "Malfermu"
+
+#: src/file.c:565
+msgid "Open label"
+msgstr "Malfermu etikedon"
+
+#: src/file.c:707
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Estas neeble malfermi dosieron \"%s\""
+
+#: src/file.c:715
+msgid "Not a supported file format"
+msgstr "La formato de dosiero ne estas subtenita"
+
+#: src/file.c:797 src/file.c:979 src/file.c:1174
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "estas neeble konservi dosieron \"%s\""
+
+#: src/file.c:805 src/file.c:987 src/file.c:1182
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "Eraro dum konservado. la dosiero ankoraŭ ne estas konservita."
+
+#: src/file.c:848 src/file.c:1048
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Konservu \"%s\" kiel"
+
+#: src/file.c:935 src/file.c:1131
+msgid "Please supply a valid file name"
+msgstr "Bonvolu indiki validan dosiernomon"
+
+#: src/file.c:952 src/file.c:1147
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Ĉu mi devas anstataŭigi dosieron \"%s\"?"
+
+#: src/file.c:960 src/file.c:1155
+msgid "File already exists."
+msgstr "La dosiero jam ekzistas."
+
+#: src/file.c:1271
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Ĉu mi devas konservi la modifojn de la dokumento \"%s\" antaŭ ol fermi?"
+
+#: src/file.c:1279
+msgid "Your changes will be lost if you don't save them."
+msgstr "La modifoj estos perditaj se oni ne konservas ilin."
+
+#: src/file.c:1282
+msgid "Close without saving"
+msgstr "fermu sen konservi"
+
+#. Should not happen
+#: src/prefs.c:156 src/prefs.c:163 data/glade/prefs-dialog.glade.h:23
+#: data/glade/object-editor.glade.h:37
+msgid "points"
+msgstr "punktoj"
+
+#: src/prefs.c:158 data/glade/object-editor.glade.h:36
+#: data/glade/template-designer.glade.h:74
+msgid "inches"
+msgstr "coloj"
+
+#: src/prefs.c:160
+msgid "mm"
+msgstr "mm"
+
+#: src/prefs-dialog.c:248 data/glade/prefs-dialog.glade.h:22
+msgid "gLabels Preferences"
+msgstr "Agordoj de gLabels"
+
+#.
+#. * Submenu: Order
+#.
+#: src/view.c:3574 data/ui/glabels-ui.xml.h:154
+msgid "_Order"
+msgstr "_Ordo"
+
+#.
+#. * Submenu: Rotate/Flip
+#.
+#: src/view.c:3595 data/ui/glabels-ui.xml.h:160
+msgid "_Rotate/Flip"
+msgstr "_Rotacio/Renverso"
+
+#.
+#. * Submenu: Align Horizontally
+#.
+#: src/view.c:3628
+msgid "Align _Horizontally"
+msgstr "Laŭlinnigu _Horizontale"
+
+#.
+#. * Submenu: Align Vertically
+#.
+#: src/view.c:3667
+msgid "Align _Vertically"
+msgstr "Laŭlinnigu _Verticale"
+
+#: src/view.c:3728 data/ui/glabels-ui.xml.h:137
+msgid "_Delete"
+msgstr "_Forigu"
+
+#. Build editor.
+#: src/view-box.c:224
+msgid "Box object properties"
+msgstr "Ecoj de Fako"
+
+#. Build editor.
+#: src/view-ellipse.c:224
+msgid "Ellipse object properties"
+msgstr "Ecoj de Elipso"
+
+#. Build editor.
+#: src/view-line.c:224
+msgid "Line object properties"
+msgstr "Ecoj de Linio"
+
+#. Build editor.
+#: src/view-image.c:223
+msgid "Image object properties"
+msgstr "Ecoj de Bildo"
+
+#. Build editor.
+#: src/view-text.c:251
+msgid "Text object properties"
+msgstr "Ecoj de Teksto"
+
+#: src/view-text.c:563 data/glade/object-editor.glade.h:28
+msgid "Text"
+msgstr "Teksto"
+
+#. Build editor.
+#: src/view-barcode.c:210
+msgid "Barcode object properties"
+msgstr "Ecoj de Strekkodo"
+
+#: src/view-barcode.c:580 src/print.c:1089
+msgid "Invalid barcode data"
+msgstr "Nevalida strekkodo"
+
+#: src/merge-properties-dialog.c:231
+msgid "Merge Properties"
+msgstr "Ecoj de Kunfando"
+
+#. ---- Source section ----
+#: src/merge-properties-dialog.c:237
+msgid "Source"
+msgstr "Fonto"
+
+#: src/merge-properties-dialog.c:245
+msgid "Format:"
+msgstr "Formato:"
+
+#. Location line
+#: src/merge-properties-dialog.c:273
+msgid "Location:"
+msgstr "Lokiĝo:"
+
+#: src/merge-properties-dialog.c:282 src/merge-properties-dialog.c:393
+msgid "Select merge-database source"
+msgstr "Elektu fonton de kunfand-datumbazo"
+
+#: src/merge-properties-dialog.c:289 src/merge-properties-dialog.c:404
+msgid "N/A"
+msgstr "N/A"
+
+#. ---- Sample Fields section ----
+#: src/merge-properties-dialog.c:300
+msgid "Record selection/preview:"
+msgstr "Elektado/Antaŭmontro de rikordo:"
+
+#: src/merge-properties-dialog.c:326
+msgid "Select"
+msgstr "Elektu"
+
+#: src/merge-properties-dialog.c:334
+msgid "Record/Field"
+msgstr "Rikordo/Kampo"
+
+#: src/merge-properties-dialog.c:342 data/glade/object-editor.glade.h:9
+msgid "Data"
+msgstr "Datumoj"
+
+#: src/print-dialog.c:266 data/ui/glabels-ui.xml.h:81
+msgid "Print"
+msgstr "Presu"
+
+#: src/print-dialog.c:281
+msgid "_Job"
+msgstr "_Laboro"
+
+#: src/print-dialog.c:286
+msgid "P_rinter"
+msgstr "P_rintilo"
+
+#. ----------- Add simple-copies widget ------------
+#: src/print-dialog.c:314
+msgid "Copies"
+msgstr "Ekzempleroj"
+
+#. ------- Add merge control widget ------------
+#: src/print-dialog.c:322
+msgid "Document merge control"
+msgstr "Kontrolo de kunfando de dokumento"
+
+#. ----------- Add custom print options area ------------
+#: src/print-dialog.c:330
+msgid "Options"
+msgstr "Opcioj"
+
+#: src/print-dialog.c:553 src/print-dialog.c:592
+msgid "Print preview"
+msgstr "Antaŭmontro de presado"
+
+#: src/template-designer.c:409 data/glade/template-designer.glade.h:73
+msgid "gLabels Template Designer"
+msgstr "Desegnilo de modeloj por gLabels"
+
+#: src/bc.c:60
+msgid "POSTNET (any)"
+msgstr "POSTNET (iu ajn)"
+
+#: src/bc.c:63
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (nur ZIP/CAP)"
+
+#: src/bc.c:66
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP/CAP+4)"
+
+#: src/bc.c:69
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: src/bc.c:72
+msgid "EAN (any)"
+msgstr "EAN (iu ajn)"
+
+#: src/bc.c:75
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: src/bc.c:78
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: src/bc.c:81
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: src/bc.c:84
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: src/bc.c:87
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: src/bc.c:90
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: src/bc.c:93
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A aŭ UPC-E)"
+
+#: src/bc.c:96
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: src/bc.c:99
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: src/bc.c:102
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: src/bc.c:105
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: src/bc.c:108
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: src/bc.c:111
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: src/bc.c:114
+msgid "ISBN"
+msgstr "ISBN"
+
+#: src/bc.c:117
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: src/bc.c:120
+msgid "Code 39"
+msgstr "Kodo 39"
+
+#: src/bc.c:123
+msgid "Code 128"
+msgstr "Kodo 128"
+
+#: src/bc.c:126
+msgid "Code 128C"
+msgstr "Kodo 128C"
+
+#: src/bc.c:129
+msgid "Code 128B"
+msgstr "Kodo 128B"
+
+#: src/bc.c:132
+msgid "Interleaved 2 of 5"
+msgstr "Interleaved 2 of 5"
+
+#: src/bc.c:135
+msgid "Codabar"
+msgstr "Codabar"
+
+#: src/bc.c:138
+msgid "MSI"
+msgstr "MSI"
+
+#: src/bc.c:141
+msgid "Plessey"
+msgstr "Plessey"
+
+#: src/label.c:569
+msgid "Untitled"
+msgstr "Sen nomo"
+
+#: src/xml-label.c:176 src/xml-label.c:213
+msgid "xmlParseFile error"
+msgstr "Eraro de xml-dosiero de sintaksa analizo"
+
+#: src/xml-label.c:250
+msgid "No document root"
+msgstr "Neniu radika dokumento"
+
+#: src/xml-label.c:264
+msgid "Importing from glabels 0.1 format"
+msgstr "Importante el formato de glabels 0.1"
+
+#: src/xml-label.c:272
+msgid "Importing from glabels 0.4 format"
+msgstr "Importante el formato de glabels 0.4"
+
+#: src/xml-label.c:279
+msgid "Importing from glabels 1.91 format"
+msgstr "Importante el formato de glabels 1.91"
+
+#: src/xml-label.c:282
+msgid "bad document, unknown glabels Namespace"
+msgstr "Nekorekta dokumento, nekonata Nomospaco de glabels"
+
+#: src/xml-label.c:311 src/xml-label-04.c:75 src/xml-label-191.c:131
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Nekorekta radika nodo = \"%s\""
+
+#: src/xml-label.c:348 src/xml-label-191.c:165
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "nekorekta nodo en nodo de Dokumeto = \"%s\""
+
+#: src/xml-label.c:393 src/xml-label-04.c:123 src/xml-label-191.c:197
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "nekorekta nodo = \"%s\""
+
+#: src/xml-label.c:796 src/xml-label-191.c:605
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "nekorekta nodo en nodo de Datumoj = \"%s\""
+
+#: src/xml-label.c:962 libglabels/xml-template.c:535
+msgid "Utf8 conversion error."
+msgstr "eraro de konvertado en Utf8."
+
+#: src/xml-label.c:969 libglabels/xml-template.c:542
+msgid "Problem saving xml file."
+msgstr "Problemo laŭ konservo de xml-dosiero"
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: src/xml-label-191.c:680 libglabels/xml-template.c:199
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "Nekonata id \"%s\" de grando de paĝo, provante kiel nomo"
+
+#: src/xml-label-191.c:690 libglabels/xml-template.c:209
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Nekonata id de (paĝo)grando aŭ de nomo \"%s\""
+
+#: src/merge.c:172 src/merge.c:213 src/merge.c:399 src/merge.c:402
+msgid "None"
+msgstr "Nenio"
+
+#: src/merge-init.c:53
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Teksta dosiero kun komo kiel disigilo (CSV)"
+
+#: src/merge-init.c:60
+msgid "Text file with colon delimeters"
+msgstr "Teksta dosiero kun komo kiel disigilo"
+
+#: src/merge-init.c:67
+msgid "Text file with tab delimeters"
+msgstr "Teksta dosiero kun TAB kiel disigilo"
+
+#: src/wdgt-image-select.c:201 data/glade/object-editor.glade.h:11
+msgid "File:"
+msgstr "Dosiero:"
+
+#: src/wdgt-image-select.c:245 data/glade/object-editor.glade.h:16
+msgid "Key:"
+msgstr "Ŝlosilo:"
+
+#: src/wdgt-print-copies.c:179
+msgid "Sheets:"
+msgstr "Folioj:"
+
+#: src/wdgt-print-copies.c:197
+msgid "Labels"
+msgstr "Etikedoj"
+
+#: src/wdgt-print-copies.c:200
+msgid "from:"
+msgstr "de:"
+
+#: src/wdgt-print-copies.c:207
+msgid "to:"
+msgstr "ĝis:"
+
+#: src/wdgt-print-merge.c:178
+msgid "Start on label"
+msgstr "Starto en etikedo"
+
+#: src/wdgt-print-merge.c:186
+msgid "on 1st sheet"
+msgstr "en 1a folio"
+
+#: src/wdgt-print-merge.c:195
+msgid "Copies:"
+msgstr "Ekzempleroj:"
+
+#: src/wdgt-print-merge.c:201
+msgid "Collate"
+msgstr "Laŭkajere"
+
+#: src/wdgt-media-select.c:269 data/glade/template-designer.glade.h:29
+msgid "Description:"
+msgstr "Priskribo:"
+
+#: src/wdgt-media-select.c:279 data/glade/template-designer.glade.h:53
+msgid "Page size:"
+msgstr "Grando de paĝo:"
+
+#: src/wdgt-media-select.c:290
+msgid "Label size:"
+msgstr "Grando de etikedo:"
+
+#: src/wdgt-media-select.c:301
+msgid "Layout:"
+msgstr "Aspekto:"
+
+#: src/wdgt-media-select.c:578
+#, c-format
+msgid "%d x %d  (%d per sheet)"
+msgstr "%d x %d  (%d por folio)"
+
+#: src/wdgt-media-select.c:582
+#, c-format
+msgid "%d per sheet"
+msgstr "%d por folio"
+
+#: src/wdgt-media-select.c:614
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: src/wdgt-media-select.c:619
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: src/wdgt-media-select.c:630 src/wdgt-media-select.c:644
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s diametro"
+
+#: src/wdgt-media-select.c:634 src/wdgt-media-select.c:648
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s diametro"
+
+#: src/wdgt-rotate-label.c:193
+msgid "Rotate"
+msgstr "Rotacio"
+
+#. This is the default custom color
+#: src/mygal/color-palette.c:396
+msgid "custom"
+msgstr "personigita"
+
+#. "Custom" color - we'll pop up a GnomeColorPicker
+#: src/mygal/color-palette.c:438
+msgid "Custom Color:"
+msgstr "Personigita Koloro:"
+
+#: src/mygal/color-palette.c:446
+msgid "Choose Custom Color"
+msgstr "Elektu personigitan koloron"
+
+#: src/mygal/color-palette.c:579
+msgid "black"
+msgstr "nigro"
+
+#: src/mygal/color-palette.c:580
+msgid "light brown"
+msgstr "hela bruna koloro"
+
+#: src/mygal/color-palette.c:581
+msgid "brown gold"
+msgstr "malhela oro"
+
+#: src/mygal/color-palette.c:582
+msgid "dark green #2"
+msgstr "malhela verdo #2"
+
+#: src/mygal/color-palette.c:583
+msgid "navy"
+msgstr "mararmea bluo"
+
+#: src/mygal/color-palette.c:584 src/mygal/color-palette.c:640
+msgid "dark blue"
+msgstr "malhela bluo"
+
+#: src/mygal/color-palette.c:585
+msgid "purple #2"
+msgstr "viola koloro #2"
+
+#: src/mygal/color-palette.c:586
+msgid "very dark gray"
+msgstr "tre malhela grizo"
+
+#: src/mygal/color-palette.c:589 src/mygal/color-palette.c:645
+msgid "dark red"
+msgstr "malhela ruĝo"
+
+#: src/mygal/color-palette.c:590
+msgid "red-orange"
+msgstr "ruĝ-oranĝo"
+
+#: src/mygal/color-palette.c:591
+msgid "gold"
+msgstr "oro"
+
+#: src/mygal/color-palette.c:592
+msgid "dark green"
+msgstr "malhela verdo"
+
+#: src/mygal/color-palette.c:593 src/mygal/color-palette.c:646
+msgid "dull blue"
+msgstr "nebrila bluo"
+
+#: src/mygal/color-palette.c:594 src/mygal/color-palette.c:647
+msgid "blue"
+msgstr "bluo"
+
+#: src/mygal/color-palette.c:595
+msgid "dull purple"
+msgstr "nebrila violo"
+
+#: src/mygal/color-palette.c:596
+msgid "dark grey"
+msgstr "malhela grizo"
+
+#: src/mygal/color-palette.c:599
+msgid "red"
+msgstr "ruĝo"
+
+#: src/mygal/color-palette.c:600
+msgid "orange"
+msgstr "oranĝa koloro"
+
+#: src/mygal/color-palette.c:601
+msgid "lime"
+msgstr "limeta koloro"
+
+#: src/mygal/color-palette.c:602
+msgid "dull green"
+msgstr "nebrila verdo"
+
+#: src/mygal/color-palette.c:603
+msgid "dull blue #2"
+msgstr "nebrila bluo #2"
+
+#: src/mygal/color-palette.c:604
+msgid "sky blue #2"
+msgstr "ĉielbluo #2"
+
+#: src/mygal/color-palette.c:605 src/mygal/color-palette.c:644
+msgid "purple"
+msgstr "violo"
+
+#: src/mygal/color-palette.c:606
+msgid "gray"
+msgstr "grizo"
+
+#: src/mygal/color-palette.c:609 src/mygal/color-palette.c:641
+msgid "magenta"
+msgstr "intense karmezina"
+
+#: src/mygal/color-palette.c:610
+msgid "bright orange"
+msgstr "brila oranĝo"
+
+#: src/mygal/color-palette.c:611 src/mygal/color-palette.c:642
+msgid "yellow"
+msgstr "flavo"
+
+#: src/mygal/color-palette.c:612
+msgid "green"
+msgstr "verdo"
+
+#: src/mygal/color-palette.c:613 src/mygal/color-palette.c:643
+msgid "cyan"
+msgstr "cejano"
+
+#: src/mygal/color-palette.c:614
+msgid "bright blue"
+msgstr "brila bluo"
+
+#: src/mygal/color-palette.c:615 src/mygal/color-palette.c:632
+msgid "red purple"
+msgstr "ruĝ-violo"
+
+#: src/mygal/color-palette.c:616
+msgid "light grey"
+msgstr "hela grizo"
+
+#: src/mygal/color-palette.c:619 src/mygal/color-palette.c:636
+msgid "pink"
+msgstr "rozkoloro"
+
+#: src/mygal/color-palette.c:620
+msgid "light orange"
+msgstr "hela oranĝo"
+
+#: src/mygal/color-palette.c:621 src/mygal/color-palette.c:633
+msgid "light yellow"
+msgstr "hela flavo"
+
+#: src/mygal/color-palette.c:622
+msgid "light green"
+msgstr "hela verdo"
+
+#: src/mygal/color-palette.c:623
+msgid "light cyan"
+msgstr "hela cejano"
+
+#: src/mygal/color-palette.c:624 src/mygal/color-palette.c:634
+msgid "light blue"
+msgstr "hela bluo"
+
+#: src/mygal/color-palette.c:625 src/mygal/color-palette.c:638
+msgid "light purple"
+msgstr "hela violo"
+
+#: src/mygal/color-palette.c:626
+msgid "white"
+msgstr "blanko"
+
+#: src/mygal/color-palette.c:631
+msgid "purplish blue"
+msgstr "viol-bluo"
+
+#: src/mygal/color-palette.c:635
+msgid "dark purple"
+msgstr "malhela violo"
+
+#: src/mygal/color-palette.c:637
+msgid "sky blue"
+msgstr "ĉielbluo"
+
+#: libglabels/template.c:848
+#, c-format
+msgid "Generic %s full page"
+msgstr "Ĝenerala %s plena paĝo"
+
+#: libglabels/template.c:897
+msgid "No template files found!"
+msgstr "Neniu modelo estis trovita!"
+
+#. Create and append an "Other" entry.
+#: libglabels/paper.c:67
+msgid "Other"
+msgstr "Aliaĵoj"
+
+#: libglabels/paper.c:361
+msgid "No paper files found!"
+msgstr "Neniu papera dosiero estis trovita!!"
+
+#: data/ui/glabels-ui.xml.h:1
+msgid "About glabels"
+msgstr "Pri glabels"
+
+#: data/ui/glabels-ui.xml.h:2
+msgid "About..."
+msgstr "Pri..."
+
+#: data/ui/glabels-ui.xml.h:3
+msgid "Align _Horizontal"
+msgstr "Laŭlinnigu _Horizontale"
+
+#: data/ui/glabels-ui.xml.h:4
+msgid "Align _Vertical"
+msgstr "Laŭlinnigu _Verticale"
+
+#: data/ui/glabels-ui.xml.h:5
+msgid "Align objects to bottoms"
+msgstr "Laŭlinnigu objektojn sube"
+
+#: data/ui/glabels-ui.xml.h:6
+msgid "Align objects to horizontal centers"
+msgstr "Laŭlinnigu objektojn laŭ horizontala centro"
+
+#: data/ui/glabels-ui.xml.h:7
+msgid "Align objects to left edges"
+msgstr "Laŭlinnigu objektojn laŭ maldekstra rando"
+
+#: data/ui/glabels-ui.xml.h:8
+msgid "Align objects to right edges"
+msgstr "Laŭlinnigu objektojn laŭ dekstra rando"
+
+#: data/ui/glabels-ui.xml.h:9
+msgid "Align objects to tops"
+msgstr "Laŭlinnigu objektojn supre"
+
+#: data/ui/glabels-ui.xml.h:10
+msgid "Align objects to vertical centers"
+msgstr "Laŭliniigu objektojn laŭ verticala centro"
+
+#: data/ui/glabels-ui.xml.h:12
+msgid "Bold"
+msgstr "Dika"
+
+#: data/ui/glabels-ui.xml.h:14
+msgid "Center align"
+msgstr "Laŭliniiĝu centre"
+
+#: data/ui/glabels-ui.xml.h:15
+msgid "Center objects to horizontal label center"
+msgstr "Centrigu objektojn laŭ horizontala centro de etikedo"
+
+#: data/ui/glabels-ui.xml.h:16
+msgid "Center objects to vertical label center"
+msgstr "Centrigu objektojn laŭ vertikala centro de etikedo"
+
+#: data/ui/glabels-ui.xml.h:17
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Ŝangu videblecon de linioj de demarkacio en nuna fenestro"
+
+#: data/ui/glabels-ui.xml.h:18
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "Ŝangu videblecon de la ilarstango de desegno en nuna fenestro"
+
+#: data/ui/glabels-ui.xml.h:19
+msgid "Change the visibility of the grid in the current window"
+msgstr "Ŝangu videblecon de la krado en nuna fenestro"
+
+#: data/ui/glabels-ui.xml.h:20
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Ŝangu videblecon de la ĉefa ilarstango en nuna fenestro"
+
+#: data/ui/glabels-ui.xml.h:21
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "Ŝangu videblecon de ilarstango de ecoj en nuna fenestro"
+
+#: data/ui/glabels-ui.xml.h:22
+msgid "Close"
+msgstr "Fermu"
+
+#: data/ui/glabels-ui.xml.h:23
+msgid "Close the current file"
+msgstr "Fermu la nunan dosieron"
+
+#: data/ui/glabels-ui.xml.h:24
+msgid "Configure the application"
+msgstr "Agordu la programon"
+
+#: data/ui/glabels-ui.xml.h:25
+msgid "Contents"
+msgstr "Entenoj"
+
+#: data/ui/glabels-ui.xml.h:26
+msgid "Copy"
+msgstr "Kopiu"
+
+#: data/ui/glabels-ui.xml.h:27
+msgid "Copy the selection"
+msgstr "Kopiu la elektaĵon"
+
+#: data/ui/glabels-ui.xml.h:28
+msgid "Create a custom template"
+msgstr "Kreu personigitan modelon"
+
+#: data/ui/glabels-ui.xml.h:29
+msgid "Create a new document"
+msgstr "Kreu novan dokumenton"
+
+#: data/ui/glabels-ui.xml.h:30
+msgid "Create barcode object"
+msgstr "Keu strekkodan objekton"
+
+#: data/ui/glabels-ui.xml.h:31
+msgid "Create box/rectangle object"
+msgstr "Kreu objekton de areo/rektangulo"
+
+#: data/ui/glabels-ui.xml.h:32
+msgid "Create ellipse/circle object"
+msgstr "Kreu objekton de elipse/circlo"
+
+#: data/ui/glabels-ui.xml.h:33
+msgid "Create image object"
+msgstr "Kreu bildan objekton"
+
+#: data/ui/glabels-ui.xml.h:34
+msgid "Create line object"
+msgstr "Kreu linian objekton"
+
+#: data/ui/glabels-ui.xml.h:35
+msgid "Create text object"
+msgstr "Kreu tekstan objekton"
+
+#: data/ui/glabels-ui.xml.h:36
+msgid "Cu_t"
+msgstr "El_tondu"
+
+#: data/ui/glabels-ui.xml.h:37
+msgid "Customize"
+msgstr "Personigu"
+
+#: data/ui/glabels-ui.xml.h:38
+msgid "Customize Drawing Toolbar"
+msgstr "Personigu ilarstangon de desegno"
+
+#: data/ui/glabels-ui.xml.h:39
+msgid "Customize Main Toolbar"
+msgstr "Personigu ĉefan ilarstangon"
+
+#: data/ui/glabels-ui.xml.h:40
+msgid "Customize Property Toolbar"
+msgstr "Personigu ilarstangon de ecoj"
+
+#: data/ui/glabels-ui.xml.h:41
+msgid "Customize toolbars"
+msgstr "Personigu ilarstangojn"
+
+#: data/ui/glabels-ui.xml.h:42
+msgid "Cut"
+msgstr "Eltondu"
+
+#: data/ui/glabels-ui.xml.h:43
+msgid "Cut the selection"
+msgstr "Eltondu elektaĵon"
+
+#: data/ui/glabels-ui.xml.h:44
+msgid "Decrease magnification"
+msgstr "Malpliigu zomon"
+
+#: data/ui/glabels-ui.xml.h:45
+msgid "Delete"
+msgstr "Forigu"
+
+#: data/ui/glabels-ui.xml.h:46
+msgid "Delete the selected objects"
+msgstr "Forigu elektitajn objektojn"
+
+#: data/ui/glabels-ui.xml.h:47
+msgid "Drawing toolbar"
+msgstr "Ilarstango de desegno"
+
+#: data/ui/glabels-ui.xml.h:48
+msgid "Dump XML"
+msgstr "Ŝutu XML"
+
+#: data/ui/glabels-ui.xml.h:49
+msgid "Dump the UI Xml description"
+msgstr "Ŝutu priskribon de UI xml"
+
+#: data/ui/glabels-ui.xml.h:50
+msgid "Edit merge properties"
+msgstr "Redaktu ecojn de kunfando"
+
+#: data/ui/glabels-ui.xml.h:54
+msgid "Flip object horizontally"
+msgstr "Renversu objekton horizontale"
+
+#: data/ui/glabels-ui.xml.h:55
+msgid "Flip object vertically"
+msgstr "Renversu objekton vertikale"
+
+#: data/ui/glabels-ui.xml.h:56
+msgid "Font name"
+msgstr "Nomo de tiparo"
+
+#: data/ui/glabels-ui.xml.h:57
+msgid "Font selector"
+msgstr "Elektilo de tiparo"
+
+#: data/ui/glabels-ui.xml.h:58
+msgid "Font size"
+msgstr "Tipargrando"
+
+#: data/ui/glabels-ui.xml.h:59
+msgid "Icon and _Text"
+msgstr "Ikono kaj _Teksto"
+
+#: data/ui/glabels-ui.xml.h:60
+msgid "Increase magnification"
+msgstr "Pliigu zomon"
+
+#: data/ui/glabels-ui.xml.h:61
+msgid "Italic"
+msgstr "Kursivo"
+
+#: data/ui/glabels-ui.xml.h:63
+msgid "Left align"
+msgstr "Laŭliniigu maldekstren"
+
+#: data/ui/glabels-ui.xml.h:65
+msgid "Line width"
+msgstr "Larĝo de linio"
+
+#: data/ui/glabels-ui.xml.h:66
+msgid "Lower object to bottom"
+msgstr "Subentiru objekton ĝis la fundo"
+
+#: data/ui/glabels-ui.xml.h:67
+msgid "M_arkup"
+msgstr "M_arkado"
+
+#: data/ui/glabels-ui.xml.h:68
+msgid "Main toolbar"
+msgstr "Ĉefa ilarstango"
+
+#: data/ui/glabels-ui.xml.h:69
+msgid "Markup"
+msgstr "Markaĵoj"
+
+#: data/ui/glabels-ui.xml.h:70
+msgid "Modify document properties"
+msgstr "Radaktu ecojn de dokumento"
+
+#: data/ui/glabels-ui.xml.h:71
+msgid "New"
+msgstr "Nova"
+
+#: data/ui/glabels-ui.xml.h:72
+msgid "Object property editor"
+msgstr "Redaktilo de ecoj por objekto"
+
+#: data/ui/glabels-ui.xml.h:73
+msgid "Only show icons in the main toolbar"
+msgstr "Videbligu nur ikonojn en ĉefa ilarstango"
+
+#: data/ui/glabels-ui.xml.h:75
+msgid "Open a file"
+msgstr "Malfermu iun dosieron"
+
+#: data/ui/glabels-ui.xml.h:76
+msgid "Open the glabels manual"
+msgstr "Malfermu manlibron de glabels"
+
+#: data/ui/glabels-ui.xml.h:77
+msgid "Paste"
+msgstr "Enmetu"
+
+#: data/ui/glabels-ui.xml.h:78
+msgid "Paste the clipboard"
+msgstr "Enmetu la poŝon"
+
+#: data/ui/glabels-ui.xml.h:79
+msgid "Pr_eferences..."
+msgstr "A_gordoj..."
+
+#: data/ui/glabels-ui.xml.h:80
+msgid "Preferences"
+msgstr "Agordoj"
+
+#: data/ui/glabels-ui.xml.h:82
+msgid "Print the current file"
+msgstr "Presu la nunan dosieron"
+
+#: data/ui/glabels-ui.xml.h:83
+msgid "Proper_ties..."
+msgstr "E_coj..."
+
+#: data/ui/glabels-ui.xml.h:84
+msgid "Properties"
+msgstr "Ecoj"
+
+#: data/ui/glabels-ui.xml.h:85
+msgid "Property toolbar"
+msgstr "Ilarstango de ecoj"
+
+#: data/ui/glabels-ui.xml.h:86
+msgid "Quit"
+msgstr "Eliro"
+
+#: data/ui/glabels-ui.xml.h:87
+msgid "Quit the program"
+msgstr "Eliru el programo"
+
+#: data/ui/glabels-ui.xml.h:88
+msgid "Raise object to top"
+msgstr "Suprentiru objekton ĝis la pinto"
+
+#: data/ui/glabels-ui.xml.h:89
+msgid "Recent _Files"
+msgstr "Fre_ŝaj Dosieroj"
+
+#: data/ui/glabels-ui.xml.h:90
+msgid "Redo"
+msgstr "Refaru"
+
+#: data/ui/glabels-ui.xml.h:91
+msgid "Redo the undone action"
+msgstr "Refaru la lastan malfaritan agon"
+
+#: data/ui/glabels-ui.xml.h:92
+msgid "Remove all selections"
+msgstr "Formovu ĉiujn elektaĵojn"
+
+#: data/ui/glabels-ui.xml.h:94
+#, no-c-format
+msgid "Restore scale to 100%"
+msgstr "Reen 100%"
+
+#: data/ui/glabels-ui.xml.h:95
+msgid "Right align"
+msgstr "laŭliniigu dekstren"
+
+#: data/ui/glabels-ui.xml.h:98
+msgid "Rotate object 90 clockwise"
+msgstr "Turnu la objekton je 90° dekstroĝire"
+
+#: data/ui/glabels-ui.xml.h:99
+msgid "Rotate object 90 counter-clockwise"
+msgstr "Turnu la objekton je 90° kontraŭmontrile"
+
+#: data/ui/glabels-ui.xml.h:100
+msgid "Save"
+msgstr "Konservu"
+
+#: data/ui/glabels-ui.xml.h:101
+msgid "Save As"
+msgstr "Konservu kiel"
+
+#: data/ui/glabels-ui.xml.h:102
+msgid "Save _As..."
+msgstr "Konservu kiel..."
+
+#: data/ui/glabels-ui.xml.h:103
+msgid "Save the current file"
+msgstr "Konservu la nunan dosieron"
+
+#: data/ui/glabels-ui.xml.h:104
+msgid "Save the current file with a different name"
+msgstr "Konservu la nunan dosieron per alia nomo"
+
+#: data/ui/glabels-ui.xml.h:105
+msgid "Select All"
+msgstr "Elektu Ĉion"
+
+#: data/ui/glabels-ui.xml.h:106
+msgid "Select _All"
+msgstr "Elektu _Ĉion"
+
+#: data/ui/glabels-ui.xml.h:107
+msgid "Select all objects"
+msgstr "Elektu ĉiujn objektojn"
+
+#: data/ui/glabels-ui.xml.h:108
+msgid "Select, move and modify objects"
+msgstr "Elektu, movu kaj redaktu objektojn"
+
+#: data/ui/glabels-ui.xml.h:110
+msgid "Set main toolbar button style according to desktop default"
+msgstr "Agordu butonstilon de ĉefa ilarstango laŭ defaŭlto de labortablo"
+
+#: data/ui/glabels-ui.xml.h:111
+msgid "Show _Tooltips"
+msgstr "Mon_tru Sugestojn"
+
+#: data/ui/glabels-ui.xml.h:112
+msgid "Show both icons and texts in the main toolbar"
+msgstr "Vidigu kaj ikonojn kaj tekstojn en la ĉefa ilarstango"
+
+#: data/ui/glabels-ui.xml.h:113
+msgid "Show tooltips in the drawing toolbar"
+msgstr "Vidigu sugestojn en la ilarstango de desegno"
+
+#: data/ui/glabels-ui.xml.h:114
+msgid "Show tooltips in the main toolbar"
+msgstr "Vidigu sugestojn en la ĉefa ilarstango"
+
+#: data/ui/glabels-ui.xml.h:115
+msgid "Show tooltips in the property toolbar"
+msgstr "Vidigu sugestojn en la ilarstango de ecoj"
+
+#: data/ui/glabels-ui.xml.h:116
+msgid "Template Designer"
+msgstr "Desegnilo de Modeloj"
+
+#: data/ui/glabels-ui.xml.h:117
+msgid "Template _Designer..."
+msgstr "_Desegnilo de Modeloj..."
+
+#: data/ui/glabels-ui.xml.h:118
+msgid "Text color"
+msgstr "Koloro de teksto"
+
+#: data/ui/glabels-ui.xml.h:119
+msgid "U_n-select All"
+msgstr "Malelektu Ĉio_n"
+
+#: data/ui/glabels-ui.xml.h:120
+msgid "Un-select All"
+msgstr "Malelektu Ĉion"
+
+#: data/ui/glabels-ui.xml.h:121
+msgid "Undo"
+msgstr "Malfaru"
+
+#: data/ui/glabels-ui.xml.h:122
+msgid "Undo the last action"
+msgstr "Nuligu lastan agon"
+
+#: data/ui/glabels-ui.xml.h:123
+msgid "Zoom _1:1"
+msgstr "Zomo je _1:1"
+
+#: data/ui/glabels-ui.xml.h:124
+msgid "Zoom _In"
+msgstr "_Zomo"
+
+#: data/ui/glabels-ui.xml.h:125
+msgid "Zoom _Out"
+msgstr "_Malzomo"
+
+#: data/ui/glabels-ui.xml.h:126
+msgid "Zoom to _fit"
+msgstr "Alĝustigu"
+
+#: data/ui/glabels-ui.xml.h:127
+msgid "Zoom to fit window"
+msgstr "Alĝustigu al la fenestro"
+
+#: data/ui/glabels-ui.xml.h:128
+msgid "_About..."
+msgstr "_Pri..."
+
+#: data/ui/glabels-ui.xml.h:129
+msgid "_Bottoms"
+msgstr "Su_be"
+
+#: data/ui/glabels-ui.xml.h:132
+msgid "_Close"
+msgstr "_Fermu"
+
+#: data/ui/glabels-ui.xml.h:133
+msgid "_Contents"
+msgstr "_Entenoj"
+
+#: data/ui/glabels-ui.xml.h:134
+msgid "_Copy"
+msgstr "_Kopiu"
+
+#: data/ui/glabels-ui.xml.h:135
+msgid "_Create Object"
+msgstr "_Kreu Objekton"
+
+#: data/ui/glabels-ui.xml.h:136
+msgid "_Debug"
+msgstr "_Sencimigo"
+
+#: data/ui/glabels-ui.xml.h:138
+msgid "_Desktop Default"
+msgstr "Defaŭlto por Labortabulo"
+
+#: data/ui/glabels-ui.xml.h:139
+msgid "_Drawing Toolbar"
+msgstr "Ilarstango de _Desegno"
+
+#: data/ui/glabels-ui.xml.h:140
+msgid "_Edit"
+msgstr "R_edaktu"
+
+#: data/ui/glabels-ui.xml.h:142
+msgid "_File"
+msgstr "_Dosiero"
+
+#: data/ui/glabels-ui.xml.h:143
+msgid "_Grid"
+msgstr "_Krado"
+
+#: data/ui/glabels-ui.xml.h:144
+msgid "_Help"
+msgstr "_Helpilo"
+
+#: data/ui/glabels-ui.xml.h:145
+msgid "_Icon"
+msgstr "_Ikono"
+
+#: data/ui/glabels-ui.xml.h:149
+msgid "_Main Toolbar"
+msgstr "_Ĉefa Ilarstango"
+
+#: data/ui/glabels-ui.xml.h:150
+msgid "_Merge Properties..."
+msgstr "_Kunfandu Ecojn..."
+
+#: data/ui/glabels-ui.xml.h:151
+msgid "_New"
+msgstr "_Nova"
+
+#: data/ui/glabels-ui.xml.h:152
+msgid "_Objects"
+msgstr "_Objektoj"
+
+#: data/ui/glabels-ui.xml.h:153
+msgid "_Open..."
+msgstr "M_alfermu..."
+
+#: data/ui/glabels-ui.xml.h:155
+msgid "_Paste"
+msgstr "_Enmetu"
+
+#: data/ui/glabels-ui.xml.h:156
+msgid "_Print..."
+msgstr "_Presu..."
+
+#: data/ui/glabels-ui.xml.h:157
+msgid "_Property Toolbar"
+msgstr "Ilarstango de Eco_j"
+
+#: data/ui/glabels-ui.xml.h:158
+msgid "_Quit"
+msgstr "_Eliro"
+
+#: data/ui/glabels-ui.xml.h:161
+msgid "_Save"
+msgstr "_Konservu"
+
+#: data/ui/glabels-ui.xml.h:165
+msgid "_View"
+msgstr "_Videbligo"
+
+#: data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: data/glade/prefs-dialog.glade.h:2 data/glade/object-editor.glade.h:1
+#: data/glade/template-designer.glade.h:5
+msgid "*"
+msgstr "*"
+
+#: data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Defaŭlta grando de paĝo</span>"
+
+#: data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Plenigo</span>"
+
+#: data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Linio</span>"
+
+#: data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Teksto</span>"
+
+#: data/glade/prefs-dialog.glade.h:7
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Unitoj</span>"
+
+#: data/glade/prefs-dialog.glade.h:8 data/glade/object-editor.glade.h:4
+msgid "Alignment:"
+msgstr "Alliniĝo:"
+
+#: data/glade/prefs-dialog.glade.h:9 data/glade/object-editor.glade.h:8
+msgid "Color:"
+msgstr "Koloro:"
+
+#: data/glade/prefs-dialog.glade.h:10
+msgid "Font:"
+msgstr "Tiparo:"
+
+#: data/glade/prefs-dialog.glade.h:11
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: data/glade/prefs-dialog.glade.h:12
+msgid "Inches"
+msgstr "Coloj"
+
+#: data/glade/prefs-dialog.glade.h:13 data/glade/object-editor.glade.h:19
+msgid "Line Spacing:"
+msgstr "Interspaco:"
+
+#: data/glade/prefs-dialog.glade.h:14
+msgid "Locale"
+msgstr "Nacia"
+
+#: data/glade/prefs-dialog.glade.h:15
+msgid "Millimeters"
+msgstr "Milimetroj"
+
+#: data/glade/prefs-dialog.glade.h:16
+msgid "Object defaults"
+msgstr "Defaŭltoj de objekto"
+
+#: data/glade/prefs-dialog.glade.h:17
+msgid "Points"
+msgstr "Punktoj"
+
+#: data/glade/prefs-dialog.glade.h:18
+msgid "Select default properties for new objects."
+msgstr "Elektu defaŭltajn ecojn por novaj objektoj."
+
+#: data/glade/prefs-dialog.glade.h:19
+msgid "Select locale specific behavior."
+msgstr "Elektu nacian specifan agmanieron."
+
+#. Most popular (at top of list)
+#: data/glade/prefs-dialog.glade.h:20 data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "US·Letero"
+
+#: data/glade/prefs-dialog.glade.h:21 data/glade/object-editor.glade.h:29
+#: data/glade/template-designer.glade.h:72
+msgid "Width:"
+msgstr "Larĝo:"
+
+#: data/glade/object-editor.glade.h:2
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: data/glade/object-editor.glade.h:3
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Xxx ecoj de objekto</span>"
+
+#: data/glade/object-editor.glade.h:5
+msgid "Allow merge to automatically shrink text"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:6
+msgid "Angle:"
+msgstr "Angulo:"
+
+#: data/glade/object-editor.glade.h:7
+msgid "Checksum"
+msgstr "Kontrolsumo"
+
+#: data/glade/object-editor.glade.h:10
+msgid "Family:"
+msgstr "Familio:"
+
+#: data/glade/object-editor.glade.h:12
+msgid "Fill"
+msgstr "Plenigo"
+
+#: data/glade/object-editor.glade.h:13 data/glade/template-designer.glade.h:33
+msgid "Height:"
+msgstr "Alto:"
+
+#: data/glade/object-editor.glade.h:14
+msgid "Image"
+msgstr "Bildo"
+
+#: data/glade/object-editor.glade.h:15
+msgid "Insert merge field"
+msgstr "Enigu campon de kunfando"
+
+#: data/glade/object-editor.glade.h:17
+msgid "Length:"
+msgstr "Longo:"
+
+#: data/glade/object-editor.glade.h:18
+msgid "Line"
+msgstr "Linio"
+
+#: data/glade/object-editor.glade.h:20
+msgid "Literal:"
+msgstr "Literalo:"
+
+#: data/glade/object-editor.glade.h:21
+msgid "Load image"
+msgstr "Ŝargu bildon"
+
+#: data/glade/object-editor.glade.h:22
+msgid "Position"
+msgstr "Lokiĝo"
+
+#: data/glade/object-editor.glade.h:23
+msgid "Reset image size"
+msgstr "Restarigu grandon de bildo"
+
+#: data/glade/object-editor.glade.h:24
+msgid "Size"
+msgstr "Grando"
+
+#: data/glade/object-editor.glade.h:25
+msgid "Size:"
+msgstr "Grando:"
+
+#: data/glade/object-editor.glade.h:26
+msgid "Style"
+msgstr "Stilo"
+
+#: data/glade/object-editor.glade.h:27
+msgid "Style:"
+msgstr "Stilo:"
+
+#: data/glade/object-editor.glade.h:30
+msgid "X:"
+msgstr "X:"
+
+#: data/glade/object-editor.glade.h:31
+msgid "Y:"
+msgstr "Y:"
+
+#: data/glade/object-editor.glade.h:32
+msgid "degrees"
+msgstr "gradoj"
+
+#: data/glade/object-editor.glade.h:33
+msgid "dialog1"
+msgstr "fenestr1"
+
+#: data/glade/object-editor.glade.h:34
+msgid "digits:"
+msgstr "ciferoj:"
+
+#: data/glade/object-editor.glade.h:35
+msgid "format:"
+msgstr "formato:"
+
+#: data/glade/template-designer.glade.h:1
+msgid "  "
+msgstr "  "
+
+#: data/glade/template-designer.glade.h:2
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(es., \"Etichette di spedizione,\" \"Vizitkartoj,\" ...)"
+
+#: data/glade/template-designer.glade.h:3
+msgid "(e.g., 8163A)"
+msgstr "(es. 8163A)"
+
+#: data/glade/template-designer.glade.h:4
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(es. Avery, Acme, ...)"
+
+#: data/glade/template-designer.glade.h:6
+msgid "1. Outer radius:"
+msgstr "1. Ekstera radiuso:"
+
+#: data/glade/template-designer.glade.h:7
+msgid "1. Radius:"
+msgstr "1. Radiuso:"
+
+#: data/glade/template-designer.glade.h:8
+msgid "1. Width:"
+msgstr "1. Larĝo:"
+
+#: data/glade/template-designer.glade.h:9
+msgid "2. Height:"
+msgstr "2. Alto:"
+
+#: data/glade/template-designer.glade.h:10
+msgid "2. Inner radius:"
+msgstr "2. Interna radiuso:"
+
+#: data/glade/template-designer.glade.h:11
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Forĵetaĵo (surskrivebla):"
+
+#: data/glade/template-designer.glade.h:12
+msgid "3. Clipping width:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:13
+msgid "3. Margin"
+msgstr "3. Marĝeno"
+
+#: data/glade/template-designer.glade.h:14
+msgid "3. Round (radius of corner):"
+msgstr "3. Rondo (radiuso de angulo):"
+
+#: data/glade/template-designer.glade.h:15
+msgid "4. Clipping height:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:16
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. Horiz. forĵetaĵo (surskrivebla):"
+
+#: data/glade/template-designer.glade.h:17
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. Vert. forĵetaĵo (surskrivebla):"
+
+#: data/glade/template-designer.glade.h:18
+msgid "5. Waste (overprint allowed):"
+msgstr "5. Forĵetaĵo (surskrivebla):"
+
+#: data/glade/template-designer.glade.h:19
+msgid "6. Margin"
+msgstr "6. Marĝeno"
+
+#: data/glade/template-designer.glade.h:20
+msgid "Brand/Manufacturer:"
+msgstr "Marca/Produttore:"
+
+#: data/glade/template-designer.glade.h:21
+msgid "CD/DVD (including credit card CDs)"
+msgstr "KD/DVD"
+
+#: data/glade/template-designer.glade.h:22
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Gratulojn!\n"
+"\n"
+"Vi finis Desegnilon de Modelojn por gLabels.\n"
+"Se vi volas konservi tiun ĉi projekton, alklaku sur \"Apliku\".\n"
+"\n"
+"Male, alklaku sur \"Nuligu\" por nuligi\n"
+"vian projekton tutan aŭ \"Retroen\" por ankoraŭ redakti tiun ĉi desegnon."
+
+#: data/glade/template-designer.glade.h:30
+msgid "Design Completed"
+msgstr "Fino de Projektado"
+
+#: data/glade/template-designer.glade.h:31
+msgid "Distance from left edge (x0):"
+msgstr "Distanco el maldekstra rando (x0):"
+
+#: data/glade/template-designer.glade.h:32
+msgid "Distance from top edge (y0):"
+msgstr "Distanco el supra rando (y0):"
+
+#: data/glade/template-designer.glade.h:34
+msgid "Horizontal pitch (dx):"
+msgstr "Horizontala kvanto (dx):"
+
+#: data/glade/template-designer.glade.h:35
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:40
+msgid "Label Size (CD/DVD)"
+msgstr "Grando de etikedo (KD/DVD)"
+
+#: data/glade/template-designer.glade.h:41
+msgid "Label Size (Round)"
+msgstr "Grando de etikedo (Ronda)"
+
+#: data/glade/template-designer.glade.h:42
+msgid "Label or Card Shape"
+msgstr "Formo de etikedo aŭ de karto"
+
+#: data/glade/template-designer.glade.h:43
+msgid "Label or Card Size (Rectangular)"
+msgstr "Formo de etikedo aŭ de karto (Rektangula)"
+
+#: data/glade/template-designer.glade.h:44
+msgid "Layout #1"
+msgstr "Aspekto #1"
+
+#: data/glade/template-designer.glade.h:45
+msgid "Layout #2"
+msgstr "Aspekto #2"
+
+#: data/glade/template-designer.glade.h:46
+msgid "Layout(s)"
+msgstr "Aspekto(j)"
+
+#: data/glade/template-designer.glade.h:47
+msgid "Name and Description"
+msgstr "Nomo kaj Priskribo"
+
+#: data/glade/template-designer.glade.h:48
+msgid "Number across (nx):"
+msgstr "Numero transverse (nx):"
+
+#: data/glade/template-designer.glade.h:49
+msgid "Number down (ny):"
+msgstr "Numero sube (ny):"
+
+#: data/glade/template-designer.glade.h:50
+msgid "Number of Layouts"
+msgstr "Nombro da Aspektoj"
+
+#: data/glade/template-designer.glade.h:51
+msgid "Number of layouts:"
+msgstr "Nombro da aspektoj:"
+
+#: data/glade/template-designer.glade.h:52
+msgid "Page Size"
+msgstr "Grando de paĝo"
+
+#: data/glade/template-designer.glade.h:54
+msgid "Part #:"
+msgstr "Parto #:"
+
+#: data/glade/template-designer.glade.h:55
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:56
+msgid "Please enter the following layout information."
+msgstr "Bonvolu enmeti menditajn informojn."
+
+#: data/glade/template-designer.glade.h:57
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+"Bonvolu enmeti menditajn parametrojn de grando por unu etikedo en "
+"la modelo."
+
+#: data/glade/template-designer.glade.h:58
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"Bonvolu enmeti menditajn parametrojn de grando por unu etikedo aŭ karto en "
+"la modelo."
+
+#: data/glade/template-designer.glade.h:59
+msgid "Please select the basic shape of the labels or cards."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:60
+msgid "Please select the page size of the template stationery."
+msgstr "Bonvolu elekti grandon de paĝo por modelo de skribvaroj."
+
+#: data/glade/template-designer.glade.h:61
+msgid "Print test sheet"
+msgstr "Presu paĝon de elprovo"
+
+#: data/glade/template-designer.glade.h:62
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Rektangula aŭ kvadra (ankaŭ kun rondaj anguloj)"
+
+#: data/glade/template-designer.glade.h:63
+msgid "Round"
+msgstr "Ronda"
+
+#: data/glade/template-designer.glade.h:64
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"Modeloj necesas\n"
+"du aspektojn."
+
+#: data/glade/template-designer.glade.h:66
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"Modeloj necesas nur \n"
+"unu aspekton."
+
+#: data/glade/template-designer.glade.h:68
+msgid "Vertical pitch (dy):"
+msgstr "Vertikala kvanto (dy):"
+
+#: data/glade/template-designer.glade.h:69
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Bonvenon! Tiu ĉi estas Desegnilo de Modeloj por gLabels.\n"
+"\n"
+"Tio helpos vin por krei personigitan modelon por gLabels."
+
+#. Other ISO A series sizes
+#: data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "US Executive"
+
+#. Other US paper sizes
+#: data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "US Legal"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:2
+#: data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Etikedo por adreso"
+
+#. ===================================================================
+#. ============================================================
+#. ===================================================================
+#. ======================================================
+#: data/templates/avery-us-templates.xml.h:4
+#: data/templates/avery-iso-templates.xml.h:4
+#: data/templates/zweckform-iso-templates.xml.h:6
+#: data/templates/misc-us-templates.xml.h:3
+#: data/templates/misc-iso-templates.xml.h:17
+msgid "Business Cards"
+msgstr "Vizitkartoj"
+
+#: data/templates/avery-us-templates.xml.h:5
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "Etikedoj por KD/DVD (Etikedoj por diskoj)"
+
+#: data/templates/avery-us-templates.xml.h:6
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Etikedoj por KD/DVD (Etikedoj por diskoj)"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:8
+msgid "Diskette Labels"
+msgstr "Etikedoj por disketoj"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:10
+msgid "Filing Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:12
+msgid "Full Sheet Labels"
+msgstr "Paĝo plena da ekikedoj"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:14
+msgid "Large Round Labels"
+msgstr "Grandaj rondigitaj etikedoj"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:16
+msgid "Name Badge Labels"
+msgstr "Nomŝildetoj"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:18
+msgid "Return Address Labels"
+msgstr "Etikedoj por adreso de sendinto"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:20
+msgid "Shipping Labels"
+msgstr "Etikedoj por ekspedo"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:22
+msgid "Small Round Labels"
+msgstr "Malgrandaj rondigitaj etikedoj"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:24
+msgid "Square Labels"
+msgstr "Kvardaj etikedoj"
+
+#: data/templates/avery-us-templates.xml.h:25
+msgid "Video Tape Face Labels"
+msgstr "Etikedoj por videokasedo (faco)"
+
+#: data/templates/avery-us-templates.xml.h:26
+msgid "Video Tape Spine Labels"
+msgstr "Etikedoj por videokasedo (dorso)"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:2
+msgid "Address labels"
+msgstr "Etikedoj por adreso"
+
+#. ===============================================================
+#: data/templates/avery-iso-templates.xml.h:6
+msgid "CD Booklet"
+msgstr "CD Booklet"
+
+#. ===============================================================
+#: data/templates/avery-iso-templates.xml.h:8
+msgid "CD Inlet"
+msgstr "CD Inlet"
+
+#. ===============================================================
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:10
+#: data/templates/zweckform-iso-templates.xml.h:8
+#: data/templates/misc-us-templates.xml.h:5
+#: data/templates/misc-iso-templates.xml.h:21
+msgid "CD/DVD Labels"
+msgstr "Etikedoj por KD/DVD"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:12
+msgid "Diskette labels"
+msgstr "Etikedoj por disketoj"
+
+#. ===============================================================
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:14
+#: data/templates/zweckform-iso-templates.xml.h:14
+#: data/templates/misc-iso-templates.xml.h:35
+msgid "Mailing Labels"
+msgstr "Etikedoj por poŝto"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:16
+msgid "Mailing labels"
+msgstr "Etikedoj por poŝto"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:18
+msgid "Mini Address Labels"
+msgstr "Eta etikedoj por adreso"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:20
+msgid "Shipping labels"
+msgstr "Etikedo por ekspedo"
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "Plenrondaj etikedoj"
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Etikedoj por korektado kaj kovrado"
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:12
+msgid "Lever Arch File Labels"
+msgstr "Levilaj arkaj etikedoj por dosieroj"
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:16
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "QSL-Karten Etiketten 70mm x 50,8mm"
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:18
+msgid "Rectangular Copier Labels"
+msgstr "Rektangulaj etikedoj por kopiado"
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:20
+#: data/templates/misc-iso-templates.xml.h:44
+msgid "Rectangular Labels"
+msgstr "Rektangulaj Etikedoj"
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:22
+msgid "Video Labels (back)"
+msgstr "Etikedo por Video (retro)"
+
+#: data/templates/misc-us-templates.xml.h:1
+msgid "Business Card CD"
+msgstr "Vizitkarto KD"
+
+#: data/templates/misc-us-templates.xml.h:4
+msgid "CD Template Rectangles"
+msgstr "Modelaj Rektanguloj por KD"
+
+#: data/templates/misc-us-templates.xml.h:6
+msgid "CD/DVD Labels (Face Only)"
+msgstr "Etikedoj por KD/DVD (nur faco)"
+
+#. ===================================================================
+#: data/templates/misc-us-templates.xml.h:7
+#: data/templates/misc-iso-templates.xml.h:23
+msgid "CD/DVD Labels (face only)"
+msgstr "Etikedoj por KD/DVD (nur faco)"
+
+#. ===================================================================
+#: data/templates/misc-us-templates.xml.h:9
+msgid "Cassette Labels"
+msgstr "Etikedoj por kasedoj"
+
+#. ===================================================================
+#: data/templates/misc-us-templates.xml.h:11
+msgid "DLT Labels"
+msgstr "Etikedoj DLT"
+
+#. ===================================================================
+#: data/templates/misc-us-templates.xml.h:13
+msgid "Microtube labels"
+msgstr "Mikrotubaj etikedoj"
+
+#: data/templates/misc-us-templates.xml.h:14
+msgid "Mini-CD Labels"
+msgstr "Etikedoj por Mini-KD"
+
+#: data/templates/misc-us-templates.xml.h:15
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "Etikedoj por PRO CD (nur KD-dorso)"
+
+#: data/templates/misc-us-templates.xml.h:16
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "Etikedoj por PRO CD (nur faco)"
+
+#: data/templates/misc-us-templates.xml.h:17
+#: data/templates/misc-iso-templates.xml.h:42
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "Etikedoj por PRO CD (nur faco)"
+
+#: data/templates/misc-us-templates.xml.h:18
+msgid "Slimline CD Case (rightside up)"
+msgstr "Subtila KD-ujo (dekstrosupra)"
+
+#: data/templates/misc-us-templates.xml.h:19
+msgid "Slimline CD Case (upside down)"
+msgstr "Subtila KD-ujo (kaposuba)"
+
+#: data/templates/misc-iso-templates.xml.h:1
+msgid "Agipa 119488: Business Cards"
+msgstr "Agipa 119488: Vizitkartoj"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:3
+msgid "Allround Labels --24"
+msgstr "Plenrondaj etikedoj --24"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:5
+msgid "Allround Labels --44"
+msgstr "Plenrondaj etikedoj --44"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:7
+msgid "Allround Labels --64"
+msgstr "Plenrondaj etikedoj --64"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:9
+msgid "Allround Labels --65"
+msgstr "Plenrondaj etikedoj --65"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:11
+msgid "Arch File Labels"
+msgstr "Arkaj etikedoj por dosieroj"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:13
+msgid "Arch File Labels (large)"
+msgstr "Arkaj etikedoj por dosieroj (grandaj)"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:15
+msgid "Arch File Labels (small)"
+msgstr "Arkaj etikedoj por dosieroj (etaj)"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:19
+msgid "CD Labels"
+msgstr "Etikedoj por KD"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:25
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "Etikedoj kun standarta formato por KD/DVD (nur faco)"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:27
+msgid "Diskette Labels (face only)"
+msgstr "Etikedoj por disketoj (nur faco)"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:29
+msgid "EPSON Photo Stickers 16"
+msgstr "EPSON Photo Stickers 16"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:31
+msgid "Etiketten"
+msgstr "Etiketten"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:33
+msgid "Fridge Magnet Stickers"
+msgstr "Magnetaĵoj por fridujo"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:37
+msgid "Mailing Labels --14"
+msgstr "Etikedo por poŝto --14"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:39
+msgid "Mailing Labels-2 columns"
+msgstr "Etikedo por poŝto kun 2 kolumnoj"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:41
+msgid "Mailing Labels-3 columns"
+msgstr "Etikedo por poŝto kun 3 kolumnoj"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr "Etikedoj por video (nur frontispico)"
+
+#: data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Kreu etikedojn, vizitkartojn kaj kovrilojn de plurmediaĵoj"
+
+#: data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "gLabels Designer di etichetta"
+
+#: data/mime/glabels.keys.in.h:1 data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "Dosiero de Projekto de gLabels"
+
diff --git a/po/es.po b/po/es.po
new file mode 100644 (file)
index 0000000..bbf8dc2
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,3045 @@
+# Spanish translation of glabels.
+# sergio rivadero <sergiorivadero@argentina.com>, 2005.
+# Jorge González <jorgegonz@svn.gnome.org>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels 2.1.0\n"
+"Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=46122&ati\n"
+"POT-Creation-Date: 2010-04-07 16:45+0000\n"
+"PO-Revision-Date: 2010-04-11 13:57+0200\n"
+"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
+"Language-Team: Español <gnome-es-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/glabels.c:75 ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[ARCHIVO…]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- diseñador de etiquetas gLabels"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "establecer nombre de archivo de salida (predeterminado=\"output.pdf\")"
+
+#: ../src/glabels-batch.c:54 ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "nombre de archivo"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "número de hojas (predeterminado=1)"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "hojas"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "número de copias (predeterminado=1)"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "copias"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "primera etiqueta en primera hoja (predeterminado=1)"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "primero"
+
+#: ../src/glabels-batch.c:62 ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "imprimir un esbozo (para verificar la alineación de la impresora)"
+
+#: ../src/glabels-batch.c:64 ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "impresión invertida (imagen espejo)"
+
+#: ../src/glabels-batch.c:66 ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "imprimir marcas de corte"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "archivo de entrada para combinar"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "- procesador de lotes de archivos de etiquetas gLabels"
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "No se puede combinar el archivo %s\n"
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "No se puede abrir el archivo %s\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(sin nombre) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(modificado)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "_Modo selección"
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Texto"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "_Línea"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "_Rectangulo"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_Elipse"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "_Imagen"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "_Código de barras"
+
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "Propiedades de _fusión de datos"
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "Propiedades del objeto"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "Traer al _frente"
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "Enviar al f_ondo"
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "Rotar a la _izquierda"
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "Rotar a la _derecha"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "Reflejar _horizontalmente"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "Reflejar _verticalmente"
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "A la _izquierda"
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "A la _derecha"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "_Centrado"
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "_Superior"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "_Inferior"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "_Centrado"
+
+#: ../src/stock.c:93 ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "Centro de la _etiqueta"
+
+#: ../src/stock.c:95 ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "Color de relleno"
+
+#: ../src/stock.c:96 ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Color de línea"
+
+#: ../src/stock.c:97 ../src/stock.c:99
+msgid "Linked"
+msgstr "Enlazado"
+
+#: ../src/stock.c:98 ../src/stock.c:100
+msgid "Not Linked"
+msgstr "No enlazado"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Archivo"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "Abrir archivos _recientes"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Ver"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "Personalizar barra principal"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "Personalizar barra de dibujo"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Personalizar barra de propiedades"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "_Objetos"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Crear"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "Or_den"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "_Rotar/Reflejar"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "Alineado _horizontal"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "Alineado _vertical"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "A_yuda"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Menú contextual"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Nuevo"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Crear un archivo nuevo"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Abrir..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Abrir un archivo"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Guardar"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Guarda el archivo actual"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "Guardar _como..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Guardar el archivo actual con un nombre diferente"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "_Imprimir"
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Imprimir el archivo en uso"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Propiedades…"
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Modificar las propiedades del documento"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "_Diseñador de plantillas"
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Crear una plantilla personalizada"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "_Cerrar"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Guardar el archivo en uso"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "_Salir"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Salir del programa"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Cortar"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Cortar la selección"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Copiar"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Copiar la selección"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Pegar"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Pegar desde portapapeles"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Borrar"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Borrar los objetos seleccionados"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "_Deseleccionar todo"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Seleccionar todos los objetos"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "Deseleccionar todo"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Eliminar todas las selecciones"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Configurar aplicación"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Ampliar"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Aumentar escala"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Reducir"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Reducir escala"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Escala 1:1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "Restablecer escala al 100%"
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "Ampliar hasta ajustar"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "Establecer la escala para ajustar a la ventana"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "Modo de selección"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "Seleccionar, mover y modificar objetos"
+
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "Texto"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Crear un cuadro de texto"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Caja"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "Crear un objeto de caja o rectángulo"
+
+#: ../src/ui.c:282 ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "Línea"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "Crear una línea"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "Elipse"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "Crear un círculo o elipse"
+
+#: ../src/ui.c:296 ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "Imagen"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "Crear una imagen"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Código de barras"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "Crear un objeto código de barras"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "Traer al frente"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "Traer al frente"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "Enviar al fondo"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "Llevar objeto al fondo"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Rotar a la izquierda"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr "Rotar el objeto 90 grados en sentido antihorario"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Rotar a la derecha"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "Rotar el objeto 90 grados en sentido horario"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "Reflejar horizontalmente"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "Reflejar objeto horizontalmente"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "Reflejar verticalmente"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "Reflejar objeto verticalmente"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Alinear a la izquierda"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "Alinear objetos por su lado izquierdo"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Alinear a la derecha"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "Alinear objetos por su lado derecho"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "Alinear por centro horizontal"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "Alinear objetos por su centro horizontal"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "Alinear por parte superior"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "Alinear objetos por su parte superior"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "Alinear por parte inferior"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "Alinear objetos por su parte inferior"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "Alinear por centro vertical"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "Alinear objetos por su centro vertical"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "Centrar horizontalmente"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "Centrar objetos con el centro horizontal de la etiqueta"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "Centrar verticalmente"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "Centrar objetos con el centro vertical de la etiqueta"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "Mezclar propiedades"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "Editar propiedades de combinación de datos"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Contenido"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "Abrir el manual de glabels"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "Acerca de..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "Acerca de glabels"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "Barra de propiedades"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "Cambiar la visibilidad de la barra de propiedades"
+
+#: ../src/ui.c:444 ../src/ui.c:489 ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Mostrar consejos"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "Mostrar consejos en la barra de propiedades"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Rejilla"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr "Cambiar la visibilidad de la grilla"
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "Margen"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Cambiar la visibilidad de los márgenes"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "Barra principal"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Cambiar la visibilidad de la barra principal"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "Barra de dibujo"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "Cambiar la visibilidad de la barra de dibujo"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Mostrar consejos en la barra de herramientas principal"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "Mostrar consejos en la barra de herramientas de dibujo"
+
+#: ../src/ui-property-bar.c:1232 ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "Predeterminado"
+
+#: ../src/ui-property-bar.c:1239 ../src/object-editor.c:599
+msgid "No line"
+msgstr "Sin línea"
+
+#: ../src/ui-property-bar.c:1247 ../src/object-editor.c:606
+msgid "No fill"
+msgstr "Sin relleno"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Propiedades del objeto"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "Glabels incluye colaboraciones de:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Vea el archivo AUTHORS, "
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "o visite http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Un programa de creación de etiquetas y tarjetas de visita.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr ""
+"Jorge González <jorgegonz@svn.gnome.org>, 2010\n"
+"Sergio Rivadero <sergiorivadero@argentina.com>, 2005"
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"Glabels es software libre; Puede modificarlo y redistribuirlo\n"
+" bajo los términos de la Licencia Pública General de GNU tal\n"
+"como es publicada por la Free Software Foundation; ya sea la \n"
+"versión 2 de dicha licencia, o (a su opción) cualquier otra versión \n"
+"posterior.\n"
+"\n"
+"Este programa se distribuye con la esperanza que le será útil, pero\n"
+"SIN NINGUNA GARANTÍA; incluso sin la garantía implícita de\n"
+"MERCANTILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR; \n"
+"Para más detalles vea la Licencia Pública General de GNU.\n"
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "glabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Nueva etiqueta o tarjeta"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Propiedades de la etiqueta"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "Todos los archivos"
+
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "Documentos glabels"
+
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "Vaciar selección de nombre de archivo"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr "Por favor seleccione un archivo o escriba un nombre de archivo válido"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "Archivo no existe"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "No se puede abrir el archivo \"%s\""
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "Formato de archivo no soportado"
+
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "No se puede guardar el archivo \"%s\""
+
+#: ../src/file.c:517 ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "Se encontró un error al guardar. El archivo aún no está guardado."
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Guardar como \"%s\""
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "Debe proporcionar un nombre de archivo válido"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Sobreescribir el archivo \"%s\"?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "El archivo ya existe."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Guardar cambios del documento \"%s\" antes de cerrar?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "Sus cambios se perderán si no los guarda."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Cerrar sin guardar"
+
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "puntos"
+
+#: ../src/prefs.c:161 ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "pulgadas"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "mm"
+
+#: ../src/prefs-dialog.c:162 ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "Preferencias de gLabels"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "Propiedades del rectángulo"
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "Propiedades del elipse"
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "Propiedades de la línea"
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "Propiedades de la imagen"
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "Propiedades del texto"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "Propiedades del código de barras"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "Todos los archivos"
+
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "Imagen"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr "Propiedades de combinación de datos"
+
+#: ../src/merge-properties-dialog.c:289 ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr "Seleccione la fuente de datos para combinar"
+
+#: ../src/merge-properties-dialog.c:298 ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr "N/D"
+
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "Seleccionar"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr "Registro/Campo"
+
+#: ../src/merge-properties-dialog.c:340 ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "Datos"
+
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr "Fijo"
+
+#. ===================================================================
+#: ../src/print-op.c:237 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Etiquetas"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "Diseñador de plantillas gLabels"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "Bienvenido"
+
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "Nombre y descripción:"
+
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "Tamaño de la página"
+
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "Forma de etiqueta o tarjeta"
+
+#: ../src/template-designer.c:637
+msgid "Label or Card Size"
+msgstr "Etiqueta o tamaño de tarjeta"
+
+#: ../src/template-designer.c:737
+msgid "Label Size (round)"
+msgstr "Tamaño de etiqueta (redondeada)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "Tamaño de etiqueta (CD/DVD)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "Cantidad de disposiciones"
+
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "Disposicion(es):"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr "Diseño completo"
+
+#: ../src/template-designer.c:1253
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+"<span foreground='red' weight='bold'>La marca y el número de parte coinciden "
+"con una plantilla existente</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (cualquiera)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (solo código postal)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (código postal+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (cualquiera)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A o UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Code 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Code 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Intercalado 2 de 5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (matriz de datos)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Sin título"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "El código de barras está vacío"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Datos de código de barras no válidos"
+
+#: ../src/xml-label.c:193
+msgid "xmlParseFile error"
+msgstr "error de xmlParseFile"
+
+#: ../src/xml-label.c:234
+msgid "xmlParseDoc error"
+msgstr "error de xmlParseDoc"
+
+#: ../src/xml-label.c:270
+msgid "No document root"
+msgstr "No hay documento raíz"
+
+#: ../src/xml-label.c:278
+msgid "Importing from glabels 0.1 format"
+msgstr "Importando desde formato glabels 0.1"
+
+#: ../src/xml-label.c:287
+msgid "Importing from glabels 0.4 format"
+msgstr "Importando desde formato glabels 0.4"
+
+#: ../src/xml-label.c:296
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "Espacio de nombres de glabels desconocido -- Usando %s"
+
+#: ../src/xml-label.c:327 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Nodo raíz erróneo = \"%s\""
+
+#: ../src/xml-label.c:364
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "Nodo erróneo en sección Document = \"%s\""
+
+#: ../src/xml-label.c:409 ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "Nodo erróneo =  \"%s\""
+
+#: ../src/xml-label.c:851
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "Nodo erróneo en sección Data =  \"%s\""
+
+#: ../src/xml-label.c:1088 ../libglabels/xml-template.c:682
+msgid "Utf8 conversion error."
+msgstr "Conversión UTF-8 errónea"
+
+#: ../src/xml-label.c:1095
+msgid "Problem saving xml file."
+msgstr "Problemas al guardar archivo xml"
+
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "Ninguno"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Texto separado con comas"
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "Texto separado con dos puntos"
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "Texto separado con tabuladores"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Datos de la libreta de direcciones predeterminada de Evolution"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "Datos desde un archivo que contiene vCards"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "No se pudo construir la consulta"
+
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "No se pudo abrir la libreta de direcciones."
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "No se pudo listar los campos disponibles."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "No se pudieron obtener los contactos."
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "Hojas:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "desde:"
+
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "hasta:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "Comenzar en la etiqueta"
+
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr "en la primera hoja"
+
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "Copias:"
+
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "Intercalar"
+
+#: ../src/wdgt-media-select.c:288 ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297 ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309 ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609 ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "Cualquiera"
+
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d por hoja"
+
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:689 ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "Diámetro %s %s"
+
+#: ../src/wdgt-media-select.c:693 ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "Diámetro %.5g %s"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "No se encontraron plantillas recientes."
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr ""
+"Inténtelo seleccionando una plantilla en la página «Buscar todas las "
+"plantillas»."
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr "Sin coincidencia."
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr "Intente seleccionar otra marca, tamaño de página o categoría."
+
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "personalizado"
+
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "Color personalizado:"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "Elegir color:"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "negro"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "marrón"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr "marrón oscuro"
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "verde oscuro #2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "azul metalizado"
+
+#: ../src/mygal/color-palette.c:577 ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "azul muy oscuro"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "azul oscuro"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "verde muy oscuro"
+
+#: ../src/mygal/color-palette.c:582 ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "rojo oscuro"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "anaranjado"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "marrón claro"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "verde oscuro"
+
+#: ../src/mygal/color-palette.c:586 ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr "verde azulado"
+
+#: ../src/mygal/color-palette.c:587 ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "azul"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr "violeta azulado"
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "gris oscuro"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "rojo"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "naranja"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "lima"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr "verde opaco"
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr "cyan"
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "celeste"
+
+#: ../src/mygal/color-palette.c:598 ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "violeta"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "gris"
+
+#: ../src/mygal/color-palette.c:602 ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "fucsia"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "naranja claro"
+
+#: ../src/mygal/color-palette.c:604 ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "amarillo"
+
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "verde"
+
+#: ../src/mygal/color-palette.c:606 ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "turquesa"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "azul claro"
+
+#: ../src/mygal/color-palette.c:608 ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "borravino"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "gris claro"
+
+#: ../src/mygal/color-palette.c:612 ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "rosa"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "naranja claro"
+
+#: ../src/mygal/color-palette.c:614 ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "amarillo claro"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "verde claro"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "turquesa claro"
+
+#: ../src/mygal/color-palette.c:617 ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "celeste claro"
+
+#: ../src/mygal/color-palette.c:618 ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "violeta claro"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "blanco"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr "azul purpurado"
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "violeta oscuro"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "celeste"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "Error fatal de gLables"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "Error de gLabels"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "Otros"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Definido por el usuario"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"No se pudieron ubicar las definiciones del tamaño del papel. Puede que "
+"libglabels no esté instalado correctamente."
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"No se pudieron ubicar las definiciones de categorías. Puede que libglabels "
+"no esté instalado correctamente."
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"No se pudo ubicar ningún archivo de plantilla. Puede que libglabels no esté "
+"instalado correctamente."
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "Página de plantilla genérica %s"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "Faltan los atributos de nombre o marca/parte."
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "Código \"%s\" de tamaño de página desconocido, intentando como nombre."
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Código \"%s\" o nombre de página desconocido"
+
+#: ../libglabels/xml-template.c:627
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+"Falta el atributo requerido «marca» o «parte», intentándolo con un nombre "
+"obsoleto."
+
+#: ../libglabels/xml-template.c:637
+msgid "Name attribute also missing."
+msgstr "También falta el atributo del nombre."
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>Grabar la selección/vista previa</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Origen</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Formato:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Ubicación:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Seleccionar todo"
+
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "Deseleccionar todo"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialogo1"
+
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Orientación de la etiqueta</b>"
+
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Tipo de medio</b>"
+
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"larger\">Propiedades de objecto xxx</span>"
+
+#: ../data/glade/object-editor.glade.h:5 ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Alineación:"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "Permitir ampliar texto automáticamente"
+
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Ángulo:"
+
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Verificación"
+
+#: ../data/glade/object-editor.glade.h:9 ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Color:"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Activar sombra"
+
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Familia:"
+
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "Archivo:"
+
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr "Relleno"
+
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Alto:"
+
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "Insertar campo para combinar"
+
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr "Clave:"
+
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Longitud:"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "Espaciado:"
+
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "Literal:"
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Opacidad:"
+
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "Posición"
+
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Restablecer el tamaño de la imagen"
+
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Seleccionar un archivo"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Sombra"
+
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "Tamaño"
+
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Tamaño:"
+
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "Estilo"
+
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Estilo:"
+
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Ancho:"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "Desplazamiento en X:"
+
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Desplazamiento en Y:"
+
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "grados"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr "dígitos:"
+
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "Formato:"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Tamaño de página predeterminado</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Relleno</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Línea</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Texto</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Medidas</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Fuente:"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Pulgadas"
+
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "Documento"
+
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Milímetros"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Objetos"
+
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Puntos"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "Seleccione las propiedades predeterminadoas para los nuevos objetos."
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "Seleccione las propiedades del documento."
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "Carta"
+
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Opciones</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>Control de impresión (mezclar)</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>Control de impresión (simple)</b>"
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Negrita"
+
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Centrado"
+
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Familia tipográfica"
+
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Tamaño de fuente"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Itálica"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Alineación izquierda"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Ancho de línea"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Alineación derecha"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Color del texto"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "Color de texto"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(por ej., \"Etiquetas para correo,\" \"Tarjetas de negocio,\" ...)"
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(por ej., 8163A)"
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(por ej., Avery, Acme, ...)"
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Radio externo:"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Radio:"
+
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Ancho:"
+
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Alto:"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Radio interno:"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Sobrante (sobreimpresión permitida):"
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. Ancho de recorte:"
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Márgen"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Redondez (radio de las esquinas)"
+
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. Alto de recorte:"
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. Sobrante horizontal (sobreimpresión permitida):"
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. Sobrante vertical (sobreimpresión permitida):"
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "5. Sobrante (sobreimpresión permitida):"
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Margen"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "Marca/Fabricante:"
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (incluyendo CD-tarjeta)"
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Fecilitaciones!\n"
+" \n"
+"Ha completado la plantilla.\n"
+"Si desea guardar su diseño pulse en \"Aplicar\".\n"
+" \n"
+"Puede pulsar \"Cancelar\" para abandonar su diseño\n"
+"o \"Atrás\" para volver a editarlo."
+
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Descripción:"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "Distancia desde el borde izquierdo (x0):"
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "Distancia desde el borde superior (y0):"
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "Desplazamiento horizontal (dx):"
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"¿Cuantas disposiciones tendrá su plantilla?\n"
+"\n"
+"Una disposición es un conjunto de etiquetas o tarjetas que se pueden ordenar "
+"en una hoja.\n"
+"La mayoría de las plantillas necesitan solo una disposición, como en el "
+"primer ejemplo.\n"
+"El segundo ejemplo muestra dos disposiciones."
+
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Disposición 1:"
+
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Disposición 2:"
+
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "Cantidad horizontal (nx):"
+
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "Cantidad vertical (ny):"
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Cantidad de disposiciones:"
+
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Tamaño de la página:"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "Número de parte:"
+
+#: ../data/glade/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+"Por favor ingrese la siguiente información que identifique la plantilla."
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "Por favor ingrese la siguiente información sobre la disposición."
+
+#: ../data/glade/template-designer.glade.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr "Por favor ingrese las medidas de cada etiqueta de su plantilla."
+
+#: ../data/glade/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"Por favor ingrese los siguientes parámetros de tamaño para cada etiqueta en "
+"su plantilla."
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "Por favor seleccione la forma básica de las etiquetas o tarjetas."
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "Por favor seleccione el tamaño de la página para la plantilla."
+
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "Imprimir página de prueba"
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Rectangular o cuadrada (puede tener bordes redondeados)"
+
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "Redonda"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"Plantillas que necesitan\n"
+"dos disposiciones."
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"Plantillas que necesitan\n"
+"una disposición."
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "Desplazamiento vertical (dy):"
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Bienvenido al diseñador de plantillas de gLabels.\n"
+"\n"
+"Este diálogo le asistirá en la creación de una plantilla personalizada."
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "tamaño_de_página_de_cd"
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "finish_page"
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "página_de_distribución"
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr "nombre_de_la_página"
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "nlayouts_page"
+
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "pg_size_page"
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "rect_size_page"
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "round_size_page"
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "shape_page"
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr "start_page"
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "Marca:"
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Categoría:"
+
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Plantillas recientes"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Buscar todas las plantillas"
+
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "Rotar"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "Ejecutivo"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "Legal"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "Cualquier tarjeta"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "Cualquier etiqueta"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Tarjetas de negocio"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD u otros soportes"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "Productos para correo/envío"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Etiquetas rectangulares"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Etiquetas redondeadas"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "Etiquetas cuadradas"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Etiquetas de dirección"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Etiquetas de dirección"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+#| msgid "Small Round Labels"
+msgid "Allround labels"
+msgstr "Etiquetas redondas"
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Tarjetas de negocio"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "Tapa de CD"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "Interior de CD"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "Etiquetas de CD/DVD"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr "Etiquetas de diskettes"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "Etiquetas de disquette"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:20
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "Etiquetas de correo"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "Etiquetas de correo"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "Etiquetas de dirección pequeñas"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+msgid "Mini Labels"
+msgstr "Minietiquetas"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "Etiquetas de envío"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "Etiquetas de CD/DVD (etiquetas de discos)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Etiquetas de CD/DVD (etiquetas laterales)"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "Etiquetas divisoras"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "Etiquetas para archivado"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "Etiquetas de página completa"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+#| msgid "CD Labels"
+msgid "ID Labels"
+msgstr "Etiquetas de identificación"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "Fichas"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Etiquetas redondeadas grandes"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "Etiquetas de distintivos"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "Postales"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "Etiquetas de dirección de remitente"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Round Labels"
+msgstr "Etiquetas redondeadas"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "Etiquetas de envío"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Etiquetas redondeadas pequeñas"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "Etiquetas cuadradas"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "Etiquetas de video (frente)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "Etiquetas de video (lateral)"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "Etiquetas multipropósito de 17mm x 54mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Etiquetas de envío de 62mm x 100mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "Etiquetas de dirección estándar de 29mm x 90mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "Disquete de 3.5 pulgadas"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+#| msgid "Fill color"
+msgid "File Folder"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "Etiquetas grandes de dirección"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "Etiquetas de dirección para transporte"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "Etiquetas redondas"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "Etiquetas de dossier"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr "Etiquetas de dossier (grandes)"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr "Etiquetas de dossier (pequeñas)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "Etiquetas para CD"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr "Etiquetas CD/DVD (sólo frente)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "Etieuats CD/DVD Formato estándar (sólo frente)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "Etiquetas para disquette (sólo cara)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "Pegatinas EPSON Photo Stickers 16"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "Pegatinas magnéticas para frigorífico"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Etiquetas generales"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "Etiquetas para impresora de inyección/láser de 70x37mm"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr "Etiquetas de correo - 2 columnas"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr "Etiquetas de correo - 3 columnas"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "PRO CD Labels 2-up (sólo la cara)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Etiquetas rectangulares"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Universal Labels"
+msgstr "Etiquetas universales"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:48
+msgid "Video Labels (face only)"
+msgstr "Etiqeutas de video (solo frente)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "Etiquetas multipropósito"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "CD-tarjeta"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "Plantilla de rectángulos de CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "Etiquetas CD/DVD (Sólo frente)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "Etiquetas de casette"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "Etiquetas DLT"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:18
+#| msgid "CD Booklet"
+msgid "Jewel Case Booklet"
+msgstr "Libreto de CD «Jewel»"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Microtube labels"
+msgstr "Etiquetas microtubo"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "Mini-CD Labels"
+msgstr "Etiquetas Mini-CD"
+
+# REVISAR
+#: ../data/templates/misc-us-templates.xml.h:25
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "Etiquetas para CD (sólo el lateral del CD)"
+
+# REVISAR
+#: ../data/templates/misc-us-templates.xml.h:26
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "Etiquetas para CD (sólo carátula)"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:32
+msgid "Slimline CD Case (rightside up)"
+msgstr "Caja extraplana de CD (boca arriba)"
+
+# REVISAR
+#: ../data/templates/misc-us-templates.xml.h:33
+msgid "Slimline CD Case (upside down)"
+msgstr "Caja extraplana de CD (boca abajo)"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Etiquetas de corrección y cubrimiento"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+#| msgid "Filing Labels"
+msgid "File Back Labels"
+msgstr "Etiquetas de archivo"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "Etiquetas reusables multipropósito"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "QSL-Karten Etiketten 70mm x 50,8mm"
+
+# REVISAR
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr "Etiquetas para copiadoras rectangulares"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "Etiquetas de video (dorso)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Crear etiquetas, tarjetas de negocios y portadas"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "Diseñador de etiquetas gLabels"
+
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "Archivo de projecto gLabels"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: la opción «%s» es ambigua\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: la opción «--%s» no admite un argumento\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: la opción «%c%s» no admite un argumento\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: la opción «%s» necesita un argumento\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: no se reconoce la opción «--%s»\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: no se reconoce la opción «%c%s»\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opción ilegal -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opción no válida -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: la opción necesita un argumento -- %c\n"
+
+#~ msgid "Could not initialize Bonobo!\n"
+#~ msgstr "No se puede inicializar Bonobo!\n"
+
+#~ msgid "print this message"
+#~ msgstr "imprimir este mensaje"
+
+#~ msgid "print the version of glabels-batch being used"
+#~ msgstr "imprimir la versión utilizada de glabels-batch"
+
+#~ msgid "[OPTION...] GLABELS_FILE..."
+#~ msgstr "[OPCION...] archivo-glabels..."
+
+#~ msgid "missing glabels file\n"
+#~ msgstr "archivo glabels perdido\n"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Open"
+#~ msgstr "Abrir"
+
+#~ msgid "Align _Horizontally"
+#~ msgstr "Alinear _horizontalmente"
+
+#~ msgid "Align _Vertically"
+#~ msgstr "Alinear _verticalmente"
+
+#~ msgid "_Delete"
+#~ msgstr "_Borrar"
+
+#~ msgid "Print"
+#~ msgstr "Imprimir"
+
+#~ msgid "_Job"
+#~ msgstr "_Trabajo"
+
+#~ msgid "P_rinter"
+#~ msgstr "_Impresora"
+
+#~ msgid "Copies"
+#~ msgstr "Copias"
+
+#~ msgid "Document merge control"
+#~ msgstr "Control de combinación de documentos"
+
+#~ msgid "Print preview"
+#~ msgstr "Previsualizar la impresión"
+
+#~ msgid "Importing from glabels 1.91 format"
+#~ msgstr "Importando desde formato glabels 1.91"
+
+#~ msgid "Label size:"
+#~ msgstr "Tamaño de la etiqueta:"
+
+#~ msgid "Layout:"
+#~ msgstr "Disposición:"
+
+#~ msgid "%d x %d  (%d per sheet)"
+#~ msgstr "%d x %d  (%d por hoja)"
+
+#~ msgid "No paper files found!"
+#~ msgstr "No se encontró tipo de papel!"
+
+#~ msgid "Close"
+#~ msgstr "Cerrar"
+
+#~ msgid "Cu_t"
+#~ msgstr "Cor_tar"
+
+#~ msgid "Customize"
+#~ msgstr "Personalizar"
+
+#~ msgid "Customize toolbars"
+#~ msgstr "Personalizar barras de herramientas"
+
+#~ msgid "Dump XML"
+#~ msgstr "Volcar XML"
+
+#~ msgid "Dump the UI Xml description"
+#~ msgstr "Volcar la descripción UI XML"
+
+#~ msgid "Font selector"
+#~ msgstr "Selección de fuentes"
+
+#~ msgid "Icon and _Text"
+#~ msgstr "Icono y _texto"
+
+#~ msgid "M_arkup"
+#~ msgstr "_Margen"
+
+#~ msgid "New"
+#~ msgstr "Nuevo"
+
+#~ msgid "Object property editor"
+#~ msgstr "Editor de propiedades de objeto"
+
+#~ msgid "Only show icons in the main toolbar"
+#~ msgstr "Sólo mostrar iconos en la barra principal"
+
+#~ msgid "Pr_eferences..."
+#~ msgstr "Pre_ferencias..."
+
+#~ msgid "Properties"
+#~ msgstr "Propiedades"
+
+#~ msgid "Quit"
+#~ msgstr "Salir"
+
+#~ msgid "Redo"
+#~ msgstr "Rehacer"
+
+#~ msgid "Redo the undone action"
+#~ msgstr "Repetir la última acción"
+
+#~ msgid "Save"
+#~ msgstr "Guardar"
+
+#~ msgid "Save As"
+#~ msgstr "Guardar como"
+
+#~ msgid "Select _All"
+#~ msgstr "Seleccionar t_odo"
+
+#~ msgid "Set main toolbar button style according to desktop default"
+#~ msgstr ""
+#~ "Establecer apariencia de la barra principal según estilo predeterminado "
+#~ "del escitorio"
+
+#~ msgid "Show both icons and texts in the main toolbar"
+#~ msgstr "Mostrar iconos y texto en la barra principal"
+
+#~ msgid "Template Designer"
+#~ msgstr "Diseñador de plantillas"
+
+#~ msgid "U_n-select All"
+#~ msgstr "_Deseleccionar todo"
+
+#~ msgid "Undo"
+#~ msgstr "Deshacer"
+
+#~ msgid "Undo the last action"
+#~ msgstr "Deshcar la última acción"
+
+#~ msgid "_About..."
+#~ msgstr "_Acerca de..."
+
+#~ msgid "_Contents"
+#~ msgstr "_Contenido"
+
+#~ msgid "_Copy"
+#~ msgstr "_Copiar"
+
+#~ msgid "_Create Object"
+#~ msgstr "Crear _objeto"
+
+#~ msgid "_Debug"
+#~ msgstr "_Depurar"
+
+#~ msgid "_Desktop Default"
+#~ msgstr "_Predeterminado del escritorio"
+
+#~ msgid "_Drawing Toolbar"
+#~ msgstr "Barra de dibujo"
+
+#~ msgid "_Icon"
+#~ msgstr "_Icono"
+
+#~ msgid "_Main Toolbar"
+#~ msgstr "Barra principal"
+
+#~ msgid "_Merge Properties..."
+#~ msgstr "Propiedades de _combinación de datos"
+
+#~ msgid "_Paste"
+#~ msgstr "_Pegar"
+
+#~ msgid "_Property Toolbar"
+#~ msgstr "Barra de propedades"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Load image"
+#~ msgstr "Cargar imagen"
+
+#~ msgid "  "
+#~ msgstr "  "
+
+#~ msgid "Label or Card Size (Rectangular)"
+#~ msgstr "Tamaño de etiqueta o tarjeta (rectangular)"
+
+#, fuzzy
+#~ msgid "Object _Properties..."
+#~ msgstr "Propiedades del texto"
+
+#~ msgid "Display units"
+#~ msgstr "Mostrar unidades de medida"
+
+#~ msgid "Default page size"
+#~ msgstr "Tamaño de página por omisión"
+
+#~ msgid "Outline"
+#~ msgstr "Contorno"
+
+#~ msgid "Edit line object properties"
+#~ msgstr "Modificar las propiedades del objeto línea"
+
+#~ msgid "Edit text object properties"
+#~ msgstr "Modificar las propiedades del objeto texto"
+
+#~ msgid "Maintain current aspect ratio"
+#~ msgstr "Mantener la proporción actual del aspecto"
+
+#, fuzzy
+#~ msgid "Open %s"
+#~ msgstr "Abrir"
+
+#~ msgid "Revert to saved copy of %s?"
+#~ msgstr "¿ Recuperar la copia salvada de %s ?"
+
+#~ msgid "Unknown media type. Using default."
+#~ msgstr "Tipo de papel desconocido. Utilizando el tipo por omisión."
+
+#~ msgid ""
+#~ "``%s'' has been modified.\n"
+#~ "\n"
+#~ "Do you wish to save it?"
+#~ msgstr ""
+#~ "\"%s\" ha sido modificado.\n"
+#~ "\n"
+#~ "¿ Desea salvarlo ?"
+
+#~ msgid "Close / Save label as"
+#~ msgstr "Cerrar / Salvar etiqueta como"
+
+#~ msgid "Label no longer valid!"
+#~ msgstr "¡ La etiqueta ya no es válida !"
+
+#~ msgid "Error writing file"
+#~ msgstr "Error salvando el archivo"
+
+#~ msgid "Edit properties..."
+#~ msgstr "Modificar propiedades"
+
+#~ msgid "Appearance"
+#~ msgstr "Apariencia"
+
+#~ msgid "Position/Size"
+#~ msgstr "Posición/Tamaño"
+
+#~ msgid "Image format not currently supported"
+#~ msgstr "Formato de imagen no soportado actualmente"
+
+#~ msgid "Show text with barcode"
+#~ msgstr "Mostrar texto con código de barras"
+
+#~ msgid "Column"
+#~ msgstr "Columna"
+
+#~ msgid "Sample data"
+#~ msgstr "Datos de ejemplo"
+
+#~ msgid "Make a new, empty label"
+#~ msgstr "Crear una etiqueta vacía nueva"
+
+#~ msgid "  New   "
+#~ msgstr "Nuevo"
+
+#~ msgid "New Label/Card"
+#~ msgstr "Nueva tarjeta/etiqueta"
+
+#~ msgid "  Open  "
+#~ msgstr "  Abrir  "
+
+#~ msgid "  Save  "
+#~ msgstr "  Guardar  "
+
+#~ msgid " Print  "
+#~ msgstr " Imprimir  "
+
+#~ msgid "Function is not implemented!"
+#~ msgstr "¡ La funcionalidad no está aún implementada !"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..687df6e
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,3531 @@
+# French translation of glabels.
+# Copyright (C) 2001 Jim Evins <evins@snaught.com>
+# Olivier Berger <oberger@gnu.org>
+# Florent Morel <florent@taket.org>, 2001, 2004.
+# Bruno Brouard <annoa.b@gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels 2.0.1\n"
+"Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=46122&ati\n"
+"POT-Creation-Date: 2010-03-17 03:58+0000\n"
+"PO-Revision-Date: 2010-03-06 12:00+0100\n"
+"Last-Translator: Bruno Brouard <annoa.b@gmail.com>\n"
+"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../src/glabels.c:75 ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[FICHIER...]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- créateur d'étiquettes gLabels"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "définit le nom du fichier de sortie (défaut=\"output.pdf\")"
+
+#: ../src/glabels-batch.c:54 ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "nom du fichier"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "nombre de pages (défaut=1)"
+
+# src/print_copies.c:193
+# src/print_copies.c:193
+# src/print_copies.c:171
+# src/print_copies.c:170
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "pages"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "nombre de copies (défaut=1)"
+
+# src/print.c:153
+# src/print.c:153
+# src/print.c:146
+# src/print_dialog.c:104
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "copies"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "première étiquette sur la première page (défaut=1)"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "première"
+
+# src/print.c:180
+# src/print.c:180
+# src/print.c:196
+# src/print_dialog.c:152
+#: ../src/glabels-batch.c:62 ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "imprime des bordures (pour tester l'alignement de l'imprimante)"
+
+# src/print_dialog.c:160
+#: ../src/glabels-batch.c:64 ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "imprime à l'envers (i.e. une image miroir)"
+
+#: ../src/glabels-batch.c:66 ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "imprime les guides de coupe"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "nom du fichier d'entrée pour la fusion"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "- traitement par lots de fichiers d'étiquettes gLabels"
+
+# src/file.c:214
+# src/file.c:214
+# src/file.c:249
+# src/file.c:249
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr ""
+"impossible d'effectuer une fusion de document avec le fichier glabels %s\n"
+
+# src/file.c:214
+# src/file.c:214
+# src/file.c:249
+# src/file.c:249
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "impossible d'ouvrir le fichier glabels %s\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(aucun) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(modifié)"
+
+# src/display.c:1157 src/display.c:1205
+# src/display.c:1160 src/display.c:1208
+# src/menu.c:94
+# src/menu.c:94
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "Mode _sélection"
+
+# src/item_text.c:442 src/item_text.c:627
+# src/item_text.c:442 src/item_text.c:627
+# src/item_text.c:460 src/item_text.c:464 src/item_text.c:637 src/menu.c:100
+# src/item_text.c:460 src/item_text.c:464 src/item_text.c:637 src/menu.c:100
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Texte"
+
+# src/item_line.c:271
+# src/item_line.c:271
+# src/item_line.c:256 src/menu.c:106
+# src/item_line.c:256 src/menu.c:106
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "_Ligne"
+
+# src/menu.c:103
+# src/menu.c:103
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "_Boîte"
+
+# src/menu.c:109
+# src/menu.c:109
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_Ellipse"
+
+# src/item_image.c:283
+# src/item_image.c:283
+# src/item_image.c:268 src/menu.c:113
+# src/item_image.c:268 src/menu.c:113
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "_Image"
+
+# src/item_barcode.c:316
+# src/item_barcode.c:317
+# src/menu.c:116
+# src/menu.c:116
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "_Code-barre"
+
+# src/item_text.c:467
+# src/item_text.c:467
+# src/menu.c:132 src/menu.c:223
+# src/menu.c:132 src/menu.c:223
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "Propriétés de _fusion"
+
+# src/item_text.c:467
+# src/item_text.c:467
+# src/item_text.c:482
+# src/item_text.c:482
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "_Propriétés de l'objet"
+
+# src/display.c:1167 src/display.c:1215
+# src/display.c:1170 src/display.c:1218
+# src/display.c:1181 src/display.c:1229
+# src/display.c:1196 src/display.c:1244
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "_Avancer au premier plan"
+
+# src/display.c:1173 src/display.c:1221
+# src/display.c:1176 src/display.c:1224
+# src/display.c:1187 src/display.c:1235
+# src/display.c:1202 src/display.c:1250
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "_Reculer à l'arrière-plan"
+
+# src/rotate_select.c:187
+# src/rotate_select.c:187
+# src/rotate_select.c:167
+# src/rotate_select.c:169
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "Rotation _gauche"
+
+# src/rotate_select.c:187
+# src/rotate_select.c:187
+# src/rotate_select.c:167
+# src/rotate_select.c:169
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "Rotation _droite"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "Retourner _horizontalement"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "Retourner _verticalement"
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "_Gauches"
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "_Droites"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "_Centres"
+
+# src/menu.c:157
+# src/menu.c:157
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "En _haut"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "En bas"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "Centrés"
+
+#: ../src/stock.c:93 ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "Ce_ntre de l'étiquette"
+
+#: ../src/stock.c:95 ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "Couleur de remplissage"
+
+#: ../src/stock.c:96 ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Couleur de ligne"
+
+# src/item_line.c:271
+# src/item_line.c:271
+# src/item_line.c:256 src/menu.c:106
+# src/item_line.c:256 src/menu.c:106
+#: ../src/stock.c:97 ../src/stock.c:99
+msgid "Linked"
+msgstr "Lié"
+
+# src/merge.c:80
+# src/merge.c:78
+#: ../src/stock.c:98 ../src/stock.c:100
+msgid "Not Linked"
+msgstr "Non lié"
+
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/item_box.c:258 src/item_ellipse.c:260
+# src/item_box.c:258 src/item_ellipse.c:260
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Fichier"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "_Fichiers récents"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "É_dition"
+
+# src/menu.c:50
+# src/menu.c:50
+# src/menu.c:50
+# src/menu.c:50
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Affichage"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "Personnaliser la barre d'outils principale"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "Personnaliser la barre d'outils dessin"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Personnaliser la barre d'outils propriétés"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "_Objets"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Créer"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "_Ordre"
+
+# src/rotate_select.c:187
+# src/rotate_select.c:187
+# src/rotate_select.c:167
+# src/rotate_select.c:169
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "_Rotation/Retournement"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "Aligner _horizontalement"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "Aligner _verticalement"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "Aid_e"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Menu contextuel"
+
+# src/menu.c:50
+# src/menu.c:50
+# src/menu.c:50
+# src/menu.c:50
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Nouveau"
+
+# src/tools.c:70
+# src/tools.c:70
+# src/menu.c:106 src/menu.c:197
+# src/menu.c:106 src/menu.c:197
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Crée un nouveau document"
+
+# src/file.c:178
+# src/file.c:178
+# src/file.c:211
+# src/file.c:211
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Ouvrir..."
+
+# src/menu.c:140
+# src/menu.c:140
+# src/menu.c:170
+# src/menu.c:170
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Ouvre un fichier"
+
+# src/file.c:271 src/mdi.c:660
+# src/file.c:271 src/mdi.c:666
+# src/file.c:311 src/mdi.c:623
+# src/file.c:311 src/mdi.c:623
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Enregistrer"
+
+# src/menu.c:142
+# src/menu.c:142
+# src/menu.c:172
+# src/menu.c:172
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Enregistre le fichier en cours"
+
+# src/file.c:271 src/mdi.c:660
+# src/file.c:271 src/mdi.c:666
+# src/file.c:311 src/mdi.c:623
+# src/file.c:311 src/mdi.c:623
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "Enregistrer _sous..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Enregistre le fichier en cours avec un nom différent"
+
+# src/print.c:149
+# src/print.c:149
+# src/print.c:141
+# src/print_dialog.c:99
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "Im_primer..."
+
+# src/menu.c:145
+# src/menu.c:145
+# src/menu.c:175
+# src/menu.c:175
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Imprime le fichier en cours"
+
+# src/item_text.c:467
+# src/item_text.c:467
+# src/item_text.c:482
+# src/item_text.c:482
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Propriétés..."
+
+# src/item_box.c:251
+# src/item_box.c:251
+# src/merge_properties.c:82
+# src/merge_properties.c:82
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Modifier les propriétés du document"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "_Créateur de modèles..."
+
+# src/tools.c:70
+# src/tools.c:70
+# src/menu.c:106 src/menu.c:197
+# src/menu.c:106 src/menu.c:197
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Crée un modèle personnalisé"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "_Fermer"
+
+# src/menu.c:142
+# src/menu.c:142
+# src/menu.c:172
+# src/menu.c:172
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Ferme le fichier actuel"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "_Quitter"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Quitte le programme"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Couper"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Coupe la sélection"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Copier"
+
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:86
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Copie la sélection"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Coller"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Colle le presse-papiers"
+
+# src/display.c:1157 src/display.c:1205
+# src/display.c:1160 src/display.c:1208
+# src/display.c:1171 src/display.c:1219
+# src/display.c:1186 src/display.c:1234
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Supprimer"
+
+# src/tools.c:64
+# src/tools.c:64
+# src/menu.c:100 src/menu.c:191
+# src/menu.c:100 src/menu.c:191
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Supprime les objets sélectionnés"
+
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:85
+# src/menu.c:85
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "Tout sélectionner"
+
+# src/tools.c:59
+# src/tools.c:59
+# src/menu.c:95 src/menu.c:186
+# src/menu.c:95 src/menu.c:186
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Sélectionne tous les objets"
+
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:85
+# src/menu.c:85
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "Désélectionner tout"
+
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:86
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Annule toutes les sélections"
+
+# src/preferences.c:92
+# src/prefs.c:101
+# src/prefs.c:92
+# src/prefs.c:86
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Préférences"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Configure le logiciel"
+
+# src/tools.c:84
+# src/tools.c:84
+# src/menu.c:121 src/menu.c:211
+# src/menu.c:121 src/menu.c:211
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Zoom avant"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Augmente l'agrandissement"
+
+# src/tools.c:87
+# src/tools.c:87
+# src/menu.c:124 src/menu.c:214
+# src/menu.c:124 src/menu.c:214
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Zoom arrière"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Réduit l'agrandissement"
+
+# src/tools.c:90
+# src/tools.c:90
+# src/menu.c:127
+# src/menu.c:127
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Zoom 1:1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "Remet l'échelle à 100%"
+
+# src/tools.c:90
+# src/tools.c:90
+# src/menu.c:127 src/menu.c:217
+# src/menu.c:127 src/menu.c:217
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "Adapte le zoom à la taille de la fenêtre"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "Adapte l'échelle à la taille de la fenêtre"
+
+# src/display.c:1157 src/display.c:1205
+# src/display.c:1160 src/display.c:1208
+# src/menu.c:94
+# src/menu.c:94
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "Mode sélection"
+
+# src/tools.c:59
+# src/tools.c:59
+# src/menu.c:95 src/menu.c:186
+# src/menu.c:95 src/menu.c:186
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "Sélectionne, déplace et modifie les objets"
+
+# src/item_text.c:442 src/item_text.c:627
+# src/item_text.c:442 src/item_text.c:627
+# src/item_text.c:460 src/item_text.c:464 src/item_text.c:637 src/menu.c:100
+# src/item_text.c:460 src/item_text.c:464 src/item_text.c:637 src/menu.c:100
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "Texte"
+
+# src/tools.c:64
+# src/tools.c:64
+# src/menu.c:100 src/menu.c:191
+# src/menu.c:100 src/menu.c:191
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Crée un objet texte"
+
+# src/menu.c:103
+# src/menu.c:103
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Boîte"
+
+# src/tools.c:67
+# src/tools.c:67
+# src/menu.c:103 src/menu.c:194
+# src/menu.c:103 src/menu.c:194
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "Crée un objet boîte/rectangle"
+
+# src/item_line.c:271
+# src/item_line.c:271
+# src/item_line.c:256 src/menu.c:106
+# src/item_line.c:256 src/menu.c:106
+#: ../src/ui.c:282 ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "Ligne"
+
+# src/tools.c:70
+# src/tools.c:70
+# src/menu.c:106 src/menu.c:197
+# src/menu.c:106 src/menu.c:197
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "Crée un objet ligne"
+
+# src/menu.c:109
+# src/menu.c:109
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "Ellipse"
+
+# src/tools.c:73
+# src/tools.c:73
+# src/menu.c:110 src/menu.c:200
+# src/menu.c:110 src/menu.c:200
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "Crée un objet ellipse/cercle"
+
+# src/item_image.c:283
+# src/item_image.c:283
+# src/item_image.c:268 src/menu.c:113
+# src/item_image.c:268 src/menu.c:113
+#: ../src/ui.c:296 ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "Image"
+
+# src/tools.c:76
+# src/tools.c:76
+# src/menu.c:113 src/menu.c:203
+# src/menu.c:113 src/menu.c:203
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "Crée un objet image"
+
+# src/item_barcode.c:316
+# src/item_barcode.c:317
+# src/menu.c:116
+# src/menu.c:116
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Code-barre"
+
+# src/tools.c:79
+# src/tools.c:79
+# src/menu.c:116 src/menu.c:206
+# src/menu.c:116 src/menu.c:206
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "Crée un objet code-barre"
+
+# src/display.c:1167 src/display.c:1215
+# src/display.c:1170 src/display.c:1218
+# src/display.c:1181 src/display.c:1229
+# src/display.c:1196 src/display.c:1244
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "Avancer au premier plan"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "Remonte l'objet au premier plan"
+
+# src/display.c:1173 src/display.c:1221
+# src/display.c:1176 src/display.c:1224
+# src/display.c:1187 src/display.c:1235
+# src/display.c:1202 src/display.c:1250
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "Reculer à l'arrière-plan"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "Descend l'objet à l'arrière-plan"
+
+# src/rotate_select.c:187
+# src/rotate_select.c:187
+# src/rotate_select.c:167
+# src/rotate_select.c:169
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Rotation gauche"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr ""
+"Tourne l'objet de 90 degrés dans le sens inverse des aiguilles d'une montre"
+
+# src/rotate_select.c:187
+# src/rotate_select.c:187
+# src/rotate_select.c:167
+# src/rotate_select.c:169
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Rotation droite"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "Tourne l'objet de 90 degrés dans le sens des aiguilles d'une montre"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "Retourner horizontalement"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "Retourne l'objet horizontalement"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "Retourner verticalement"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "Retourne l'objet verticalement"
+
+# src/prop_text.c:277
+# src/prop_text.c:264
+# src/prop_text.c:248
+# src/prop_text.c:248
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Aligner à gauche"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "Aligne les objets sur leur bordure gauche"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Aligner à droite"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "Aligne les objets sur leur bordure droite"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "Aligner le centre horizontalement"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "Aligne horizontalement le centre des objets"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "Aligner au sommet"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "Aligne les objets d'après leur sommet"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "Aligner à la base"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "Aligne les objets d'après leur base"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "Aligner le centre verticalement"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "Aligne verticalement le centre des objets"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "Centrer horizontalement"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "Centre les objets horizontalement par rapport à l'étiquette"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "Centrer verticalement"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "Centre les objets verticalement par rapport à l'étiquette"
+
+# src/item_text.c:467
+# src/item_text.c:467
+# src/menu.c:132 src/menu.c:223
+# src/menu.c:132 src/menu.c:223
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "Propriétés de fusion"
+
+# src/item_image.c:272
+# src/item_image.c:272
+# src/menu.c:133
+# src/menu.c:133
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "Modifie les propriétés de fusion"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Sommaire"
+
+# src/file.c:183
+# src/file.c:183
+# src/file.c:213
+# src/file.c:213
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "Ouvre le manuel de glabels"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "À propos..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "À propos de glabels"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "Barre d'outils de propriétés"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr ""
+"Affiche ou pas la barre d'outils de propriétés dans la fenêtre actuelle"
+
+#: ../src/ui.c:444 ../src/ui.c:489 ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Afficher les infos-bulles"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "Affiche les info-bulles dans la barre d'outils de propriétés"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Grille"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr "Affiche ou pas la grille dans la fenêtre actuelle"
+
+# src/preferences.c:213
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "Marges"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Affiche ou pas les lignes de marges dans la fenêtre actuelle"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "Barre d'outils principale"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Affiche ou pas la barre d'outils principale dans la fenêtre actuelle"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "Barre d'outils dessin"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "Affiche ou pas la barre d'outils dessin dans la fenêtre actuelle"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Afficher les info-bulles dans la barre d'outils principale"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "Affiche les info-bulles dans la barre d'outils de dessin"
+
+# src/display.c:1157 src/display.c:1205
+# src/display.c:1160 src/display.c:1208
+# src/display.c:1171 src/display.c:1219
+# src/display.c:1186 src/display.c:1234
+#: ../src/ui-property-bar.c:1232 ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "Par défaut"
+
+# src/merge.c:80
+# src/merge.c:78
+#: ../src/ui-property-bar.c:1239 ../src/object-editor.c:599
+msgid "No line"
+msgstr "Pas de ligne"
+
+#: ../src/ui-property-bar.c:1247 ../src/object-editor.c:606
+msgid "No fill"
+msgstr "Pas de remplissage"
+
+# src/item_text.c:467
+# src/item_text.c:467
+# src/item_text.c:482
+# src/item_text.c:482
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Propriétés de l'objet"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "Glabels contient des contributions de :"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Consultez le fichier AUTHORS\n"
+"pour des remerciements supplémentaires,"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "ou visitez http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Un logiciel de création de cartes de visite et d'étiquettes.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr ""
+"Olivier Berger <oberger@gnu.org>\n"
+"Florent Morel <florent@taket.org>, 2001, 2004\n"
+"Claude Paroz <claude@2xlibre.net>, 2007\n"
+"Bruno Brouard <annoa.b@gmail.com>, 2010"
+
+# src/menu.c:185
+# src/menu.c:185
+# src/menu.c:290
+# src/menu.c:290
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"Glabels est un logiciel libre ; vous pouvez le redistribuer et/ou\n"
+" le modifier conformément aux dispositions de la Licence Publique Générale GNU,\n"
+"telle que publiée par la Free Software Foundation ; version 2 de la licence,\n"
+"ou encore (à votre choix) toute version ultérieure.\n"
+" \n"
+"Ce programme est distribué dans l'espoir qu'il sera utile, mais\n"
+"SANS AUCUNE GARANTIE ; sans même la garantie implicite de \n"
+"COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.\n"
+"Pour plus de détails, voir la Licence Publique Générale GNU.\n"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "glabels"
+
+# src/file.c:59
+# src/file.c:59
+# src/file.c:72
+# src/file.c:72
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Nouvelle étiquette ou carte"
+
+# src/item_text.c:467
+# src/item_text.c:467
+# src/item_text.c:482
+# src/item_text.c:482
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Propriétés de l'étiquette"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "Tous les fichiers"
+
+# src/preferences.c:92
+# src/prefs.c:101
+# src/prefs.c:92
+# src/prefs.c:86
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "Documents gLabels"
+
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:86
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "Nom de fichier sélectionné vide"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr "Sélectionnez un fichier ou donnez un nom de fichier valide"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "Ce fichier n'existe pas"
+
+# src/file.c:214
+# src/file.c:214
+# src/file.c:249
+# src/file.c:249
+# c-format
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Impossible d'ouvrir le fichier « %s »"
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "Format de fichier non pris en charge"
+
+# src/file.c:248 src/mdi.c:635
+# src/file.c:248 src/mdi.c:641
+# src/file.c:288 src/mdi.c:601
+# src/file.c:288 src/mdi.c:601
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Impossible d'enregistrer « %s »"
+
+#: ../src/file.c:517 ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr ""
+"Erreur rencontrée durant l'enregistrement. Le fichier n'est toujours pas "
+"enregistré."
+
+# src/file.c:278
+# src/file.c:278
+# src/file.c:316
+# src/file.c:316
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Enregistrer « %s » sous"
+
+# src/file.c:319 src/mdi.c:729
+# src/file.c:319 src/mdi.c:735
+# src/file.c:362 src/mdi.c:693
+# src/file.c:362 src/mdi.c:693
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "Donnez un nom de fichier valide"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Écraser le fichier « %s » ?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "Ce fichier existe déjà."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Enregistrer les modifications du document « %s » avant de fermer ?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "Vos changements seront perdus si vous ne les enregistrez pas."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Fermer sans enregistrer"
+
+# src/print.c:171
+# src/prefs.c:463 src/prefs.c:470 src/prop_line.c:202
+# src/prefs.c:445 src/prefs.c:452 src/prop_line.c:183
+# src/prefs.c:448 src/prefs.c:455 src/prop_line.c:183
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "points"
+
+# src/item_line.c:271
+# src/prefs.c:465
+# src/prefs.c:447
+# src/prefs.c:450
+#: ../src/prefs.c:161 ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "pouces"
+
+# src/prefs.c:467
+# src/prefs.c:449
+# src/prefs.c:452
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "mm"
+
+# src/preferences.c:92
+# src/prefs.c:101
+# src/prefs.c:92
+# src/prefs.c:86
+#: ../src/prefs-dialog.c:162 ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "Préférences de gLabels"
+
+# src/item_box.c:251
+# src/item_box.c:251
+# src/item_box.c:235
+# src/item_box.c:235
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "Propriétés de l'objet boîte"
+
+# src/item_ellipse.c:256
+# src/item_ellipse.c:256
+# src/item_ellipse.c:237
+# src/item_ellipse.c:237
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "Propriétés de l'objet ellipse"
+
+# src/item_box.c:251
+# src/item_box.c:251
+# src/item_box.c:235
+# src/item_box.c:235
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "Propriétés de l'objet ligne"
+
+# src/item_image.c:272
+# src/item_image.c:272
+# src/item_image.c:257
+# src/item_image.c:257
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "Propriétés de l'objet image"
+
+# src/item_box.c:251
+# src/item_box.c:251
+# src/item_box.c:235
+# src/item_box.c:235
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "Propriétés de l'objet texte"
+
+# src/item_barcode.c:299
+# src/item_barcode.c:299
+# src/item_barcode.c:287
+# src/item_barcode.c:287
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "Propriétés de l'objet code-barre"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "Tous les fichiers"
+
+# src/item_image.c:283
+# src/item_image.c:283
+# src/item_image.c:268 src/menu.c:113
+# src/item_image.c:268 src/menu.c:113
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "Toutes les images"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+# src/item_text.c:467
+# src/item_text.c:467
+# src/menu.c:132 src/menu.c:223
+# src/menu.c:132 src/menu.c:223
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr "Propriétés de fusion"
+
+# src/merge_ui_text.c:170
+# src/merge_ui_text.c:170
+#: ../src/merge-properties-dialog.c:289 ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr "Sélection du fichier de données pour la fusion"
+
+# src/merge_ui.c:207 src/merge_ui.c:242 src/merge_ui.c:387 src/merge_ui.c:428
+# src/merge_ui.c:207 src/merge_ui.c:242 src/merge_ui.c:387 src/merge_ui.c:428
+#: ../src/merge-properties-dialog.c:298 ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr "Non défini"
+
+# src/display.c:1157 src/display.c:1205
+# src/display.c:1160 src/display.c:1208
+# src/menu.c:94
+# src/menu.c:94
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "Sélectionner"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr "Enregistrements/Champs"
+
+# src/item_barcode.c:309
+# src/item_barcode.c:308
+# src/item_barcode.c:297
+# src/item_barcode.c:297
+#: ../src/merge-properties-dialog.c:340 ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "Données"
+
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/merge_properties.c:168
+# src/merge_properties.c:168
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr "Fixé"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. ===================================================================
+#: ../src/print-op.c:237 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Étiquettes"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "Créateur de modèles gLabels"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "Bienvenue"
+
+# src/media_select.c:216
+# src/media_select.c:242
+# src/media_select.c:222
+# src/media_select.c:222
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "Nom et description"
+
+# src/media_select.c:221
+# src/media_select.c:247
+# src/media_select.c:227
+# src/media_select.c:227
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "Taille de page"
+
+# src/file.c:59
+# src/file.c:59
+# src/file.c:72
+# src/file.c:72
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "Forme de carte ou d'étiquette"
+
+# src/file.c:59
+# src/file.c:59
+# src/file.c:72
+# src/file.c:72
+#: ../src/template-designer.c:637
+msgid "Label or Card Size"
+msgstr "Taille de carte ou d'étiquette"
+
+# src/media_select.c:226
+# src/media_select.c:252
+# src/media_select.c:232
+# src/media_select.c:232
+#: ../src/template-designer.c:737
+msgid "Label Size (round)"
+msgstr "Taille d'étiquette (ronde)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "Taille d'étiquette (CD/DVD)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "Nombre de dispositions"
+
+# src/media_select.c:231
+# src/media_select.c:257
+# src/media_select.c:237
+# src/media_select.c:237
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "Disposition(s) :"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr "Création terminée"
+
+#: ../src/template-designer.c:1253
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+"<span foreground='red' weight='bold'>La marque et le numéro d'article "
+"correspondent à un modèle existant.</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (tous)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (seulement ZIP)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (tous)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A ou UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Code 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Code 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Entrelacé 2 de 5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Code-barre"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Sans titre"
+
+# src/item_barcode.c:316
+# src/item_barcode.c:317
+# src/item_barcode.c:299
+# src/item_barcode.c:299
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "Données de code-barre vides"
+
+# src/item_barcode.c:564 src/item_barcode.c:588 src/print.c:641
+# src/item_barcode.c:570 src/item_barcode.c:594 src/print.c:641
+# src/item_barcode.c:549 src/item_barcode.c:572 src/print.c:799
+# src/item_barcode.c:549 src/item_barcode.c:572 src/print.c:600
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Données de code-barre invalides"
+
+# src/label.c:186 src/label.c:211
+# src/label.c:186 src/label.c:211
+# src/label.c:170 src/label.c:194
+# src/label.c:168 src/label.c:192
+#: ../src/xml-label.c:193
+msgid "xmlParseFile error"
+msgstr "erreur xmlParseFile"
+
+# src/label.c:186 src/label.c:211
+# src/label.c:186 src/label.c:211
+# src/label.c:170 src/label.c:194
+# src/label.c:168 src/label.c:192
+#: ../src/xml-label.c:234
+msgid "xmlParseDoc error"
+msgstr "erreur xmlParseDoc"
+
+# src/label.c:243
+# src/label.c:244
+# src/label.c:225
+# src/label.c:223
+#: ../src/xml-label.c:270
+msgid "No document root"
+msgstr "Pas de racine de document"
+
+#: ../src/xml-label.c:278
+msgid "Importing from glabels 0.1 format"
+msgstr "Import depuis le format glabels 0.1"
+
+#: ../src/xml-label.c:287
+msgid "Importing from glabels 0.4 format"
+msgstr "Import depuis le format glabels 0.4"
+
+# src/label.c:248
+# src/label.c:249
+# src/label.c:236
+# src/label.c:234
+#: ../src/xml-label.c:296
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "Espace de nom glabels inconnu -- Utilisation de %s"
+
+# src/label.c:253
+# src/label.c:254
+# src/label.c:241
+# src/label.c:239
+#: ../src/xml-label.c:327 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Mauvais nœud racine = \"%s\""
+
+# src/label.c:253
+# src/label.c:254
+# src/label.c:241
+# src/label.c:239
+#: ../src/xml-label.c:364
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "mauvais nœud racine = \"%s\""
+
+# src/label.c:298
+# src/label.c:301
+# src/label.c:294
+# src/label.c:290
+#: ../src/xml-label.c:409 ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "mauvais nœud = \"%s\""
+
+# src/label.c:298
+# src/label.c:301
+# src/label.c:294
+# src/label.c:290
+#: ../src/xml-label.c:851
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "mauvais nœud de données = \"%s\""
+
+#: ../src/xml-label.c:1088 ../libglabels/xml-template.c:682
+msgid "Utf8 conversion error."
+msgstr "Erreur de conversion UTF8."
+
+# src/label.c:487
+# src/label.c:493
+# src/label.c:589
+# src/label.c:587
+#: ../src/xml-label.c:1095
+msgid "Problem saving xml file."
+msgstr "Problème de sauvegarde du fichier xml."
+
+# src/merge.c:80
+# src/merge.c:78
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "Aucun"
+
+# src/merge.c:98
+# src/merge.c:94
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Texte séparé par des virgules (CSV)"
+
+# src/merge.c:107
+# src/merge.c:102
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "Texte séparé par des deux-points"
+
+# src/merge.c:89
+# src/merge.c:86
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "Texte avec séparateurs de tabulation"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Données du carnet d'adresses Evolution par défaut"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "Données d'un fichier de VCards"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "Impossible de construire la requête"
+
+# src/file.c:214
+# src/file.c:214
+# src/file.c:249
+# src/file.c:249
+# c-format
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "Impossible d'ouvrir le carnet d'adresses."
+
+# src/file.c:248 src/mdi.c:635
+# src/file.c:248 src/mdi.c:641
+# src/file.c:288 src/mdi.c:601
+# src/file.c:288 src/mdi.c:601
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "Impossible d'énumérer les champs disponibles."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "Impossible d'obtenir les contacts."
+
+# src/print_copies.c:193
+# src/print_copies.c:193
+# src/print_copies.c:171
+# src/print_copies.c:170
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "Feuilles :"
+
+# src/print_copies.c:213
+# src/print_copies.c:213
+# src/print_copies.c:191
+# src/print_copies.c:190
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "de :"
+
+# src/print_copies.c:221
+# src/print_copies.c:221
+# src/print_copies.c:199
+# src/print_copies.c:198
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "à :"
+
+# src/print_copies_merge.c:197
+# src/print_merge.c:170
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "Commencer par l'étiquette"
+
+# src/print_copies_merge.c:206
+# src/print_merge.c:179
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr "en 1ère page"
+
+# src/print.c:153
+# src/print.c:153
+# src/print_copies_merge.c:173
+# src/print_merge.c:195
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "Copies :"
+
+# src/rotate_select.c:187
+# src/rotate_select.c:187
+# src/print_copies_merge.c:186
+# src/print_merge.c:188
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "Assembler"
+
+#: ../src/wdgt-media-select.c:288 ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297 ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309 ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609 ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "Tous"
+
+# src/media_select.c:515
+# src/media_select.c:481
+# src/media_select.c:353
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d par feuille"
+
+# src/media_select.c:522
+# src/media_select.c:488
+# src/media_select.c:367
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+# src/media_select.c:522
+# src/media_select.c:488
+# src/media_select.c:372
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:689 ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s diamètre"
+
+#: ../src/wdgt-media-select.c:693 ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s diamètre"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "Aucun modèle récent trouvé."
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr "Essayez de sélectionner un modèle dans l'onglet « Tous les modèles »."
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr "Aucune correspondance."
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr ""
+"Essayez de sélectionner une marque, une taille de page ou une catégorie "
+"différente."
+
+# src/merge_ui_text.c:334
+# src/merge_ui_text.c:334
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "personnalisé"
+
+# src/prop_bc.c:204 src/prop_fill.c:186 src/prop_line.c:203
+# src/prop_text.c:263
+# src/prop_bc.c:210 src/prop_fill.c:184 src/prop_line.c:209
+# src/prop_text.c:247
+# src/prop_bc.c:188 src/prop_fill.c:166 src/prop_line.c:189
+# src/prop_text.c:234
+# src/prop_bc.c:188 src/prop_fill.c:166 src/prop_line.c:189
+# src/prop_text.c:234
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "Couleur personnalisée :"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "Choisir une couleur personnalisée"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "noir"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "brun clair"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr "brun jaune"
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "vert foncé n°2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "bleu marine"
+
+#: ../src/mygal/color-palette.c:577 ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "bleu foncé"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "violet n°2"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "gris très foncé"
+
+#: ../src/mygal/color-palette.c:582 ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "rouge foncé"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "rouge orange"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "or"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "vert foncé"
+
+#: ../src/mygal/color-palette.c:586 ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr "bleu pâle"
+
+#: ../src/mygal/color-palette.c:587 ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "bleu"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr "violet pâle"
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "gris foncé"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "rouge"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "orange"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "tilleul"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr "vert pâle"
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr "bleu pâle n°2"
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "bleu ciel n°2"
+
+#: ../src/mygal/color-palette.c:598 ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "violet"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "gris"
+
+# src/item_image.c:283
+# src/item_image.c:283
+# src/item_image.c:268 src/menu.c:113
+# src/item_image.c:268 src/menu.c:113
+#: ../src/mygal/color-palette.c:602 ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "magenta"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "orange vif"
+
+#: ../src/mygal/color-palette.c:604 ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "jaune"
+
+# src/prop_vector.c:245
+# src/prop_vector.c:224
+# src/prop_vector.c:224
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "vert"
+
+#: ../src/mygal/color-palette.c:606 ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "cyan"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "bleu vif"
+
+#: ../src/mygal/color-palette.c:608 ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "rouge violet"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "gris clair"
+
+#: ../src/mygal/color-palette.c:612 ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "rose"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "orange clair"
+
+#: ../src/mygal/color-palette.c:614 ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "jaune clair"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "vert clair"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "cyan clair"
+
+#: ../src/mygal/color-palette.c:617 ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "bleu clair"
+
+#: ../src/mygal/color-palette.c:618 ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "violet clair"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "blanc"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr "bleu violacé"
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "violet foncé"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "bleu ciel"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "Erreur fatale de gLabels !"
+
+# src/preferences.c:92
+# src/prefs.c:101
+# src/prefs.c:92
+# src/prefs.c:86
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "Erreur de gLabels !"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "Autre"
+
+# src/prop_text_entry.c:196
+# src/prop_text_entry.c:196
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Défini par l'utilisateur"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Impossible de trouver les définitions de tailles de papier. Il se peut que "
+"Libglabels ne soit pas correctement installé."
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Impossible de trouver les définitions de catégorie. Il se peut que "
+"Libglabels ne soit pas correctement installé."
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Impossible de trouver les fichiers modèles. Il se peut que Libglabels ne "
+"soit pas correctement installé."
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "Modèle générique de page entière %s"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "Attribut nom ou marque manquant."
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "Identifiant de taille de papier « %s » inconnu, essai avec le nom"
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Identifiant ou nom de taille de papier « %s » inconnu"
+
+#: ../libglabels/xml-template.c:627
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+"Attribut « brand » (marque) ou « part » (article) manquant, essai avec un "
+"ancien nom."
+
+#: ../libglabels/xml-template.c:637
+msgid "Name attribute also missing."
+msgstr "L'attribut nom manque également."
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>Sélection/Aperçu des enregistrements</b>"
+
+# src/merge_properties.c:131
+# src/merge_properties.c:131
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Source</b>"
+
+# src/prop_text.c:214
+# src/prop_text.c:199
+# src/merge_properties.c:143
+# src/merge_properties.c:143
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Format :"
+
+# src/merge_properties.c:158
+# src/merge_properties.c:158
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Emplacement :"
+
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:85
+# src/menu.c:85
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Tout sélectionner"
+
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:85
+# src/menu.c:85
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "Désélectionner tout"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialog1"
+
+# src/file.c:98
+# src/file.c:98
+# src/file.c:109
+# src/file.c:109
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Orientation de l'étiquette</b>"
+
+# src/file.c:87
+# src/file.c:87
+# src/file.c:98
+# src/file.c:98
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Type de média</b>"
+
+# src/prop_bc.c:202
+# src/prop_bc.c:182
+# src/prop_bc.c:182
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Xxx Propriétés de l'objet</span>"
+
+# src/prop_text.c:277
+# src/prop_text.c:264
+# src/prop_text.c:248
+# src/prop_text.c:248
+#: ../data/glade/object-editor.glade.h:5 ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Alignement :"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "Permettre à la fusion de diminuer automatiquement la taille du texte"
+
+# src/prop_vector.c:207
+# src/prop_vector.c:228
+# src/prop_vector.c:207
+# src/prop_vector.c:207
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Angle :"
+
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Somme de contrôle"
+
+# src/prop_bc.c:204 src/prop_fill.c:186 src/prop_line.c:203
+# src/prop_text.c:263
+# src/prop_bc.c:210 src/prop_fill.c:184 src/prop_line.c:209
+# src/prop_text.c:247
+# src/prop_bc.c:188 src/prop_fill.c:166 src/prop_line.c:189
+# src/prop_text.c:234
+# src/prop_bc.c:188 src/prop_fill.c:166 src/prop_line.c:189
+# src/prop_text.c:234
+#: ../data/glade/object-editor.glade.h:9 ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Couleur :"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Activer l'ombrage"
+
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/item_box.c:258 src/item_ellipse.c:260
+# src/item_box.c:258 src/item_ellipse.c:260
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Famille :"
+
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/item_box.c:258 src/item_ellipse.c:260
+# src/item_box.c:258 src/item_ellipse.c:260
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "Fichier :"
+
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/item_box.c:274 src/item_ellipse.c:279
+# src/item_box.c:258 src/item_ellipse.c:260
+# src/item_box.c:258 src/item_ellipse.c:260
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr "Remplissage"
+
+# src/prop_size.c:220
+# src/prop_size.c:198
+# src/prop_size.c:198
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Hauteur :"
+
+# src/prop_text_entry.c:196
+# src/prop_text_entry.c:196
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "Insérer un champ de fusion"
+
+# src/prop_bc_data.c:196 src/prop_text_entry.c:180
+# src/prop_bc_data.c:196 src/prop_text_entry.c:180
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr "Clé :"
+
+# src/prop_vector.c:196
+# src/prop_vector.c:202
+# src/prop_vector.c:183
+# src/prop_vector.c:183
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Longueur :"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "Espacement :"
+
+# src/prop_bc_data.c:176
+# src/prop_bc_data.c:176
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "Littéral :"
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Opacité :"
+
+# src/item_barcode.c:362 src/item_barcode.c:365 src/item_box.c:291
+# src/item_ellipse.c:296 src/item_image.c:315 src/item_line.c:289
+# src/item_text.c:487 src/item_text.c:490
+# src/item_barcode.c:368 src/item_barcode.c:371 src/item_box.c:291
+# src/item_ellipse.c:296 src/item_image.c:315 src/item_line.c:289
+# src/item_text.c:487 src/item_text.c:490
+# src/item_barcode.c:345 src/item_barcode.c:348 src/item_box.c:275
+# src/item_ellipse.c:277 src/item_image.c:318 src/item_line.c:274
+# src/item_text.c:500 src/item_text.c:503
+# src/item_barcode.c:345 src/item_barcode.c:348 src/item_box.c:275
+# src/item_ellipse.c:277 src/item_image.c:318 src/item_line.c:274
+# src/item_text.c:500 src/item_text.c:503
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "Position"
+
+# src/item_image.c:341
+# src/item_image.c:340
+# src/item_image.c:342
+# src/item_image.c:342
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Restaurer la taille d'image"
+
+# src/menu.c:86
+# src/menu.c:86
+# src/menu.c:85
+# src/menu.c:85
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Sélectionner un fichier"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Ombre"
+
+# src/item_box.c:302 src/item_ellipse.c:307 src/item_image.c:326
+# src/item_line.c:300
+# src/item_box.c:302 src/item_ellipse.c:307 src/item_image.c:326
+# src/item_line.c:300
+# src/item_box.c:286 src/item_ellipse.c:288 src/item_image.c:329
+# src/item_line.c:285
+# src/item_box.c:286 src/item_ellipse.c:288 src/item_image.c:329
+# src/item_line.c:285
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "Taille"
+
+# src/item_box.c:302 src/item_ellipse.c:307 src/item_image.c:326
+# src/item_line.c:300
+# src/item_box.c:302 src/item_ellipse.c:307 src/item_image.c:326
+# src/item_line.c:300
+# src/item_box.c:286 src/item_ellipse.c:288 src/item_image.c:329
+# src/item_line.c:285
+# src/item_box.c:286 src/item_ellipse.c:288 src/item_image.c:329
+# src/item_line.c:285
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Taille :"
+
+# src/item_barcode.c:347
+# src/item_barcode.c:353
+# src/item_barcode.c:330
+# src/item_barcode.c:330
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "Style"
+
+# src/item_barcode.c:347
+# src/item_barcode.c:353
+# src/item_barcode.c:330
+# src/item_barcode.c:330
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Style :"
+
+# src/prop_line.c:188
+# src/prop_line.c:187 src/prop_size.c:202
+# src/prop_line.c:169 src/prop_size.c:182
+# src/prop_line.c:169 src/prop_size.c:182
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Largeur :"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "Décalage X :"
+
+# src/prop_position.c:192
+# src/prop_position.c:173
+# src/prop_position.c:173
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X :"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Décalage Y :"
+
+# src/prop_position.c:212
+# src/prop_position.c:191
+# src/prop_position.c:191
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y :"
+
+# src/prop_vector.c:245
+# src/prop_vector.c:224
+# src/prop_vector.c:224
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "degrés"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr "chiffres :"
+
+# src/prop_text.c:214
+# src/prop_text.c:199
+# src/merge_properties.c:143
+# src/merge_properties.c:143
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "format :"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Taille de page par défaut</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Remplissage</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Ligne</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Texte</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Unités</span>"
+
+# src/prop_text.c:214
+# src/prop_text.c:199
+# src/prop_text.c:181
+# src/prop_text.c:181
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Police :"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "ISO A4"
+
+# src/prefs.c:265
+# src/prefs.c:243
+# src/prefs.c:237
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Pouces"
+
+# src/prop_bc.c:189
+# src/prop_bc.c:187
+# src/prop_bc.c:168
+# src/prop_bc.c:168
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "Localisation"
+
+# src/prefs.c:271
+# src/prefs.c:250
+# src/prefs.c:244
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Millimètres"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Paramètres par défaut pour les objets"
+
+# src/print.c:149
+# src/prefs.c:259
+# src/prefs.c:237
+# src/prefs.c:231
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Points"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "Sélectionner les propriétés par défaut pour les nouveaux objets."
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "Sélectionnez les paramètres de localisation."
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "Lettre US"
+
+# src/print.c:171
+# src/print.c:171
+# src/print.c:186
+# src/print_dialog.c:141
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Options</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>Contrôle d'impression (fusion)</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>Contrôle d'impression (simple)</b>"
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Gras"
+
+# src/item_barcode.c:337
+# src/item_barcode.c:343 src/prefs.c:243
+# src/item_barcode.c:320 src/prefs.c:221
+# src/item_barcode.c:320 src/prefs.c:215
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Centrer"
+
+# src/mdi.c:482
+# src/mdi.c:488
+# src/mdi.c:459
+# src/mdi.c:459
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Famille de police"
+
+# src/mdi.c:482
+# src/mdi.c:488
+# src/mdi.c:459
+# src/mdi.c:459
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Taille de police"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Italique"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Aligner à gauche"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Largeur de la ligne"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Aligner à droite"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Couleur du texte"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "Couleur du texte"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(ex. : « Étiquettes de publipostage », « Cartes de visite », ...)"
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(ex. : 8163A)"
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(ex. : Avery, Acme, ...)"
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Rayon extérieur :"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Rayon :"
+
+# src/prop_line.c:188
+# src/prop_line.c:187 src/prop_size.c:202
+# src/prop_line.c:169 src/prop_size.c:182
+# src/prop_line.c:169 src/prop_size.c:182
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Largeur :"
+
+# src/prop_size.c:220
+# src/prop_size.c:198
+# src/prop_size.c:198
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Hauteur :"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Rayon Intérieur :"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Déchet (impression en surcharge autorisée) :"
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. Largeur de rognure :"
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Marge"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Arrondi (rayon du coin) :"
+
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. Hauteur de rognure :"
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. Déchet horiz. (impression en surcharge autorisée) :"
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. Déchet vert. (impression en surcharge autorisée) :"
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "5. Déchet (impression en surcharge autorisée) :"
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Marge"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "Marque/Fabricant :"
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (y compris CD au format carte de crédit)"
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Félicitations !\n"
+"Vous avez terminé la création d'un modèle gLabels.\n"
+"Si vous voulez accepter et enregistrer votre création, cliquez sur « Appliquer ».\n"
+"\n"
+"Dans le cas contraire, cliquez sur « Annuler » pour abandonner\n"
+"votre création ou « Précédent » pour continuer d'éditer cette création."
+
+# src/media_select.c:216
+# src/media_select.c:242
+# src/media_select.c:222
+# src/media_select.c:222
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Description :"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "Distance par rapport au bord gauche (x0) :"
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "Distance par rapport au bord haut (y0) :"
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "Espacement horizontal (dx) :"
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"Combien de dispositions votre modèle contiendra-t-il ?\n"
+"\n"
+"Une disposition est un ensemble d'étiquettes ou de cartes qui peuvent être "
+"rangés sur une grille simple.\n"
+"La plupart des modèles n'ont besoin que d'une seule disposition, comme pour le "
+"premier exemple.\n"
+"Le deuxième exemple illustre le cas où deux dispositions sont nécessaires."
+
+# src/media_select.c:231
+# src/media_select.c:257
+# src/media_select.c:237
+# src/media_select.c:237
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Disposition n°1"
+
+# src/media_select.c:231
+# src/media_select.c:257
+# src/media_select.c:237
+# src/media_select.c:237
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Disposition n°2"
+
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "Nombre horizontalement (nx) :"
+
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "Nombre verticalement (ny) :"
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Nombre de dispositions :"
+
+# src/media_select.c:221
+# src/media_select.c:247
+# src/media_select.c:227
+# src/media_select.c:227
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Taille de page :"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "N° Ref :"
+
+#: ../data/glade/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr "Saisissez les informations suivantes à propos du fabricant de papier."
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "Saisissez les informations suivantes sur la disposition."
+
+#: ../data/glade/template-designer.glade.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr "Saisissez les paramètres de taille suivants pour une étiquette."
+
+#: ../data/glade/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"Entrez les paramètres de taille suivant pour une carte ou une étiquette de votre modèle."
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "Sélectionnez la forme de base des cartes ou des étiquettes."
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "Sélectionnez la taille du papier."
+
+# src/print_copies_merge.c:206
+# src/print_merge.c:179
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "Imprimer une page de tests"
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Rectangulaire ou carré (éventuellement à bords arrondis)"
+
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "Circulaire"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"Modèle nécessitant\n"
+"deux dispositions."
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"Modèle nécessitant\n"
+"une disposition."
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "Espacement vertical (dy) :"
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Bienvenue dans le créateur de modèles de gLabels.\n"
+"Ce questionnaire va vous aider à créer un modèle personnalisé pour glabels."
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "cd_size_page"
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "finish_page"
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "layout_page"
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr "name_page"
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "nlayouts_page"
+
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "pg_size_page"
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "rect_size_page"
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "round_size_page"
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "shape_page"
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr "start_page"
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "Marque :"
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Catégorie :"
+
+# src/tools.c:70
+# src/tools.c:70
+# src/menu.c:106 src/menu.c:197
+# src/menu.c:106 src/menu.c:197
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Modèles récents"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Tous les modèles"
+
+# src/rotate_select.c:187
+# src/rotate_select.c:187
+# src/rotate_select.c:167
+# src/rotate_select.c:169
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "Rotation"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "Exécutif US"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "Légal US"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "Toute carte"
+
+# src/file.c:183
+# src/file.c:183
+# src/file.c:213
+# src/file.c:213
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "Toute étiquette"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Cartes de visite"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD ou autre support"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "Produits d'expédition"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Étiquettes rectangulaires"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Étiquettes arrondies"
+
+# src/print_copies_merge.c:197
+# src/print_merge.c:170
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "Étiquettes carrées"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Étiquettes d'adresses"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Étiquettes d'adresses"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr "Étiquettes génériques"
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Cartes de visite"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "Livret de CD"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "Jaquette de CD"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "Étiquettes de CD/DVD"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr "Étiquettes de disquette"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "Étiquettes de disquette"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:20
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "Étiquettes de publipostage"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "Étiquettes de publipostage"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "Étiquettes de mini-adresse"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+msgid "Mini Labels"
+msgstr "Mini-étiquettes"
+
+# src/file.c:183
+# src/file.c:183
+# src/file.c:213
+# src/file.c:213
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "Étiquettes postales"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "Étiquettes de dossier d'archives"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "Étiquettes de CD/DVD (étiquettes de disque)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Étiquettes de CD/DVD (étiquettes de boîtier)"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "Étiquettes de division"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "Étiquettes pour dossiers"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "Étiquettes pleine page"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "Étiquettes d'identification"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "Cartes d'index"
+
+# src/print_copies_merge.c:197
+# src/print_merge.c:170
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Grandes étiquettes rondes"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "Étiquettes pour badges"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "Cartes postales"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "Étiquettes d'adresse de retour"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Round Labels"
+msgstr "Étiquettes rondes"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "Étiquettes postales"
+
+# src/print_copies_merge.c:197
+# src/print_merge.c:170
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Petites étiquettes rondes"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "Étiquettes carrées"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr "Cartes chevalet"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "Étiquettes de face de cassette vidéo"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "Étiquettes de dos de cassette vidéo"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "Étiquettes multi-usages 17x54 mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Étiquettes postales 62x100 mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "Étiquettes d'adresse standard 29x90 mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "Disquette 3,5 pouces"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "Dossier d'archives"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr "Dossier suspendu"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "Grandes étiquettes d'adresses"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "Étiquettes d'adresse postale"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "Étiquettes génériques"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "Étiquettes de dossier d'archives"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr "Étiquettes de dossier d'archives (grandes)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr "Étiquettes de dossier d'archives (petites)"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "Étiquettes de CD"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr "Étiquettes de CD/DVD (face uniquement)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "Format standard d'étiquettes de CD/DVD (face uniquement)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "Étiquettes de disquette (face uniquement)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "Autocollants EPSON Photo 16"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Étiquettes"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "Autocollants magnétiques"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Étiquettes générales"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "Étiquettes jet d'encre/laser 70x37 mm"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr "Étiquettes de publipostage (2 colonnes)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr "Étiquettes de publipostage (3 colonnes)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "Étiquettes pour CD (2 ex, face uniquement)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Étiquettes rectangulaires"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Universal Labels"
+msgstr "Étiquettes universelles"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:48
+msgid "Video Labels (face only)"
+msgstr "Étiquettes de vidéos (face uniquement)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "Étiquettes multi-usages"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "CD carte de visite"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "Modèle CD rectangle"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "Étiquettes de CD/DVD (face uniquement)"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "Étiquettes de cassette"
+
+# src/print_copies.c:210
+# src/print_copies.c:210
+# src/print_copies.c:188
+# src/print_copies.c:187
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "Étiquettes DLT"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:18
+msgid "Jewel Case Booklet"
+msgstr "Livret de CD « Jewel »"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Microtube labels"
+msgstr "Étiquettes microtube"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "Mini-CD Labels"
+msgstr "Étiquettes mini-CD"
+
+#: ../data/templates/misc-us-templates.xml.h:25
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "Étiquettes pour CD (2 ex, tranche uniquement)"
+
+#: ../data/templates/misc-us-templates.xml.h:26
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "Étiquettes pour CD (2 ex, face uniquement)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:32
+msgid "Slimline CD Case (rightside up)"
+msgstr "Boîtier CD mince (côté droit en haut)"
+
+#: ../data/templates/misc-us-templates.xml.h:33
+msgid "Slimline CD Case (upside down)"
+msgstr "Boîtier CD mince (à l'envers)"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Étiquettes de correction et de recouvrement"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr "Étiquettes de dos de dossier"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr "Étiquettes pour classeurs à levier"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "Étiquettes repositionnables multi-usages"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "Étiquettes de cartes QSL 70mm x 50,8mm"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr "Étiquettes rectangulaires pour copieur"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "Étiquettes vidéo (dos)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Crée des étiquettes, des cartes de visite et des pochettes multimédia"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "Créateur d'étiquettes gLabels"
+
+# src/item_text.c:467
+# src/item_text.c:467
+# src/item_text.c:482
+# src/item_text.c:482
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "Fichier de projet gLabels"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s : l'option « %s » est ambiguë\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s : l'option « --%s » n'autorise pas d'argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s : l'option « %c%s » n'autorise pas d'argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s : l'option « %s » exige un argument\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s : option « --%s » inconnue\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s : option « %c%s » inconnue\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s : option -- %c non autorisée\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s : option -- %c non valide\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s : l'option exige un argument -- %c\n"
diff --git a/po/it.po b/po/it.po
new file mode 100644 (file)
index 0000000..09e23b7
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,2427 @@
+# translation of it.po to Italian
+# Italian translation of glabels.
+# Copyright (C) 2003 THE glabels'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the glabels package.
+# Andrea <mancio_and@yahoo.it>, 2003.
+# Daniele Medri <daniele.medri@libero.it>, 2005.
+# 
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: it\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-06-19 20:43-0400\n"
+"PO-Revision-Date: 2005-06-27 09:34+0200\n"
+"Last-Translator: Daniele Medri <daniele.medri@libero.it>\n"
+"Language-Team: Italian <it@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit"
+
+#: src/glabels.c:116
+msgid "Could not initialize Bonobo!\n"
+msgstr "Non è possibile inizializzare Bonobo!\n"
+
+#: src/glabels-batch.c:52
+msgid "print this message"
+msgstr "stampa questo messaggio"
+
+#: src/glabels-batch.c:54
+msgid "print the version of glabels-batch being used"
+msgstr "stampa la versione di glabels batch utilizzata"
+
+#: src/glabels-batch.c:56
+msgid "set output filename (default=\"output.ps\")"
+msgstr "imposta il nome del file di output (default=\"output.ps\")"
+
+#: src/glabels-batch.c:56 src/glabels-batch.c:70
+msgid "filename"
+msgstr "nome file"
+
+#: src/glabels-batch.c:58
+msgid "number of sheets (default=1)"
+msgstr "numero di fogli (default=1)"
+
+#: src/glabels-batch.c:58
+msgid "sheets"
+msgstr "fogli"
+
+#: src/glabels-batch.c:60
+msgid "number of copies (default=1)"
+msgstr "numero di copie (default=1)"
+
+#: src/glabels-batch.c:60
+msgid "copies"
+msgstr "copie"
+
+#: src/glabels-batch.c:62
+msgid "first label on first sheet (default=1)"
+msgstr "prima etichetta del primo foglio (default=1)"
+
+#: src/glabels-batch.c:62
+msgid "first"
+msgstr "primo"
+
+#: src/glabels-batch.c:64 src/print-dialog.c:336
+msgid "print outlines (to test printer alignment)"
+msgstr "stampa bordi (per provare l'allineamento della stampante)"
+
+#: src/glabels-batch.c:66 src/print-dialog.c:344
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "stampa al contrario (es. un'immagine riflessa)"
+
+#: src/glabels-batch.c:68 src/print-dialog.c:351
+msgid "print crop marks"
+msgstr "stampa segni di taglio"
+
+#: src/glabels-batch.c:70
+msgid "input file for merging"
+msgstr "file per la stampa unione"
+
+#: src/glabels-batch.c:107
+msgid "[OPTION...] GLABELS_FILE..."
+msgstr "[OPTION...] GLABELS_FILE..."
+
+#: src/glabels-batch.c:127
+#, c-format
+msgid "missing glabels file\n"
+msgstr "file di glabels mancante\n"
+
+#: src/glabels-batch.c:158
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "non è possibile unire i documenti con il file glabels %s\n"
+
+#: src/glabels-batch.c:182
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "non è possibile aprire il file glabels %s\n"
+
+#: src/window.c:244
+msgid "(none) - gLabels"
+msgstr "(niente) - gLabels"
+
+#: src/window.c:414
+msgid "(modified)"
+msgstr "(modificato)"
+
+#: src/stock.c:65 data/ui/glabels-ui.xml.h:162
+msgid "_Select Mode"
+msgstr "Modalità di _selezione"
+
+#: src/stock.c:66 data/ui/glabels-ui.xml.h:163
+msgid "_Text"
+msgstr "_Testo"
+
+#: src/stock.c:67 data/ui/glabels-ui.xml.h:148
+msgid "_Line"
+msgstr "_Linea"
+
+#: src/stock.c:68 data/ui/glabels-ui.xml.h:130
+msgid "_Box"
+msgstr "_Area"
+
+#: src/stock.c:69 data/ui/glabels-ui.xml.h:141
+msgid "_Ellipse"
+msgstr "_Ellisse"
+
+#: src/stock.c:70 data/ui/glabels-ui.xml.h:146
+msgid "_Image"
+msgstr "_Immagine"
+
+#: src/stock.c:71 data/ui/glabels-ui.xml.h:11
+msgid "Bar_code"
+msgstr "_Codice a barre"
+
+#: src/stock.c:72
+msgid "_Merge Properties"
+msgstr "Proprietà di _unione"
+
+#: src/stock.c:73
+msgid "Object _Properties"
+msgstr "_Proprietà·Oggetto"
+
+#: src/stock.c:74 data/ui/glabels-ui.xml.h:13
+msgid "Bring to _Front"
+msgstr "Porta in _primo piano"
+
+#: src/stock.c:75 data/ui/glabels-ui.xml.h:109
+msgid "Send to _Back"
+msgstr "Porta in _secondo piano"
+
+#: src/stock.c:76 data/ui/glabels-ui.xml.h:96
+msgid "Rotate _Left"
+msgstr "Ruota a sinistra"
+
+#: src/stock.c:77 data/ui/glabels-ui.xml.h:97
+msgid "Rotate _Right"
+msgstr "Ruota a destra"
+
+#: src/stock.c:78 data/ui/glabels-ui.xml.h:52
+msgid "Flip _Horizontally"
+msgstr "Capovolgi _orizzontalmente"
+
+#: src/stock.c:79 data/ui/glabels-ui.xml.h:53
+msgid "Flip _Vertically"
+msgstr "Capovolgi _verticalmente"
+
+#: src/stock.c:80 data/ui/glabels-ui.xml.h:147
+msgid "_Lefts"
+msgstr "_Sinistra"
+
+#: src/stock.c:81 data/ui/glabels-ui.xml.h:159
+msgid "_Rights"
+msgstr "_Destra"
+
+#: src/stock.c:82 data/ui/glabels-ui.xml.h:131
+msgid "_Centers"
+msgstr "_Centro"
+
+#: src/stock.c:83 data/ui/glabels-ui.xml.h:164
+msgid "_Tops"
+msgstr "_In alto"
+
+#: src/stock.c:84
+msgid "Bottoms"
+msgstr "In basso"
+
+#: src/stock.c:85
+msgid "Centers"
+msgstr "Centrato"
+
+#: src/stock.c:86 src/stock.c:87 data/ui/glabels-ui.xml.h:62
+msgid "Label Ce_nter"
+msgstr "Etichetta ce_ntrata"
+
+#: src/stock.c:88 data/ui/glabels-ui.xml.h:51
+msgid "Fill color"
+msgstr "Colore di riempimento"
+
+#: src/stock.c:89 data/ui/glabels-ui.xml.h:64
+msgid "Line color"
+msgstr "Colore Linea"
+
+#: src/stock.c:90 src/stock.c:92
+msgid "Linked"
+msgstr "Collegato"
+
+#: src/stock.c:91 src/stock.c:93
+msgid "Not Linked"
+msgstr "Nessun collegamento"
+
+#: src/ui-property-bar.c:345 src/object-editor.c:499
+msgid "Default"
+msgstr "Predefinito"
+
+#: src/ui-property-bar.c:360 src/object-editor.c:512
+msgid "No fill"
+msgstr "Nessun riempimento"
+
+#: src/ui-property-bar.c:375 src/object-editor.c:505
+msgid "No line"
+msgstr "Nessuna linea"
+
+#: src/ui-sidebar.c:180
+msgid "Object properties"
+msgstr "Proprietà oggetto"
+
+#: src/commands.c:385
+msgid ""
+"A label and business card creation program for GNOME.\n"
+" \n"
+"Glabels 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.\n"
+" \n"
+"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.\n"
+msgstr ""
+
+#: src/commands.c:399
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Visualizza il file AUTHORS per informazioni aggiuntive."
+
+#: src/commands.c:400
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "oppure visita http://glabels.sourceforge.net/"
+
+#: src/commands.c:409
+msgid " "
+msgstr " "
+
+#: src/commands.c:424
+msgid "glabels"
+msgstr "glabels"
+
+#: src/file.c:100
+msgid "New Label or Card"
+msgstr "Nuova etichetta o scheda"
+
+#: src/file.c:132 src/file.c:304
+msgid "Media Type"
+msgstr "Tipo media"
+
+#: src/file.c:138 src/file.c:310
+msgid "Label orientation"
+msgstr "Orientazione etichetta"
+
+#: src/file.c:269
+msgid "Label properties"
+msgstr "Proprietà etichetta"
+
+#: src/file.c:452 src/file.c:870
+msgid "All files"
+msgstr "Tutti i file"
+
+#: src/file.c:457 src/file.c:875
+msgid "gLabels documents"
+msgstr "Documenti di gLabels"
+
+#: src/file.c:505 src/file.c:617 src/file.c:934 src/file.c:1130
+msgid "Empty file name selection"
+msgstr "Selezione di un nome file vuoto"
+
+#: src/file.c:506 src/file.c:520 src/file.c:618 src/file.c:632
+msgid "Please select a file or supply a valid file name"
+msgstr "Per piacere, indica un file o un nome valido"
+
+#: src/file.c:519 src/file.c:631
+msgid "File does not exist"
+msgstr "Il file non esiste"
+
+#: src/file.c:563 data/ui/glabels-ui.xml.h:74
+msgid "Open"
+msgstr "Apri"
+
+#: src/file.c:565
+msgid "Open label"
+msgstr "Apri etichetta"
+
+#: src/file.c:707
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Non riesco ad aprire il file \"%s\""
+
+#: src/file.c:715
+msgid "Not a supported file format"
+msgstr "Non è un formato file supportato"
+
+#: src/file.c:797 src/file.c:979 src/file.c:1174
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Non riesco a salvare il file \"%s\""
+
+#: src/file.c:805 src/file.c:987 src/file.c:1182
+msgid "Error encountered during save.  The file is still not saved."
+msgstr ""
+
+#: src/file.c:848 src/file.c:1048
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Salva \"%s\" come"
+
+#: src/file.c:935 src/file.c:1131
+msgid "Please supply a valid file name"
+msgstr "Per piacere, indica un nome file valido"
+
+#: src/file.c:952 src/file.c:1147
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Sovrascrivi il file \"%s\"?"
+
+#: src/file.c:960 src/file.c:1155
+msgid "File already exists."
+msgstr "File già esistente."
+
+#: src/file.c:1271
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Salva i cambiamenti al documento \"%s\" prima di chiudere?"
+
+#: src/file.c:1279
+msgid "Your changes will be lost if you don't save them."
+msgstr "I tuoi cambiamenti andranno persi se non salvi."
+
+#: src/file.c:1282
+msgid "Close without saving"
+msgstr "Chiudi senza salvare"
+
+#. Should not happen
+#: src/prefs.c:156 src/prefs.c:163 data/glade/prefs-dialog.glade.h:23
+#: data/glade/object-editor.glade.h:37
+msgid "points"
+msgstr "punti"
+
+#: src/prefs.c:158 data/glade/object-editor.glade.h:36
+#: data/glade/template-designer.glade.h:74
+msgid "inches"
+msgstr "pollici"
+
+#: src/prefs.c:160
+msgid "mm"
+msgstr "mm"
+
+#: src/prefs-dialog.c:248 data/glade/prefs-dialog.glade.h:22
+msgid "gLabels Preferences"
+msgstr "Preferenze gLabels"
+
+#.
+#. * Submenu: Order
+#.
+#: src/view.c:3574 data/ui/glabels-ui.xml.h:154
+msgid "_Order"
+msgstr "_Ordine"
+
+#.
+#. * Submenu: Rotate/Flip
+#.
+#: src/view.c:3595 data/ui/glabels-ui.xml.h:160
+msgid "_Rotate/Flip"
+msgstr "_Ruota/capovolgi"
+
+#.
+#. * Submenu: Align Horizontally
+#.
+#: src/view.c:3628
+msgid "Align _Horizontally"
+msgstr "Allineamento _orizzontale"
+
+#.
+#. * Submenu: Align Vertically
+#.
+#: src/view.c:3667
+msgid "Align _Vertically"
+msgstr "Allineamento _verticale"
+
+#: src/view.c:3728 data/ui/glabels-ui.xml.h:137
+msgid "_Delete"
+msgstr "Cancella"
+
+#. Build editor.
+#: src/view-box.c:224
+msgid "Box object properties"
+msgstr "Proprietà dell'oggetto area"
+
+#. Build editor.
+#: src/view-ellipse.c:224
+msgid "Ellipse object properties"
+msgstr "Proprietà dell'oggetto Ellisse"
+
+#. Build editor.
+#: src/view-line.c:224
+msgid "Line object properties"
+msgstr "Proprietà dell'oggetto Linea"
+
+#. Build editor.
+#: src/view-image.c:223
+msgid "Image object properties"
+msgstr "Proprietà dell'oggetto Immagine"
+
+#. Build editor.
+#: src/view-text.c:251
+msgid "Text object properties"
+msgstr "Proprietà dell'oggetto Testo"
+
+#: src/view-text.c:563 data/glade/object-editor.glade.h:28
+msgid "Text"
+msgstr "Testo"
+
+#. Build editor.
+#: src/view-barcode.c:210
+msgid "Barcode object properties"
+msgstr "Proprietà dell'oggetto Codice a barre"
+
+#: src/view-barcode.c:580 src/print.c:1089
+msgid "Invalid barcode data"
+msgstr "Codice a barre non valido"
+
+#: src/merge-properties-dialog.c:231
+msgid "Merge Properties"
+msgstr "Proprietà di unione"
+
+#. ---- Source section ----
+#: src/merge-properties-dialog.c:237
+msgid "Source"
+msgstr "Sorgente"
+
+#: src/merge-properties-dialog.c:245
+msgid "Format:"
+msgstr "Formato:"
+
+#. Location line
+#: src/merge-properties-dialog.c:273
+msgid "Location:"
+msgstr "Posizione:"
+
+#: src/merge-properties-dialog.c:282 src/merge-properties-dialog.c:393
+msgid "Select merge-database source"
+msgstr "Seleziona sorgente unione-database"
+
+#: src/merge-properties-dialog.c:289 src/merge-properties-dialog.c:404
+msgid "N/A"
+msgstr "N/A"
+
+#. ---- Sample Fields section ----
+#: src/merge-properties-dialog.c:300
+msgid "Record selection/preview:"
+msgstr "Selezione/anteprima record:"
+
+#: src/merge-properties-dialog.c:326
+msgid "Select"
+msgstr "Seleziona"
+
+#: src/merge-properties-dialog.c:334
+msgid "Record/Field"
+msgstr "Record/campo"
+
+#: src/merge-properties-dialog.c:342 data/glade/object-editor.glade.h:9
+msgid "Data"
+msgstr "Dati"
+
+#: src/print-dialog.c:266 data/ui/glabels-ui.xml.h:81
+msgid "Print"
+msgstr "Stampa"
+
+#: src/print-dialog.c:281
+msgid "_Job"
+msgstr "Lavoro"
+
+#: src/print-dialog.c:286
+msgid "P_rinter"
+msgstr "Stampante"
+
+#. ----------- Add simple-copies widget ------------
+#: src/print-dialog.c:314
+msgid "Copies"
+msgstr "Copie"
+
+#. ------- Add merge control widget ------------
+#: src/print-dialog.c:322
+msgid "Document merge control"
+msgstr ""
+
+#. ----------- Add custom print options area ------------
+#: src/print-dialog.c:330
+msgid "Options"
+msgstr "Opzioni"
+
+#: src/print-dialog.c:553 src/print-dialog.c:592
+msgid "Print preview"
+msgstr "Anteprima di stampa"
+
+#: src/template-designer.c:409 data/glade/template-designer.glade.h:73
+msgid "gLabels Template Designer"
+msgstr "Progettazione di modelli per gLabels"
+
+#: src/bc.c:60
+msgid "POSTNET (any)"
+msgstr "POSTNET (qualsiasi)"
+
+#: src/bc.c:63
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (solo ZIP/CAP)"
+
+#: src/bc.c:66
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP/CAP+4)"
+
+#: src/bc.c:69
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: src/bc.c:72
+msgid "EAN (any)"
+msgstr "EAN (qualsiasi)"
+
+#: src/bc.c:75
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: src/bc.c:78
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: src/bc.c:81
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: src/bc.c:84
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: src/bc.c:87
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: src/bc.c:90
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: src/bc.c:93
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A o UPC-E)"
+
+#: src/bc.c:96
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: src/bc.c:99
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: src/bc.c:102
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: src/bc.c:105
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: src/bc.c:108
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: src/bc.c:111
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: src/bc.c:114
+msgid "ISBN"
+msgstr "ISBN"
+
+#: src/bc.c:117
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: src/bc.c:120
+msgid "Code 39"
+msgstr "Code 39"
+
+#: src/bc.c:123
+msgid "Code 128"
+msgstr "Code 128"
+
+#: src/bc.c:126
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: src/bc.c:129
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: src/bc.c:132
+msgid "Interleaved 2 of 5"
+msgstr ""
+
+#: src/bc.c:135
+msgid "Codabar"
+msgstr "Codabar"
+
+#: src/bc.c:138
+msgid "MSI"
+msgstr "MSI"
+
+#: src/bc.c:141
+msgid "Plessey"
+msgstr "Plessey"
+
+#: src/label.c:569
+msgid "Untitled"
+msgstr "Senza nome"
+
+#: src/xml-label.c:176 src/xml-label.c:213
+msgid "xmlParseFile error"
+msgstr ""
+
+#: src/xml-label.c:250
+msgid "No document root"
+msgstr "Nessun documento radice"
+
+#: src/xml-label.c:264
+msgid "Importing from glabels 0.1 format"
+msgstr ""
+
+#: src/xml-label.c:272
+msgid "Importing from glabels 0.4 format"
+msgstr ""
+
+#: src/xml-label.c:279
+msgid "Importing from glabels 1.91 format"
+msgstr ""
+
+#: src/xml-label.c:282
+msgid "bad document, unknown glabels Namespace"
+msgstr ""
+
+#: src/xml-label.c:311 src/xml-label-04.c:75 src/xml-label-191.c:131
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr ""
+
+#: src/xml-label.c:348 src/xml-label-191.c:165
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr ""
+
+#: src/xml-label.c:393 src/xml-label-04.c:123 src/xml-label-191.c:197
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr ""
+
+#: src/xml-label.c:796 src/xml-label-191.c:605
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr ""
+
+#: src/xml-label.c:962 libglabels/xml-template.c:535
+msgid "Utf8 conversion error."
+msgstr "Conversione di errore Utf8."
+
+#: src/xml-label.c:969 libglabels/xml-template.c:542
+msgid "Problem saving xml file."
+msgstr "Problema nel salvataggio del file xml"
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: src/xml-label-191.c:680 libglabels/xml-template.c:199
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr ""
+
+#: src/xml-label-191.c:690 libglabels/xml-template.c:209
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr ""
+
+#: src/merge.c:172 src/merge.c:213 src/merge.c:399 src/merge.c:402
+msgid "None"
+msgstr "Nessuno"
+
+#: src/merge-init.c:53
+msgid "Text file with comma delimeters (CSV)"
+msgstr ""
+
+#: src/merge-init.c:60
+msgid "Text file with colon delimeters"
+msgstr ""
+
+#: src/merge-init.c:67
+msgid "Text file with tab delimeters"
+msgstr ""
+
+#: src/wdgt-image-select.c:201 data/glade/object-editor.glade.h:11
+msgid "File:"
+msgstr "File:"
+
+#: src/wdgt-image-select.c:245 data/glade/object-editor.glade.h:16
+msgid "Key:"
+msgstr "Chiave:"
+
+#: src/wdgt-print-copies.c:179
+msgid "Sheets:"
+msgstr "Fogli:"
+
+#: src/wdgt-print-copies.c:197
+msgid "Labels"
+msgstr "Etichette"
+
+#: src/wdgt-print-copies.c:200
+msgid "from:"
+msgstr "da:"
+
+#: src/wdgt-print-copies.c:207
+msgid "to:"
+msgstr "a:"
+
+#: src/wdgt-print-merge.c:178
+msgid "Start on label"
+msgstr ""
+
+#: src/wdgt-print-merge.c:186
+msgid "on 1st sheet"
+msgstr "nel 1° foglio"
+
+#: src/wdgt-print-merge.c:195
+msgid "Copies:"
+msgstr "Copie:"
+
+#: src/wdgt-print-merge.c:201
+msgid "Collate"
+msgstr "Fascicoli"
+
+#: src/wdgt-media-select.c:269 data/glade/template-designer.glade.h:29
+msgid "Description:"
+msgstr "Descrizione:"
+
+#: src/wdgt-media-select.c:279 data/glade/template-designer.glade.h:53
+msgid "Page size:"
+msgstr "Dimensioni·pagina:"
+
+#: src/wdgt-media-select.c:290
+msgid "Label size:"
+msgstr "Dimensioni etichetta:"
+
+#: src/wdgt-media-select.c:301
+msgid "Layout:"
+msgstr "Layout:"
+
+#: src/wdgt-media-select.c:578
+#, c-format
+msgid "%d x %d  (%d per sheet)"
+msgstr "%d x %d  (%d per foglio)"
+
+#: src/wdgt-media-select.c:582
+#, c-format
+msgid "%d per sheet"
+msgstr "%d per foglio"
+
+#: src/wdgt-media-select.c:614
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: src/wdgt-media-select.c:619
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: src/wdgt-media-select.c:630 src/wdgt-media-select.c:644
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s diametro"
+
+#: src/wdgt-media-select.c:634 src/wdgt-media-select.c:648
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s diametro"
+
+#: src/wdgt-rotate-label.c:193
+msgid "Rotate"
+msgstr "Girare"
+
+#. This is the default custom color
+#: src/mygal/color-palette.c:396
+msgid "custom"
+msgstr "personalizzato"
+
+#. "Custom" color - we'll pop up a GnomeColorPicker
+#: src/mygal/color-palette.c:438
+msgid "Custom Color:"
+msgstr "Colore personalizzato:"
+
+#: src/mygal/color-palette.c:446
+msgid "Choose Custom Color"
+msgstr "Scegli colore personalizzato"
+
+#: src/mygal/color-palette.c:579
+msgid "black"
+msgstr "nero"
+
+#: src/mygal/color-palette.c:580
+msgid "light brown"
+msgstr "Marrone chiaro"
+
+#: src/mygal/color-palette.c:581
+msgid "brown gold"
+msgstr ""
+
+#: src/mygal/color-palette.c:582
+msgid "dark green #2"
+msgstr "verde scuro #2"
+
+#: src/mygal/color-palette.c:583
+msgid "navy"
+msgstr ""
+
+#: src/mygal/color-palette.c:584 src/mygal/color-palette.c:640
+msgid "dark blue"
+msgstr "blu scuro"
+
+#: src/mygal/color-palette.c:585
+msgid "purple #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:586
+msgid "very dark gray"
+msgstr ""
+
+#: src/mygal/color-palette.c:589 src/mygal/color-palette.c:645
+msgid "dark red"
+msgstr "rosso scuro"
+
+#: src/mygal/color-palette.c:590
+msgid "red-orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:591
+msgid "gold"
+msgstr "oro"
+
+#: src/mygal/color-palette.c:592
+msgid "dark green"
+msgstr "verde scuro"
+
+#: src/mygal/color-palette.c:593 src/mygal/color-palette.c:646
+msgid "dull blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:594 src/mygal/color-palette.c:647
+msgid "blue"
+msgstr "blu"
+
+#: src/mygal/color-palette.c:595
+msgid "dull purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:596
+msgid "dark grey"
+msgstr ""
+
+#: src/mygal/color-palette.c:599
+msgid "red"
+msgstr "rosso"
+
+#: src/mygal/color-palette.c:600
+msgid "orange"
+msgstr "arancione"
+
+#: src/mygal/color-palette.c:601
+msgid "lime"
+msgstr "tiglio"
+
+#: src/mygal/color-palette.c:602
+msgid "dull green"
+msgstr ""
+
+#: src/mygal/color-palette.c:603
+msgid "dull blue #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:604
+msgid "sky blue #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:605 src/mygal/color-palette.c:644
+msgid "purple"
+msgstr "viola"
+
+#: src/mygal/color-palette.c:606
+msgid "gray"
+msgstr "grigio"
+
+#: src/mygal/color-palette.c:609 src/mygal/color-palette.c:641
+msgid "magenta"
+msgstr ""
+
+#: src/mygal/color-palette.c:610
+msgid "bright orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:611 src/mygal/color-palette.c:642
+msgid "yellow"
+msgstr "giallo"
+
+#: src/mygal/color-palette.c:612
+msgid "green"
+msgstr "verde"
+
+#: src/mygal/color-palette.c:613 src/mygal/color-palette.c:643
+msgid "cyan"
+msgstr ""
+
+#: src/mygal/color-palette.c:614
+msgid "bright blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:615 src/mygal/color-palette.c:632
+msgid "red purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:616
+msgid "light grey"
+msgstr ""
+
+#: src/mygal/color-palette.c:619 src/mygal/color-palette.c:636
+msgid "pink"
+msgstr "rosa"
+
+#: src/mygal/color-palette.c:620
+msgid "light orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:621 src/mygal/color-palette.c:633
+msgid "light yellow"
+msgstr ""
+
+#: src/mygal/color-palette.c:622
+msgid "light green"
+msgstr ""
+
+#: src/mygal/color-palette.c:623
+msgid "light cyan"
+msgstr ""
+
+#: src/mygal/color-palette.c:624 src/mygal/color-palette.c:634
+msgid "light blue"
+msgstr "blu chiaro"
+
+#: src/mygal/color-palette.c:625 src/mygal/color-palette.c:638
+msgid "light purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:626
+msgid "white"
+msgstr "bianco"
+
+#: src/mygal/color-palette.c:631
+msgid "purplish blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:635
+msgid "dark purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:637
+msgid "sky blue"
+msgstr ""
+
+#: libglabels/template.c:848
+#, c-format
+msgid "Generic %s full page"
+msgstr ""
+
+#: libglabels/template.c:897
+msgid "No template files found!"
+msgstr "Nessun modello trovato!"
+
+#. Create and append an "Other" entry.
+#: libglabels/paper.c:67
+msgid "Other"
+msgstr "Altro"
+
+#: libglabels/paper.c:361
+msgid "No paper files found!"
+msgstr "Nessun file paper trovato!"
+
+#: data/ui/glabels-ui.xml.h:1
+msgid "About glabels"
+msgstr "Informazioni su glabels"
+
+#: data/ui/glabels-ui.xml.h:2
+msgid "About..."
+msgstr "Informazioni..."
+
+#: data/ui/glabels-ui.xml.h:3
+msgid "Align _Horizontal"
+msgstr "Allineamento orizzontale"
+
+#: data/ui/glabels-ui.xml.h:4
+msgid "Align _Vertical"
+msgstr "Allineamento _verticale"
+
+#: data/ui/glabels-ui.xml.h:5
+msgid "Align objects to bottoms"
+msgstr "Allinea gli oggetti in basso"
+
+#: data/ui/glabels-ui.xml.h:6
+msgid "Align objects to horizontal centers"
+msgstr "Allinea gli oggetti nel centro orizzontale"
+
+#: data/ui/glabels-ui.xml.h:7
+msgid "Align objects to left edges"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:8
+msgid "Align objects to right edges"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:9
+msgid "Align objects to tops"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:10
+msgid "Align objects to vertical centers"
+msgstr "Allinea gli oggetti al centro verticale"
+
+#: data/ui/glabels-ui.xml.h:12
+msgid "Bold"
+msgstr "Grassetto"
+
+#: data/ui/glabels-ui.xml.h:14
+msgid "Center align"
+msgstr "Allineamento centrato"
+
+#: data/ui/glabels-ui.xml.h:15
+msgid "Center objects to horizontal label center"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:16
+msgid "Center objects to vertical label center"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:17
+msgid "Change the visibility of markup lines in the current window"
+msgstr ""
+"Cambia la visibilità delle linee di demarcazione nella finestra corrente"
+
+#: data/ui/glabels-ui.xml.h:18
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "Cambia la visibilità della barra degli strumenti di disegno nella finestra corrente"
+
+#: data/ui/glabels-ui.xml.h:19
+msgid "Change the visibility of the grid in the current window"
+msgstr "Cambia la visibilità della griglia nella finestra corrente"
+
+#: data/ui/glabels-ui.xml.h:20
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Cambia la visibilità della barra degli strumenti principale nella finestra corrente"
+
+#: data/ui/glabels-ui.xml.h:21
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr ""
+"Cambia la visibilità della barra degli strumenti principale nella finestra "
+"corrente"
+
+#: data/ui/glabels-ui.xml.h:22
+msgid "Close"
+msgstr "Chiudi"
+
+#: data/ui/glabels-ui.xml.h:23
+msgid "Close the current file"
+msgstr "Chiudi il file corrente"
+
+#: data/ui/glabels-ui.xml.h:24
+msgid "Configure the application"
+msgstr "Configura l'applicazione"
+
+#: data/ui/glabels-ui.xml.h:25
+msgid "Contents"
+msgstr "Contenuti"
+
+#: data/ui/glabels-ui.xml.h:26
+msgid "Copy"
+msgstr "Copia"
+
+#: data/ui/glabels-ui.xml.h:27
+msgid "Copy the selection"
+msgstr "Copia la selezione"
+
+#: data/ui/glabels-ui.xml.h:28
+msgid "Create a custom template"
+msgstr "Crea un modello personalizzato"
+
+#: data/ui/glabels-ui.xml.h:29
+msgid "Create a new document"
+msgstr "Crea un nuovo documento"
+
+#: data/ui/glabels-ui.xml.h:30
+msgid "Create barcode object"
+msgstr "Crea oggetto codice a barre"
+
+#: data/ui/glabels-ui.xml.h:31
+msgid "Create box/rectangle object"
+msgstr "Crea oggetto area/rettangolo"
+
+#: data/ui/glabels-ui.xml.h:32
+msgid "Create ellipse/circle object"
+msgstr "Crea oggetto ellisse/cerchio"
+
+#: data/ui/glabels-ui.xml.h:33
+msgid "Create image object"
+msgstr "Crea oggetto immagine"
+
+#: data/ui/glabels-ui.xml.h:34
+msgid "Create line object"
+msgstr "Crea oggetto linea"
+
+#: data/ui/glabels-ui.xml.h:35
+msgid "Create text object"
+msgstr "Crea oggeto testo"
+
+#: data/ui/glabels-ui.xml.h:36
+msgid "Cu_t"
+msgstr "_Taglia"
+
+#: data/ui/glabels-ui.xml.h:37
+msgid "Customize"
+msgstr "Personalizza"
+
+#: data/ui/glabels-ui.xml.h:38
+msgid "Customize Drawing Toolbar"
+msgstr "Personalizza la barra degli strumenti di disegno"
+
+#: data/ui/glabels-ui.xml.h:39
+msgid "Customize Main Toolbar"
+msgstr "Personalizza la barra degli strumenti principale"
+
+#: data/ui/glabels-ui.xml.h:40
+msgid "Customize Property Toolbar"
+msgstr "Personalizza barra degli strumenti proprietà"
+
+#: data/ui/glabels-ui.xml.h:41
+msgid "Customize toolbars"
+msgstr "Personalizza·le·barre degli strumenti"
+
+#: data/ui/glabels-ui.xml.h:42
+msgid "Cut"
+msgstr "Taglia"
+
+#: data/ui/glabels-ui.xml.h:43
+msgid "Cut the selection"
+msgstr "Taglia la selezione"
+
+#: data/ui/glabels-ui.xml.h:44
+msgid "Decrease magnification"
+msgstr "Decrementa ingrandimento"
+
+#: data/ui/glabels-ui.xml.h:45
+msgid "Delete"
+msgstr "Cancella"
+
+#: data/ui/glabels-ui.xml.h:46
+msgid "Delete the selected objects"
+msgstr "Cancella gli oggetti selezionati"
+
+#: data/ui/glabels-ui.xml.h:47
+msgid "Drawing toolbar"
+msgstr "Barra degli strumenti di disegno"
+
+#: data/ui/glabels-ui.xml.h:48
+msgid "Dump XML"
+msgstr "Scarica XML"
+
+#: data/ui/glabels-ui.xml.h:49
+msgid "Dump the UI Xml description"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:50
+msgid "Edit merge properties"
+msgstr "Modifica proprietà di unione"
+
+#: data/ui/glabels-ui.xml.h:54
+msgid "Flip object horizontally"
+msgstr "Capovolgi oggetto orizzontalmente"
+
+#: data/ui/glabels-ui.xml.h:55
+msgid "Flip object vertically"
+msgstr "Capovolgi oggetto verticalmente"
+
+#: data/ui/glabels-ui.xml.h:56
+msgid "Font name"
+msgstr "Nome font"
+
+#: data/ui/glabels-ui.xml.h:57
+msgid "Font selector"
+msgstr "Selettore font"
+
+#: data/ui/glabels-ui.xml.h:58
+msgid "Font size"
+msgstr "Dimesione·font"
+
+#: data/ui/glabels-ui.xml.h:59
+msgid "Icon and _Text"
+msgstr "Icone e _Testo"
+
+#: data/ui/glabels-ui.xml.h:60
+msgid "Increase magnification"
+msgstr "Incrementa ingradimento"
+
+#: data/ui/glabels-ui.xml.h:61
+msgid "Italic"
+msgstr "Corsivo"
+
+#: data/ui/glabels-ui.xml.h:63
+msgid "Left align"
+msgstr "Allinea·a·sinistra"
+
+#: data/ui/glabels-ui.xml.h:65
+msgid "Line width"
+msgstr "Larghezza linea"
+
+#: data/ui/glabels-ui.xml.h:66
+msgid "Lower object to bottom"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:67
+msgid "M_arkup"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:68
+msgid "Main toolbar"
+msgstr "Barra degli strumenti principale"
+
+#: data/ui/glabels-ui.xml.h:69
+msgid "Markup"
+msgstr "Marcatori"
+
+#: data/ui/glabels-ui.xml.h:70
+msgid "Modify document properties"
+msgstr "Modifica le proprietà del documento"
+
+#: data/ui/glabels-ui.xml.h:71
+msgid "New"
+msgstr "Nuovo"
+
+#: data/ui/glabels-ui.xml.h:72
+msgid "Object property editor"
+msgstr "Editor delle proprietà per l'oggetto"
+
+#: data/ui/glabels-ui.xml.h:73
+msgid "Only show icons in the main toolbar"
+msgstr "Visualizza solo le icone nella barra degli strumenti principale"
+
+#: data/ui/glabels-ui.xml.h:75
+msgid "Open a file"
+msgstr "Apri un file"
+
+#: data/ui/glabels-ui.xml.h:76
+msgid "Open the glabels manual"
+msgstr "Apri il manuale di glabels"
+
+#: data/ui/glabels-ui.xml.h:77
+msgid "Paste"
+msgstr "Incolla"
+
+#: data/ui/glabels-ui.xml.h:78
+msgid "Paste the clipboard"
+msgstr "Incolla gli appunti"
+
+#: data/ui/glabels-ui.xml.h:79
+msgid "Pr_eferences..."
+msgstr "Pr_eferenze..."
+
+#: data/ui/glabels-ui.xml.h:80
+msgid "Preferences"
+msgstr "Preferenze"
+
+#: data/ui/glabels-ui.xml.h:82
+msgid "Print the current file"
+msgstr "Stampa il file corrente"
+
+#: data/ui/glabels-ui.xml.h:83
+msgid "Proper_ties..."
+msgstr "Proprie_tà..."
+
+#: data/ui/glabels-ui.xml.h:84
+msgid "Properties"
+msgstr "Proprietà"
+
+#: data/ui/glabels-ui.xml.h:85
+msgid "Property toolbar"
+msgstr "Proprietà della barra degli strumenti"
+
+#: data/ui/glabels-ui.xml.h:86
+msgid "Quit"
+msgstr "Esci"
+
+#: data/ui/glabels-ui.xml.h:87
+msgid "Quit the program"
+msgstr "Esci dal programma"
+
+#: data/ui/glabels-ui.xml.h:88
+msgid "Raise object to top"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:89
+msgid "Recent _Files"
+msgstr "_File Recenti"
+
+#: data/ui/glabels-ui.xml.h:90
+msgid "Redo"
+msgstr "Ripeti"
+
+#: data/ui/glabels-ui.xml.h:91
+msgid "Redo the undone action"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:92
+msgid "Remove all selections"
+msgstr "Rimuovi tutte le selezioni"
+
+#: data/ui/glabels-ui.xml.h:94
+#, no-c-format
+msgid "Restore scale to 100%"
+msgstr "Ripristina la scala al 100%"
+
+#: data/ui/glabels-ui.xml.h:95
+msgid "Right align"
+msgstr "Allineamento a destra"
+
+#: data/ui/glabels-ui.xml.h:98
+msgid "Rotate object 90 clockwise"
+msgstr "Ruota l'oggetto di 90° in verso orario"
+
+#: data/ui/glabels-ui.xml.h:99
+msgid "Rotate object 90 counter-clockwise"
+msgstr "Ruota l'oggetto di 90° in verso antiorario"
+
+#: data/ui/glabels-ui.xml.h:100
+msgid "Save"
+msgstr "Salva"
+
+#: data/ui/glabels-ui.xml.h:101
+msgid "Save As"
+msgstr "Salva con nome"
+
+#: data/ui/glabels-ui.xml.h:102
+msgid "Save _As..."
+msgstr "Salva _con nome..."
+
+#: data/ui/glabels-ui.xml.h:103
+msgid "Save the current file"
+msgstr "Salva il file corrente"
+
+#: data/ui/glabels-ui.xml.h:104
+msgid "Save the current file with a different name"
+msgstr "Salva il file corrente con un nome differente"
+
+#: data/ui/glabels-ui.xml.h:105
+msgid "Select All"
+msgstr "Seleziona tutto"
+
+#: data/ui/glabels-ui.xml.h:106
+msgid "Select _All"
+msgstr "Seleziona tutto"
+
+#: data/ui/glabels-ui.xml.h:107
+msgid "Select all objects"
+msgstr "Seleziona tutti gli oggetti"
+
+#: data/ui/glabels-ui.xml.h:108
+msgid "Select, move and modify objects"
+msgstr "Seleziona, muovi e modifica oggetti"
+
+#: data/ui/glabels-ui.xml.h:110
+msgid "Set main toolbar button style according to desktop default"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:111
+msgid "Show _Tooltips"
+msgstr "Mostra suggerimenti"
+
+#: data/ui/glabels-ui.xml.h:112
+msgid "Show both icons and texts in the main toolbar"
+msgstr "Mostra icone e testo nella barra degli strumenti principale"
+
+#: data/ui/glabels-ui.xml.h:113
+msgid "Show tooltips in the drawing toolbar"
+msgstr "Mostra suggerimenti nella barra degli strumenti di disegno"
+
+#: data/ui/glabels-ui.xml.h:114
+msgid "Show tooltips in the main toolbar"
+msgstr "Mostra suggerimenti nella barra degli strumenti principale"
+
+#: data/ui/glabels-ui.xml.h:115
+msgid "Show tooltips in the property toolbar"
+msgstr "Mostra suggerimenti nella barra degli strumenti principale"
+
+#: data/ui/glabels-ui.xml.h:116
+msgid "Template Designer"
+msgstr "Progettazione modelli"
+
+#: data/ui/glabels-ui.xml.h:117
+msgid "Template _Designer..."
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:118
+msgid "Text color"
+msgstr "Colore testo"
+
+#: data/ui/glabels-ui.xml.h:119
+msgid "U_n-select All"
+msgstr "Deseleziona tutto"
+
+#: data/ui/glabels-ui.xml.h:120
+msgid "Un-select All"
+msgstr "Deseleziona·tutto"
+
+#: data/ui/glabels-ui.xml.h:121
+msgid "Undo"
+msgstr "Annulla"
+
+#: data/ui/glabels-ui.xml.h:122
+msgid "Undo the last action"
+msgstr "Annulla l'ultima azione"
+
+#: data/ui/glabels-ui.xml.h:123
+msgid "Zoom _1:1"
+msgstr "Zoom _1:1"
+
+#: data/ui/glabels-ui.xml.h:124
+msgid "Zoom _In"
+msgstr "Zoom _in avanti"
+
+#: data/ui/glabels-ui.xml.h:125
+msgid "Zoom _Out"
+msgstr "Zo_om indietro"
+
+#: data/ui/glabels-ui.xml.h:126
+msgid "Zoom to _fit"
+msgstr "Adatta"
+
+#: data/ui/glabels-ui.xml.h:127
+msgid "Zoom to fit window"
+msgstr "Adatta alla finestra"
+
+#: data/ui/glabels-ui.xml.h:128
+msgid "_About..."
+msgstr "Informazioni..."
+
+#: data/ui/glabels-ui.xml.h:129
+msgid "_Bottoms"
+msgstr "In basso"
+
+#: data/ui/glabels-ui.xml.h:132
+msgid "_Close"
+msgstr "_Chiudi"
+
+#: data/ui/glabels-ui.xml.h:133
+msgid "_Contents"
+msgstr "_Contenuti"
+
+#: data/ui/glabels-ui.xml.h:134
+msgid "_Copy"
+msgstr "_Copia"
+
+#: data/ui/glabels-ui.xml.h:135
+msgid "_Create Object"
+msgstr "_Crea Oggetto"
+
+#: data/ui/glabels-ui.xml.h:136
+msgid "_Debug"
+msgstr "_Debug"
+
+#: data/ui/glabels-ui.xml.h:138
+msgid "_Desktop Default"
+msgstr "Predefinito del desktop"
+
+#: data/ui/glabels-ui.xml.h:139
+msgid "_Drawing Toolbar"
+msgstr "Barra degli strumenti di disegno"
+
+#: data/ui/glabels-ui.xml.h:140
+msgid "_Edit"
+msgstr "_Modifica"
+
+#: data/ui/glabels-ui.xml.h:142
+msgid "_File"
+msgstr "_File"
+
+#: data/ui/glabels-ui.xml.h:143
+msgid "_Grid"
+msgstr "_Griglia"
+
+#: data/ui/glabels-ui.xml.h:144
+msgid "_Help"
+msgstr "_Aiuto"
+
+#: data/ui/glabels-ui.xml.h:145
+msgid "_Icon"
+msgstr "_Icone"
+
+#: data/ui/glabels-ui.xml.h:149
+msgid "_Main Toolbar"
+msgstr "Barra degli stru_menti principale"
+
+#: data/ui/glabels-ui.xml.h:150
+msgid "_Merge Properties..."
+msgstr "Proprietà di unione..."
+
+#: data/ui/glabels-ui.xml.h:151
+msgid "_New"
+msgstr "_Nuovo"
+
+#: data/ui/glabels-ui.xml.h:152
+msgid "_Objects"
+msgstr "_Oggetti"
+
+#: data/ui/glabels-ui.xml.h:153
+msgid "_Open..."
+msgstr "_Apri..."
+
+#: data/ui/glabels-ui.xml.h:155
+msgid "_Paste"
+msgstr "Incolla"
+
+#: data/ui/glabels-ui.xml.h:156
+msgid "_Print..."
+msgstr "Stampa..."
+
+#: data/ui/glabels-ui.xml.h:157
+msgid "_Property Toolbar"
+msgstr "Barra degli strumenti _proprietà"
+
+#: data/ui/glabels-ui.xml.h:158
+msgid "_Quit"
+msgstr "_Esci"
+
+#: data/ui/glabels-ui.xml.h:161
+msgid "_Save"
+msgstr "_Salva"
+
+#: data/ui/glabels-ui.xml.h:165
+msgid "_View"
+msgstr "_Visualizza"
+
+#: data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:2 data/glade/object-editor.glade.h:1
+#: data/glade/template-designer.glade.h:5
+msgid "*"
+msgstr "*"
+
+#: data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Dimensione pagina predefinita</span>"
+
+#: data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Riempimento</span>"
+
+#: data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Linea</span>"
+
+#: data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Testo</span>"
+
+#: data/glade/prefs-dialog.glade.h:7
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Unità</span>"
+
+#: data/glade/prefs-dialog.glade.h:8 data/glade/object-editor.glade.h:4
+msgid "Alignment:"
+msgstr "Allineamento:"
+
+#: data/glade/prefs-dialog.glade.h:9 data/glade/object-editor.glade.h:8
+msgid "Color:"
+msgstr "Colore:"
+
+#: data/glade/prefs-dialog.glade.h:10
+msgid "Font:"
+msgstr "Carattere:"
+
+#: data/glade/prefs-dialog.glade.h:11
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: data/glade/prefs-dialog.glade.h:12
+msgid "Inches"
+msgstr "Pollici"
+
+#: data/glade/prefs-dialog.glade.h:13 data/glade/object-editor.glade.h:19
+msgid "Line Spacing:"
+msgstr "Spaziatura:"
+
+#: data/glade/prefs-dialog.glade.h:14
+msgid "Locale"
+msgstr "Impostazioni nazionali"
+
+#: data/glade/prefs-dialog.glade.h:15
+msgid "Millimeters"
+msgstr "Millimetri"
+
+#: data/glade/prefs-dialog.glade.h:16
+msgid "Object defaults"
+msgstr "Proprietà oggetto"
+
+#: data/glade/prefs-dialog.glade.h:17
+msgid "Points"
+msgstr "Punti"
+
+#: data/glade/prefs-dialog.glade.h:18
+msgid "Select default properties for new objects."
+msgstr "Seleziona le proprietà predefinite per i nuovi oggetti."
+
+#: data/glade/prefs-dialog.glade.h:19
+msgid "Select locale specific behavior."
+msgstr ""
+
+#. Most popular (at top of list)
+#: data/glade/prefs-dialog.glade.h:20 data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "US·Letter"
+
+#: data/glade/prefs-dialog.glade.h:21 data/glade/object-editor.glade.h:29
+#: data/glade/template-designer.glade.h:72
+msgid "Width:"
+msgstr "Larghezza:"
+
+#: data/glade/object-editor.glade.h:2
+msgid "00000000000 00000"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:3
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:5
+msgid "Allow merge to automatically shrink text"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:6
+msgid "Angle:"
+msgstr "Angolo:"
+
+#: data/glade/object-editor.glade.h:7
+msgid "Checksum"
+msgstr "Checksum"
+
+#: data/glade/object-editor.glade.h:10
+msgid "Family:"
+msgstr "Famiglia:"
+
+#: data/glade/object-editor.glade.h:12
+msgid "Fill"
+msgstr "Riempimento"
+
+#: data/glade/object-editor.glade.h:13 data/glade/template-designer.glade.h:33
+msgid "Height:"
+msgstr "Altezza:"
+
+#: data/glade/object-editor.glade.h:14
+msgid "Image"
+msgstr "Immagine"
+
+#: data/glade/object-editor.glade.h:15
+msgid "Insert merge field"
+msgstr "Inserisci campo unione"
+
+#: data/glade/object-editor.glade.h:17
+msgid "Length:"
+msgstr "Lunghezza:"
+
+#: data/glade/object-editor.glade.h:18
+msgid "Line"
+msgstr "Linea"
+
+#: data/glade/object-editor.glade.h:20
+msgid "Literal:"
+msgstr "Letterale:"
+
+#: data/glade/object-editor.glade.h:21
+msgid "Load image"
+msgstr "Carica immagine"
+
+#: data/glade/object-editor.glade.h:22
+msgid "Position"
+msgstr "Posizione"
+
+#: data/glade/object-editor.glade.h:23
+msgid "Reset image size"
+msgstr "Ripristina dimensioni immagine"
+
+#: data/glade/object-editor.glade.h:24
+msgid "Size"
+msgstr "Dimensioni"
+
+#: data/glade/object-editor.glade.h:25
+msgid "Size:"
+msgstr "Dimensione:"
+
+#: data/glade/object-editor.glade.h:26
+msgid "Style"
+msgstr "Stile"
+
+#: data/glade/object-editor.glade.h:27
+msgid "Style:"
+msgstr "Stile:"
+
+#: data/glade/object-editor.glade.h:30
+msgid "X:"
+msgstr "X:"
+
+#: data/glade/object-editor.glade.h:31
+msgid "Y:"
+msgstr "Y:"
+
+#: data/glade/object-editor.glade.h:32
+msgid "degrees"
+msgstr "gradi"
+
+#: data/glade/object-editor.glade.h:33
+msgid "dialog1"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:34
+msgid "digits:"
+msgstr "cifre:"
+
+#: data/glade/object-editor.glade.h:35
+msgid "format:"
+msgstr "formato:"
+
+#: data/glade/template-designer.glade.h:1
+msgid "  "
+msgstr ""
+
+#: data/glade/template-designer.glade.h:2
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(es., \"Etichette di spedizione,\" \"Biglietti da visita,\" ...)"
+
+#: data/glade/template-designer.glade.h:3
+msgid "(e.g., 8163A)"
+msgstr "(es. 8163A)"
+
+#: data/glade/template-designer.glade.h:4
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(es. Avery, Acme, ...)"
+
+#: data/glade/template-designer.glade.h:6
+msgid "1. Outer radius:"
+msgstr "1. raggio esterno:"
+
+#: data/glade/template-designer.glade.h:7
+msgid "1. Radius:"
+msgstr "Raggio:"
+
+#: data/glade/template-designer.glade.h:8
+msgid "1. Width:"
+msgstr "1. Larghezza:"
+
+#: data/glade/template-designer.glade.h:9
+msgid "2. Height:"
+msgstr "2. Altezza:"
+
+#: data/glade/template-designer.glade.h:10
+msgid "2. Inner radius:"
+msgstr "2. raggio interno:"
+
+#: data/glade/template-designer.glade.h:11
+msgid "2. Waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:12
+msgid "3. Clipping width:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:13
+msgid "3. Margin"
+msgstr "3. Margine"
+
+#: data/glade/template-designer.glade.h:14
+msgid "3. Round (radius of corner):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:15
+msgid "4. Clipping height:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:16
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:17
+msgid "5. Vert. waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:18
+msgid "5. Waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:19
+msgid "6. Margin"
+msgstr "6. Margine"
+
+#: data/glade/template-designer.glade.h:20
+msgid "Brand/Manufacturer:"
+msgstr "Marca/Produttore:"
+
+#: data/glade/template-designer.glade.h:21
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (inclusa copertina dei ringraziamenti)"
+
+#: data/glade/template-designer.glade.h:22
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr "Congratulazioni!\n"
+"\n"
+"Hai completato il gLabels Template Designer.\n"
+"Se vuoi salvare il tuo progetto fai clic su \"Applica\".\n"
+"\n"
+"In caso contrario, fai clic su \"Cancella\" per abbandonare\n"
+"il tuo progetto o \"Indietro\" per continuare la progettazione."
+
+#: data/glade/template-designer.glade.h:30
+msgid "Design Completed"
+msgstr "Progettazione completata"
+
+#: data/glade/template-designer.glade.h:31
+msgid "Distance from left edge (x0):"
+msgstr "Distanza dal bordo sinistro (x0):"
+
+#: data/glade/template-designer.glade.h:32
+msgid "Distance from top edge (y0):"
+msgstr "Distanza dal bordo in alto (y0):"
+
+#: data/glade/template-designer.glade.h:34
+msgid "Horizontal pitch (dx):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:35
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:40
+msgid "Label Size (CD/DVD)"
+msgstr "Dimensione etichetta (CD/DVD)"
+
+#: data/glade/template-designer.glade.h:41
+msgid "Label Size (Round)"
+msgstr "Dimensioni etichetta"
+
+#: data/glade/template-designer.glade.h:42
+msgid "Label or Card Shape"
+msgstr "Forma dell'etichetta o della scheda"
+
+#: data/glade/template-designer.glade.h:43
+msgid "Label or Card Size (Rectangular)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:44
+msgid "Layout #1"
+msgstr "Layout #1"
+
+#: data/glade/template-designer.glade.h:45
+msgid "Layout #2"
+msgstr "Layout #2"
+
+#: data/glade/template-designer.glade.h:46
+msgid "Layout(s)"
+msgstr "Layout"
+
+#: data/glade/template-designer.glade.h:47
+msgid "Name and Description"
+msgstr "Nome e descrizione"
+
+#: data/glade/template-designer.glade.h:48
+msgid "Number across (nx):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:49
+msgid "Number down (ny):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:50
+msgid "Number of Layouts"
+msgstr "Numero di layout"
+
+#: data/glade/template-designer.glade.h:51
+msgid "Number of layouts:"
+msgstr "Numero di layout:"
+
+#: data/glade/template-designer.glade.h:52
+msgid "Page Size"
+msgstr "Dimensione pagina"
+
+#: data/glade/template-designer.glade.h:54
+msgid "Part #:"
+msgstr "Parte #:"
+
+#: data/glade/template-designer.glade.h:55
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:56
+msgid "Please enter the following layout information."
+msgstr "Per piacere, inserisci le seguenti informazioni."
+
+#: data/glade/template-designer.glade.h:57
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:58
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:59
+msgid "Please select the basic shape of the labels or cards."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:60
+msgid "Please select the page size of the template stationery."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:61
+msgid "Print test sheet"
+msgstr "Stampa foglio di prova"
+
+#: data/glade/template-designer.glade.h:62
+msgid "Rectangular or square (can have rounded corners)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:63
+msgid "Round"
+msgstr "Rotonda"
+
+#: data/glade/template-designer.glade.h:64
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:66
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:68
+msgid "Vertical pitch (dy):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:69
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+
+#. Other ISO A series sizes
+#: data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "US Executive"
+
+#. Other US paper sizes
+#: data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "US Legale"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:2
+#: data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Etichette di indirizzo"
+
+#. ===================================================================
+#. ============================================================
+#. ===================================================================
+#. ======================================================
+#: data/templates/avery-us-templates.xml.h:4
+#: data/templates/avery-iso-templates.xml.h:4
+#: data/templates/zweckform-iso-templates.xml.h:6
+#: data/templates/misc-us-templates.xml.h:3
+#: data/templates/misc-iso-templates.xml.h:17
+msgid "Business Cards"
+msgstr "Biglietti da visita"
+
+#: data/templates/avery-us-templates.xml.h:5
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "Etichette CD/DVD (Etichette Dischi)"
+
+#: data/templates/avery-us-templates.xml.h:6
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Etichette CD/DVD (Etichette dischi)"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:8
+msgid "Diskette Labels"
+msgstr "Etichette per floppy"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:10
+msgid "Filing Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:12
+msgid "Full Sheet Labels"
+msgstr "Pagina piena di etichette"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:14
+msgid "Large Round Labels"
+msgstr "Etichetta con bordi arrotondati"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:16
+msgid "Name Badge Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:18
+msgid "Return Address Labels"
+msgstr "Etichette con indirizzo del mittente"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:20
+msgid "Shipping Labels"
+msgstr "Etichette di spedizione"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:22
+msgid "Small Round Labels"
+msgstr "Etichette piccole con bordi arrotondati"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:24
+msgid "Square Labels"
+msgstr "Etichette quadrate"
+
+#: data/templates/avery-us-templates.xml.h:25
+msgid "Video Tape Face Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:26
+msgid "Video Tape Spine Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:2
+msgid "Address labels"
+msgstr "Etichette per indirizzo"
+
+#. ===============================================================
+#: data/templates/avery-iso-templates.xml.h:6
+msgid "CD Booklet"
+msgstr "CD Booklet"
+
+#. ===============================================================
+#: data/templates/avery-iso-templates.xml.h:8
+msgid "CD Inlet"
+msgstr "CD Inlet"
+
+#. ===============================================================
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:10
+#: data/templates/zweckform-iso-templates.xml.h:8
+#: data/templates/misc-us-templates.xml.h:5
+#: data/templates/misc-iso-templates.xml.h:21
+msgid "CD/DVD Labels"
+msgstr "Etichette CD/DVD"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:12
+msgid "Diskette labels"
+msgstr ""
+
+#. ===============================================================
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:14
+#: data/templates/zweckform-iso-templates.xml.h:14
+#: data/templates/misc-iso-templates.xml.h:35
+msgid "Mailing Labels"
+msgstr "Etichette di spedizione"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:16
+msgid "Mailing labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:18
+msgid "Mini Address Labels"
+msgstr "Etichette Mini-indirizzo"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:20
+msgid "Shipping labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:12
+msgid "Lever Arch File Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:16
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:18
+msgid "Rectangular Copier Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:20
+#: data/templates/misc-iso-templates.xml.h:44
+msgid "Rectangular Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:22
+msgid "Video Labels (back)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:1
+msgid "Business Card CD"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:4
+msgid "CD Template Rectangles"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:6
+msgid "CD/DVD Labels (Face Only)"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-us-templates.xml.h:7
+#: data/templates/misc-iso-templates.xml.h:23
+msgid "CD/DVD Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-us-templates.xml.h:9
+msgid "Cassette Labels"
+msgstr "Etichette per cassette"
+
+#. ===================================================================
+#: data/templates/misc-us-templates.xml.h:11
+msgid "DLT Labels"
+msgstr "Etichette DLT"
+
+#. ===================================================================
+#: data/templates/misc-us-templates.xml.h:13
+msgid "Microtube labels"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:14
+msgid "Mini-CD Labels"
+msgstr "Etichette Mini-CD"
+
+#: data/templates/misc-us-templates.xml.h:15
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:16
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:17
+#: data/templates/misc-iso-templates.xml.h:42
+msgid "PRO CD Labels 2-up (face only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:18
+msgid "Slimline CD Case (rightside up)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:19
+msgid "Slimline CD Case (upside down)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:1
+msgid "Agipa 119488: Business Cards"
+msgstr "Agipa 119488: biglietti da visita"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:3
+msgid "Allround Labels --24"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:5
+msgid "Allround Labels --44"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:7
+msgid "Allround Labels --64"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:9
+msgid "Allround Labels --65"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:11
+msgid "Arch File Labels"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:13
+msgid "Arch File Labels (large)"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:15
+msgid "Arch File Labels (small)"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:19
+msgid "CD Labels"
+msgstr "Etichette CD"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:25
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:27
+msgid "Diskette Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:29
+msgid "EPSON Photo Stickers 16"
+msgstr "EPSON Photo Stickers 16"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:31
+msgid "Etiketten"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:33
+msgid "Fridge Magnet Stickers"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:37
+msgid "Mailing Labels --14"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:39
+msgid "Mailing Labels-2 columns"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:41
+msgid "Mailing Labels-3 columns"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr "Etichette video (solo frontespizio)"
+
+#: data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Crea etichette, biglietti da visita e copertine"
+
+#: data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "gLabels Designer di etichetta"
+
+#: data/mime/glabels.keys.in.h:1 data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "File di progetto di gLabels"
+
diff --git a/po/ja.po b/po/ja.po
new file mode 100644 (file)
index 0000000..afd6ab2
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,2729 @@
+# glabels ja.po.
+# Copyright (C) 2001-2005,2007-2010 Free Software Foundation, Inc.
+# Takeshi Aihana <takeshi.aihana@gmail.com>, 2001-2005,2007-2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels glabels_2_2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-06 00:33+0900\n"
+"PO-Revision-Date: 2010-03-06 00:31+0900\n"
+"Last-Translator: Takeshi AIHANA <takeshi.aihana@gmail.com>\n"
+"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/glabels.c:75 ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- gLabels ラベル・デザイナ"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "出力するファイル名を指定する (デフォルト = \"output.pdf\")"
+
+#: ../src/glabels-batch.c:54 ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "ファイル名"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "用紙の数 (デフォルト = 1)"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "用紙の数"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "コピーの数 (デフォルト = 1)"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "コピーの数"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "最初のシートで最初のラベル (デフォルト = 1)"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "first"
+
+#: ../src/glabels-batch.c:62 ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "アウトラインを印刷する (印刷時の配置を確認するため)"
+
+#: ../src/glabels-batch.c:64 ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "(画像をミラーするように) 反転して印刷する"
+
+#: ../src/glabels-batch.c:66 ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "端のマークを揃えて印刷する"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "ファイルをマージする"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "- gLabels のラベル・ファイルをバッチ処理する"
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "gLabels ファイル %s とドキュメントを結合できません\n"
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "gLabels のファイル %s を開けません\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(なし) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(変更済み)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "選択モード(_S)"
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "文字(_T)"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "直線(_L)"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "矩形(_B)"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "楕円(_E)"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "画像(_I)"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "バーコード(_C)"
+
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "結合プロパティ(_M)"
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "オブジェクトのプロパティ(_P)"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "前に持ってくる(_F)"
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "後ろにまわす(_B)"
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "左に回転(_L)"
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "右に回転(_R)"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "水平方向にフリップ(_H)"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "垂直方向にフリップ(_V)"
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "左端(_L)"
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "右端(_R)"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "中央(_C)"
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "上端(_T)"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "下部"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "中央"
+
+#: ../src/stock.c:93 ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "ラベルの中心(_N)"
+
+#: ../src/stock.c:95 ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "色で塗りつぶします"
+
+#: ../src/stock.c:96 ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "線の色を選択します"
+
+#: ../src/stock.c:97 ../src/stock.c:99
+msgid "Linked"
+msgstr "結合済"
+
+#: ../src/stock.c:98 ../src/stock.c:100
+msgid "Not Linked"
+msgstr "結合なし"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "ファイル(_F)"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "最近開いたファイル(_F)"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "編集(_E)"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "表示(_V)"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "メイン・ツールバー"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "描画ツールバー"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "プロパティ・ツールバー"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "オブジェクト(_O)"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "オブジェクトの生成(_C)"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "整列(_O)"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "回転/フリップ(_R)"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "水平方向に配置(_H)"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "垂直方向に配置(_V)"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "ヘルプ(_H)"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "コンテキスト・メニュー"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "新規(_N)"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "新しいファイルを作成します"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "開く(_O)..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "ファイルを開きます"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "保存(_S)"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "このファイルを保存します"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "別名で保存(_A)..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "このファイルに別の名前を付けて保存します"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "印刷(_P)..."
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "このファイルを印刷します"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "プロパティ..."
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "ドキュメントのプロパティを修正します"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "テンプレート・デザイナ(_D)..."
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "独自のテンプレートを作成します"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "閉じる(_C)"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "このファイルを閉じます"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "終了(_Q)"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "gLabels を終了します"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "切り取り"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "選択範囲を切り取ります"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "コピー"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "選択範囲をコピーします"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "貼り付け"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "クリップボードの内容を貼り付けます"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "削除"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "選択したオブジェクトを削除します"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "全て選択"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "全てのオブジェクトを選択します"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "全て選択解除"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "選択範囲を解除します"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "gLabels の設定"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "gLabels の設定を変更します"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "拡大"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "拡大率を上げます"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "縮小"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "拡大率を下げます"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "拡大率 1:1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "拡大率を 100% に戻します"
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "ウィンドウにあわせる"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "ウィンドウの大きさに合わせます"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "選択モード"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "オブジェクトの選択や移動、編集を行います"
+
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "文字"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "文字オブジェクトを作成します"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "矩形"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "四角/三角のオブジェクトを作成します"
+
+#: ../src/ui.c:282 ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "直線"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "直線オブジェクトを作成します"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "楕円"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "楕円/円オブジェクトを作成します"
+
+#: ../src/ui.c:296 ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "画像"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "画像オブジェクトを作成します"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "バーコード"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "バーコード・オブジェクトを作成します"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "前面に持ってくる"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "オブジェクトを前面に持ってきます"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "後ろにまわす(_B)"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "オブジェクトを後ろにまわします"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "左に回転する"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr "オブジェクトを反時計回りに 90°回転させます"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "右に回転する"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "オブジェクトを時計回りに 90°回転させます"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "水平方向にフリップする"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "オブジェクトを水平方向にひっくり返します"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "垂直方向にフリップする"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "オブジェクトを垂直方向にひっくり返します"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "左寄せ"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "オブジェクトを左端に配置します"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "右寄せ"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "オブジェクトを右端に配置します"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "中央寄せ (水平方向)"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "オブジェクトを水平方向の中心に配置します"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "上寄せ"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "オブジェクトを上端に配置します"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "下寄せ"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "オブジェクトを下端に配置します"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "中央寄せ (垂直方向)"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "オブジェクトを垂直方向の中心に配置します"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "水平移動"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "オブジェクトをラベルの中心に水平移動します"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "垂直移動"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "オブジェクトをラベルの中心に垂直移動します"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "プロパティの結合"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "結合したプロパティを編集します"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "目次"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "gLabels のマニュアルを開きます"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "情報..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "gLabels について"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "プロパティのツールバー"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "プロパティ・ツールバーの表示/非表示を変更します"
+
+#: ../src/ui.c:444 ../src/ui.c:489 ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "ツールチップの表示"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "プロパティ・ツールバーにツールチップを表示します"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "グリッド"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr "ラベルのグリッド (格子線) の表示/非表示を変更します"
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "マークアップ"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "ラベルの外枠線の表示/非表示を変更します"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "メイン・ツールバー"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "メイン・ツールバーの表示/非表示を変更します"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "ツールバーの表示方法"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "ツールバーの表示/非表示を変更します"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "メイン・ツールバーにツールチップを表示します"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "ツールバーにツールチップを表示します"
+
+#: ../src/ui-property-bar.c:1232 ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "デフォルト"
+
+#: ../src/ui-property-bar.c:1239 ../src/object-editor.c:599
+msgid "No line"
+msgstr "線を消す"
+
+#: ../src/ui-property-bar.c:1247 ../src/object-editor.c:606
+msgid "No fill"
+msgstr "塗りつぶさない"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "オブジェクトのプロパティ"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "gLabels の開発に貢献してくれた方々:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "補足のクレジットについては AUTHORS ファイルをご覧になるか、"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "または http://glabels.sourceforge.net/ を訪れてみて下さい。"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "ラベルと名刺をデザインするプログラムです。\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr ""
+"相花 毅 <takeshi.aihana@gmail.com>\n"
+"日本GNOMEユーザー会 http://www.gnome.gr.jp"
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"gLabels はフリーソフトウェアです。すなわち、フリーソフトウェア財団が定める\n"
+"GNU 一般公衆使用許諾契約書の第2版もしくは (オプションで) それ以降のバージョン"
+"の\n"
+"下で複製や改編、再配布が認められています。\n"
+"\n"
+"このプログラムが役に立つことを望む中で配布されていますが、完全無保証です。\n"
+"販売目的または商用目的の保証はありません。\n"
+"詳細については GNU 一般公衆使用許諾契約書をご覧下さい。\n"
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "gLabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "新規ラベルまたはカード"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "ラベルのプロパティ"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "全てのファイル"
+
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "gLabels のドキュメント"
+
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "ファイル名の入力欄が空です"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr "既存のファイルを選択するか、または正しいファイル名を指定して下さい。"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "ファイルがありません。"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "ファイル \"%s\" が開けませんでした"
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "サポートしていないファイル形式です。"
+
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "ファイル \"%s\" を保存できませんでした"
+
+#: ../src/file.c:517 ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "データ保存中にエラーが発生しました。データはまだ保存されていません。"
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "\"%s\" に名前を付けて保存"
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "正しいファイル名を指定して下さい"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "ファイル \"%s\" に上書きしますか?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "ファイルが既に存在します。"
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "終了する前にドキュメント \"%s\" に対する変更点を保存しますか?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "保存しないと変更したデータを失うことになります。"
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "保存せずに閉じる"
+
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "ポイント"
+
+#: ../src/prefs.c:161 ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "[インチ]"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "[ミリ]"
+
+#: ../src/prefs-dialog.c:162 ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "gLabels の設定"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "矩形オブジェクトのプロパティ"
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "楕円オブジェクトのプロパティ"
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "直線オブジェクトのプロパティ"
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "画像オブジェクトのプロパティ"
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "文字オブジェクトのプロパティ"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "バーコード・オブジェクトのプロパティ"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "全てのファイル"
+
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "全ての画像"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr "結合プロパティ"
+
+#: ../src/merge-properties-dialog.c:289 ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr "結合データベース・ソースの選択"
+
+#: ../src/merge-properties-dialog.c:298 ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr "N/A"
+
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "選択"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr "レコード/フィールド"
+
+#: ../src/merge-properties-dialog.c:340 ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "データ"
+
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr "固定"
+
+#. ===================================================================
+#: ../src/print-op.c:237 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "ラベル"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "gLabels テンプレート・デザイナ"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "ようこそ"
+
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "名前と説明"
+
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "用紙の大きさ"
+
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "ラベルまたはカードの形状"
+
+#: ../src/template-designer.c:637
+msgid "Label or Card Size"
+msgstr "ラベルまたはカードの大きさ"
+
+#: ../src/template-designer.c:737
+msgid "Label Size (round)"
+msgstr "ラベルの大きさ (円)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "ラベルの大きさ (CD/DVD)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "レイアウトの数"
+
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "レイアウト"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr "デザインが完了しました"
+
+#: ../src/template-designer.c:1253
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+"<span foreground='red' weight='bold'>ブランド/製造元とパーツ番号が既存のテン"
+"プレートと同じです!</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (何でも)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (ZIP のみ)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (何でも)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A または UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Code 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Code 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "綴じ込み 2/5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "タイトルなし"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "バーコード・データが空です"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "バーコード・データが間違っています"
+
+#: ../src/xml-label.c:193
+msgid "xmlParseFile error"
+msgstr "xmlParseFile エラー"
+
+#: ../src/xml-label.c:234
+msgid "xmlParseDoc error"
+msgstr "xmlParseDoc エラー"
+
+#: ../src/xml-label.c:270
+msgid "No document root"
+msgstr "root ドキュメントではありません"
+
+#: ../src/xml-label.c:278
+msgid "Importing from glabels 0.1 format"
+msgstr "gLabels 0.1 形式からインポートする"
+
+#: ../src/xml-label.c:287
+msgid "Importing from glabels 0.4 format"
+msgstr "gLabels 0.4 形式からインポートする"
+
+#: ../src/xml-label.c:296
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "glabels の名前空間が不明です -- %s を利用して下さい"
+
+#: ../src/xml-label.c:327 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "おかしな root のノード = \"%s\""
+
+#: ../src/xml-label.c:364
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "Document ノードにおかしな root のノード = \"%s\""
+
+#: ../src/xml-label.c:409 ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "おかしなノード = \"%s\""
+
+#: ../src/xml-label.c:851
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "Data ノードにおかしなノード = \"%s\""
+
+#: ../src/xml-label.c:1088 ../libglabels/xml-template.c:682
+msgid "Utf8 conversion error."
+msgstr "Utf8 変換エラーです。"
+
+#: ../src/xml-label.c:1095
+msgid "Problem saving xml file."
+msgstr "XML ファイルの保存で問題があります"
+
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "なし"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "コンマで区切ったテキスト・ファイル (CSV)"
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "コロンで区切ったテキスト・ファイル"
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "タブで区切ったテキスト・ファイル"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Evolution アドレス帳のデータ"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "VCards 形式のデータを含むファイル"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "クエリを構築できませんでした"
+
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "アドレス帳を開けませんでした"
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "利用可能な領域の一覧を生成できませんでした"
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "連絡先を取得できませんでした"
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "用紙:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "開始:"
+
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "終了:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "ラベルの開始"
+
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr "(最初のシート)"
+
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "コピー:"
+
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "製本"
+
+#: ../src/wdgt-media-select.c:288 ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297 ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309 ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609 ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "いずれか"
+
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d /シート"
+
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:689 ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s 倍率"
+
+#: ../src/wdgt-media-select.c:693 ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s 倍率"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "最近開いたテンプレートはありません"
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr ""
+"\"全てのテンプレートから検索する\" のページからテンプレートを一つ選択してみて"
+"下さい。"
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr "見つかりません"
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr "別のブランドや用紙の大きさ、またはカテゴリを指定してみて下さい。"
+
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "カスタム"
+
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "カスタム色:"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "カスタム・カラーの選択"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "黒"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "淡い茶"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr "茶銀"
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "暗い緑 #2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "ネービー"
+
+#: ../src/mygal/color-palette.c:577 ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "暗い青"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "紫 #2"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "とても暗い灰"
+
+#: ../src/mygal/color-palette.c:582 ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "暗い赤"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "赤みの橙"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "金"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "暗い緑"
+
+#: ../src/mygal/color-palette.c:586 ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr "くすんだ青"
+
+#: ../src/mygal/color-palette.c:587 ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "青"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr "くすんだ紫"
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "暗い灰"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "赤"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "橙"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "ライム"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr "くすんだ緑"
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr "くすんだ青 #2"
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "スカイブルー #2"
+
+#: ../src/mygal/color-palette.c:598 ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "紫"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "灰"
+
+#: ../src/mygal/color-palette.c:602 ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "マゼンタ"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "明るい橙"
+
+#: ../src/mygal/color-palette.c:604 ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "黄"
+
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "緑"
+
+#: ../src/mygal/color-palette.c:606 ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "シアン"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "明るい青"
+
+#: ../src/mygal/color-palette.c:608 ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "赤紫"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "淡い灰"
+
+#: ../src/mygal/color-palette.c:612 ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "ピンク"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "淡い橙"
+
+#: ../src/mygal/color-palette.c:614 ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "淡い黄"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "淡い緑"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "淡いシアン"
+
+#: ../src/mygal/color-palette.c:617 ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "淡い青"
+
+#: ../src/mygal/color-palette.c:618 ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "淡い紫"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "白"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr "紫みの青"
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "暗い紫"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "スカイブルー"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "gLabels で致命的なエラーが発生しました!"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "gLabels のエラーです!"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "その他"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "指定する"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"用紙の大きさを定義したファイルが見つかりませんでした (libglabels が正しくイン"
+"ストールされていない可能性があります)"
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"カテゴリを定義したファイルが見つかりませんでした (libglabels が正しくインス"
+"トールされていない可能性があります)"
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"テンプレート・ファイルが見つかりませんでした (libglabels が正しくインストール"
+"されていない可能性があります)"
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "一般的な %s の全ページ・テンプレート"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "名前またはブランド/パーツ番号といった属性がありません。"
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "ページ・サイズの ID \"%s\" が不明なので名前として扱います。"
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "ページ・サイズの ID または名前 \"%s\" が不明です。"
+
+#: ../libglabels/xml-template.c:627
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+"必須となる \"ブランド名\" や \"パート番号\" といった属性が見つかりません (廃"
+"止した名前を試してみて下さい)"
+
+#: ../libglabels/xml-template.c:637
+msgid "Name attribute also missing."
+msgstr "名前も見つかりません"
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>レコードの選択/プレビュー</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>ソース</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "書式:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "場所:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "全て選択"
+
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "全て選択解除"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialog1"
+
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>ラベルの向き</b>"
+
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>メディアの種類</b>"
+
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"larger\">Xxx オブジェクトのプロパティ</span>"
+
+#: ../data/glade/object-editor.glade.h:5 ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "位置:"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "自動的に文字を小さくして結合できるようにする"
+
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "角度:"
+
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "チェックサム"
+
+#: ../data/glade/object-editor.glade.h:9 ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "色:"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "影を付ける"
+
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "ファミリ:"
+
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "ファイル:"
+
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr "塗りつぶし"
+
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "高さ:"
+
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "結合フィールドの挿入"
+
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr "キー:"
+
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "長さ:"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "行間:"
+
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "リテラル:"
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "透明度:"
+
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "位置"
+
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "画像サイズのリセット"
+
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "ファイルの選択"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "影"
+
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "大きさ"
+
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "大きさ:"
+
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "スタイル"
+
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "スタイル:"
+
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "幅:"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "横方向のズレ:"
+
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "縦方向のズレ:"
+
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "度"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr "桁数:"
+
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "書式:"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">ページ・サイズの初期値</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">塗りつぶし</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">線</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">文字</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">単位</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "フォント:"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "ISO A4 版"
+
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "インチ"
+
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "ローケル"
+
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "ミリ"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "オブジェクトのデフォルト"
+
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "ポイント"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "新規に作成するオブジェクトのデフォルト値を選択して下さい。"
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "利用する言語 (ロケール) に依存するパラメータを選択して下さい。"
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "US レター"
+
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>オプション</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>印刷の制御 (結合)</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>印刷の制御 (簡易)</b>"
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "太字"
+
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "中央寄せ"
+
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "フォント名"
+
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "フォントの大きさ"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "イタリック"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "左寄せ"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "線幅"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "右寄せ"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "文字の色"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "文字の色"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(例: \"封筒のラベル\", \"名刺\", ...)"
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(例: 8163A)"
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(例: Avery, Acme, ...)"
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. 外径:"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. 半径:"
+
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. 幅:"
+
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. 高さ:"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. インナーの半径:"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. 余分な部分 (重ね刷り可):"
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. クリッピングの幅:"
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. 余白"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. コーナー (角度):"
+
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. クリッピングの高さ:"
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. 水平方向の余分な部分 (重ね刷り可):"
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. 垂直方向の余分な部分 (重ね刷り可):"
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "5. 余分な部分 (重ね刷り可):"
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. 余白"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "ブランド/製造元:"
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD の形 (含むクレジット・カード CD)"
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"おめでとうございます!\n"
+"\n"
+"gLabels のテンプレートが完成しました。\n"
+"このデザインを採用し保存する場合は、[適用] をクリックして下さい。\n"
+"\n"
+"[キャンセル] をクリックするとデザインを破棄することができます。\n"
+"または [戻る] をクリックするとやり直すことが可能です。"
+
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "説明:"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "左上隅からの距離 (x0):"
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "左上隅からの距離 (y0):"
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "水平方向のピッチ (dx):"
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"何個のラベルをテンプレートの中に作成しますか?\n"
+"\n"
+"レイアウトはラベルまたはカードの集まりで、それらを格子状に配置することができ"
+"ます。\n"
+"最初のサンプルのように、ほとんどのテンプレートではレイアウトは一つで十分で"
+"す。\n"
+"二番目のサンプルでは、二つのレイアウトが必要な場合を図にしたものです。"
+
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "レイアウト #1:"
+
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "レイアウト #2:"
+
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "横方向の数 (nx):"
+
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "縦方向の数 (ny):"
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "レイアウトの数:"
+
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "用紙の大きさ:"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "パーツ番号"
+
+#: ../data/glade/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr "テンプレートの識別情報を入力して下さい:"
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "レイアウト情報を入力して下さい。"
+
+#: ../data/glade/template-designer.glade.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr "テンプレートのラベル単体の大きさをそれぞれ入力して下さい。"
+
+#: ../data/glade/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr "テンプレートのラベルまたはカード単体の大きさをそれぞれ入力して下さい。"
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "ラベルまたはカードの基本的な形状を選択して下さい。"
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "テンプレート用紙の大きさを選択して下さい。"
+
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "用紙のテスト印刷"
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "長方形または正方形 (コーナーを丸くすることも可)"
+
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "円"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"レイアウトが二つ必要な\n"
+"テンプレート"
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"レイアウトが一つだけで\n"
+"十分なレイアウト"
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "垂直方向のピッチ (dy):"
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"gLabels のテンプレート・デザイナへようこそ。\n"
+"\n"
+"このデザイナでは gLabels で利用する\n"
+"独自テンプレートの作成をお手伝いします。"
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "cd_size_page"
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "finish_page"
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "layout_page"
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr "name_page"
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "nlayouts_page"
+
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "pg_size_page"
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "rect_size_page"
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "round_size_page"
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "shape_page"
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr "start_page"
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "ブランド:"
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "カテゴリ:"
+
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "最近開いたテンプレート"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "全てのテンプレートから検索する"
+
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "回転させる"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0版"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1版"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10版"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2版"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3版"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4版"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5版"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6版"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7版"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8版"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9版"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0版"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1版"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10版"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2版"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3版"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4版"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5版"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6版"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7版"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8版"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9版"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "US エグゼクティブ"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "US リーガル"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "いずれのカード"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "いずれのラベル"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "名刺"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD またはその他のメディア"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "郵送/出荷する製品"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "長方形のラベル"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "丸いラベル"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "正方形のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "宛名のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "宛名のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr "汎用的なラベル"
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "名刺"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "CD の小冊子"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "CD のインレット"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "CD/DVD のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr "フロッピーのラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "フロッピーのラベル"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:18
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "封筒のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "封筒のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "小さな宛名のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+msgid "Mini Labels"
+msgstr "ミニ・ラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "出荷ラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "ファイル・フォルダのラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "CD/DVD のラベル (Disc ラベル)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "CD/DVD のラベル (Spine ラベル)"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "ドライバのラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "ファイル・バインダーのラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "全用紙のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "ID のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "目録のカード"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "大きな丸のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "名前つきバッジのラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "はがき"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "返信用宛名のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "Round Labels"
+msgstr "角が丸いラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "出荷ラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "小さな丸いラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "正方形のラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr "テントのカード"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "ビデオ・テープの表面ラベル"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "ビデオ・テープの背面ラベル"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "多目的ラベル 17mm x 54mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "出荷ラベル 62mm x 100mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "標準的な宛名のラベル 29mm x 90mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "3.5インチのフロッピーディスク"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "ファイルのフォルダ"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr "つり下げ式のフォルダ"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "大きな宛名のラベル"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "出荷ラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "汎用的なラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "アーチ・ファイルのラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr "アーチ・ファイルのラベル (大)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr "アーチ・ファイルのラベル (小)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "CD のラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr "CD/DVD のラベル (外側のみ)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "CD/DVD のラベル標準書式 (外側のみ)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "フロッピーのラベル (外側のみ)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "EPSON フォト・ステッカー 16"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Etiketten"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "冷蔵庫に貼る磁気ステッカ"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "一般的なラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "インクジェット/レーザ印刷用のラベル 70x37mm"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr "封筒のラベル (二列)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr "封筒のラベル (三列)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:26
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "PRO CD ラベル二枚 (外側のみ)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "長方形のラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr "ビデオのラベル (外側のみ)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "多目的ラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "名刺 CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "CD テンプレート (長方形)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "CD/DVD のラベル (外側のみ)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "カセットのラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "DLT のラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:20
+msgid "Microtube labels"
+msgstr "マイクロチューブのラベル"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Mini-CD Labels"
+msgstr "ミニ CD のラベル"
+
+#: ../data/templates/misc-us-templates.xml.h:23
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "PRO CD のラベル二枚 (CD 格納ケースのみ)"
+
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "PRO CD ラベル二枚 (外側のみ)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Slimline CD Case (rightside up)"
+msgstr "薄い CD フォルダ (右側)"
+
+#: ../data/templates/misc-us-templates.xml.h:31
+msgid "Slimline CD Case (upside down)"
+msgstr "薄い CD フォルダ (上側)"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "コレクションとカバーのラベル"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr "ファイルのラベル"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr "レバー・アーチ・ファイルのラベル"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "多目的 Stick+Lift のラベル"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "QSL-Karten Etiketten (70mm x 50.8mm)"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr "長方形のコピー機のラベル"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "ビデオのラベル (裏側)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "ラベルや名刺、メディアのジャケットをデザインします"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "gLabels ラベル・デザイナ"
+
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "gLabels のプロジェクト・ファイル"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: オプションの `%s` はあいまいです\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: オプションの `--%s` は引数を取ることはできません\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: オプションの `%c%s` は引数を取ることはできません\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: オプションの `%s` には引数が必要です\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: 認識できないオプション `--%s`\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: 認識できないオプション `%c%s`\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: 不正なオプション-- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: 不正なオプション -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: オプションには引数が必要です -- %c\n"
diff --git a/po/ko.po b/po/ko.po
new file mode 100644 (file)
index 0000000..f908f70
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,2543 @@
+# gLabels 한국어 번역 파일입니다.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels 2.3. pre0svn\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-08-15 18:13-0400\n"
+"PO-Revision-Date: 2008-02-26 10:59+0900\n"
+"Last-Translator: YunSeok Choi <xein@naver.com>\n"
+"Language-Team: none\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/glabels.c:55
+msgid "Show view debugging messages."
+msgstr "보기의 디버깅 메시지를 보이기"
+
+#: src/glabels.c:58
+msgid "Show item debugging messages."
+msgstr "아이템 디버깅 메시지를 보이기"
+
+#: src/glabels.c:61
+msgid "Show printing debugging messages."
+msgstr "인쇄 디버깅 메시지를 보이기"
+
+#: src/glabels.c:64
+msgid "Show prefs debugging messages."
+msgstr "Prefs 디버깅 메시지를 보이기"
+
+#: src/glabels.c:67
+msgid "Show file debugging messages."
+msgstr "파일 디버깅 메시지를 보이기"
+
+#: src/glabels.c:70
+msgid "Show document debugging messages."
+msgstr "문서 디버깅 메시지를 보이기"
+
+#: src/glabels.c:73
+msgid "Show template debugging messages."
+msgstr "Template 디버깅 메시지를 보이기"
+
+#: src/glabels.c:76
+msgid "Show paper debugging messages."
+msgstr "Paper 디버깅 메시지를 보이기"
+
+#: src/glabels.c:79
+msgid "Show xml debugging messages."
+msgstr "XML 디버깅 메시지를 보이기"
+
+#: src/glabels.c:82
+msgid "Show document merge debugging messages."
+msgstr "Document 여백 디버깅 메시지를 보이기"
+
+#: src/glabels.c:85
+msgid "Show commands debugging messages."
+msgstr "Command 디버깅 메시지를 보이기"
+
+#: src/glabels.c:88
+msgid "Show undo debugging messages."
+msgstr "Undo 디버깅 메시지를 보이기"
+
+#: src/glabels.c:91
+msgid "Show recent debugging messages."
+msgstr "최근의 디버깅 메시지를 보이기"
+
+#: src/glabels.c:94
+msgid "Show window debugging messages."
+msgstr "윈도우 디버깅 메시지를 보이기"
+
+#: src/glabels.c:97
+msgid "Show ui debugging messages."
+msgstr "GUI 디버깅 메시지를 보이기"
+
+#: src/glabels.c:100
+msgid "Show property_bar debugging messages."
+msgstr "속성도구 디버깅 메시지를 보이기"
+
+#: src/glabels.c:103
+msgid "Show media select widget debugging messages."
+msgstr "선택 제품 미디어 디버깅 메시지를 보이기"
+
+#: src/glabels.c:106
+msgid "Show mini preview widget debugging messages."
+msgstr "제품 작게 미리보기 디버깅 메시지를 보이기"
+
+#: src/glabels.c:109
+msgid "Show pixbuf cache debugging messages."
+msgstr "pixbuf cache 디버깅 메시지를 보이기"
+
+#: src/glabels.c:112
+msgid "Show widget debugging messages."
+msgstr "제품 디버깅 메시지를 보이기"
+
+#: src/glabels.c:115
+msgid "Show object editor debugging messages."
+msgstr "개채 편집기 디버깅 메시지를 보이기"
+
+#: src/glabels.c:118
+msgid "Turn on all debugging messages."
+msgstr "모든 디버깅 메시지 켜기"
+
+#: src/glabels.c:187
+msgid "Could not initialize Bonobo!\n"
+msgstr "Bonobo 초기화 할 수 없음!\n"
+
+#: src/glabels-batch.c:48
+msgid "print this message"
+msgstr "이 메시지를 인쇄"
+
+#: src/glabels-batch.c:50
+msgid "print the version of glabels-batch being used"
+msgstr "gLabel-batch 버전 인쇄"
+
+#: src/glabels-batch.c:52
+msgid "set output filename (default=\"output.ps\")"
+msgstr "출력 파일이름 지정 (기본 = \"output.ps\")"
+
+#: src/glabels-batch.c:52
+msgid "filename"
+msgstr "파일이름"
+
+#: src/glabels-batch.c:54
+msgid "number of sheets (default=1)"
+msgstr "용지 수(기본= 1)"
+
+#: src/glabels-batch.c:54
+msgid "sheets"
+msgstr "용지"
+
+#: src/glabels-batch.c:56
+msgid "number of copies (default=1)"
+msgstr "복사 수(기본= 1)"
+
+#: src/glabels-batch.c:56
+msgid "copies"
+msgstr "복사"
+
+#: src/glabels-batch.c:58
+#: src/print-dialog.c:336
+msgid "print outlines (to test printer alignment)"
+msgstr "외곽선 인쇄 (프린터 정렬 테스트)"
+
+#: src/glabels-batch.c:60
+#: src/print-dialog.c:344
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "거꾸로 인쇄 (거울 효과)"
+
+#: src/glabels-batch.c:96
+msgid "[OPTION...] GLABELS_FILE..."
+msgstr "[옵션...] gLabels 파일..."
+
+#: src/glabels-batch.c:116
+#, c-format
+msgid "missing glabels file\n"
+msgstr "gLabel 파일이 보이지 않음\n"
+
+#: src/glabels-batch.c:157
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "gLabel 파일  %s 을(를) 열 수 없습니다.\n"
+
+#: src/window.c:244
+msgid "(none) - gLabels"
+msgstr "(없음) - gLabels"
+
+#: src/window.c:414
+msgid "(modified)"
+msgstr "(수정됨)"
+
+#: src/stock.c:65
+#: data/ui/glabels-ui.xml.h:165
+msgid "_Select Mode"
+msgstr "모드 선택(_S)"
+
+#: src/stock.c:66
+#: data/ui/glabels-ui.xml.h:166
+msgid "_Text"
+msgstr "글자(_T)"
+
+#: src/stock.c:67
+#: data/ui/glabels-ui.xml.h:151
+msgid "_Line"
+msgstr "선(_L)"
+
+#: src/stock.c:68
+#: data/ui/glabels-ui.xml.h:133
+msgid "_Box"
+msgstr "사각형(_B)"
+
+#: src/stock.c:69
+#: data/ui/glabels-ui.xml.h:144
+msgid "_Ellipse"
+msgstr "타원(_E)"
+
+#: src/stock.c:70
+#: data/ui/glabels-ui.xml.h:149
+msgid "_Image"
+msgstr "그림(_I)"
+
+#: src/stock.c:71
+#: data/ui/glabels-ui.xml.h:11
+msgid "Bar_code"
+msgstr "바코드(_C)"
+
+#: src/stock.c:72
+msgid "_Merge Properties"
+msgstr "여백 속성(_M)"
+
+#: src/stock.c:73
+msgid "Object _Properties"
+msgstr "항목 속성(_P)"
+
+#: src/stock.c:74
+#: data/ui/glabels-ui.xml.h:13
+msgid "Bring to _Front"
+msgstr "앞으로 내기(_F)"
+
+#: src/stock.c:75
+#: data/ui/glabels-ui.xml.h:110
+msgid "Send to _Back"
+msgstr "뒤로 보내기(_B)"
+
+#: src/stock.c:76
+#: data/ui/glabels-ui.xml.h:97
+msgid "Rotate _Left"
+msgstr "왼쪽으로 회전(_L)"
+
+#: src/stock.c:77
+#: data/ui/glabels-ui.xml.h:98
+msgid "Rotate _Right"
+msgstr "오른쪽으로 회전(_R)"
+
+#: src/stock.c:78
+#: data/ui/glabels-ui.xml.h:52
+msgid "Flip _Horizontally"
+msgstr "수직 뒤집기(_H)"
+
+#: src/stock.c:79
+#: data/ui/glabels-ui.xml.h:53
+msgid "Flip _Vertically"
+msgstr "수평 뒤집기(_V)"
+
+#: src/stock.c:80
+#: data/ui/glabels-ui.xml.h:150
+msgid "_Lefts"
+msgstr "좌측(_L)"
+
+#: src/stock.c:81
+#: data/ui/glabels-ui.xml.h:162
+msgid "_Rights"
+msgstr "우측(_R)"
+
+#: src/stock.c:82
+#: data/ui/glabels-ui.xml.h:134
+msgid "_Centers"
+msgstr "중앙(_C)"
+
+#: src/stock.c:83
+#: data/ui/glabels-ui.xml.h:167
+msgid "_Tops"
+msgstr "상위(_T)"
+
+#: src/stock.c:84
+msgid "Bottoms"
+msgstr "하위"
+
+#: src/stock.c:85
+msgid "Centers"
+msgstr "중앙"
+
+#: src/stock.c:86
+#: src/stock.c:87
+#: data/ui/glabels-ui.xml.h:62
+msgid "Label Ce_nter"
+msgstr "라벨 중앙(_N)"
+
+#: src/stock.c:88
+#: data/ui/glabels-ui.xml.h:51
+msgid "Fill color"
+msgstr "색 채우기"
+
+#: src/stock.c:89
+#: data/ui/glabels-ui.xml.h:64
+msgid "Line color"
+msgstr "선 색상"
+
+#: src/stock.c:90
+#: src/stock.c:92
+msgid "Linked"
+msgstr "연결"
+
+#: src/stock.c:91
+#: src/stock.c:93
+msgid "Not Linked"
+msgstr "연결되지 않음"
+
+#: src/ui-property-bar.c:345
+#: src/object-editor.c:499
+msgid "Default"
+msgstr "기본"
+
+#: src/ui-property-bar.c:360
+#: src/object-editor.c:512
+msgid "No fill"
+msgstr "채우기 없음"
+
+#: src/ui-property-bar.c:375
+#: src/object-editor.c:505
+msgid "No line"
+msgstr "선 없음"
+
+#: src/ui-sidebar.c:180
+msgid "Object properties"
+msgstr "항목 속성"
+
+#: src/commands.c:385
+msgid ""
+"A label and business card creation program for GNOME.\n"
+" \n"
+"Glabels 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.\n"
+" \n"
+"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.\n"
+msgstr ""
+"GNOME 에서 Label과 명함을 제작하는 프로그램입니다.\n"
+"\n"
+"Glabels는 자유소프트웨어 입니다; 여러분은 이 프로그램을 GNU(General Public License)에 따라 자유롭게 수정 배포 할 수 있습니다. 이 프로그램은 GNU의 Ver.2 를 따르고 있습니다. \n"
+"\n"
+"이 프로그램은 어떠한 저작권료 없이 사용되어 질 수 있습니다.(번역주 : 번역자는 GNU를 깊이 알지 못합니다. 이 부분의 번역에 지적하고픈 부분이 있다면 번역 자료와 함께 연락주십시오. xein@naver.com)\n"
+
+#: src/commands.c:399
+msgid "See the file AUTHORS for additional credits,"
+msgstr "참여 제작자 AUTHORS 파일을 보세요."
+
+#: src/commands.c:400
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "또는 이곳을 방문 하세요. http://glabels.sourceforge.net/"
+
+#: src/commands.c:409
+msgid " "
+msgstr " "
+
+#: src/commands.c:424
+msgid "glabels"
+msgstr "gLabels"
+
+#: src/file.c:100
+msgid "New Label or Card"
+msgstr "새 라벨 또는 카드"
+
+#: src/file.c:132
+#: src/file.c:304
+msgid "Media Type"
+msgstr "매체 형식"
+
+#: src/file.c:138
+#: src/file.c:310
+msgid "Label orientation"
+msgstr "라벨의 방향"
+
+#: src/file.c:269
+msgid "Label properties"
+msgstr "라벨 속성"
+
+#: src/file.c:452
+#: src/file.c:870
+msgid "All files"
+msgstr "모든 파일"
+
+#: src/file.c:457
+#: src/file.c:875
+msgid "gLabels documents"
+msgstr "gLabels 문서"
+
+#: src/file.c:505
+#: src/file.c:617
+#: src/file.c:934
+#: src/file.c:1130
+msgid "Empty file name selection"
+msgstr "비어있는 파일 이름"
+
+#: src/file.c:506
+#: src/file.c:520
+#: src/file.c:618
+#: src/file.c:632
+msgid "Please select a file or supply a valid file name"
+msgstr "지원하는 파일을 선택하세요."
+
+#: src/file.c:519
+#: src/file.c:631
+msgid "File does not exist"
+msgstr "파일이 없습니다."
+
+#: src/file.c:563
+#: data/ui/glabels-ui.xml.h:75
+msgid "Open"
+msgstr "열기"
+
+#: src/file.c:565
+msgid "Open label"
+msgstr "라벨 열기"
+
+#: src/file.c:707
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "\"%s\" 파일을 열 수 없습니다."
+
+#: src/file.c:715
+msgid "Not a supported file format"
+msgstr "지원되지 않는 파일 형식"
+
+#: src/file.c:797
+#: src/file.c:979
+#: src/file.c:1174
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "\"%s\" 파일을 저장할 수 없습니다."
+
+#: src/file.c:805
+#: src/file.c:987
+#: src/file.c:1182
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "저장하는데 오류가 발생했습니다. 파일을 저장하지 못했습니다."
+
+#: src/file.c:848
+#: src/file.c:1048
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "\"%s\" 이름으로 저장"
+
+#: src/file.c:935
+#: src/file.c:1131
+msgid "Please supply a valid file name"
+msgstr "유효한 파일이름이 필요합니다."
+
+#: src/file.c:952
+#: src/file.c:1147
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "\"%s\"파일이름으로 덮어쓰시겠습니까?"
+
+#: src/file.c:960
+#: src/file.c:1155
+msgid "File already exists."
+msgstr "파일이름이 존재합니다."
+
+#: src/file.c:1271
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "닫기전에 바뀐부분을 \"%s\"이름으로 저장하시겠습니까?"
+
+#: src/file.c:1279
+msgid "Your changes will be lost if you don't save them."
+msgstr "저장하지 않으면, 바뀐부분을 잃어버리게 됩니다."
+
+#: src/file.c:1282
+msgid "Close without saving"
+msgstr "저장없이 닫기"
+
+#. Should not happen
+#: src/prefs.c:156
+#: src/prefs.c:163
+#: data/glade/prefs-dialog.glade.h:23
+#: data/glade/object-editor.glade.h:37
+msgid "points"
+msgstr "포인트"
+
+#: src/prefs.c:158
+#: data/glade/object-editor.glade.h:36
+#: data/glade/template-designer.glade.h:74
+msgid "inches"
+msgstr "[인치]"
+
+#: src/prefs.c:160
+msgid "mm"
+msgstr "[밀리미터]"
+
+#: src/prefs-dialog.c:248
+#: data/glade/prefs-dialog.glade.h:22
+msgid "gLabels Preferences"
+msgstr "gLabels 환경설정"
+
+#.
+#. * Submenu: Order
+#.
+#: src/view.c:3570
+#: data/ui/glabels-ui.xml.h:157
+msgid "_Order"
+msgstr "순서(_O)"
+
+#.
+#. * Submenu: Rotate/Flip
+#.
+#: src/view.c:3591
+#: data/ui/glabels-ui.xml.h:163
+msgid "_Rotate/Flip"
+msgstr "회전/뒤집기(_R)"
+
+#.
+#. * Submenu: Align Horizontally
+#.
+#: src/view.c:3624
+msgid "Align _Horizontally"
+msgstr "가로로 정렬(_H)"
+
+#.
+#. * Submenu: Align Vertically
+#.
+#: src/view.c:3663
+msgid "Align _Vertically"
+msgstr "세로로 정렬(_V)"
+
+#: src/view.c:3724
+#: data/ui/glabels-ui.xml.h:140
+msgid "_Delete"
+msgstr "삭제(_D)"
+
+#. Build editor.
+#: src/view-box.c:223
+msgid "Box object properties"
+msgstr "사각형 개체 속성"
+
+#. Build editor.
+#: src/view-ellipse.c:223
+msgid "Ellipse object properties"
+msgstr "타원 개체 속성"
+
+#. Build editor.
+#: src/view-line.c:223
+msgid "Line object properties"
+msgstr "선 개체 속성"
+
+#. Build editor.
+#: src/view-image.c:222
+msgid "Image object properties"
+msgstr "그림 개체 속성"
+
+#. Build editor.
+#: src/view-text.c:250
+msgid "Text object properties"
+msgstr "글자 개체 속성"
+
+#: src/view-text.c:562
+#: data/glade/object-editor.glade.h:28
+msgid "Text"
+msgstr "글자"
+
+#. Build editor.
+#: src/view-barcode.c:209
+msgid "Barcode object properties"
+msgstr "바코드 개체 속성"
+
+#: src/view-barcode.c:579
+#: src/print.c:1088
+msgid "Invalid barcode data"
+msgstr "잘못된 바코드 데이터"
+
+#: src/merge-properties-dialog.c:231
+msgid "Merge Properties"
+msgstr "여백 속성"
+
+#. ---- Source section ----
+#: src/merge-properties-dialog.c:237
+msgid "Source"
+msgstr "소스"
+
+#: src/merge-properties-dialog.c:245
+msgid "Format:"
+msgstr "서식:"
+
+#. Location line
+#: src/merge-properties-dialog.c:273
+msgid "Location:"
+msgstr "장소:"
+
+#: src/merge-properties-dialog.c:282
+#: src/merge-properties-dialog.c:393
+msgid "Select merge-database source"
+msgstr "병합 데이터베이스 소스 선택"
+
+#: src/merge-properties-dialog.c:289
+#: src/merge-properties-dialog.c:404
+msgid "N/A"
+msgstr "N/A"
+
+#. ---- Sample Fields section ----
+#: src/merge-properties-dialog.c:300
+msgid "Record selection/preview:"
+msgstr "선택 기록/미리보기:"
+
+#: src/merge-properties-dialog.c:326
+msgid "Select"
+msgstr "선택"
+
+#: src/merge-properties-dialog.c:334
+msgid "Record/Field"
+msgstr "기록/범위"
+
+#: src/merge-properties-dialog.c:342
+#: data/glade/object-editor.glade.h:9
+msgid "Data"
+msgstr "데이터"
+
+#: src/print-dialog.c:266
+#: data/ui/glabels-ui.xml.h:82
+msgid "Print"
+msgstr "인쇄"
+
+#: src/print-dialog.c:281
+msgid "_Job"
+msgstr "작업(_J)"
+
+#: src/print-dialog.c:286
+msgid "P_rinter"
+msgstr "프린터(_R)"
+
+#. ----------- Add simple-copies widget ------------
+#: src/print-dialog.c:314
+msgid "Copies"
+msgstr "매수"
+
+#. ------- Add merge control widget ------------
+#: src/print-dialog.c:322
+msgid "Document merge control"
+msgstr "문서 여백 제어"
+
+#. ----------- Add custom print options area ------------
+#: src/print-dialog.c:330
+msgid "Options"
+msgstr "옵션"
+
+#: src/print-dialog.c:351
+msgid "print crop marks"
+msgstr "자르기 표시 인쇄"
+
+#: src/print-dialog.c:553
+#: src/print-dialog.c:592
+msgid "Print preview"
+msgstr "인쇄 미리보기"
+
+#: src/template-designer.c:409
+#: data/glade/template-designer.glade.h:73
+msgid "gLabels Template Designer"
+msgstr "gLabels 서식 디자이너"
+
+#: src/bc.c:60
+msgid "POSTNET (any)"
+msgstr "POSTNET (임의)"
+
+#: src/bc.c:63
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (ZIP만)"
+
+#: src/bc.c:66
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP+4)"
+
+#: src/bc.c:69
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: src/bc.c:72
+msgid "EAN (any)"
+msgstr "EAN (임의)"
+
+#: src/bc.c:75
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: src/bc.c:78
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: src/bc.c:81
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: src/bc.c:84
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: src/bc.c:87
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: src/bc.c:90
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: src/bc.c:93
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A 또는 UPC-E)"
+
+#: src/bc.c:96
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: src/bc.c:99
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: src/bc.c:102
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: src/bc.c:105
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: src/bc.c:108
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: src/bc.c:111
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: src/bc.c:114
+msgid "ISBN"
+msgstr "ISBN"
+
+#: src/bc.c:117
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: src/bc.c:120
+msgid "Code 39"
+msgstr "Code 39"
+
+#: src/bc.c:123
+msgid "Code 128"
+msgstr "Code 128"
+
+#: src/bc.c:126
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: src/bc.c:129
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: src/bc.c:132
+msgid "Interleaved 2 of 5"
+msgstr "Interleaved 2 of 5"
+
+#: src/bc.c:135
+msgid "Codabar"
+msgstr "Codabar"
+
+#: src/bc.c:138
+msgid "MSI"
+msgstr "MSI"
+
+#: src/bc.c:141
+msgid "Plessey"
+msgstr "Plessey"
+
+#: src/label.c:569
+msgid "Untitled"
+msgstr "제목없음"
+
+#: src/xml-label.c:176
+#: src/xml-label.c:213
+msgid "xmlParseFile error"
+msgstr "xmlParse파일 오류"
+
+#: src/xml-label.c:250
+msgid "No document root"
+msgstr "root 문서가 아님"
+
+#: src/xml-label.c:264
+msgid "Importing from glabels 0.1 format"
+msgstr "gLabels 0.1로 부터 가져오기"
+
+#: src/xml-label.c:272
+msgid "Importing from glabels 0.4 format"
+msgstr "gLabels 0.4로 부터 가져오기"
+
+#: src/xml-label.c:279
+msgid "Importing from glabels 1.91 format"
+msgstr "gLabels 1.91로 부터 가져오기"
+
+#: src/xml-label.c:282
+msgid "bad document, unknown glabels Namespace"
+msgstr "잘못된 문서, 알 수 없는 Glabels 이름공간"
+
+#: src/xml-label.c:311
+#: src/xml-label-04.c:75
+#: src/xml-label-191.c:131
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "잘못된 Root 노드 = \"%s\""
+
+#: src/xml-label.c:348
+#: src/xml-label-191.c:165
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "문서 노드 내의 잘못된 노드 = \"%s\""
+
+#: src/xml-label.c:393
+#: src/xml-label-04.c:123
+#: src/xml-label-191.c:197
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "잘못된 노드 = \"%s\""
+
+#: src/xml-label.c:796
+#: src/xml-label-191.c:605
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "데이터 노드 내의 잘못된 노드 = \"%s\""
+
+#: src/xml-label.c:962
+#: libglabels/xml-template.c:535
+msgid "Utf8 conversion error."
+msgstr "Utf8 변환 에러"
+
+#: src/xml-label.c:969
+#: libglabels/xml-template.c:542
+msgid "Problem saving xml file."
+msgstr "XML 파일 저장에 문제가 있습니다."
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: src/xml-label-191.c:680
+#: libglabels/xml-template.c:199
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "알 수 없는 용지 크기 ID \"%s\"。名前として扱います。"
+
+#: src/xml-label-191.c:690
+#: libglabels/xml-template.c:209
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "알 수 없는 용지 크기 ID 또는 이름 \"%s\""
+
+#: src/merge.c:172
+#: src/merge.c:213
+#: src/merge.c:399
+#: src/merge.c:402
+msgid "None"
+msgstr "없음"
+
+#: src/merge-init.c:53
+msgid "Text file with comma delimeters (CSV)"
+msgstr "콤마로 구분된 텍스트파일(CSV)"
+
+#: src/merge-init.c:60
+msgid "Text file with colon delimeters"
+msgstr "콜론으로 구분된 텍스트 파일"
+
+#: src/merge-init.c:67
+msgid "Text file with tab delimeters"
+msgstr "텝으로 구분된 텍스트 파일"
+
+#: src/wdgt-image-select.c:201
+#: data/glade/object-editor.glade.h:11
+msgid "File:"
+msgstr "파일:"
+
+#: src/wdgt-image-select.c:245
+#: data/glade/object-editor.glade.h:16
+msgid "Key:"
+msgstr "키:"
+
+#: src/wdgt-print-copies.c:179
+msgid "Sheets:"
+msgstr "용지:"
+
+#: src/wdgt-print-copies.c:197
+msgid "Labels"
+msgstr "라벨"
+
+#: src/wdgt-print-copies.c:200
+msgid "from:"
+msgstr "부터:"
+
+#: src/wdgt-print-copies.c:207
+msgid "to:"
+msgstr "에게:"
+
+#: src/wdgt-print-merge.c:178
+msgid "Start on label"
+msgstr "라벨의 시작"
+
+#: src/wdgt-print-merge.c:186
+msgid "on 1st sheet"
+msgstr "첫번째 용지에서"
+
+#: src/wdgt-print-merge.c:195
+msgid "Copies:"
+msgstr "매수:"
+
+#: src/wdgt-print-merge.c:201
+msgid "Collate"
+msgstr "제본"
+
+#: src/wdgt-media-select.c:269
+#: data/glade/template-designer.glade.h:29
+msgid "Description:"
+msgstr "설명:"
+
+#: src/wdgt-media-select.c:279
+#: data/glade/template-designer.glade.h:53
+msgid "Page size:"
+msgstr "용지 크기:"
+
+#: src/wdgt-media-select.c:290
+msgid "Label size:"
+msgstr "라벨 크기:"
+
+#: src/wdgt-media-select.c:301
+msgid "Layout:"
+msgstr "배치:"
+
+#: src/wdgt-media-select.c:578
+#, c-format
+msgid "%d x %d  (%d per sheet)"
+msgstr "%d x %d  (용지의 %d)"
+
+#: src/wdgt-media-select.c:582
+#, c-format
+msgid "%d per sheet"
+msgstr "용지의 %d"
+
+#: src/wdgt-media-select.c:614
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: src/wdgt-media-select.c:619
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: src/wdgt-media-select.c:630
+#: src/wdgt-media-select.c:644
+#, c-format
+msgid "%s %s diameter"
+msgstr "지름 %s %s"
+
+#: src/wdgt-media-select.c:634
+#: src/wdgt-media-select.c:648
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "지름 %.5g %s"
+
+#: src/wdgt-rotate-label.c:193
+msgid "Rotate"
+msgstr "회전"
+
+#. This is the default custom color
+#: src/mygal/color-palette.c:396
+msgid "custom"
+msgstr "임의의"
+
+#. "Custom" color - we'll pop up a GnomeColorPicker
+#: src/mygal/color-palette.c:438
+msgid "Custom Color:"
+msgstr "임의의 색상:"
+
+#: src/mygal/color-palette.c:446
+msgid "Choose Custom Color"
+msgstr "임의의 색상 선택"
+
+#: src/mygal/color-palette.c:579
+msgid "black"
+msgstr "검은색"
+
+#: src/mygal/color-palette.c:580
+msgid "light brown"
+msgstr "밝은 갈색"
+
+#: src/mygal/color-palette.c:581
+msgid "brown gold"
+msgstr "고동색"
+
+#: src/mygal/color-palette.c:582
+msgid "dark green #2"
+msgstr "어두운 녹색 #2"
+
+#: src/mygal/color-palette.c:583
+msgid "navy"
+msgstr "남색"
+
+#: src/mygal/color-palette.c:584
+#: src/mygal/color-palette.c:640
+msgid "dark blue"
+msgstr "어두운 파랑색"
+
+#: src/mygal/color-palette.c:585
+msgid "purple #2"
+msgstr "자주색 #2"
+
+#: src/mygal/color-palette.c:586
+msgid "very dark gray"
+msgstr "매우 어두운 회색"
+
+#: src/mygal/color-palette.c:589
+#: src/mygal/color-palette.c:645
+msgid "dark red"
+msgstr "어두운 빨강색"
+
+#: src/mygal/color-palette.c:590
+msgid "red-orange"
+msgstr "적오렌지색"
+
+#: src/mygal/color-palette.c:591
+msgid "gold"
+msgstr "금색"
+
+#: src/mygal/color-palette.c:592
+msgid "dark green"
+msgstr "어두운 녹색"
+
+#: src/mygal/color-palette.c:593
+#: src/mygal/color-palette.c:646
+msgid "dull blue"
+msgstr "탁한 파랑색"
+
+#: src/mygal/color-palette.c:594
+#: src/mygal/color-palette.c:647
+msgid "blue"
+msgstr "파랑색"
+
+#: src/mygal/color-palette.c:595
+msgid "dull purple"
+msgstr "탁한 자주색"
+
+#: src/mygal/color-palette.c:596
+msgid "dark grey"
+msgstr "어두운 회색"
+
+#: src/mygal/color-palette.c:599
+msgid "red"
+msgstr "빨강색"
+
+#: src/mygal/color-palette.c:600
+msgid "orange"
+msgstr "오렌지색"
+
+#: src/mygal/color-palette.c:601
+msgid "lime"
+msgstr "라임색"
+
+#: src/mygal/color-palette.c:602
+msgid "dull green"
+msgstr "탁한 녹색"
+
+#: src/mygal/color-palette.c:603
+msgid "dull blue #2"
+msgstr "탁한 파랑색#2"
+
+#: src/mygal/color-palette.c:604
+msgid "sky blue #2"
+msgstr "하늘색 #2"
+
+#: src/mygal/color-palette.c:605
+#: src/mygal/color-palette.c:644
+msgid "purple"
+msgstr "자주색"
+
+#: src/mygal/color-palette.c:606
+msgid "gray"
+msgstr "회색"
+
+#: src/mygal/color-palette.c:609
+#: src/mygal/color-palette.c:641
+msgid "magenta"
+msgstr "마젠타색"
+
+#: src/mygal/color-palette.c:610
+msgid "bright orange"
+msgstr "밝은 오렌지색"
+
+#: src/mygal/color-palette.c:611
+#: src/mygal/color-palette.c:642
+msgid "yellow"
+msgstr "노랑색"
+
+#: src/mygal/color-palette.c:612
+msgid "green"
+msgstr "녹색"
+
+#: src/mygal/color-palette.c:613
+#: src/mygal/color-palette.c:643
+msgid "cyan"
+msgstr "청록색"
+
+#: src/mygal/color-palette.c:614
+msgid "bright blue"
+msgstr "밝은 파랑색"
+
+#: src/mygal/color-palette.c:615
+#: src/mygal/color-palette.c:632
+msgid "red purple"
+msgstr "빨간 자주색"
+
+#: src/mygal/color-palette.c:616
+msgid "light grey"
+msgstr "가벼운 회색"
+
+#: src/mygal/color-palette.c:619
+#: src/mygal/color-palette.c:636
+msgid "pink"
+msgstr "분홍색"
+
+#: src/mygal/color-palette.c:620
+msgid "light orange"
+msgstr "가벼운 오렌지색"
+
+#: src/mygal/color-palette.c:621
+#: src/mygal/color-palette.c:633
+msgid "light yellow"
+msgstr "가벼운 노랑색"
+
+#: src/mygal/color-palette.c:622
+msgid "light green"
+msgstr "가벼운 녹색"
+
+#: src/mygal/color-palette.c:623
+msgid "light cyan"
+msgstr "가벼운 청록색"
+
+#: src/mygal/color-palette.c:624
+#: src/mygal/color-palette.c:634
+msgid "light blue"
+msgstr "가벼운 바랑색"
+
+#: src/mygal/color-palette.c:625
+#: src/mygal/color-palette.c:638
+msgid "light purple"
+msgstr "가벼운 자주색"
+
+#: src/mygal/color-palette.c:626
+msgid "white"
+msgstr "흰색"
+
+#: src/mygal/color-palette.c:631
+msgid "purplish blue"
+msgstr "자주빛 파랑색"
+
+#: src/mygal/color-palette.c:635
+msgid "dark purple"
+msgstr "어두운 자주색"
+
+#: src/mygal/color-palette.c:637
+msgid "sky blue"
+msgstr "하늘색"
+
+#: libglabels/template.c:848
+#, c-format
+msgid "Generic %s full page"
+msgstr "Generic %s 전면에 걸친"
+
+#: libglabels/template.c:897
+msgid "No template files found!"
+msgstr "서식파일을 찾을 수 없음!"
+
+#. Create and append an "Other" entry.
+#: libglabels/paper.c:67
+msgid "Other"
+msgstr "직접지정"
+
+#: libglabels/paper.c:361
+msgid "No paper files found!"
+msgstr "용지 파일을 찾을 수 없음!"
+
+#: data/ui/glabels-ui.xml.h:1
+msgid "About glabels"
+msgstr "gLabels에 대해"
+
+#: data/ui/glabels-ui.xml.h:2
+msgid "About..."
+msgstr "정보..."
+
+#: data/ui/glabels-ui.xml.h:3
+msgid "Align _Horizontal"
+msgstr "세로로 정렬(_H)"
+
+#: data/ui/glabels-ui.xml.h:4
+msgid "Align _Vertical"
+msgstr "가로로 정렬(_V)"
+
+#: data/ui/glabels-ui.xml.h:5
+msgid "Align objects to bottoms"
+msgstr "개체 아래로 정렬"
+
+#: data/ui/glabels-ui.xml.h:6
+msgid "Align objects to horizontal centers"
+msgstr "개체 세로 중앙으로 정렬"
+
+#: data/ui/glabels-ui.xml.h:7
+msgid "Align objects to left edges"
+msgstr "개체 좌측 가장자리로 정렬"
+
+#: data/ui/glabels-ui.xml.h:8
+msgid "Align objects to right edges"
+msgstr "개체 우측 가장자리로 정렬"
+
+#: data/ui/glabels-ui.xml.h:9
+msgid "Align objects to tops"
+msgstr "개체 상위로 정렬"
+
+#: data/ui/glabels-ui.xml.h:10
+msgid "Align objects to vertical centers"
+msgstr "개체 수평 중앙으로 정렬"
+
+#: data/ui/glabels-ui.xml.h:12
+msgid "Bold"
+msgstr "굵게"
+
+#: data/ui/glabels-ui.xml.h:14
+msgid "Center align"
+msgstr "중앙 정렬"
+
+#: data/ui/glabels-ui.xml.h:15
+msgid "Center objects to horizontal label center"
+msgstr "중앙 개체를 수직라벨 중앙으로"
+
+#: data/ui/glabels-ui.xml.h:16
+msgid "Center objects to vertical label center"
+msgstr "중앙 개체를 수평라벨 중상으로"
+
+#: data/ui/glabels-ui.xml.h:17
+msgid "Change the visibility of markup lines in the current window"
+msgstr "현재 윈도우의 보이는 마크업 선 변경"
+
+#: data/ui/glabels-ui.xml.h:18
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "현재 윈도우의 보이는 그리기 도구 변경"
+
+#: data/ui/glabels-ui.xml.h:19
+msgid "Change the visibility of the grid in the current window"
+msgstr "현재 윈도우의 보이는 그리드 변경"
+
+#: data/ui/glabels-ui.xml.h:20
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "현재 윈도우의 보이는 주 도구 변경"
+
+#: data/ui/glabels-ui.xml.h:21
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "현재 윈도우의 보이는 속성 도구 변경"
+
+#: data/ui/glabels-ui.xml.h:22
+msgid "Close"
+msgstr "닫기"
+
+#: data/ui/glabels-ui.xml.h:23
+msgid "Close the current file"
+msgstr "현재 파일을 닫기"
+
+#: data/ui/glabels-ui.xml.h:24
+msgid "Configure the application"
+msgstr "gLabel 구성"
+
+#: data/ui/glabels-ui.xml.h:25
+msgid "Contents"
+msgstr "목차"
+
+#: data/ui/glabels-ui.xml.h:26
+msgid "Copy"
+msgstr "복사"
+
+#: data/ui/glabels-ui.xml.h:27
+msgid "Copy the selection"
+msgstr "선택 복사"
+
+#: data/ui/glabels-ui.xml.h:28
+msgid "Create a custom template"
+msgstr "임의의 서식 만들기"
+
+#: data/ui/glabels-ui.xml.h:29
+msgid "Create a new document"
+msgstr "새로운 문서 만들기"
+
+#: data/ui/glabels-ui.xml.h:30
+msgid "Create barcode object"
+msgstr "바코드 개체 만들기"
+
+#: data/ui/glabels-ui.xml.h:31
+msgid "Create box/rectangle object"
+msgstr "사각형/직사각형 개체 만들기"
+
+#: data/ui/glabels-ui.xml.h:32
+msgid "Create ellipse/circle object"
+msgstr "타원/원형 개체 만들기"
+
+#: data/ui/glabels-ui.xml.h:33
+msgid "Create image object"
+msgstr "그림 개체 만들기"
+
+#: data/ui/glabels-ui.xml.h:34
+msgid "Create line object"
+msgstr "선 개체 만들기"
+
+#: data/ui/glabels-ui.xml.h:35
+msgid "Create text object"
+msgstr "글자 개체 만들기"
+
+#: data/ui/glabels-ui.xml.h:36
+msgid "Cu_t"
+msgstr "자르기(_T)"
+
+#: data/ui/glabels-ui.xml.h:37
+msgid "Customize"
+msgstr "커스터마이즈"
+
+#: data/ui/glabels-ui.xml.h:38
+msgid "Customize Drawing Toolbar"
+msgstr "그리기 도구 커스터마이즈"
+
+#: data/ui/glabels-ui.xml.h:39
+msgid "Customize Main Toolbar"
+msgstr "주 도구 커스터마이즈"
+
+#: data/ui/glabels-ui.xml.h:40
+msgid "Customize Property Toolbar"
+msgstr "속성 도구 커스터마이즈"
+
+#: data/ui/glabels-ui.xml.h:41
+msgid "Customize toolbars"
+msgstr "도구 커스터마이즈"
+
+#: data/ui/glabels-ui.xml.h:42
+msgid "Cut"
+msgstr "잘라내기"
+
+#: data/ui/glabels-ui.xml.h:43
+msgid "Cut the selection"
+msgstr "선택한것 잘라내기"
+
+#: data/ui/glabels-ui.xml.h:44
+msgid "Decrease magnification"
+msgstr "확대 감소"
+
+#: data/ui/glabels-ui.xml.h:45
+msgid "Delete"
+msgstr "삭제"
+
+#: data/ui/glabels-ui.xml.h:46
+msgid "Delete the selected objects"
+msgstr "선택한 개체 삭제"
+
+#: data/ui/glabels-ui.xml.h:47
+msgid "Drawing toolbar"
+msgstr "그리기 도구"
+
+#: data/ui/glabels-ui.xml.h:48
+msgid "Dump XML"
+msgstr "XML 덤프"
+
+#: data/ui/glabels-ui.xml.h:49
+msgid "Dump the GUI Xml description"
+msgstr "GUI의 XML설명 덤프"
+
+#: data/ui/glabels-ui.xml.h:50
+msgid "Edit merge properties"
+msgstr "여백 속성 편집"
+
+#: data/ui/glabels-ui.xml.h:54
+msgid "Flip object horizontally"
+msgstr "수직 개체 뒤집기"
+
+#: data/ui/glabels-ui.xml.h:55
+msgid "Flip object vertically"
+msgstr "수평 개체 뒤집기"
+
+#: data/ui/glabels-ui.xml.h:56
+msgid "Font name"
+msgstr "글꼴"
+
+#: data/ui/glabels-ui.xml.h:57
+msgid "Font selector"
+msgstr "글꼴 선택기"
+
+#: data/ui/glabels-ui.xml.h:58
+msgid "Font size"
+msgstr "글꼴 크기"
+
+#: data/ui/glabels-ui.xml.h:59
+msgid "Icon and _Text"
+msgstr "아이콘과 글자(_T)"
+
+#: data/ui/glabels-ui.xml.h:60
+msgid "Increase magnification"
+msgstr "상승 확대"
+
+#: data/ui/glabels-ui.xml.h:61
+msgid "Italic"
+msgstr "이탤릭"
+
+#: data/ui/glabels-ui.xml.h:63
+msgid "Left align"
+msgstr "왼쪽 정렬"
+
+#: data/ui/glabels-ui.xml.h:65
+msgid "Line width"
+msgstr "선 넓이"
+
+#: data/ui/glabels-ui.xml.h:66
+msgid "Lower object to bottom"
+msgstr "개체를 하단으로 내리기"
+
+#: data/ui/glabels-ui.xml.h:67
+msgid "M_arkup"
+msgstr "마크업(_A)"
+
+#: data/ui/glabels-ui.xml.h:68
+msgid "Main toolbar"
+msgstr "주 도구"
+
+#: data/ui/glabels-ui.xml.h:69
+msgid "Markup"
+msgstr "마크업"
+
+#: data/ui/glabels-ui.xml.h:70
+msgid "Modify document properties"
+msgstr "문서 속성 고치기"
+
+#: data/ui/glabels-ui.xml.h:71
+msgid "New"
+msgstr "새로 만들기"
+
+#: data/ui/glabels-ui.xml.h:72
+msgid "Object property editor"
+msgstr "항목 속성 편집기"
+
+#: data/ui/glabels-ui.xml.h:73
+msgid "Only show icons in the drawing toolbar"
+msgstr "그리기 도구에서 아이콘만 보이기"
+
+#: data/ui/glabels-ui.xml.h:74
+msgid "Only show icons in the main toolbar"
+msgstr "주 도구에서 아이콘만 보이기"
+
+#: data/ui/glabels-ui.xml.h:76
+msgid "Open a file"
+msgstr "파일 열기"
+
+#: data/ui/glabels-ui.xml.h:77
+msgid "Open the glabels manual"
+msgstr "gLabeles 메뉴얼 열기"
+
+#: data/ui/glabels-ui.xml.h:78
+msgid "Paste"
+msgstr "붙이기"
+
+#: data/ui/glabels-ui.xml.h:79
+msgid "Paste the clipboard"
+msgstr "클립보드에 붙이기"
+
+#: data/ui/glabels-ui.xml.h:80
+msgid "Pr_eferences..."
+msgstr "속성(_E)..."
+
+#: data/ui/glabels-ui.xml.h:81
+msgid "Preferences"
+msgstr "설정"
+
+#: data/ui/glabels-ui.xml.h:83
+msgid "Print the current file"
+msgstr "현재 파일을 인쇄"
+
+#: data/ui/glabels-ui.xml.h:84
+msgid "Proper_ties..."
+msgstr "속성(_T)..."
+
+#: data/ui/glabels-ui.xml.h:85
+msgid "Properties"
+msgstr "속성"
+
+#: data/ui/glabels-ui.xml.h:86
+msgid "Property toolbar"
+msgstr "속성 도구"
+
+#: data/ui/glabels-ui.xml.h:87
+msgid "Quit"
+msgstr "종료"
+
+#: data/ui/glabels-ui.xml.h:88
+msgid "Quit the program"
+msgstr "gLabels을 종료"
+
+#: data/ui/glabels-ui.xml.h:89
+msgid "Raise object to top"
+msgstr "개체를 상위로 올리기"
+
+#: data/ui/glabels-ui.xml.h:90
+msgid "Recent _Files"
+msgstr "최근의 파일(_F)"
+
+#: data/ui/glabels-ui.xml.h:91
+msgid "Redo"
+msgstr "재실행"
+
+#: data/ui/glabels-ui.xml.h:92
+msgid "Redo the undone action"
+msgstr "재실행 할것 없음"
+
+#: data/ui/glabels-ui.xml.h:93
+msgid "Remove all selections"
+msgstr "모든 선택사항 삭제"
+
+#: data/ui/glabels-ui.xml.h:95
+#, no-c-format
+msgid "Restore scale to 100%"
+msgstr "100%크기로 복구"
+
+#: data/ui/glabels-ui.xml.h:96
+msgid "Right align"
+msgstr "오른쪽으로 정렬"
+
+#: data/ui/glabels-ui.xml.h:99
+msgid "Rotate object 90 clockwise"
+msgstr "90° 시계방향으로 회전"
+
+#: data/ui/glabels-ui.xml.h:100
+msgid "Rotate object 90 counter-clockwise"
+msgstr "90° 반시계방향으로 회전"
+
+#: data/ui/glabels-ui.xml.h:101
+msgid "Save"
+msgstr "저장"
+
+#: data/ui/glabels-ui.xml.h:102
+msgid "Save As"
+msgstr "다른 이름으로 저장"
+
+#: data/ui/glabels-ui.xml.h:103
+msgid "Save _As..."
+msgstr "다른 이름으로 저장(_A)..."
+
+#: data/ui/glabels-ui.xml.h:104
+msgid "Save the current file"
+msgstr "현재 파일이름으로 저장"
+
+#: data/ui/glabels-ui.xml.h:105
+msgid "Save the current file with a different name"
+msgstr "현재파일을 다른이름으로 저장"
+
+#: data/ui/glabels-ui.xml.h:106
+msgid "Select All"
+msgstr "모두 선택"
+
+#: data/ui/glabels-ui.xml.h:107
+msgid "Select _All"
+msgstr "모두 선택(_A)"
+
+#: data/ui/glabels-ui.xml.h:108
+msgid "Select all objects"
+msgstr "모든 개체 선택"
+
+#: data/ui/glabels-ui.xml.h:109
+msgid "Select, move and modify objects"
+msgstr "선택, 개체 이동과 수정"
+
+#: data/ui/glabels-ui.xml.h:111
+msgid "Set drawing toolbar button style according to desktop default"
+msgstr "기본 데스크탑 모양에 따라 그리기 도구 버튼 모양을 지정"
+
+#: data/ui/glabels-ui.xml.h:112
+msgid "Set main toolbar button style according to desktop default"
+msgstr "기본 데스크탑 모양에 따라 주 도구 버튼 모양을 지정"
+
+#: data/ui/glabels-ui.xml.h:113
+msgid "Show _Tooltips"
+msgstr "팁 보기(_T)"
+
+#: data/ui/glabels-ui.xml.h:114
+msgid "Show both icons and texts in the drawing toolbar"
+msgstr "그리기 도구에 아이콘과 글자 보이기"
+
+#: data/ui/glabels-ui.xml.h:115
+msgid "Show both icons and texts in the main toolbar"
+msgstr "주 도구에 아이콘 과 글자 보이기"
+
+#: data/ui/glabels-ui.xml.h:116
+msgid "Show tooltips in the drawing toolbar"
+msgstr "그리기 도구에 팁 보이기"
+
+#: data/ui/glabels-ui.xml.h:117
+msgid "Show tooltips in the main toolbar"
+msgstr "주 도구에 팁 보이기"
+
+#: data/ui/glabels-ui.xml.h:118
+msgid "Show tooltips in the property toolbar"
+msgstr "속성 도구에 팁 보이기"
+
+#: data/ui/glabels-ui.xml.h:119
+msgid "Template Designer"
+msgstr "서식 디자이너"
+
+#: data/ui/glabels-ui.xml.h:120
+msgid "Template _Designer..."
+msgstr "서식 디자이너(_D)..."
+
+#: data/ui/glabels-ui.xml.h:121
+msgid "Text color"
+msgstr "글자 색상"
+
+#: data/ui/glabels-ui.xml.h:122
+msgid "U_n-select All"
+msgstr "모든 선택 해제(_N)"
+
+#: data/ui/glabels-ui.xml.h:123
+msgid "Un-select All"
+msgstr "모든 선택 해제"
+
+#: data/ui/glabels-ui.xml.h:124
+msgid "Undo"
+msgstr "되돌리기"
+
+#: data/ui/glabels-ui.xml.h:125
+msgid "Undo the last action"
+msgstr "마지막 동작으로 되돌리기"
+
+#: data/ui/glabels-ui.xml.h:126
+msgid "Zoom _1:1"
+msgstr "1:1로 확대(_1)"
+
+#: data/ui/glabels-ui.xml.h:127
+msgid "Zoom _In"
+msgstr "확대(_I)"
+
+#: data/ui/glabels-ui.xml.h:128
+msgid "Zoom _Out"
+msgstr "축소(_O)"
+
+#: data/ui/glabels-ui.xml.h:129
+msgid "Zoom to _fit"
+msgstr "맞춰서 확대(_F)"
+
+#: data/ui/glabels-ui.xml.h:130
+msgid "Zoom to fit window"
+msgstr "윈도우에 맞춰서 확대"
+
+#: data/ui/glabels-ui.xml.h:131
+msgid "_About..."
+msgstr "...에 대해(_A)"
+
+#: data/ui/glabels-ui.xml.h:132
+msgid "_Bottoms"
+msgstr "아래(_B)"
+
+#: data/ui/glabels-ui.xml.h:135
+msgid "_Close"
+msgstr "닫기(_C)"
+
+#: data/ui/glabels-ui.xml.h:136
+msgid "_Contents"
+msgstr "목차(_C)"
+
+#: data/ui/glabels-ui.xml.h:137
+msgid "_Copy"
+msgstr "복사(_C)"
+
+#: data/ui/glabels-ui.xml.h:138
+msgid "_Create Object"
+msgstr "항목 만들기(_C)"
+
+#: data/ui/glabels-ui.xml.h:139
+msgid "_Debug"
+msgstr "디버그(_D)"
+
+#: data/ui/glabels-ui.xml.h:141
+msgid "_Desktop Default"
+msgstr "기본 데스크탑(_D)"
+
+#: data/ui/glabels-ui.xml.h:142
+msgid "_Drawing Toolbar"
+msgstr "그리기 도구(_D)"
+
+#: data/ui/glabels-ui.xml.h:143
+msgid "_Edit"
+msgstr "편집(_E)"
+
+#: data/ui/glabels-ui.xml.h:145
+msgid "_File"
+msgstr "파일(_F)"
+
+#: data/ui/glabels-ui.xml.h:146
+msgid "_Grid"
+msgstr "그리드(_G)"
+
+#: data/ui/glabels-ui.xml.h:147
+msgid "_Help"
+msgstr "도움말(_H)"
+
+#: data/ui/glabels-ui.xml.h:148
+msgid "_Icon"
+msgstr "아이콘(_I)"
+
+#: data/ui/glabels-ui.xml.h:152
+msgid "_Main Toolbar"
+msgstr "주 도구(_M)"
+
+#: data/ui/glabels-ui.xml.h:153
+msgid "_Merge Properties..."
+msgstr "여백 속성(_M)..."
+
+#: data/ui/glabels-ui.xml.h:154
+msgid "_New"
+msgstr "새로 만들기(_N)"
+
+#: data/ui/glabels-ui.xml.h:155
+msgid "_Objects"
+msgstr "항목(_O)"
+
+#: data/ui/glabels-ui.xml.h:156
+msgid "_Open..."
+msgstr "열기(_O)..."
+
+#: data/ui/glabels-ui.xml.h:158
+msgid "_Paste"
+msgstr "붙이기(_P)"
+
+#: data/ui/glabels-ui.xml.h:159
+msgid "_Print..."
+msgstr "인쇄(_P)..."
+
+#: data/ui/glabels-ui.xml.h:160
+msgid "_Property Toolbar"
+msgstr "속성 도구(_P)"
+
+#: data/ui/glabels-ui.xml.h:161
+msgid "_Quit"
+msgstr "종료(_Q)"
+
+#: data/ui/glabels-ui.xml.h:164
+msgid "_Save"
+msgstr "저장(_S)"
+
+#: data/ui/glabels-ui.xml.h:168
+msgid "_View"
+msgstr "보기(_V)"
+
+#: data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: data/glade/prefs-dialog.glade.h:2
+#: data/glade/object-editor.glade.h:1
+#: data/glade/template-designer.glade.h:5
+msgid "*"
+msgstr "*"
+
+#: data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">기본 용지 크기</span>"
+
+#: data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">채우기</span>"
+
+#: data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">선</span>"
+
+#: data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">글자</span>"
+
+#: data/glade/prefs-dialog.glade.h:7
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">유닛</span>"
+
+#: data/glade/prefs-dialog.glade.h:8
+#: data/glade/object-editor.glade.h:4
+msgid "Alignment:"
+msgstr "위치:"
+
+#: data/glade/prefs-dialog.glade.h:9
+#: data/glade/object-editor.glade.h:8
+msgid "Color:"
+msgstr "색상:"
+
+#: data/glade/prefs-dialog.glade.h:10
+msgid "Font:"
+msgstr "글꼴:"
+
+#: data/glade/prefs-dialog.glade.h:11
+msgid "ISO A4"
+msgstr "ISO A4 용지"
+
+#: data/glade/prefs-dialog.glade.h:12
+msgid "Inches"
+msgstr "인치"
+
+#: data/glade/prefs-dialog.glade.h:13
+#: data/glade/object-editor.glade.h:19
+msgid "Line Spacing:"
+msgstr "행간:"
+
+#: data/glade/prefs-dialog.glade.h:14
+msgid "Locale"
+msgstr "로케일"
+
+#: data/glade/prefs-dialog.glade.h:15
+msgid "Millimeters"
+msgstr "밀리미터"
+
+#: data/glade/prefs-dialog.glade.h:16
+msgid "Object defaults"
+msgstr "기본 항목"
+
+#: data/glade/prefs-dialog.glade.h:17
+msgid "Points"
+msgstr "포인트"
+
+#: data/glade/prefs-dialog.glade.h:18
+msgid "Select default properties for new objects."
+msgstr "새 개체의 기본 속성을 선택"
+
+#: data/glade/prefs-dialog.glade.h:19
+msgid "Select locale specific behavior."
+msgstr "구체적인 로케일을 선택"
+
+#: data/glade/prefs-dialog.glade.h:20
+#: data/templates/paper-sizes.xml.h:25
+msgid "US Letter"
+msgstr "US Letter"
+
+#: data/glade/prefs-dialog.glade.h:21
+#: data/glade/object-editor.glade.h:29
+#: data/glade/template-designer.glade.h:72
+msgid "Width:"
+msgstr "넓이:"
+
+#: data/glade/object-editor.glade.h:2
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: data/glade/object-editor.glade.h:3
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Xxx 개체 속성</span>"
+
+#: data/glade/object-editor.glade.h:5
+msgid "Allow merge to automatically shrink text"
+msgstr "자동으로 축소한 글자에 병합"
+
+#: data/glade/object-editor.glade.h:6
+msgid "Angle:"
+msgstr "각도:"
+
+#: data/glade/object-editor.glade.h:7
+msgid "Checksum"
+msgstr "체크섬"
+
+#: data/glade/object-editor.glade.h:10
+msgid "Family:"
+msgstr "패밀리:"
+
+#: data/glade/object-editor.glade.h:12
+msgid "Fill"
+msgstr "채우기"
+
+#: data/glade/object-editor.glade.h:13
+#: data/glade/template-designer.glade.h:33
+msgid "Height:"
+msgstr "높이:"
+
+#: data/glade/object-editor.glade.h:14
+msgid "Image"
+msgstr "그림"
+
+#: data/glade/object-editor.glade.h:15
+msgid "Insert merge field"
+msgstr "병합 필드 삽입"
+
+#: data/glade/object-editor.glade.h:17
+msgid "Length:"
+msgstr "길이:"
+
+#: data/glade/object-editor.glade.h:18
+msgid "Line"
+msgstr "선"
+
+#: data/glade/object-editor.glade.h:20
+msgid "Literal:"
+msgstr "Literal:"
+
+#: data/glade/object-editor.glade.h:21
+msgid "Load image"
+msgstr "그림 불러옴"
+
+#: data/glade/object-editor.glade.h:22
+msgid "Position"
+msgstr "위치"
+
+#: data/glade/object-editor.glade.h:23
+msgid "Reset image size"
+msgstr "그림크기 재설정"
+
+#: data/glade/object-editor.glade.h:24
+msgid "Size"
+msgstr "크기"
+
+#: data/glade/object-editor.glade.h:25
+msgid "Size:"
+msgstr "크기:"
+
+#: data/glade/object-editor.glade.h:26
+msgid "Style"
+msgstr "모양"
+
+#: data/glade/object-editor.glade.h:27
+msgid "Style:"
+msgstr "모양:"
+
+#: data/glade/object-editor.glade.h:30
+msgid "X:"
+msgstr "X:"
+
+#: data/glade/object-editor.glade.h:31
+msgid "Y:"
+msgstr "Y:"
+
+#: data/glade/object-editor.glade.h:32
+msgid "degrees"
+msgstr "degrees"
+
+#: data/glade/object-editor.glade.h:33
+msgid "dialog1"
+msgstr "dialog1"
+
+#: data/glade/object-editor.glade.h:34
+msgid "digits:"
+msgstr "digits:"
+
+#: data/glade/object-editor.glade.h:35
+msgid "format:"
+msgstr "서식:"
+
+#: data/glade/template-designer.glade.h:1
+msgid "  "
+msgstr "  "
+
+#: data/glade/template-designer.glade.h:2
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(예: \"주소라벨\", \"명함\", ...)"
+
+#: data/glade/template-designer.glade.h:3
+msgid "(e.g., 8163A)"
+msgstr "(예: 8163A)"
+
+#: data/glade/template-designer.glade.h:4
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(예: Avery, Acme, ...)"
+
+#: data/glade/template-designer.glade.h:6
+msgid "1. Outer radius:"
+msgstr "1. 바깥 반지름:"
+
+#: data/glade/template-designer.glade.h:7
+msgid "1. Radius:"
+msgstr "1. 반지름:"
+
+#: data/glade/template-designer.glade.h:8
+msgid "1. Width:"
+msgstr "1. 넓이:"
+
+#: data/glade/template-designer.glade.h:9
+msgid "2. Height:"
+msgstr "2. 높이:"
+
+#: data/glade/template-designer.glade.h:10
+msgid "2. Inner radius:"
+msgstr "2. 안쪽 반지름:"
+
+#: data/glade/template-designer.glade.h:11
+msgid "2. Waste (overprint allowed):"
+msgstr "2. 여백 (겹친 인쇄 허용):"
+
+#: data/glade/template-designer.glade.h:12
+msgid "3. Clipping width:"
+msgstr "3. 오려내기 넓이:"
+
+#: data/glade/template-designer.glade.h:13
+msgid "3. Margin"
+msgstr "3. 여백"
+
+#: data/glade/template-designer.glade.h:14
+msgid "3. Round (radius of corner):"
+msgstr "3. 둥글기 (귀퉁이 각도):"
+
+#: data/glade/template-designer.glade.h:15
+msgid "4. Clipping height:"
+msgstr "4. 오려내기 높이:"
+
+#: data/glade/template-designer.glade.h:16
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. 좌우 여백 (겹친 인쇄 허용):"
+
+#: data/glade/template-designer.glade.h:17
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. 아래위 여백 (겹친 인쇄 허용):"
+
+#: data/glade/template-designer.glade.h:18
+msgid "5. Waste (overprint allowed):"
+msgstr "5. 여백 (겹친 인쇄 허용):"
+
+#: data/glade/template-designer.glade.h:19
+msgid "6. Margin"
+msgstr "6. 라벨 내 여백"
+
+#: data/glade/template-designer.glade.h:20
+msgid "Brand/Manufacturer:"
+msgstr "상표/제조업체:"
+
+#: data/glade/template-designer.glade.h:21
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (credit card CD 포함)"
+
+#: data/glade/template-designer.glade.h:22
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"축하드립니다!\n"
+"\n"
+"gLabels 서식문서 디자이너로 서식 만들기를 마쳤습니다.\n"
+"새로 만든 서식을 저장하기 원한다면  \"적용\" 을 누르세요.\n"
+"\n"
+"\"취소\"를 누르면 만든것을 버리게 됩니다.\n"
+"또는 \"뒤로\"를 선택하여 만든것을 편집 할 수 있습니다."
+
+#: data/glade/template-designer.glade.h:30
+msgid "Design Completed"
+msgstr "서식 디자인 완료됨"
+
+#: data/glade/template-designer.glade.h:31
+msgid "Distance from left edge (x0):"
+msgstr "왼쪽 가장자리 부터  (x0):"
+
+#: data/glade/template-designer.glade.h:32
+msgid "Distance from top edge (y0):"
+msgstr "위쪽 가장자리 부터 (y0):"
+
+#: data/glade/template-designer.glade.h:34
+msgid "Horizontal pitch (dx):"
+msgstr "수평 pitch (dx):"
+
+#: data/glade/template-designer.glade.h:35
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"서식을 얼마나 포함합니까?\n"
+"\n"
+"레이아웃 서식 개수 지정을 통해 두개 이내의 레이아웃을 만들 수 있습니다.\n"
+"보통은 아래 첫번째 예제처럼 한개의 레이아웃을 필요로 하지만,\n"
+"어떤것은 두번째 예제처럼 두개의 레이아웃을 필요로 하는것도 있습니다."
+
+#: data/glade/template-designer.glade.h:40
+msgid "Label Size (CD/DVD)"
+msgstr "라벨 크기(CD/DVD)"
+
+#: data/glade/template-designer.glade.h:41
+msgid "Label Size (Round)"
+msgstr "라벨 크기 (둥글기)"
+
+#: data/glade/template-designer.glade.h:42
+msgid "Label or Card Shape"
+msgstr "라벨 또는 카드 외형"
+
+#: data/glade/template-designer.glade.h:43
+msgid "Label or Card Size (Rectangular)"
+msgstr "라벨 또는 카드 크기(직사각형)"
+
+#: data/glade/template-designer.glade.h:44
+msgid "Layout #1"
+msgstr "레이아웃 #1:"
+
+#: data/glade/template-designer.glade.h:45
+msgid "Layout #2"
+msgstr "레이아웃 #2:"
+
+#: data/glade/template-designer.glade.h:46
+msgid "Layout(s)"
+msgstr "레이아웃"
+
+#: data/glade/template-designer.glade.h:47
+msgid "Name and Description"
+msgstr "이름과 설명"
+
+#: data/glade/template-designer.glade.h:48
+msgid "Number across (nx):"
+msgstr "가로 개수 (nx):"
+
+#: data/glade/template-designer.glade.h:49
+msgid "Number down (ny):"
+msgstr "세로 개수 (ny):"
+
+#: data/glade/template-designer.glade.h:50
+msgid "Number of Layouts"
+msgstr "레이아웃 선택"
+
+#: data/glade/template-designer.glade.h:51
+msgid "Number of layouts:"
+msgstr "레이아웃 선택:"
+
+#: data/glade/template-designer.glade.h:52
+msgid "Page Size"
+msgstr "용지 크기"
+
+#: data/glade/template-designer.glade.h:54
+msgid "Part #:"
+msgstr "라벨분류:"
+
+#: data/glade/template-designer.glade.h:55
+msgid "Please enter the following identifying information about the template stationery."
+msgstr "입력 상자에 기본 서식 정보를 입력하세요."
+
+#: data/glade/template-designer.glade.h:56
+msgid "Please enter the following layout information."
+msgstr "레이아웃 정보를 입력하세요."
+
+#: data/glade/template-designer.glade.h:57
+msgid "Please enter the following size parameters of a single label in your template."
+msgstr "라벨서식의 치수를 입력하세요."
+
+#: data/glade/template-designer.glade.h:58
+msgid "Please enter the following size parameters of a single label or card in your template."
+msgstr "라벨서식 또는 카드서식의 치수를 입력하세요."
+
+#: data/glade/template-designer.glade.h:59
+msgid "Please select the basic shape of the labels or cards."
+msgstr "라벨 또는 카드의 기본 형태를 선택하세요."
+
+#: data/glade/template-designer.glade.h:60
+msgid "Please select the page size of the template stationery."
+msgstr "서식 용지의 크기 선택"
+
+#: data/glade/template-designer.glade.h:61
+msgid "Print test sheet"
+msgstr "용지 테스트 인쇄"
+
+#: data/glade/template-designer.glade.h:62
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "직사각형 또는 정사각형(마무리를 둥글게 만들 수 있음)"
+
+#: data/glade/template-designer.glade.h:63
+msgid "Round"
+msgstr "둥근형"
+
+#: data/glade/template-designer.glade.h:64
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"2. 두개의 레이아웃\n"
+"서식 필요"
+
+#: data/glade/template-designer.glade.h:66
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"1. 한개의 레이아웃\n"
+"서식 필요"
+
+#: data/glade/template-designer.glade.h:68
+msgid "Vertical pitch (dy):"
+msgstr "수직 pitch (dy):"
+
+#: data/glade/template-designer.glade.h:69
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"gLabels 서식 제작기에 어서오세요.\n"
+"\n"
+"차근차근 gLabels의 사용자 서식을 쉽게 만들 수 있게 도와드립니다. "
+
+#: data/templates/paper-sizes.xml.h:1
+msgid "A0"
+msgstr "A0용지"
+
+#: data/templates/paper-sizes.xml.h:2
+msgid "A1"
+msgstr "A1용지"
+
+#: data/templates/paper-sizes.xml.h:3
+msgid "A10"
+msgstr "A10용지"
+
+#: data/templates/paper-sizes.xml.h:4
+msgid "A2"
+msgstr "A2용지"
+
+#: data/templates/paper-sizes.xml.h:5
+msgid "A3"
+msgstr "A3용지"
+
+#: data/templates/paper-sizes.xml.h:6
+msgid "A4"
+msgstr "A4용지"
+
+#: data/templates/paper-sizes.xml.h:7
+msgid "A5"
+msgstr "A5용지"
+
+#: data/templates/paper-sizes.xml.h:8
+msgid "A6"
+msgstr "A6용지"
+
+#: data/templates/paper-sizes.xml.h:9
+msgid "A7"
+msgstr "A7용지"
+
+#: data/templates/paper-sizes.xml.h:10
+msgid "A8"
+msgstr "A8용지"
+
+#: data/templates/paper-sizes.xml.h:11
+msgid "A9"
+msgstr "A9용지"
+
+#: data/templates/paper-sizes.xml.h:12
+msgid "B0"
+msgstr "B0용지"
+
+#: data/templates/paper-sizes.xml.h:13
+msgid "B1"
+msgstr "B1용지"
+
+#: data/templates/paper-sizes.xml.h:14
+msgid "B10"
+msgstr "B10용지"
+
+#: data/templates/paper-sizes.xml.h:15
+msgid "B2"
+msgstr "B2용지"
+
+#: data/templates/paper-sizes.xml.h:16
+msgid "B3"
+msgstr "B3용지"
+
+#: data/templates/paper-sizes.xml.h:17
+msgid "B4"
+msgstr "B4용지"
+
+#: data/templates/paper-sizes.xml.h:18
+msgid "B5"
+msgstr "B5용지"
+
+#: data/templates/paper-sizes.xml.h:19
+msgid "B6"
+msgstr "B6용지"
+
+#: data/templates/paper-sizes.xml.h:20
+msgid "B7"
+msgstr "B7용지"
+
+#: data/templates/paper-sizes.xml.h:21
+msgid "B8"
+msgstr "B8용지"
+
+#: data/templates/paper-sizes.xml.h:22
+msgid "B9"
+msgstr "B9용지"
+
+#: data/templates/paper-sizes.xml.h:23
+msgid "US Executive"
+msgstr "US Executive"
+
+#: data/templates/paper-sizes.xml.h:24
+msgid "US Legal"
+msgstr "US Legal"
+
+#: data/templates/avery-us-templates.xml.h:1
+#: data/templates/zweckform-iso-templates.xml.h:1
+msgid "Address Labels"
+msgstr "주소 라벨"
+
+#: data/templates/avery-us-templates.xml.h:2
+#: data/templates/avery-iso-templates.xml.h:2
+#: data/templates/zweckform-iso-templates.xml.h:3
+#: data/templates/misc-us-templates.xml.h:2
+#: data/templates/misc-iso-templates.xml.h:9
+msgid "Business Cards"
+msgstr "명함"
+
+#: data/templates/avery-us-templates.xml.h:3
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "CD/DVD 라벨 (Disc 라벨)"
+
+#: data/templates/avery-us-templates.xml.h:4
+msgid "Diskette Labels"
+msgstr "디스크 라벨"
+
+#: data/templates/avery-us-templates.xml.h:5
+msgid "Filing Labels"
+msgstr "출원 라벨"
+
+#: data/templates/avery-us-templates.xml.h:6
+msgid "Full Sheet Labels"
+msgstr "Full Sheet 라벨"
+
+#: data/templates/avery-us-templates.xml.h:7
+msgid "Large Round Labels"
+msgstr "큰 원형 라벨"
+
+#: data/templates/avery-us-templates.xml.h:8
+msgid "Name Badge Labels"
+msgstr "Name Badge 라벨"
+
+#: data/templates/avery-us-templates.xml.h:9
+msgid "Return Address Labels"
+msgstr "반송 주소용 라벨"
+
+#: data/templates/avery-us-templates.xml.h:10
+msgid "Shipping Labels"
+msgstr "출하 라벨"
+
+#: data/templates/avery-us-templates.xml.h:11
+msgid "Small Round Labels"
+msgstr "작은 원형 라벨"
+
+#: data/templates/avery-us-templates.xml.h:12
+msgid "Square Labels"
+msgstr "구형 라벨"
+
+#: data/templates/avery-us-templates.xml.h:13
+msgid "Video Tape Face Labels"
+msgstr "비디오 테입 앞면 라벨"
+
+#: data/templates/avery-us-templates.xml.h:14
+msgid "Video Tape Spine Labels"
+msgstr "비디오 테입 옆면 라벨"
+
+#: data/templates/avery-iso-templates.xml.h:1
+msgid "Address labels"
+msgstr "주소 라벨"
+
+#: data/templates/avery-iso-templates.xml.h:3
+msgid "CD Booklet"
+msgstr "CD Booklet"
+
+#: data/templates/avery-iso-templates.xml.h:4
+msgid "CD Inlet"
+msgstr "CD Inlet"
+
+#: data/templates/avery-iso-templates.xml.h:5
+#: data/templates/zweckform-iso-templates.xml.h:4
+#: data/templates/misc-us-templates.xml.h:4
+#: data/templates/misc-iso-templates.xml.h:10
+msgid "CD/DVD Labels"
+msgstr "CD/DVD 라벨"
+
+#: data/templates/avery-iso-templates.xml.h:6
+msgid "Diskette labels"
+msgstr "디스크 라벨"
+
+#: data/templates/avery-iso-templates.xml.h:7
+#: data/templates/zweckform-iso-templates.xml.h:7
+#: data/templates/misc-iso-templates.xml.h:17
+msgid "Mailing Labels"
+msgstr "봉투 라벨"
+
+#: data/templates/avery-iso-templates.xml.h:8
+msgid "Mailing labels"
+msgstr "봉투 라벨"
+
+#: data/templates/avery-iso-templates.xml.h:9
+msgid "Mini Address Labels"
+msgstr "작은 주소라벨"
+
+#: data/templates/avery-iso-templates.xml.h:10
+msgid "Shipping labels"
+msgstr "출하 라벨"
+
+#: data/templates/zweckform-iso-templates.xml.h:2
+msgid "Allround Labels"
+msgstr "Allround 라벨"
+
+#: data/templates/zweckform-iso-templates.xml.h:5
+msgid "Correction and Cover-up Labels"
+msgstr "수집 과 Cover-up 라벨"
+
+#: data/templates/zweckform-iso-templates.xml.h:6
+msgid "Lever Arch File Labels"
+msgstr "Lever Arch 파일 라벨"
+
+#: data/templates/zweckform-iso-templates.xml.h:8
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "QSL-Karten Etiketten (70mm x 50.8mm)"
+
+#: data/templates/zweckform-iso-templates.xml.h:9
+msgid "Rectangular Copier Labels"
+msgstr "분류표기 라벨"
+
+#: data/templates/zweckform-iso-templates.xml.h:10
+#: data/templates/misc-iso-templates.xml.h:22
+msgid "Rectangular Labels"
+msgstr "직사각형 라벨"
+
+#: data/templates/zweckform-iso-templates.xml.h:11
+msgid "Video Labels (back)"
+msgstr "비디오 라벨 (뒤)"
+
+#: data/templates/misc-us-templates.xml.h:1
+msgid "Business Card CD"
+msgstr "명함 CD"
+
+#: data/templates/misc-us-templates.xml.h:3
+msgid "CD Template Rectangles"
+msgstr "CD 서식 (직사각형)"
+
+#: data/templates/misc-us-templates.xml.h:5
+msgid "CD/DVD Labels (Face Only)"
+msgstr "CD/DVD 라벨 (표지만)"
+
+#: data/templates/misc-us-templates.xml.h:6
+#: data/templates/misc-iso-templates.xml.h:11
+msgid "CD/DVD Labels (face only)"
+msgstr "CD/DVD 라벨 (표지만)"
+
+#: data/templates/misc-us-templates.xml.h:7
+msgid "DLT Labels"
+msgstr "DLT 라벨"
+
+#: data/templates/misc-us-templates.xml.h:8
+msgid "Microtube labels"
+msgstr "Microtube 라벨"
+
+#: data/templates/misc-us-templates.xml.h:9
+msgid "Mini-CD Labels"
+msgstr "Mini-CD 라벨"
+
+#: data/templates/misc-us-templates.xml.h:10
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "PRO CD 라벨 2-up (CD 세로표지 전용)"
+
+#: data/templates/misc-us-templates.xml.h:11
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "PRO CD 라벨 2-up (표지만)"
+
+#: data/templates/misc-us-templates.xml.h:12
+#: data/templates/misc-iso-templates.xml.h:21
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "PRO CD 라벨 2-up (표지만)"
+
+#: data/templates/misc-us-templates.xml.h:13
+msgid "Slimline CD Case (rightside up)"
+msgstr "Slimline CD 케이스 (우측옆)"
+
+#: data/templates/misc-us-templates.xml.h:14
+msgid "Slimline CD Case (upside down)"
+msgstr "Slimline CD 케이스(상위)"
+
+#: data/templates/misc-iso-templates.xml.h:1
+msgid "Agipa 119488: Business Cards"
+msgstr "Agipa 119488: 명함"
+
+#: data/templates/misc-iso-templates.xml.h:2
+msgid "Allround Labels --24"
+msgstr "Allround 라벨 --24"
+
+#: data/templates/misc-iso-templates.xml.h:3
+msgid "Allround Labels --44"
+msgstr "Allround 라벨 --44"
+
+#: data/templates/misc-iso-templates.xml.h:4
+msgid "Allround Labels --64"
+msgstr "Allround 라벨 --64"
+
+#: data/templates/misc-iso-templates.xml.h:5
+msgid "Allround Labels --65"
+msgstr "Allround 라벨 --65"
+
+#: data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "Arch 파일 라벨"
+
+#: data/templates/misc-iso-templates.xml.h:7
+msgid "Arch File Labels (large)"
+msgstr "Arch 파일 라벨 (큰것)"
+
+#: data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (small)"
+msgstr "Arch 파일 라벨 (작은것)"
+
+#: data/templates/misc-iso-templates.xml.h:12
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "기본 CD/DVD 라벨 (표지만)"
+
+#: data/templates/misc-iso-templates.xml.h:13
+msgid "Diskette Labels (face only)"
+msgstr "디스켓 라벨 (표지만)"
+
+#: data/templates/misc-iso-templates.xml.h:14
+msgid "EPSON Photo Stickers 16"
+msgstr "EPSON 포토 스티커 16"
+
+#: data/templates/misc-iso-templates.xml.h:15
+msgid "Etiketten"
+msgstr "Etiketten"
+
+#: data/templates/misc-iso-templates.xml.h:16
+msgid "Fridge Magnet Stickers"
+msgstr "Fridge Magnet 스티커"
+
+#: data/templates/misc-iso-templates.xml.h:18
+msgid "Mailing Labels --14"
+msgstr "봉투 라벨 --14"
+
+#: data/templates/misc-iso-templates.xml.h:19
+msgid "Mailing Labels-2 columns"
+msgstr "주소 라벨 (2형)"
+
+#: data/templates/misc-iso-templates.xml.h:20
+msgid "Mailing Labels-3 columns"
+msgstr "주소라벨 (3형)"
+
+#: data/templates/misc-iso-templates.xml.h:23
+msgid "Video Labels (face only)"
+msgstr "비디오 라벨 (표지만)"
+
+#: data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "라벨, 명함 그리고 미디어 커버 만들기"
+
+#: data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "gLabels 라벨 디자이너"
+
+#: data/mime/glabels.keys.in.h:1
+#: data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "gLabels 프로젝트 파일"
+
diff --git a/po/nb.po b/po/nb.po
new file mode 100644 (file)
index 0000000..f0a4747
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,2833 @@
+# Norwegian Bokmal translation of contacts.
+# Copyright (C) 2007 Free Software Foundation
+# This file is distributed under the same license as the contacts package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: contacts\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-15 13:58+0100\n"
+"PO-Revision-Date: 2010-03-15 14:10+0100\n"
+"Last-Translator: Espen Stefansen <espens@svn.gnome.org>\n"
+"Language-Team: Norwegian Bokmal <i18n-nb@lister.ping.uio.no>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/bc.c:65
+msgid "POSTNET (any)"
+msgstr ""
+
+#: ../src/bc.c:68
+msgid "POSTNET-5 (ZIP only)"
+msgstr ""
+
+#: ../src/bc.c:71
+msgid "POSTNET-9 (ZIP+4)"
+msgstr ""
+
+#: ../src/bc.c:74
+msgid "POSTNET-11 (DPBC)"
+msgstr ""
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr ""
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr ""
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr ""
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr ""
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr ""
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr ""
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr ""
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr ""
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr ""
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr ""
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr ""
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr ""
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr ""
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr ""
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr ""
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr ""
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr ""
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr ""
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr ""
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr ""
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr ""
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr ""
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr ""
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr ""
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr ""
+
+#: ../src/bc.c:154
+msgid "Code 93"
+msgstr ""
+
+#: ../src/bc.c:161
+msgid "IEC16022 (DataMatrix)"
+msgstr ""
+
+#: ../src/bc.c:168
+msgid "IEC18004 (QRCode)"
+msgstr ""
+
+#: ../src/color-combo-button.c:198 ../src/color-combo.c:178
+msgid "Default Color"
+msgstr ""
+
+#: ../src/color-combo-menu.c:83
+msgid "Dark Red"
+msgstr ""
+
+#: ../src/color-combo-menu.c:84
+msgid "Brown"
+msgstr "Brun"
+
+#: ../src/color-combo-menu.c:85
+msgid "Dark Goldenrod"
+msgstr ""
+
+#: ../src/color-combo-menu.c:86
+msgid "Dark Green"
+msgstr "Mørk grønn"
+
+#: ../src/color-combo-menu.c:87
+msgid "Dark Cyan"
+msgstr ""
+
+#: ../src/color-combo-menu.c:88
+msgid "Navy Blue"
+msgstr "Marineblå"
+
+#: ../src/color-combo-menu.c:89
+msgid "Dark Violet"
+msgstr "Mørk fiolett"
+
+#: ../src/color-combo-menu.c:91
+msgid "Red"
+msgstr "Rød"
+
+#: ../src/color-combo-menu.c:92
+msgid "Orange"
+msgstr "Oransje"
+
+#: ../src/color-combo-menu.c:93
+msgid "Dark Yellow"
+msgstr "Mørk gul"
+
+#: ../src/color-combo-menu.c:94
+msgid "Medium green"
+msgstr ""
+
+#: ../src/color-combo-menu.c:95
+msgid "Turquoise"
+msgstr "Turkis"
+
+#: ../src/color-combo-menu.c:96
+msgid "Blue"
+msgstr "Blå"
+
+#: ../src/color-combo-menu.c:97
+msgid "Purple"
+msgstr "Lilla"
+
+#: ../src/color-combo-menu.c:99
+msgid "Salmon"
+msgstr ""
+
+#: ../src/color-combo-menu.c:100
+msgid "Gold"
+msgstr "Gull"
+
+#: ../src/color-combo-menu.c:101
+msgid "Yellow"
+msgstr "Gul"
+
+#: ../src/color-combo-menu.c:102
+msgid "Green"
+msgstr "Grønn"
+
+#: ../src/color-combo-menu.c:103
+msgid "Cyan"
+msgstr ""
+
+#: ../src/color-combo-menu.c:104
+msgid "SkyBlue"
+msgstr "Himmelblå"
+
+#: ../src/color-combo-menu.c:105
+msgid "Violet"
+msgstr "Fiolett"
+
+#: ../src/color-combo-menu.c:107
+msgid "Pink"
+msgstr "Rosa"
+
+#: ../src/color-combo-menu.c:108
+msgid "Khaki"
+msgstr ""
+
+#: ../src/color-combo-menu.c:109
+msgid "Light Yellow"
+msgstr "Lys gul"
+
+#: ../src/color-combo-menu.c:110
+msgid "Light Green"
+msgstr "Lys grønn"
+
+#: ../src/color-combo-menu.c:111
+msgid "Light Cyan"
+msgstr ""
+
+#: ../src/color-combo-menu.c:112
+msgid "Slate Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:113
+msgid "Thistle"
+msgstr ""
+
+#: ../src/color-combo-menu.c:115
+msgid "White"
+msgstr "Hvit"
+
+#: ../src/color-combo-menu.c:116
+#, c-format
+msgid "10\\% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:117
+#, c-format
+msgid "25\\% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:118
+#, c-format
+msgid "40\\% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:119
+#, c-format
+msgid "50\\% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:120
+#, c-format
+msgid "60\\% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:121
+msgid "Black"
+msgstr "Sort"
+
+#: ../src/color-combo-menu.c:249 ../src/color-combo-menu.c:368
+msgid "Custom Color"
+msgstr "Egendefinert farge"
+
+#: ../src/color-combo-menu.c:314
+#, c-format
+msgid "Custom Color #%u"
+msgstr ""
+
+#: ../src/critical-error-handler.c:70
+msgid "gLabels Fatal Error!"
+msgstr ""
+
+#: ../src/file.c:86
+msgid "New Label or Card"
+msgstr ""
+
+#: ../src/file.c:190 ../src/label.c:584 ../src/label.c:628
+msgid "Label properties"
+msgstr ""
+
+#: ../src/file.c:296 ../src/file.c:586
+msgid "All files"
+msgstr "Alle filer"
+
+#: ../src/file.c:301 ../src/file.c:591
+msgid "gLabels documents"
+msgstr ""
+
+#: ../src/file.c:348 ../src/file.c:649
+msgid "Empty file name selection"
+msgstr ""
+
+#: ../src/file.c:351 ../src/file.c:367
+msgid "Please select a file or supply a valid file name"
+msgstr ""
+
+#: ../src/file.c:364
+msgid "File does not exist"
+msgstr "Filen eksisterer ikke"
+
+#: ../src/file.c:439
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr ""
+
+#: ../src/file.c:442
+msgid "Not a supported file format"
+msgstr ""
+
+#: ../src/file.c:520 ../src/file.c:699
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr ""
+
+#: ../src/file.c:524 ../src/file.c:703
+msgid "Error encountered during save.  The file is still not saved."
+msgstr ""
+
+#: ../src/file.c:564
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Lagre «%s» som"
+
+#: ../src/file.c:652
+msgid "Please supply a valid file name"
+msgstr ""
+
+#: ../src/file.c:673
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr ""
+
+#: ../src/file.c:677
+msgid "File already exists."
+msgstr "Filen eksisterer allerede."
+
+#: ../src/file.c:773
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr ""
+
+#: ../src/file.c:777
+msgid "Your changes will be lost if you don't save them."
+msgstr ""
+
+#: ../src/file.c:780
+msgid "Close without saving"
+msgstr "Lukk uten å lagre"
+
+#: ../src/font-combo-menu.c:137
+msgid "Recent fonts"
+msgstr ""
+
+#: ../src/font-combo-menu.c:152
+msgid "Proportional fonts"
+msgstr ""
+
+#: ../src/font-combo-menu.c:160
+msgid "Fixed-width fonts"
+msgstr ""
+
+#: ../src/font-combo-menu.c:168
+msgid "All fonts"
+msgstr "Alle skrifter"
+
+#.
+#. * Allow text samples to be localized.
+#. *
+#. * FIXME: if we could extract enough meta information from the fonts
+#. * themselves, perhaps rather than setting these globally for the
+#. * current locale, they could be unique to each font family.
+#.
+#: ../src/font-combo-menu-item.c:132
+msgctxt "Short sample text"
+msgid "Aa"
+msgstr "Aa"
+
+#: ../src/font-combo-menu-item.c:134
+msgctxt "Lower case sample text"
+msgid "abcdefghijklmnopqrstuvwxyz"
+msgstr "abcdefghijklmnopqrstuvwxyzæøå"
+
+#: ../src/font-combo-menu-item.c:136
+msgctxt "Upper case sample text"
+msgid "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+msgstr ""
+
+#: ../src/font-combo-menu-item.c:138
+msgctxt "Numbers and special characters sample text"
+msgid "0123456789 .:,;(*!?)"
+msgstr "0123456789 .:,;(*!?)"
+
+#: ../src/font-combo-menu-item.c:157
+msgid "Sample text"
+msgstr ""
+
+#: ../src/glabels-batch.c:52
+msgid "set output filename (default=\"output.pdf\")"
+msgstr ""
+
+#: ../src/glabels-batch.c:52 ../src/glabels-batch.c:66
+msgid "filename"
+msgstr "filnavn"
+
+#: ../src/glabels-batch.c:54
+msgid "number of sheets (default=1)"
+msgstr ""
+
+#: ../src/glabels-batch.c:54
+msgid "sheets"
+msgstr ""
+
+#: ../src/glabels-batch.c:56
+msgid "number of copies (default=1)"
+msgstr ""
+
+#: ../src/glabels-batch.c:56
+msgid "copies"
+msgstr "kopier"
+
+#: ../src/glabels-batch.c:58
+msgid "first label on first sheet (default=1)"
+msgstr ""
+
+#: ../src/glabels-batch.c:58
+msgid "first"
+msgstr "første"
+
+#: ../src/glabels-batch.c:60
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:13
+msgid "print outlines (to test printer alignment)"
+msgstr ""
+
+#: ../src/glabels-batch.c:62
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:12
+msgid "print in reverse (i.e. a mirror image)"
+msgstr ""
+
+#: ../src/glabels-batch.c:64
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:11
+msgid "print crop marks"
+msgstr ""
+
+#: ../src/glabels-batch.c:66
+msgid "input file for merging"
+msgstr ""
+
+#: ../src/glabels-batch.c:68 ../src/glabels.c:64
+msgid "[FILE...]"
+msgstr ""
+
+#: ../src/glabels-batch.c:98
+msgid "Print files created with gLabels."
+msgstr ""
+
+#: ../src/glabels-batch.c:106 ../src/glabels.c:89
+#, c-format
+msgid ""
+"%s\n"
+"Run '%s --help' to see a full list of available command line options.\n"
+msgstr ""
+
+#: ../src/glabels-batch.c:149
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr ""
+
+#: ../src/glabels-batch.c:184
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr ""
+
+#: ../src/glabels.c:81
+msgid "Launch gLabels label and business card designer."
+msgstr ""
+
+#: ../src/label-barcode.c:154 ../src/ui.c:319
+msgid "Create barcode object"
+msgstr ""
+
+#: ../src/label-barcode.c:227 ../src/label-barcode.c:389
+msgid "Barcode data"
+msgstr ""
+
+#: ../src/label-barcode.c:263
+msgid "Barcode property"
+msgstr ""
+
+#: ../src/label-barcode.c:482
+msgid "Barcode data empty"
+msgstr ""
+
+#: ../src/label-barcode.c:486
+msgid "Invalid barcode data"
+msgstr ""
+
+#: ../src/label-box.c:156
+msgid "Create box object"
+msgstr ""
+
+#: ../src/label-box.c:230 ../src/label-ellipse.c:232 ../src/stock.c:93
+#: ../data/builder/property-bar.builder.h:3
+msgid "Fill color"
+msgstr ""
+
+#: ../src/label-box.c:261 ../src/label-ellipse.c:261 ../src/label-line.c:212
+#: ../src/stock.c:94 ../data/builder/property-bar.builder.h:8
+msgid "Line color"
+msgstr ""
+
+#: ../src/label-box.c:289 ../src/label-ellipse.c:290 ../src/label-line.c:241
+#: ../data/builder/property-bar.builder.h:9
+msgid "Line width"
+msgstr ""
+
+#: ../src/label.c:399
+msgid "Untitled"
+msgstr ""
+
+#: ../src/label.c:702 ../src/ui.c:422
+msgid "Merge properties"
+msgstr ""
+
+#: ../src/label.c:1184 ../src/ui.c:215
+msgid "Delete"
+msgstr "Slett"
+
+#: ../src/label.c:1217 ../src/ui.c:324
+msgid "Bring to front"
+msgstr ""
+
+#: ../src/label.c:1253 ../src/ui.c:331
+msgid "Send to back"
+msgstr ""
+
+#: ../src/label.c:1294
+msgid "Rotate"
+msgstr "Roter"
+
+#: ../src/label.c:1329 ../src/ui.c:338
+msgid "Rotate left"
+msgstr "Roter til venstre"
+
+#: ../src/label.c:1362 ../src/ui.c:345
+msgid "Rotate right"
+msgstr "Roter til høyre"
+
+#: ../src/label.c:1397 ../src/ui.c:352
+msgid "Flip horizontally"
+msgstr "Vend horisontalt"
+
+#: ../src/label.c:1432 ../src/ui.c:359
+msgid "Flip vertically"
+msgstr "Vend vertikalt"
+
+#: ../src/label.c:1472 ../src/ui.c:366
+msgid "Align left"
+msgstr "Juster til venstre"
+
+#: ../src/label.c:1529 ../src/ui.c:373
+msgid "Align right"
+msgstr "Juster til høyre"
+
+#: ../src/label.c:1590 ../src/ui.c:380
+msgid "Align horizontal center"
+msgstr ""
+
+#: ../src/label.c:1666 ../src/ui.c:387
+msgid "Align tops"
+msgstr ""
+
+#: ../src/label.c:1723 ../src/ui.c:394
+msgid "Align bottoms"
+msgstr ""
+
+#: ../src/label.c:1784 ../src/ui.c:401
+msgid "Align vertical center"
+msgstr ""
+
+#: ../src/label.c:1862 ../src/ui.c:408
+msgid "Center horizontally"
+msgstr ""
+
+#: ../src/label.c:1909 ../src/ui.c:415
+msgid "Center vertically"
+msgstr ""
+
+#: ../src/label.c:2595 ../src/label.c:2637 ../src/label.c:2663 ../src/ui.c:208
+msgid "Paste"
+msgstr ""
+
+#: ../src/label-ellipse.c:160
+msgid "Create ellipse object"
+msgstr ""
+
+#: ../src/label-image.c:161 ../src/ui.c:312
+msgid "Create image object"
+msgstr ""
+
+#: ../src/label-image.c:265 ../src/label-image.c:336
+msgid "Set image"
+msgstr "Sett bilde"
+
+#: ../src/label-line.c:147 ../src/ui.c:298
+msgid "Create line object"
+msgstr ""
+
+#: ../src/label-object.c:383 ../src/label-object.c:416
+msgid "Move"
+msgstr "Flytt"
+
+#: ../src/label-object.c:467
+msgid "Resize"
+msgstr "Endre størrelse"
+
+#: ../src/label-object.c:1185
+#, fuzzy
+msgid "Shadow state"
+msgstr "_Vis kontakt"
+
+#: ../src/label-object.c:1228
+msgid "Shadow offset"
+msgstr ""
+
+#: ../src/label-object.c:1276
+msgid "Shadow color"
+msgstr ""
+
+#: ../src/label-object.c:1319
+#, fuzzy
+msgid "Shadow opacity"
+msgstr "_Vis kontakt"
+
+#: ../src/label-text.c:266 ../src/ui.c:284
+msgid "Create text object"
+msgstr ""
+
+#: ../src/label-text.c:438
+msgid "Typing"
+msgstr ""
+
+#: ../src/label-text.c:571 ../data/builder/property-bar.builder.h:4
+msgid "Font family"
+msgstr ""
+
+#: ../src/label-text.c:609 ../data/builder/property-bar.builder.h:5
+msgid "Font size"
+msgstr ""
+
+#: ../src/label-text.c:642
+msgid "Font weight"
+msgstr ""
+
+#: ../src/label-text.c:675 ../data/builder/property-bar.builder.h:6
+msgid "Italic"
+msgstr ""
+
+#: ../src/label-text.c:708
+msgid "Align text"
+msgstr ""
+
+#: ../src/label-text.c:741
+msgid "Line spacing"
+msgstr ""
+
+#: ../src/label-text.c:774 ../data/builder/property-bar.builder.h:11
+msgid "Text color"
+msgstr ""
+
+#: ../src/label-text.c:918
+msgid "Auto shrink"
+msgstr ""
+
+#: ../src/media-combo-menu.c:130
+msgid "Recent templates"
+msgstr ""
+
+#: ../src/merge.c:169 ../src/merge.c:210 ../src/merge.c:374 ../src/merge.c:377
+msgid "None"
+msgstr "Ingen"
+
+#: ../src/merge-evolution.c:316
+#, fuzzy
+msgid "Couldn't construct query"
+msgstr "Kunne ikke legge til kontakt"
+
+#: ../src/merge-evolution.c:322 ../src/merge-evolution.c:333
+msgid "Couldn't open addressbook."
+msgstr ""
+
+#: ../src/merge-evolution.c:348
+msgid "Couldn't list available fields."
+msgstr ""
+
+#: ../src/merge-evolution.c:384
+#, fuzzy
+msgid "Couldn't get contacts."
+msgstr "Kunne ikke legge til kontakt"
+
+#: ../src/merge-init.c:57
+msgid "Text: Comma Separated Values (CSV)"
+msgstr ""
+
+#: ../src/merge-init.c:64
+msgid "Text: Comma Separated Values (CSV) with keys on line 1"
+msgstr ""
+
+#: ../src/merge-init.c:72
+msgid "Text: Tab Separated Values (TSV)"
+msgstr ""
+
+#: ../src/merge-init.c:79
+msgid "Text: Tab Separated Values (TSV) with keys on line 1"
+msgstr ""
+
+#: ../src/merge-init.c:87
+msgid "Text: Colon separated values"
+msgstr ""
+
+#: ../src/merge-init.c:94
+msgid "Text: Colon separated values with keys on line 1"
+msgstr ""
+
+#: ../src/merge-init.c:104
+msgid "Evolution Addressbook"
+msgstr "Evolution adressebok"
+
+#: ../src/merge-init.c:110
+msgid "VCards"
+msgstr "VCard"
+
+#: ../src/merge-properties-dialog.c:282
+msgid "Merge Properties"
+msgstr ""
+
+#: ../src/merge-properties-dialog.c:308 ../src/merge-properties-dialog.c:424
+msgid "Select merge-database source"
+msgstr ""
+
+#: ../src/merge-properties-dialog.c:319 ../src/merge-properties-dialog.c:446
+msgid "N/A"
+msgstr ""
+
+#: ../src/merge-properties-dialog.c:345
+msgid "Select"
+msgstr "Velg"
+
+#: ../src/merge-properties-dialog.c:352
+#, fuzzy
+msgid "Record/Field"
+msgstr "_Fjern felt"
+
+#: ../src/merge-properties-dialog.c:360
+#: ../data/builder/object-editor.builder.h:10
+msgid "Data"
+msgstr "Data"
+
+#: ../src/merge-properties-dialog.c:439
+msgid "Fixed"
+msgstr "Fast"
+
+#: ../src/object-editor-bc-page.c:92 ../src/object-editor-shadow-page.c:93
+#: ../src/object-editor-text-page.c:97 ../src/prefs-dialog.c:339
+#: ../src/ui-property-bar.c:280
+msgid "Default"
+msgstr "Forvalgt"
+
+#: ../src/object-editor.c:159 ../src/object-editor.c:460
+msgid "Object properties"
+msgstr ""
+
+#: ../src/object-editor.c:309
+msgid "Box object properties"
+msgstr ""
+
+#: ../src/object-editor.c:328
+msgid "Ellipse object properties"
+msgstr ""
+
+#: ../src/object-editor.c:347
+msgid "Line object properties"
+msgstr ""
+
+#: ../src/object-editor.c:364
+msgid "Image object properties"
+msgstr ""
+
+#: ../src/object-editor.c:381
+msgid "Text object properties"
+msgstr ""
+
+#: ../src/object-editor.c:403
+msgid "Barcode object properties"
+msgstr ""
+
+#: ../src/object-editor-edit-page.c:76
+msgid "Insert merge field"
+msgstr ""
+
+#: ../src/object-editor-fill-page.c:79 ../src/prefs-dialog.c:345
+#: ../src/ui-property-bar.c:292
+msgid "No Fill"
+msgstr ""
+
+#: ../src/object-editor-image-page.c:278
+msgid "All Files"
+msgstr ""
+
+#: ../src/object-editor-image-page.c:283
+msgid "All Images"
+msgstr ""
+
+#: ../src/object-editor-image-page.c:298
+#, c-format
+msgid "%s (*.%s)"
+msgstr ""
+
+#: ../src/object-editor-line-page.c:79 ../src/prefs-dialog.c:342
+#: ../src/ui-property-bar.c:304
+msgid "No Line"
+msgstr "Ingen linje"
+
+#: ../src/prefs-dialog.c:172 ../data/builder/prefs-dialog.builder.h:21
+msgid "gLabels Preferences"
+msgstr ""
+
+#. ===================================================================
+#: ../src/print-op.c:205 ../src/print-op-dialog.c:217
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:6
+#: ../templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr ""
+
+#: ../src/rotate-label-button.c:122
+msgid "Normal"
+msgstr ""
+
+#: ../src/rotate-label-button.c:133
+msgid "Rotated"
+msgstr ""
+
+#: ../src/stock.c:70
+msgid "_Select Mode"
+msgstr ""
+
+#: ../src/stock.c:71
+msgid "_Text"
+msgstr ""
+
+#: ../src/stock.c:72
+msgid "_Line"
+msgstr ""
+
+#: ../src/stock.c:73
+msgid "_Box"
+msgstr "_Boks"
+
+#: ../src/stock.c:74
+msgid "_Ellipse"
+msgstr ""
+
+#: ../src/stock.c:75
+msgid "_Image"
+msgstr "B_ilde"
+
+#: ../src/stock.c:76
+msgid "Bar_code"
+msgstr ""
+
+#: ../src/stock.c:77
+msgid "_Merge Properties"
+msgstr ""
+
+#: ../src/stock.c:78
+msgid "Object _Properties"
+msgstr ""
+
+#: ../src/stock.c:79
+msgid "Bring to _Front"
+msgstr ""
+
+#: ../src/stock.c:80
+msgid "Send to _Back"
+msgstr ""
+
+#: ../src/stock.c:81
+msgid "Rotate _Left"
+msgstr ""
+
+#: ../src/stock.c:82
+msgid "Rotate _Right"
+msgstr ""
+
+#: ../src/stock.c:83
+msgid "Flip _Horizontally"
+msgstr ""
+
+#: ../src/stock.c:84
+msgid "Flip _Vertically"
+msgstr ""
+
+#: ../src/stock.c:85
+msgid "_Lefts"
+msgstr ""
+
+#: ../src/stock.c:86
+msgid "_Rights"
+msgstr ""
+
+#: ../src/stock.c:87
+msgid "_Centers"
+msgstr ""
+
+#: ../src/stock.c:88
+#, fuzzy
+msgid "_Tops"
+msgstr "_Grupper"
+
+#: ../src/stock.c:89
+msgid "Bottoms"
+msgstr ""
+
+#: ../src/stock.c:90
+msgid "Centers"
+msgstr ""
+
+#: ../src/stock.c:91 ../src/stock.c:92
+msgid "Label Ce_nter"
+msgstr ""
+
+#: ../src/stock.c:95 ../src/stock.c:97
+msgid "Linked"
+msgstr ""
+
+#: ../src/stock.c:96 ../src/stock.c:98
+msgid "Not Linked"
+msgstr ""
+
+#: ../src/template-designer.c:397
+msgid "gLabels Template Designer"
+msgstr ""
+
+#: ../src/template-designer.c:454
+msgid "Welcome"
+msgstr ""
+
+#: ../src/template-designer.c:493
+msgid "Name and Description"
+msgstr ""
+
+#: ../src/template-designer.c:541
+msgid "Page Size"
+msgstr ""
+
+#: ../src/template-designer.c:607
+msgid "Label or Card Shape"
+msgstr ""
+
+#: ../src/template-designer.c:654
+msgid "Label or Card Size"
+msgstr ""
+
+#: ../src/template-designer.c:753
+msgid "Label Size (round)"
+msgstr ""
+
+#: ../src/template-designer.c:834
+msgid "Label Size (CD/DVD)"
+msgstr ""
+
+#: ../src/template-designer.c:925
+msgid "Number of Layouts"
+msgstr ""
+
+#: ../src/template-designer.c:993
+msgid "Layout(s)"
+msgstr ""
+
+#: ../src/template-designer.c:1098
+msgid "Design Completed"
+msgstr ""
+
+#: ../src/template-designer.c:1275
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr ""
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr ""
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "R_ediger"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Vis"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr ""
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr ""
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr ""
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr ""
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr ""
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr ""
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr ""
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr ""
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr ""
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "_Hjelp"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr ""
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr ""
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr ""
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Åpne..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Åpne en fil"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Lagre"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Lagre aktiv fil"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "L_agre som..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr ""
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "S_kriv ut ..."
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr ""
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Egenskaper..."
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr ""
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr ""
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr ""
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "L_ukk"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr ""
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "A_vslutt"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Avslutt programmet"
+
+#: ../src/ui.c:180 ../src/ui.c:182 ../src/ui.c:967
+msgid "Undo"
+msgstr "Angre"
+
+#: ../src/ui.c:187 ../src/ui.c:189 ../src/ui.c:974
+msgid "Redo"
+msgstr "Gjenopprett"
+
+#: ../src/ui.c:194
+msgid "Cut"
+msgstr "Klipp ut"
+
+#: ../src/ui.c:196
+msgid "Cut the selection"
+msgstr "Klipp ut utvalget"
+
+#: ../src/ui.c:201
+msgid "Copy"
+msgstr "Kopier"
+
+#: ../src/ui.c:203
+msgid "Copy the selection"
+msgstr "Kopier utvalget"
+
+#: ../src/ui.c:210
+msgid "Paste the clipboard"
+msgstr "Lim inn utklippstavlen"
+
+#: ../src/ui.c:217
+msgid "Delete the selected objects"
+msgstr "Slett valgte objekter"
+
+#: ../src/ui.c:222
+msgid "Select All"
+msgstr "Velg alle"
+
+#: ../src/ui.c:224
+msgid "Select all objects"
+msgstr "Velg alle objekter"
+
+#: ../src/ui.c:229
+msgid "Un-select All"
+msgstr ""
+
+#: ../src/ui.c:231
+msgid "Remove all selections"
+msgstr "Fjern alle utvalg"
+
+#: ../src/ui.c:236
+msgid "Preferences"
+msgstr "Brukervalg"
+
+#: ../src/ui.c:238
+msgid "Configure the application"
+msgstr "Konfigurer programmet"
+
+#: ../src/ui.c:245
+msgid "Zoom in"
+msgstr "Zoom inn"
+
+#: ../src/ui.c:247
+msgid "Increase magnification"
+msgstr ""
+
+#: ../src/ui.c:252
+msgid "Zoom out"
+msgstr "Zoom ut"
+
+#: ../src/ui.c:254
+msgid "Decrease magnification"
+msgstr ""
+
+#: ../src/ui.c:259
+msgid "Zoom 1 to 1"
+msgstr ""
+
+#: ../src/ui.c:261
+msgid "Restore scale to 100%"
+msgstr ""
+
+#: ../src/ui.c:266
+msgid "Zoom to fit"
+msgstr ""
+
+#: ../src/ui.c:268
+msgid "Set scale to fit window"
+msgstr ""
+
+#: ../src/ui.c:275
+msgid "Select Mode"
+msgstr ""
+
+#: ../src/ui.c:277
+msgid "Select, move and modify objects"
+msgstr ""
+
+#: ../src/ui.c:282 ../src/view-text.c:102
+#: ../data/builder/object-editor.builder.h:30
+msgid "Text"
+msgstr "Tekst"
+
+#: ../src/ui.c:289
+msgid "Box"
+msgstr "Boks"
+
+#: ../src/ui.c:291
+msgid "Create box/rectangle object"
+msgstr ""
+
+#: ../src/ui.c:296 ../data/builder/object-editor.builder.h:19
+msgid "Line"
+msgstr "Linje"
+
+#: ../src/ui.c:303
+msgid "Ellipse"
+msgstr ""
+
+#: ../src/ui.c:305
+msgid "Create ellipse/circle object"
+msgstr ""
+
+#: ../src/ui.c:310 ../data/builder/object-editor.builder.h:16
+msgid "Image"
+msgstr "Bilde"
+
+#: ../src/ui.c:317
+msgid "Barcode"
+msgstr "Strekkode"
+
+#: ../src/ui.c:326
+msgid "Raise object to top"
+msgstr ""
+
+#: ../src/ui.c:333
+msgid "Lower object to bottom"
+msgstr ""
+
+#: ../src/ui.c:340
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr ""
+
+#: ../src/ui.c:347
+msgid "Rotate object 90 degrees clockwise"
+msgstr ""
+
+#: ../src/ui.c:354
+msgid "Flip object horizontally"
+msgstr ""
+
+#: ../src/ui.c:361
+msgid "Flip object vertically"
+msgstr ""
+
+#: ../src/ui.c:368
+msgid "Align objects to left edges"
+msgstr ""
+
+#: ../src/ui.c:375
+msgid "Align objects to right edges"
+msgstr ""
+
+#: ../src/ui.c:382
+msgid "Align objects to horizontal centers"
+msgstr ""
+
+#: ../src/ui.c:389
+msgid "Align objects to top edges"
+msgstr ""
+
+#: ../src/ui.c:396
+msgid "Align objects to bottom edges"
+msgstr ""
+
+#: ../src/ui.c:403
+msgid "Align objects to vertical centers"
+msgstr ""
+
+#: ../src/ui.c:410
+msgid "Center objects to horizontal label center"
+msgstr ""
+
+#: ../src/ui.c:417
+msgid "Center objects to vertical label center"
+msgstr ""
+
+#: ../src/ui.c:424
+msgid "Edit merge properties"
+msgstr ""
+
+#: ../src/ui.c:431
+msgid "Contents"
+msgstr "Innhold"
+
+#: ../src/ui.c:433
+msgid "Open glabels manual"
+msgstr ""
+
+#: ../src/ui.c:438
+msgid "About..."
+msgstr "Om..."
+
+#: ../src/ui.c:440
+msgid "About glabels"
+msgstr "Om glabels"
+
+#: ../src/ui.c:450
+msgid "Property toolbar"
+msgstr ""
+
+#: ../src/ui.c:452
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr ""
+
+#: ../src/ui.c:458
+msgid "Grid"
+msgstr "Rutenett"
+
+#: ../src/ui.c:460
+msgid "Change the visibility of the grid in the current window"
+msgstr ""
+
+#: ../src/ui.c:466
+msgid "Markup"
+msgstr ""
+
+#: ../src/ui.c:468
+msgid "Change the visibility of markup lines in the current window"
+msgstr ""
+
+#: ../src/ui.c:479
+msgid "Main toolbar"
+msgstr ""
+
+#: ../src/ui.c:481
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr ""
+
+#: ../src/ui.c:487
+msgid "Drawing toolbar"
+msgstr ""
+
+#: ../src/ui.c:489
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr ""
+
+#: ../src/ui-commands.c:1135
+msgid "Glabels includes contributions from:"
+msgstr ""
+
+#: ../src/ui-commands.c:1141
+msgid "See the file AUTHORS for additional credits,"
+msgstr ""
+
+#: ../src/ui-commands.c:1142
+msgid "or visit http://glabels.org/"
+msgstr ""
+
+#: ../src/ui-commands.c:1154
+msgid "A label and business card creation program.\n"
+msgstr ""
+
+#: ../src/ui-commands.c:1158
+msgid "translator-credits"
+msgstr "Espen Stefansen <espenas@gmail.com>"
+
+#: ../src/ui-commands.c:1161
+#, fuzzy
+msgid ""
+"gLabels is free software: you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation, either version 3 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"gLabels is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+"GNU General Public License for more details.\n"
+msgstr ""
+"Contacts er fri programvare. Du kan redistribuere og/eller endre programmet "
+"under betingelsene gitt i GNU General Public License som utgitt av Free "
+"Software Foundation; enten versjon 2 av lisensen, eller (hvis du ønsker det) "
+"enhver senere versjon.\n"
+"\n"
+"Contacts distribueres i håp om at programmet er nyttig, men UTEN NOEN "
+"GARANTI, ikke engang implisitt garanti om at det er SALGBART eller PASSER ET "
+"BESTEMT FORMÅL. Se GNU General Public License for detaljer.\n"
+"\n"
+"Du skal ha mottatt en kopi av GNU General Public License sammen med "
+"Contacts. Hvis ikke så skriv til Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA  02110-1301, USA."
+
+#: ../src/ui-commands.c:1190
+msgid "glabels"
+msgstr ""
+
+#: ../src/warning-handler.c:69
+msgid "gLabels Error!"
+msgstr ""
+
+#: ../src/window.c:284
+msgid "(none) - gLabels"
+msgstr ""
+
+#: ../src/window.c:485
+msgid "(modified)"
+msgstr ""
+
+#: ../src/xml-label-04.c:75 ../src/xml-label.c:323
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr ""
+
+#: ../src/xml-label-04.c:123 ../src/xml-label.c:406
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr ""
+
+#: ../src/xml-label.c:189 ../src/xml-label.c:227
+msgid "xmlParseFile error"
+msgstr ""
+
+#: ../src/xml-label.c:264
+msgid "No document root"
+msgstr ""
+
+#: ../src/xml-label.c:272
+msgid "Importing from glabels 0.1 format"
+msgstr ""
+
+#: ../src/xml-label.c:281
+msgid "Importing from glabels 0.4 format"
+msgstr ""
+
+#: ../src/xml-label.c:291
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr ""
+
+#: ../src/xml-label.c:360
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr ""
+
+#: ../src/xml-label.c:856
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr ""
+
+#: ../src/xml-label.c:1097 ../libglabels/xml-template.c:779
+msgid "Utf8 conversion error."
+msgstr ""
+
+#: ../src/xml-label.c:1104
+msgid "Problem saving xml file."
+msgstr ""
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:115
+msgid "Other"
+msgstr "Øvrige"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:128
+msgid "User defined"
+msgstr ""
+
+#: ../libglabels/db.c:488
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:880
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:1826
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:1893
+#, c-format
+msgid "%s full page label"
+msgstr ""
+
+#: ../libglabels/template.c:148
+#, c-format
+msgid "Equivalent part (\"%s\") for \"%s\", not previously defined."
+msgstr ""
+
+#: ../libglabels/template.c:714 ../libglabels/template.c:718
+msgid "per sheet"
+msgstr ""
+
+#: ../libglabels/template.c:718
+#, c-format
+msgid "%d %s"
+msgstr ""
+
+#: ../libglabels/template.c:788 ../libglabels/template.c:794
+#: ../libglabels/template.c:804 ../libglabels/template.c:810
+msgid "diameter"
+msgstr ""
+
+#. The ids are identical to the absolute length units supported in
+#. the CSS2 Specification (Section 4.3.2)
+#. This table must be sorted exactly as the enumerations in lglUnits
+#. [LGL_UNITS_POINT]
+#: ../libglabels/units.c:65 ../data/builder/object-editor.builder.h:41
+#: ../data/builder/prefs-dialog.builder.h:22
+msgid "points"
+msgstr ""
+
+#. [LGL_UNITS_INCH]
+#: ../libglabels/units.c:66 ../data/builder/object-editor.builder.h:40
+#: ../data/builder/template-designer.builder.h:64
+msgid "inches"
+msgstr ""
+
+#. [LGL_UNITS_MM]
+#: ../libglabels/units.c:67
+msgid "mm"
+msgstr ""
+
+#. [LGL_UNITS_CM]
+#: ../libglabels/units.c:68
+msgid "cm"
+msgstr ""
+
+#. [LGL_UNITS_PICA]
+#: ../libglabels/units.c:69
+msgid "picas"
+msgstr ""
+
+#: ../libglabels/xml-template.c:221
+msgid "Missing name or brand/part attributes."
+msgstr ""
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:242
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr ""
+
+#: ../libglabels/xml-template.c:254
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr ""
+
+#: ../libglabels/xml-template.c:273
+msgid "Forward references not supported."
+msgstr ""
+
+#: ../libglabels/xml-template.c:724
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+
+#: ../libglabels/xml-template.c:734
+msgid "Name attribute also missing."
+msgstr ""
+
+#.
+#. * Local Variables:       -- emacs
+#. * mode: C                -- emacs
+#. * c-basic-offset: 8      -- emacs
+#. * tab-width: 8           -- emacs
+#. * indent-tabs-mode: nil  -- emacs
+#. * End:                   -- emacs
+#.
+#: ../data/builder/merge-properties-dialog.builder.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr ""
+
+#: ../data/builder/merge-properties-dialog.builder.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Kilde</b>"
+
+#: ../data/builder/merge-properties-dialog.builder.h:3
+msgid "Format:"
+msgstr "Format:"
+
+#: ../data/builder/merge-properties-dialog.builder.h:4
+msgid "Location:"
+msgstr "Lokasjon:"
+
+#: ../data/builder/merge-properties-dialog.builder.h:5
+msgid "Select all"
+msgstr "Velg alle"
+
+#: ../data/builder/merge-properties-dialog.builder.h:6
+msgid "Unselect all"
+msgstr "Velg bort alle"
+
+#: ../data/builder/new-label-dialog.builder.h:1
+msgid ""
+"1\n"
+"2\n"
+"3\n"
+"4"
+msgstr ""
+"1\n"
+"2\n"
+"3\n"
+"4"
+
+#: ../data/builder/new-label-dialog.builder.h:5
+msgid "<b>Information</b>"
+msgstr "<b>Informasjon</b>"
+
+#: ../data/builder/new-label-dialog.builder.h:6
+msgid "<b>Preview</b>"
+msgstr "<b>Forhåndsvisning</b>"
+
+#: ../data/builder/new-label-dialog.builder.h:7
+msgid "<b>Select media</b>"
+msgstr "<b>Velg medie:</b>"
+
+#: ../data/builder/new-label-dialog.builder.h:8
+#: ../data/builder/template-designer.builder.h:27
+msgid "Description:"
+msgstr "Beskrivelse:"
+
+#: ../data/builder/new-label-dialog.builder.h:9
+msgid "Label size:"
+msgstr ""
+
+#: ../data/builder/new-label-dialog.builder.h:10
+msgid "Layout:"
+msgstr "Utforming:"
+
+#: ../data/builder/new-label-dialog.builder.h:11
+msgid "Orientation:"
+msgstr "Orientering:"
+
+#: ../data/builder/new-label-dialog.builder.h:12
+#: ../data/builder/template-designer.builder.h:42
+msgid "Page size:"
+msgstr "Sidestørrelse:"
+
+#: ../data/builder/new-label-dialog.builder.h:13
+#: ../data/builder/template-designer.builder.h:43
+msgid "Part #:"
+msgstr ""
+
+#: ../data/builder/new-label-dialog.builder.h:14
+msgid "Similar products:"
+msgstr ""
+
+#: ../data/builder/new-label-dialog.builder.h:15
+msgid "Template:"
+msgstr "Mal:"
+
+#: ../data/builder/new-label-dialog.builder.h:16
+msgid "Vendor:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/builder/object-editor.builder.h:3
+msgid "00000000000 00000"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:5
+#: ../data/builder/prefs-dialog.builder.h:7
+msgid "Alignment:"
+msgstr "Justering:"
+
+#: ../data/builder/object-editor.builder.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:7
+msgid "Angle:"
+msgstr "Vinkel:"
+
+#: ../data/builder/object-editor.builder.h:8
+msgid "Checksum"
+msgstr "Sjekksum"
+
+#: ../data/builder/object-editor.builder.h:9
+#: ../data/builder/prefs-dialog.builder.h:8
+msgid "Color:"
+msgstr "Farge:"
+
+#: ../data/builder/object-editor.builder.h:11
+msgid "Enable shadow"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:12
+msgid "Family:"
+msgstr "Familie:"
+
+#: ../data/builder/object-editor.builder.h:13
+msgid "File:"
+msgstr "Fil:"
+
+#: ../data/builder/object-editor.builder.h:14
+msgid "Fill"
+msgstr "Fyll"
+
+#: ../data/builder/object-editor.builder.h:15
+#: ../data/builder/template-designer.builder.h:30
+msgid "Height:"
+msgstr "Høyde:"
+
+#: ../data/builder/object-editor.builder.h:17
+msgid "Key:"
+msgstr "Nøkkel:"
+
+#: ../data/builder/object-editor.builder.h:18
+msgid "Length:"
+msgstr "Lengde:"
+
+#: ../data/builder/object-editor.builder.h:20
+#: ../data/builder/prefs-dialog.builder.h:12
+msgid "Line Spacing:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:21
+msgid "Literal:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:22
+msgid "Opacity:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:23
+msgid "Position"
+msgstr "Posisjon"
+
+#: ../data/builder/object-editor.builder.h:24
+msgid "Reset image size"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:25
+msgid "Shadow"
+msgstr "Skygge"
+
+#: ../data/builder/object-editor.builder.h:26
+msgid "Size"
+msgstr "Størrelse"
+
+#: ../data/builder/object-editor.builder.h:27
+msgid "Size:"
+msgstr "Størrelse:"
+
+#: ../data/builder/object-editor.builder.h:28
+msgid "Style"
+msgstr "Stil"
+
+#: ../data/builder/object-editor.builder.h:29
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../data/builder/object-editor.builder.h:31
+#: ../data/builder/prefs-dialog.builder.h:20
+#: ../data/builder/template-designer.builder.h:61
+msgid "Width:"
+msgstr "Bredde:"
+
+#: ../data/builder/object-editor.builder.h:32
+msgid "X Offset:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:33
+msgid "X:"
+msgstr "X:"
+
+#: ../data/builder/object-editor.builder.h:34
+msgid "Y Offset:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:35
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/builder/object-editor.builder.h:36
+msgid "degrees"
+msgstr "grader"
+
+#: ../data/builder/object-editor.builder.h:37
+msgid "dialog1"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:38
+msgid "digits:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:39
+msgid "format:"
+msgstr "format:"
+
+#: ../data/builder/prefs-dialog.builder.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/builder/prefs-dialog.builder.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:9
+msgid "Font:"
+msgstr "Skrift:"
+
+#: ../data/builder/prefs-dialog.builder.h:10
+msgid "ISO A4"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:11
+msgid "Inches"
+msgstr "Tommer"
+
+#: ../data/builder/prefs-dialog.builder.h:13
+#, fuzzy
+msgid "Locale"
+msgstr "Lokalitet"
+
+#: ../data/builder/prefs-dialog.builder.h:14
+msgid "Millimeters"
+msgstr "Millimeter"
+
+#: ../data/builder/prefs-dialog.builder.h:15
+msgid "Object defaults"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:16
+msgid "Points"
+msgstr "Punkter"
+
+#: ../data/builder/prefs-dialog.builder.h:17
+msgid "Select default properties for new objects."
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:18
+msgid "Select locale specific behavior."
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:19 ../templates/paper-sizes.xml.h:35
+msgid "US Letter"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:1
+msgid "Bold"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:2
+msgid "Center align"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:7
+msgid "Left align"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:10
+msgid "Right align"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:2
+msgid "(e.g., 8163A)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:4
+msgid "1. Outer radius:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:5
+msgid "1. Radius:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:6
+msgid "1. Width:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:7
+msgid "2. Height:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:8
+msgid "2. Inner radius:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:10
+msgid "3. Clipping width:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:11
+msgid "3. Margin"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:12
+msgid "3. Round (radius of corner):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:13
+msgid "4. Clipping height:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:17
+msgid "6. Margin"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:18
+msgid "Brand/Manufacturer:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:28
+msgid "Distance from left edge (x0):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:29
+msgid "Distance from top edge (y0):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:31
+msgid "Horizontal pitch (dx):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:37
+msgid "Layout #1"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:38
+msgid "Layout #2"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:39
+msgid "Number across (nx):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:40
+msgid "Number down (ny):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:41
+msgid "Number of layouts:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:45
+msgid "Please enter the following layout information."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:49
+msgid "Please select the page size of the template stationery."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:50
+msgid "Print test sheet"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:52
+msgid "Round"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:57
+msgid "Vertical pitch (dy):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:62
+msgid "cd_size_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:63
+msgid "finish_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:65
+msgid "layout_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:66
+#, fuzzy
+msgid "name_page"
+msgstr "Hjemmeside"
+
+#: ../data/builder/template-designer.builder.h:67
+msgid "nlayouts_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:68
+msgid "pg_size_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:69
+msgid "rect_size_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:70
+msgid "round_size_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:71
+msgid "shape_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:72
+msgid "start_page"
+msgstr ""
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:1
+msgid "<b>Copies</b>"
+msgstr "<b>Kopier</b>"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:2
+msgid "<b>Merge Control</b>"
+msgstr ""
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:3
+msgid "<b>Options</b>"
+msgstr "<b>Alternativer</b>"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:4
+msgid "Collate"
+msgstr ""
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:5
+msgid "Copies:"
+msgstr "Kopier:"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:7
+#, fuzzy
+msgid "Sheets:"
+msgstr "Gate"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:8
+msgid "Start on label"
+msgstr ""
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:9
+msgid "from:"
+msgstr "fra:"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:10
+msgid "on 1st sheet"
+msgstr ""
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:14
+msgid "to:"
+msgstr "til:"
+
+#: ../data/desktop/glabels-3.0.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr ""
+
+#: ../data/desktop/glabels-3.0.desktop.in.h:2
+msgid "gLabels Label Designer 3"
+msgstr ""
+
+#: ../data/mime/glabels-3.0.xml.in.h:1
+msgid "gLabels Project File"
+msgstr ""
+
+#. Envelopes
+#: ../templates/paper-sizes.xml.h:2
+msgid "#10 Envelope"
+msgstr ""
+
+#. Other ISO A series sizes
+#: ../templates/paper-sizes.xml.h:4
+msgid "A0"
+msgstr "A0"
+
+#: ../templates/paper-sizes.xml.h:5
+msgid "A1"
+msgstr "A1"
+
+#: ../templates/paper-sizes.xml.h:6
+msgid "A10"
+msgstr "A10"
+
+#: ../templates/paper-sizes.xml.h:7
+msgid "A2"
+msgstr "A2"
+
+#: ../templates/paper-sizes.xml.h:8
+msgid "A3"
+msgstr "A3"
+
+#. Most popular (at top of list)
+#: ../templates/paper-sizes.xml.h:10
+msgid "A4"
+msgstr "A4"
+
+#: ../templates/paper-sizes.xml.h:11
+msgid "A5"
+msgstr "A5"
+
+#: ../templates/paper-sizes.xml.h:12
+msgid "A6"
+msgstr "A6"
+
+#: ../templates/paper-sizes.xml.h:13
+msgid "A7"
+msgstr "A7"
+
+#: ../templates/paper-sizes.xml.h:14
+msgid "A8"
+msgstr "A8"
+
+#: ../templates/paper-sizes.xml.h:15
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../templates/paper-sizes.xml.h:17
+msgid "B0"
+msgstr "B0"
+
+#: ../templates/paper-sizes.xml.h:18
+msgid "B1"
+msgstr "B1"
+
+#: ../templates/paper-sizes.xml.h:19
+msgid "B10"
+msgstr "B10"
+
+#: ../templates/paper-sizes.xml.h:20
+msgid "B2"
+msgstr "B2"
+
+#: ../templates/paper-sizes.xml.h:21
+msgid "B3"
+msgstr "B3"
+
+#: ../templates/paper-sizes.xml.h:22
+msgid "B4"
+msgstr "B4"
+
+#: ../templates/paper-sizes.xml.h:23
+msgid "B5"
+msgstr "B5"
+
+#: ../templates/paper-sizes.xml.h:24
+msgid "B6"
+msgstr "B6"
+
+#: ../templates/paper-sizes.xml.h:25
+msgid "B7"
+msgstr "B7"
+
+#: ../templates/paper-sizes.xml.h:26
+msgid "B8"
+msgstr "B8"
+
+#: ../templates/paper-sizes.xml.h:27
+msgid "B9"
+msgstr "B9"
+
+#: ../templates/paper-sizes.xml.h:28
+msgid "C5"
+msgstr "C5"
+
+#: ../templates/paper-sizes.xml.h:29
+msgid "C6"
+msgstr "C6"
+
+#: ../templates/paper-sizes.xml.h:30
+msgid "DL"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:31
+msgid "Monarch Envelope"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:32
+msgid "US Executive"
+msgstr ""
+
+#. Other US paper sizes
+#: ../templates/paper-sizes.xml.h:34
+msgid "US Legal"
+msgstr ""
+
+#: ../templates/categories.xml.h:1
+msgid "Any card"
+msgstr ""
+
+#: ../templates/categories.xml.h:2
+msgid "Any label"
+msgstr ""
+
+#: ../templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Visittkort"
+
+#: ../templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr ""
+
+#: ../templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr ""
+
+#: ../templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr ""
+
+#: ../templates/categories.xml.h:7
+msgid "Round labels"
+msgstr ""
+
+#: ../templates/categories.xml.h:8
+msgid "Square labels"
+msgstr ""
+
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:2
+#: ../templates/avery-iso-templates.xml.h:2
+#: ../templates/dymo-other-templates.xml.h:4
+#: ../templates/maco-us-templates.xml.h:2
+#: ../templates/misc-iso-templates.xml.h:2
+#: ../templates/worldlabel-us-templates.xml.h:1
+#: ../templates/zweckform-iso-templates.xml.h:2
+#, fuzzy
+msgid "Address Labels"
+msgstr "Adressebok"
+
+#. ===================================================================
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:4
+#: ../templates/avery-iso-templates.xml.h:8
+#: ../templates/misc-us-templates.xml.h:4
+#: ../templates/misc-iso-templates.xml.h:12
+#: ../templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Visittkort"
+
+#. ===================================================================
+#. ===============================================================
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:6
+#: ../templates/avery-iso-templates.xml.h:14
+#: ../templates/misc-us-templates.xml.h:8
+#: ../templates/misc-iso-templates.xml.h:16
+#: ../templates/worldlabel-us-templates.xml.h:2
+#: ../templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:12
+#: ../templates/avery-iso-templates.xml.h:16
+#: ../templates/worldlabel-us-templates.xml.h:3
+msgid "Diskette Labels"
+msgstr ""
+
+#. the LSK labels can be torn in half down the center
+#: ../templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:16
+#: ../templates/avery-other-templates.xml.h:2
+#: ../templates/worldlabel-us-templates.xml.h:4
+msgid "File Folder Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:18
+#: ../templates/worldlabel-us-templates.xml.h:5
+msgid "Filing Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:20
+#: ../templates/worldlabel-us-templates.xml.h:6
+msgid "Full Sheet Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:22
+msgid "ID Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:24
+msgid "Index Cards"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:26
+msgid "Large Round Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:28
+msgid "Name Badge Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:30
+msgid "Post cards"
+msgstr "Postkort"
+
+#. ===================================================================
+#. ********************************************************************
+#: ../templates/avery-us-templates.xml.h:32
+#: ../templates/dymo-other-templates.xml.h:12
+#: ../templates/worldlabel-us-templates.xml.h:8
+msgid "Return Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:34
+#: ../templates/maco-us-templates.xml.h:3
+#: ../templates/misc-us-templates.xml.h:28
+#: ../templates/worldlabel-us-templates.xml.h:9
+msgid "Round Labels"
+msgstr ""
+
+#. ===================================================================
+#. ********************************************************************
+#: ../templates/avery-us-templates.xml.h:36
+#: ../templates/uline-us-templates.xml.h:2
+#: ../templates/worldlabel-us-templates.xml.h:10
+msgid "Shipping Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:38
+msgid "Small Round Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:40
+msgid "Square Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:42
+msgid "Tent Cards"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:44
+#: ../templates/worldlabel-us-templates.xml.h:11
+msgid "Video Tape Face Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:46
+#: ../templates/worldlabel-us-templates.xml.h:12
+msgid "Video Tape Spine Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:4
+#, fuzzy
+msgid "Address labels"
+msgstr "Adressebok"
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr ""
+
+#. ===============================================================
+#: ../templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr ""
+
+#. ===============================================================
+#: ../templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr ""
+
+#. ===============================================================
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:20
+#: ../templates/misc-us-templates.xml.h:18
+#: ../templates/misc-iso-templates.xml.h:36
+#: ../templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:26
+msgid "Mini Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr ""
+
+#: ../templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr ""
+
+#: ../templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr ""
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:12
+#: ../templates/misc-iso-templates.xml.h:18
+msgid "CD/DVD Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:20
+msgid "Microtube labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:22
+msgid "Mini-CD Labels"
+msgstr ""
+
+#: ../templates/misc-us-templates.xml.h:23
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr ""
+
+#: ../templates/misc-us-templates.xml.h:24
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:26
+#: ../templates/misc-iso-templates.xml.h:42
+msgid "PRO CD Labels 2-up (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:30
+msgid "Slimline CD Case (rightside up)"
+msgstr ""
+
+#: ../templates/misc-us-templates.xml.h:31
+msgid "Slimline CD Case (upside down)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:4
+#: ../templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:44
+#: ../templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr ""
+
diff --git a/po/pl.po b/po/pl.po
new file mode 100644 (file)
index 0000000..d5b935c
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,3004 @@
+# Polish translation for gLabels
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Arkadiusz Lipiec <alipiec@elka.pw.edu.pl>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gLabels\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-10-06 21:56+0200\n"
+"PO-Revision-Date: 2002-07-23 11:43+0100\n"
+"Last-Translator: Arkadiusz Lipiec <alipiec@elka.pw.edu.pl>\n"
+"Language-Team: Polish <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../bc-backends/barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: ../bc-backends/barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: ../bc-backends/barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: ../bc-backends/barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#. --option
+#: ../bc-backends/barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr ""
+
+#. +option or -option
+#: ../bc-backends/barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr ""
+
+#. 1003.2 specifies the format of this message.
+#: ../bc-backends/barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: ../bc-backends/barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr ""
+
+#: ../bc-backends/barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: ../src/bc.c:65
+msgid "POSTNET (any)"
+msgstr ""
+
+#: ../src/bc.c:68
+msgid "POSTNET-5 (ZIP only)"
+msgstr ""
+
+#: ../src/bc.c:71
+msgid "POSTNET-9 (ZIP+4)"
+msgstr ""
+
+#: ../src/bc.c:74
+msgid "POSTNET-11 (DPBC)"
+msgstr ""
+
+#: ../src/bc.c:77
+msgid "CEPNET"
+msgstr ""
+
+#: ../src/bc.c:80
+msgid "EAN (any)"
+msgstr ""
+
+#: ../src/bc.c:83
+msgid "EAN-8"
+msgstr ""
+
+#: ../src/bc.c:86
+msgid "EAN-8 +2"
+msgstr ""
+
+#: ../src/bc.c:89
+msgid "EAN-8 +5"
+msgstr ""
+
+#: ../src/bc.c:92
+msgid "EAN-13"
+msgstr ""
+
+#: ../src/bc.c:95
+msgid "EAN-13 +2"
+msgstr ""
+
+#: ../src/bc.c:98
+msgid "EAN-13 +5"
+msgstr ""
+
+#: ../src/bc.c:101
+msgid "UPC (UPC-A or UPC-E)"
+msgstr ""
+
+#: ../src/bc.c:104
+msgid "UPC-A"
+msgstr ""
+
+#: ../src/bc.c:107
+msgid "UPC-A +2"
+msgstr ""
+
+#: ../src/bc.c:110
+msgid "UPC-A +5"
+msgstr ""
+
+#: ../src/bc.c:113
+msgid "UPC-E"
+msgstr ""
+
+#: ../src/bc.c:116
+msgid "UPC-E +2"
+msgstr ""
+
+#: ../src/bc.c:119
+msgid "UPC-E +5"
+msgstr ""
+
+#: ../src/bc.c:122
+msgid "ISBN"
+msgstr ""
+
+#: ../src/bc.c:125
+msgid "ISBN +5"
+msgstr ""
+
+#: ../src/bc.c:128
+msgid "Code 39"
+msgstr ""
+
+#: ../src/bc.c:131
+msgid "Code 128"
+msgstr ""
+
+#: ../src/bc.c:134
+msgid "Code 128C"
+msgstr ""
+
+#: ../src/bc.c:137
+msgid "Code 128B"
+msgstr ""
+
+#: ../src/bc.c:140
+msgid "Interleaved 2 of 5"
+msgstr ""
+
+#: ../src/bc.c:143
+msgid "Codabar"
+msgstr ""
+
+#: ../src/bc.c:146
+msgid "MSI"
+msgstr ""
+
+#: ../src/bc.c:149
+msgid "Plessey"
+msgstr ""
+
+#: ../src/bc.c:152
+msgid "IEC16022 (DataMatrix)"
+msgstr ""
+
+#: ../src/bc.c:155
+msgid "IEC18004 (QRCode)"
+msgstr ""
+
+#: ../src/color-combo-button.c:198 ../src/color-combo.c:178
+#, fuzzy
+msgid "Default Color"
+msgstr "Usuñ"
+
+#: ../src/color-combo-menu.c:83
+msgid "Dark Red"
+msgstr ""
+
+#: ../src/color-combo-menu.c:84
+msgid "Brown"
+msgstr ""
+
+#: ../src/color-combo-menu.c:85
+msgid "Dark Goldenrod"
+msgstr ""
+
+#: ../src/color-combo-menu.c:86
+msgid "Dark Green"
+msgstr ""
+
+#: ../src/color-combo-menu.c:87
+msgid "Dark Cyan"
+msgstr ""
+
+#: ../src/color-combo-menu.c:88
+msgid "Navy Blue"
+msgstr ""
+
+#: ../src/color-combo-menu.c:89
+msgid "Dark Violet"
+msgstr ""
+
+#: ../src/color-combo-menu.c:91
+msgid "Red"
+msgstr ""
+
+#: ../src/color-combo-menu.c:92
+msgid "Orange"
+msgstr ""
+
+#: ../src/color-combo-menu.c:93
+msgid "Dark Yellow"
+msgstr ""
+
+#: ../src/color-combo-menu.c:94
+msgid "Medium green"
+msgstr ""
+
+#: ../src/color-combo-menu.c:95
+msgid "Turquoise"
+msgstr ""
+
+#: ../src/color-combo-menu.c:96
+msgid "Blue"
+msgstr ""
+
+#: ../src/color-combo-menu.c:97
+msgid "Purple"
+msgstr ""
+
+#: ../src/color-combo-menu.c:99
+msgid "Salmon"
+msgstr ""
+
+#: ../src/color-combo-menu.c:100
+msgid "Gold"
+msgstr ""
+
+#: ../src/color-combo-menu.c:101
+msgid "Yellow"
+msgstr ""
+
+#: ../src/color-combo-menu.c:102
+#, fuzzy
+msgid "Green"
+msgstr "stopni(e)"
+
+#: ../src/color-combo-menu.c:103
+msgid "Cyan"
+msgstr ""
+
+#: ../src/color-combo-menu.c:104
+#, fuzzy
+msgid "SkyBlue"
+msgstr "Styl"
+
+#: ../src/color-combo-menu.c:105
+msgid "Violet"
+msgstr ""
+
+#: ../src/color-combo-menu.c:107
+#, fuzzy
+msgid "Pink"
+msgstr "Wydrukuj"
+
+#: ../src/color-combo-menu.c:108
+msgid "Khaki"
+msgstr ""
+
+#: ../src/color-combo-menu.c:109
+msgid "Light Yellow"
+msgstr ""
+
+#: ../src/color-combo-menu.c:110
+#, fuzzy
+msgid "Light Green"
+msgstr "stopni(e)"
+
+#: ../src/color-combo-menu.c:111
+msgid "Light Cyan"
+msgstr ""
+
+#: ../src/color-combo-menu.c:112
+msgid "Slate Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:113
+msgid "Thistle"
+msgstr ""
+
+#: ../src/color-combo-menu.c:115
+msgid "White"
+msgstr ""
+
+#: ../src/color-combo-menu.c:116
+#, c-format
+msgid "10% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:117
+#, c-format
+msgid "25% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:118
+#, c-format
+msgid "40% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:119
+#, c-format
+msgid "50% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:120
+#, c-format
+msgid "60% Gray"
+msgstr ""
+
+#: ../src/color-combo-menu.c:121
+msgid "Black"
+msgstr ""
+
+#: ../src/color-combo-menu.c:249 ../src/color-combo-menu.c:368
+#, fuzzy
+msgid "Custom Color"
+msgstr "Kolor:"
+
+#: ../src/color-combo-menu.c:314
+#, fuzzy, c-format
+msgid "Custom Color #%u"
+msgstr "Kolor:"
+
+#: ../src/critical-error-handler.c:70
+msgid "gLabels Fatal Error!"
+msgstr ""
+
+#: ../src/file.c:86
+msgid "New Label or Card"
+msgstr "Nowa etykieta lub karta"
+
+#: ../src/file.c:188
+#, fuzzy
+msgid "Label properties"
+msgstr "W³a¶ciwo¶ci tekstu"
+
+#: ../src/file.c:291 ../src/file.c:581
+msgid "All files"
+msgstr ""
+
+#: ../src/file.c:296 ../src/file.c:586
+#, fuzzy
+msgid "gLabels documents"
+msgstr "Glabels: Preferencje"
+
+#: ../src/file.c:343 ../src/file.c:644
+#, fuzzy
+msgid "Empty file name selection"
+msgstr "Usuwa wszelkie zaznaczenia"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr ""
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr ""
+
+#: ../src/file.c:434
+#, fuzzy, c-format
+msgid "Could not open file \"%s\""
+msgstr "Nie mo¿na otworzyæ pliku"
+
+#: ../src/file.c:437
+msgid "Not a supported file format"
+msgstr ""
+
+#: ../src/file.c:515 ../src/file.c:694
+#, fuzzy, c-format
+msgid "Could not save file \"%s\""
+msgstr "Nie mo¿na zapisaæ pliku"
+
+#: ../src/file.c:519 ../src/file.c:698
+msgid "Error encountered during save.  The file is still not saved."
+msgstr ""
+
+#: ../src/file.c:559
+#, fuzzy, c-format
+msgid "Save \"%s\" as"
+msgstr "Zapisz etykietê jako"
+
+#: ../src/file.c:647
+#, fuzzy
+msgid "Please supply a valid file name"
+msgstr "Nale¿y podaæ nazwê pliku"
+
+#: ../src/file.c:668
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr ""
+
+#: ../src/file.c:672
+msgid "File already exists."
+msgstr ""
+
+#: ../src/file.c:768
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr ""
+
+#: ../src/file.c:772
+msgid "Your changes will be lost if you don't save them."
+msgstr ""
+
+#: ../src/file.c:775
+msgid "Close without saving"
+msgstr ""
+
+#: ../src/font-combo-menu.c:127
+msgid "Proportional fonts"
+msgstr ""
+
+#: ../src/font-combo-menu.c:142
+msgid "Fixed-width fonts"
+msgstr ""
+
+#: ../src/font-combo-menu.c:157
+msgid "All fonts"
+msgstr ""
+
+#: ../src/glabels-batch.c:51
+#, fuzzy
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "okre¶l nazwê pliku wyj¶ciowego (domy¶lnie=\"output.ps\")"
+
+#: ../src/glabels-batch.c:51 ../src/glabels-batch.c:65
+msgid "filename"
+msgstr "nazwa pliku"
+
+#: ../src/glabels-batch.c:53
+msgid "number of sheets (default=1)"
+msgstr "liczba arkuszy (domy¶lnie=1)"
+
+#: ../src/glabels-batch.c:53
+msgid "sheets"
+msgstr "arkusz(e/y)"
+
+#: ../src/glabels-batch.c:55
+msgid "number of copies (default=1)"
+msgstr "liczba kopii (domy¶lnie=1)"
+
+#: ../src/glabels-batch.c:55
+msgid "copies"
+msgstr "kopi(a/e/i)"
+
+#: ../src/glabels-batch.c:57
+#, fuzzy
+msgid "first label on first sheet (default=1)"
+msgstr "liczba arkuszy (domy¶lnie=1)"
+
+#: ../src/glabels-batch.c:57
+msgid "first"
+msgstr ""
+
+#: ../src/glabels-batch.c:59
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:13
+msgid "print outlines (to test printer alignment)"
+msgstr "drukowanie ramek (w celu przetestowania wyrównania)"
+
+#: ../src/glabels-batch.c:61
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:12
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "drukowanie odwrócone (np. odbicie zwierciadlane)"
+
+#: ../src/glabels-batch.c:63
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:11
+msgid "print crop marks"
+msgstr ""
+
+#: ../src/glabels-batch.c:65
+msgid "input file for merging"
+msgstr ""
+
+#: ../src/glabels-batch.c:67 ../src/glabels.c:62
+msgid "[FILE...]"
+msgstr ""
+
+#: ../src/glabels-batch.c:96
+msgid "Print files created with gLabels."
+msgstr ""
+
+#: ../src/glabels-batch.c:104 ../src/glabels.c:87
+#, c-format
+msgid ""
+"%s\n"
+"Run '%s --help' to see a full list of available command line options.\n"
+msgstr ""
+
+#: ../src/glabels-batch.c:146
+#, fuzzy, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "nie mo¿na otworzyæ pliku glabels o nazwie %s\n"
+
+#: ../src/glabels-batch.c:180
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "nie mo¿na otworzyæ pliku glabels o nazwie %s\n"
+
+#: ../src/glabels.c:79
+msgid "Launch gLabels label and business card designer."
+msgstr ""
+
+#: ../src/label-barcode.c:435
+#, fuzzy
+msgid "Barcode data empty"
+msgstr "Dane kodu paskowego"
+
+#: ../src/label-barcode.c:439
+#, fuzzy
+msgid "Invalid barcode data"
+msgstr "Niepoprawny kod paskowy"
+
+#: ../src/label.c:547
+msgid "Untitled"
+msgstr ""
+
+#: ../src/merge.c:169 ../src/merge.c:210 ../src/merge.c:374 ../src/merge.c:377
+msgid "None"
+msgstr "Brak"
+
+#: ../src/merge-evolution.c:316
+msgid "Couldn't construct query"
+msgstr ""
+
+#: ../src/merge-evolution.c:322 ../src/merge-evolution.c:333
+#, fuzzy
+msgid "Couldn't open addressbook."
+msgstr "Nie mo¿na otworzyæ pliku"
+
+#: ../src/merge-evolution.c:348
+#, fuzzy
+msgid "Couldn't list available fields."
+msgstr "Nie mo¿na zapisaæ pliku"
+
+#: ../src/merge-evolution.c:384
+msgid "Couldn't get contacts."
+msgstr ""
+
+#: ../src/merge-init.c:57
+#, fuzzy
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Tekst oddzielony przecinkami (CSV)"
+
+#: ../src/merge-init.c:64
+#, fuzzy
+msgid "Text file with colon delimeters"
+msgstr "Tekst oddzielany dwukropkami"
+
+#: ../src/merge-init.c:71
+#, fuzzy
+msgid "Text file with tab delimeters"
+msgstr "Tekst oddzielony tabulacjami"
+
+#: ../src/merge-init.c:80
+msgid "Data from default Evolution Addressbook"
+msgstr ""
+
+#: ../src/merge-init.c:86
+msgid "Data from a file containing VCards"
+msgstr ""
+
+#: ../src/merge-properties-dialog.c:279
+#, fuzzy
+msgid "Merge Properties"
+msgstr "W³a¶ciwo¶ci z³±czania"
+
+#: ../src/merge-properties-dialog.c:305 ../src/merge-properties-dialog.c:421
+msgid "Select merge-database source"
+msgstr "Wybierz Œród³o bazy danych z³±czania "
+
+#: ../src/merge-properties-dialog.c:316 ../src/merge-properties-dialog.c:443
+msgid "N/A"
+msgstr "N/A"
+
+#: ../src/merge-properties-dialog.c:342
+msgid "Select"
+msgstr "Wybierz"
+
+#: ../src/merge-properties-dialog.c:349
+msgid "Record/Field"
+msgstr ""
+
+#: ../src/merge-properties-dialog.c:357
+#: ../data/builder/object-editor.builder.h:10
+msgid "Data"
+msgstr "Dane"
+
+#: ../src/merge-properties-dialog.c:436
+#, fuzzy
+msgid "Fixed"
+msgstr "Pola"
+
+#: ../src/new-label-dialog.c:112
+#, fuzzy
+msgid "<b>Media type</b>"
+msgstr "Typ no¶nika"
+
+#: ../src/new-label-dialog.c:122
+#, fuzzy
+msgid "<b>Label orientation</b>"
+msgstr "U³o¿enie etykiety"
+
+#: ../src/object-editor-bc-page.c:91 ../src/object-editor-shadow-page.c:91
+#: ../src/object-editor-text-page.c:97 ../src/prefs-dialog.c:337
+#: ../src/ui-property-bar.c:278
+#, fuzzy
+msgid "Default"
+msgstr "Usuñ"
+
+#: ../src/object-editor-fill-page.c:79 ../src/prefs-dialog.c:343
+#: ../src/ui-property-bar.c:290
+#, fuzzy
+msgid "No Fill"
+msgstr "Wype³nienie"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr ""
+
+#: ../src/object-editor-image-page.c:275
+#, fuzzy
+msgid "All Images"
+msgstr "Obraz"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr ""
+
+#: ../src/object-editor-line-page.c:79 ../src/prefs-dialog.c:340
+#: ../src/ui-property-bar.c:302
+#, fuzzy
+msgid "No Line"
+msgstr "Brak"
+
+#. Should not happen
+#: ../src/prefs.c:156 ../src/prefs.c:163
+#: ../data/builder/object-editor.builder.h:42
+#: ../data/builder/prefs-dialog.builder.h:22
+msgid "points"
+msgstr "punkty(-ów)"
+
+#: ../src/prefs.c:158 ../data/builder/object-editor.builder.h:41
+#: ../data/builder/template-designer.builder.h:64
+msgid "inches"
+msgstr "cali"
+
+#: ../src/prefs.c:160
+msgid "mm"
+msgstr "mm"
+
+#: ../src/prefs-dialog.c:172 ../data/builder/prefs-dialog.builder.h:21
+#, fuzzy
+msgid "gLabels Preferences"
+msgstr "Glabels: Preferencje"
+
+#. ===================================================================
+#: ../src/print-op.c:203 ../src/print-op-dialog.c:217
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:6
+#: ../templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Etykiety"
+
+#: ../src/rotate-label-button.c:122
+#, fuzzy
+msgid "Normal"
+msgstr "Format:"
+
+#: ../src/rotate-label-button.c:133
+#, fuzzy
+msgid "Rotated"
+msgstr "Obróæ"
+
+#: ../src/stock.c:70
+#, fuzzy
+msgid "_Select Mode"
+msgstr "Wybierz"
+
+#: ../src/stock.c:71
+#, fuzzy
+msgid "_Text"
+msgstr "Tekst"
+
+#: ../src/stock.c:72
+#, fuzzy
+msgid "_Line"
+msgstr "Linia"
+
+#: ../src/stock.c:73
+#, fuzzy
+msgid "_Box"
+msgstr "Skrzynka"
+
+#: ../src/stock.c:74
+#, fuzzy
+msgid "_Ellipse"
+msgstr "Elipsa"
+
+#: ../src/stock.c:75
+#, fuzzy
+msgid "_Image"
+msgstr "Obraz"
+
+#: ../src/stock.c:76
+#, fuzzy
+msgid "Bar_code"
+msgstr "Kod paskowy"
+
+#: ../src/stock.c:77
+#, fuzzy
+msgid "_Merge Properties"
+msgstr "W³a¶ciwo¶ci z³±czania"
+
+#: ../src/stock.c:78
+#, fuzzy
+msgid "Object _Properties"
+msgstr "W³a¶ciwo¶ci tekstu"
+
+#: ../src/stock.c:79
+#, fuzzy
+msgid "Bring to _Front"
+msgstr "Przesun na wierzch"
+
+#: ../src/stock.c:80
+#, fuzzy
+msgid "Send to _Back"
+msgstr "Przesuñ w dó³"
+
+#: ../src/stock.c:81
+#, fuzzy
+msgid "Rotate _Left"
+msgstr "Obróæ"
+
+#: ../src/stock.c:82
+#, fuzzy
+msgid "Rotate _Right"
+msgstr "Obróæ"
+
+#: ../src/stock.c:83
+msgid "Flip _Horizontally"
+msgstr ""
+
+#: ../src/stock.c:84
+msgid "Flip _Vertically"
+msgstr ""
+
+#: ../src/stock.c:85
+msgid "_Lefts"
+msgstr ""
+
+#: ../src/stock.c:86
+msgid "_Rights"
+msgstr ""
+
+#: ../src/stock.c:87
+msgid "_Centers"
+msgstr ""
+
+#: ../src/stock.c:88
+#, fuzzy
+msgid "_Tops"
+msgstr "_Narzêdzia"
+
+#: ../src/stock.c:89
+msgid "Bottoms"
+msgstr ""
+
+#: ../src/stock.c:90
+msgid "Centers"
+msgstr ""
+
+#: ../src/stock.c:91 ../src/stock.c:92
+msgid "Label Ce_nter"
+msgstr ""
+
+#: ../src/stock.c:93 ../data/builder/property-bar.builder.h:3
+msgid "Fill color"
+msgstr ""
+
+#: ../src/stock.c:94 ../data/builder/property-bar.builder.h:7
+msgid "Line color"
+msgstr ""
+
+#: ../src/stock.c:95 ../src/stock.c:97
+#, fuzzy
+msgid "Linked"
+msgstr "Linia"
+
+#: ../src/stock.c:96 ../src/stock.c:98
+#, fuzzy
+msgid "Not Linked"
+msgstr "Brak"
+
+#: ../src/template-designer.c:401
+msgid "gLabels Template Designer"
+msgstr ""
+
+#: ../src/template-designer.c:456
+msgid "Welcome"
+msgstr ""
+
+#: ../src/template-designer.c:495
+#, fuzzy
+msgid "Name and Description"
+msgstr "Opis:"
+
+#: ../src/template-designer.c:543
+#, fuzzy
+msgid "Page Size"
+msgstr "Rozmiar strony:"
+
+#: ../src/template-designer.c:609
+#, fuzzy
+msgid "Label or Card Shape"
+msgstr "Nowa etykieta lub karta"
+
+#: ../src/template-designer.c:655
+#, fuzzy
+msgid "Label or Card Size"
+msgstr "Nowa etykieta lub karta"
+
+#: ../src/template-designer.c:751
+#, fuzzy
+msgid "Label Size (round)"
+msgstr "Rozmiar etykiety:"
+
+#: ../src/template-designer.c:829
+msgid "Label Size (CD/DVD)"
+msgstr ""
+
+#: ../src/template-designer.c:917
+msgid "Number of Layouts"
+msgstr ""
+
+#: ../src/template-designer.c:981
+#, fuzzy
+msgid "Layout(s)"
+msgstr "Wygl±d:"
+
+#: ../src/template-designer.c:1086
+msgid "Design Completed"
+msgstr ""
+
+#: ../src/template-designer.c:1259
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+
+#. Menu entries.
+#: ../src/ui.c:88
+#, fuzzy
+msgid "_File"
+msgstr "Wype³nienie"
+
+#: ../src/ui.c:89
+#, fuzzy
+msgid "Open Recent _Files"
+msgstr "Otwiera plik"
+
+#: ../src/ui.c:90
+msgid "_Edit"
+msgstr ""
+
+#: ../src/ui.c:91
+#, fuzzy
+msgid "_View"
+msgstr "_Nowa"
+
+#: ../src/ui.c:92
+msgid "Customize Main Toolbar"
+msgstr ""
+
+#: ../src/ui.c:93
+msgid "Customize Drawing Toolbar"
+msgstr ""
+
+#: ../src/ui.c:94
+msgid "Customize Properties Toolbar"
+msgstr ""
+
+#: ../src/ui.c:95
+msgid "_Objects"
+msgstr ""
+
+#: ../src/ui.c:96
+#, fuzzy
+msgid "_Create"
+msgstr "Tworzy obiekt tekstowy"
+
+#: ../src/ui.c:97
+msgid "_Order"
+msgstr ""
+
+#: ../src/ui.c:98
+#, fuzzy
+msgid "_Rotate/Flip"
+msgstr "Obróæ"
+
+#: ../src/ui.c:99
+msgid "Align _Horizontal"
+msgstr ""
+
+#: ../src/ui.c:100
+msgid "Align _Vertical"
+msgstr ""
+
+#: ../src/ui.c:101
+msgid "_Help"
+msgstr ""
+
+#. Popup entries.
+#: ../src/ui.c:104 ../src/ui.c:105
+msgid "Context Menu"
+msgstr ""
+
+#: ../src/ui.c:110
+msgid "_New"
+msgstr "_Nowa"
+
+#: ../src/ui.c:112
+#, fuzzy
+msgid "Create a new file"
+msgstr "Tworzy liniê"
+
+#: ../src/ui.c:117
+#, fuzzy
+msgid "_Open..."
+msgstr "Otwórz"
+
+#: ../src/ui.c:119
+msgid "Open a file"
+msgstr "Otwiera plik"
+
+#: ../src/ui.c:124
+#, fuzzy
+msgid "_Save"
+msgstr "Zapisz jako"
+
+#: ../src/ui.c:126
+#, fuzzy
+msgid "Save current file"
+msgstr "Zapisuje bie¿±cy plik"
+
+#: ../src/ui.c:131
+#, fuzzy
+msgid "Save _As..."
+msgstr "Zapisz jako"
+
+#: ../src/ui.c:133
+#, fuzzy
+msgid "Save the current file to a different name"
+msgstr "Zapisuje bie¿±cy plik"
+
+#: ../src/ui.c:138
+#, fuzzy
+msgid "_Print..."
+msgstr "Wydrukuj"
+
+#: ../src/ui.c:140
+#, fuzzy
+msgid "Print the current file"
+msgstr "Drukuje bie¿±cy plik"
+
+#: ../src/ui.c:145
+#, fuzzy
+msgid "Properties..."
+msgstr "W³a¶ciwo¶ci tekstu"
+
+#: ../src/ui.c:147
+#, fuzzy
+msgid "Modify document properties"
+msgstr "Modyfikacja w³a¶ciwo¶ci z³±czania dokumentów"
+
+#: ../src/ui.c:152
+msgid "Template _Designer..."
+msgstr ""
+
+#: ../src/ui.c:154
+#, fuzzy
+msgid "Create a custom template"
+msgstr "Tworzy liniê"
+
+#: ../src/ui.c:159
+msgid "_Close"
+msgstr ""
+
+#: ../src/ui.c:161
+#, fuzzy
+msgid "Close the current file"
+msgstr "Zapisuje bie¿±cy plik"
+
+#: ../src/ui.c:166
+msgid "_Quit"
+msgstr ""
+
+#: ../src/ui.c:168
+msgid "Quit the program"
+msgstr ""
+
+#: ../src/ui.c:175
+msgid "Cut"
+msgstr ""
+
+#: ../src/ui.c:177
+msgid "Cut the selection"
+msgstr ""
+
+#: ../src/ui.c:182
+msgid "Copy"
+msgstr ""
+
+#: ../src/ui.c:184
+#, fuzzy
+msgid "Copy the selection"
+msgstr "Usuwa wszelkie zaznaczenia"
+
+#: ../src/ui.c:189
+msgid "Paste"
+msgstr ""
+
+#: ../src/ui.c:191
+msgid "Paste the clipboard"
+msgstr ""
+
+#: ../src/ui.c:196
+msgid "Delete"
+msgstr "Usuñ"
+
+#: ../src/ui.c:198
+#, fuzzy
+msgid "Delete the selected objects"
+msgstr "Tworzy obiekt tekstowy"
+
+#: ../src/ui.c:203
+#, fuzzy
+msgid "Select All"
+msgstr "O_dznacz wszystko"
+
+#: ../src/ui.c:205
+#, fuzzy
+msgid "Select all objects"
+msgstr "Wybierz, przeno¶ i modyfikuj obiekty"
+
+#: ../src/ui.c:210
+#, fuzzy
+msgid "Un-select All"
+msgstr "O_dznacz wszystko"
+
+#: ../src/ui.c:212
+msgid "Remove all selections"
+msgstr "Usuwa wszelkie zaznaczenia"
+
+#: ../src/ui.c:217
+#, fuzzy
+msgid "Preferences"
+msgstr "Glabels: Preferencje"
+
+#: ../src/ui.c:219
+msgid "Configure the application"
+msgstr ""
+
+#: ../src/ui.c:226
+#, fuzzy
+msgid "Zoom in"
+msgstr "Powiêksz"
+
+#: ../src/ui.c:228
+msgid "Increase magnification"
+msgstr ""
+
+#: ../src/ui.c:233
+#, fuzzy
+msgid "Zoom out"
+msgstr "Pomniejsz"
+
+#: ../src/ui.c:235
+msgid "Decrease magnification"
+msgstr ""
+
+#: ../src/ui.c:240
+#, fuzzy
+msgid "Zoom 1 to 1"
+msgstr "Powiêkszenie 1:1"
+
+#: ../src/ui.c:242
+msgid "Restore scale to 100%"
+msgstr ""
+
+#: ../src/ui.c:247
+#, fuzzy
+msgid "Zoom to fit"
+msgstr "Powiêksza 1:1"
+
+#: ../src/ui.c:249
+msgid "Set scale to fit window"
+msgstr ""
+
+#: ../src/ui.c:256
+#, fuzzy
+msgid "Select Mode"
+msgstr "Wybierz"
+
+#: ../src/ui.c:258
+msgid "Select, move and modify objects"
+msgstr "Wybierz, przeno¶ i modyfikuj obiekty"
+
+#: ../src/ui.c:263 ../src/view-text.c:501
+#: ../data/builder/object-editor.builder.h:31
+msgid "Text"
+msgstr "Tekst"
+
+#: ../src/ui.c:265
+msgid "Create text object"
+msgstr "Tworzy obiekt tekstowy"
+
+#: ../src/ui.c:270
+#, fuzzy
+msgid "Box"
+msgstr "Skrzynka"
+
+#: ../src/ui.c:272
+msgid "Create box/rectangle object"
+msgstr "Tworzy skrzynkê/prostok±t"
+
+#: ../src/ui.c:277 ../data/builder/object-editor.builder.h:20
+msgid "Line"
+msgstr "Linia"
+
+#: ../src/ui.c:279
+msgid "Create line object"
+msgstr "Tworzy liniê"
+
+#: ../src/ui.c:284
+#, fuzzy
+msgid "Ellipse"
+msgstr "Elipsa"
+
+#: ../src/ui.c:286
+msgid "Create ellipse/circle object"
+msgstr "Tworzy elipsê/okr±g"
+
+#: ../src/ui.c:291 ../data/builder/object-editor.builder.h:16
+msgid "Image"
+msgstr "Obraz"
+
+#: ../src/ui.c:293
+msgid "Create image object"
+msgstr "Tworzy obraz"
+
+#: ../src/ui.c:298
+#, fuzzy
+msgid "Barcode"
+msgstr "Kod paskowy"
+
+#: ../src/ui.c:300
+msgid "Create barcode object"
+msgstr "Tworzy kod paskowy"
+
+#: ../src/ui.c:305
+#, fuzzy
+msgid "Bring to front"
+msgstr "Przesun na wierzch"
+
+#: ../src/ui.c:307
+msgid "Raise object to top"
+msgstr ""
+
+#: ../src/ui.c:312
+#, fuzzy
+msgid "Send to back"
+msgstr "Przesuñ w dó³"
+
+#: ../src/ui.c:314
+msgid "Lower object to bottom"
+msgstr ""
+
+#: ../src/ui.c:319
+#, fuzzy
+msgid "Rotate left"
+msgstr "Obróæ"
+
+#: ../src/ui.c:321
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr ""
+
+#: ../src/ui.c:326
+#, fuzzy
+msgid "Rotate right"
+msgstr "Obróæ"
+
+#: ../src/ui.c:328
+msgid "Rotate object 90 degrees clockwise"
+msgstr ""
+
+#: ../src/ui.c:333
+msgid "Flip horizontally"
+msgstr ""
+
+#: ../src/ui.c:335
+msgid "Flip object horizontally"
+msgstr ""
+
+#: ../src/ui.c:340
+msgid "Flip vertically"
+msgstr ""
+
+#: ../src/ui.c:342
+msgid "Flip object vertically"
+msgstr ""
+
+#: ../src/ui.c:347
+#, fuzzy
+msgid "Align left"
+msgstr "Wyrównanie:"
+
+#: ../src/ui.c:349
+msgid "Align objects to left edges"
+msgstr ""
+
+#: ../src/ui.c:354
+msgid "Align right"
+msgstr ""
+
+#: ../src/ui.c:356
+msgid "Align objects to right edges"
+msgstr ""
+
+#: ../src/ui.c:361
+msgid "Align horizontal center"
+msgstr ""
+
+#: ../src/ui.c:363
+msgid "Align objects to horizontal centers"
+msgstr ""
+
+#: ../src/ui.c:368
+#, fuzzy
+msgid "Align tops"
+msgstr "Wyrównanie:"
+
+#: ../src/ui.c:370
+#, fuzzy
+msgid "Align objects to top edges"
+msgstr "Modyfikacja w³a¶ciwo¶ci skrzynki"
+
+#: ../src/ui.c:375
+msgid "Align bottoms"
+msgstr ""
+
+#: ../src/ui.c:377
+msgid "Align objects to bottom edges"
+msgstr ""
+
+#: ../src/ui.c:382
+msgid "Align vertical center"
+msgstr ""
+
+#: ../src/ui.c:384
+msgid "Align objects to vertical centers"
+msgstr ""
+
+#: ../src/ui.c:389
+msgid "Center horizontally"
+msgstr ""
+
+#: ../src/ui.c:391
+msgid "Center objects to horizontal label center"
+msgstr ""
+
+#: ../src/ui.c:396
+#, fuzzy
+msgid "Center vertically"
+msgstr "Ogólne"
+
+#: ../src/ui.c:398
+msgid "Center objects to vertical label center"
+msgstr ""
+
+#: ../src/ui.c:403
+#, fuzzy
+msgid "Merge properties"
+msgstr "W³a¶ciwo¶ci z³±czania"
+
+#: ../src/ui.c:405
+msgid "Edit merge properties"
+msgstr "Modyfikuje w³a¶ciwo¶ci z³±czania"
+
+#: ../src/ui.c:412
+msgid "Contents"
+msgstr ""
+
+#: ../src/ui.c:414
+#, fuzzy
+msgid "Open glabels manual"
+msgstr "Otwórz etykietê"
+
+#: ../src/ui.c:419
+msgid "About..."
+msgstr ""
+
+#: ../src/ui.c:421
+msgid "About glabels"
+msgstr ""
+
+#: ../src/ui.c:431
+msgid "Property toolbar"
+msgstr ""
+
+#: ../src/ui.c:433
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr ""
+
+#: ../src/ui.c:439
+msgid "Grid"
+msgstr ""
+
+#: ../src/ui.c:441
+msgid "Change the visibility of the grid in the current window"
+msgstr ""
+
+#: ../src/ui.c:447
+msgid "Markup"
+msgstr ""
+
+#: ../src/ui.c:449
+msgid "Change the visibility of markup lines in the current window"
+msgstr ""
+
+#: ../src/ui.c:460
+msgid "Main toolbar"
+msgstr ""
+
+#: ../src/ui.c:462
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr ""
+
+#: ../src/ui.c:468
+msgid "Drawing toolbar"
+msgstr ""
+
+#: ../src/ui.c:470
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr ""
+
+#: ../src/ui-commands.c:1100
+msgid "Glabels includes contributions from:"
+msgstr ""
+
+#: ../src/ui-commands.c:1106
+msgid "See the file AUTHORS for additional credits,"
+msgstr ""
+
+#: ../src/ui-commands.c:1107
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr ""
+
+#: ../src/ui-commands.c:1119
+msgid "A label and business card creation program.\n"
+msgstr ""
+
+#: ../src/ui-commands.c:1123
+msgid "translator-credits"
+msgstr ""
+
+#: ../src/ui-commands.c:1126
+#, fuzzy
+msgid ""
+"gLabels is free software: you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation, either version 3 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"gLabels is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+"GNU General Public License for more details.\n"
+msgstr ""
+"Program do tworzenia etykiet i wizytówek dla GNOME.\n"
+"\n"
+"Glabels jest oprogramowaniem wolnodostêpnym, mo¿na rozpowszechniaæ go lub/"
+"imodyfikowaæ na zasadach Licencji Publicznej GNU opublikowanej przez Free "
+"Software Foundation; zarówno w wersji 2 tej licencji, jak (do wyboru) i "
+"dowolnej póŒniejszej wersji.\n"
+"\n"
+"Ten program jest rozpowszechniany w nadziei u¿yteczno¶ci, lecz BEZ ¯ADNEJ "
+"GWARANCJI; nawet wynikaj±cej z RÊKOJMI lub U¯YWANIA W OKREŠLONYM CELU. "
+"Zajrzyj do Licencji Publicznej GNU aby uzyskaæ wiêcej szczegó³ów.\n"
+
+#: ../src/ui-commands.c:1153
+#, fuzzy
+msgid "glabels"
+msgstr "Etykiety"
+
+#: ../src/ui-sidebar.c:154
+#, fuzzy
+msgid "Object properties"
+msgstr "W³a¶ciwo¶ci tekstu"
+
+#. Build editor.
+#: ../src/view-barcode.c:176
+#, fuzzy
+msgid "Barcode object properties"
+msgstr "Modyfikacja w³a¶ciwo¶ci kodu paskowego"
+
+#. Build editor.
+#: ../src/view-box.c:176
+#, fuzzy
+msgid "Box object properties"
+msgstr "Modyfikacja w³a¶ciwo¶ci skrzynki"
+
+#. Build editor.
+#: ../src/view-ellipse.c:178
+#, fuzzy
+msgid "Ellipse object properties"
+msgstr "Modyfikacja w³a¶ciwo¶ci elipsy"
+
+#. Build editor.
+#: ../src/view-image.c:176
+#, fuzzy
+msgid "Image object properties"
+msgstr "Modyfikacja w³a¶ciwo¶ci obrazu"
+
+#. Build editor.
+#: ../src/view-line.c:176
+#, fuzzy
+msgid "Line object properties"
+msgstr "Modyfikacja w³a¶ciwo¶ci skrzynki"
+
+#. Build editor.
+#: ../src/view-text.c:180
+#, fuzzy
+msgid "Text object properties"
+msgstr "Modyfikacja w³a¶ciwo¶ci skrzynki"
+
+#: ../src/warning-handler.c:69
+#, fuzzy
+msgid "gLabels Error!"
+msgstr "Glabels: Preferencje"
+
+#: ../src/wdgt-media-select.c:290 ../src/wdgt-media-select.c:294
+#: ../src/wdgt-media-select.c:299 ../src/wdgt-media-select.c:308
+#: ../src/wdgt-media-select.c:311 ../src/wdgt-media-select.c:405
+#: ../src/wdgt-media-select.c:618 ../src/wdgt-media-select.c:627
+msgid "Any"
+msgstr ""
+
+#: ../src/wdgt-media-select.c:653
+#, fuzzy, c-format
+msgid "%d per sheet"
+msgstr "%d x %d (%d na arkusz)"
+
+#: ../src/wdgt-media-select.c:684
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:689
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:700 ../src/wdgt-media-select.c:714
+#, c-format
+msgid "%s %s diameter"
+msgstr ""
+
+#: ../src/wdgt-media-select.c:704 ../src/wdgt-media-select.c:718
+#, c-format
+msgid "%.5g %s diameter"
+msgstr ""
+
+#: ../src/wdgt-media-select.c:793
+#, fuzzy
+msgid "No recent templates found."
+msgstr "Nie znaleziono pliku szablonu!"
+
+#: ../src/wdgt-media-select.c:794
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr ""
+
+#: ../src/wdgt-media-select.c:874
+msgid "No match."
+msgstr ""
+
+#: ../src/wdgt-media-select.c:875
+msgid "Try selecting a different brand, page size or category."
+msgstr ""
+
+#: ../src/window.c:256
+msgid "(none) - gLabels"
+msgstr ""
+
+#: ../src/window.c:435
+msgid "(modified)"
+msgstr ""
+
+#: ../src/xml-label-04.c:75 ../src/xml-label.c:320
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Niepoprawny wêze³ g³ówny = \"%s\""
+
+#: ../src/xml-label-04.c:123 ../src/xml-label.c:403
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "niepoprawny wêze³ = \"%s\""
+
+#: ../src/xml-label.c:187 ../src/xml-label.c:225
+msgid "xmlParseFile error"
+msgstr "b³±d przetwarzania pliku xml"
+
+#: ../src/xml-label.c:262
+msgid "No document root"
+msgstr "Brak g³ównego dokumentu"
+
+#: ../src/xml-label.c:270
+msgid "Importing from glabels 0.1 format"
+msgstr ""
+
+#: ../src/xml-label.c:279
+msgid "Importing from glabels 0.4 format"
+msgstr ""
+
+#: ../src/xml-label.c:288
+#, fuzzy, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr ""
+"dokument jest niepoprawnego typu, nie odnaleziono przestrzeni nazw glabels"
+
+#: ../src/xml-label.c:357
+#, fuzzy, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "Niepoprawny wêze³ g³ówny = \"%s\""
+
+#: ../src/xml-label.c:850
+#, fuzzy, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "niepoprawny wêze³ = \"%s\""
+
+#: ../src/xml-label.c:1092 ../libglabels/xml-template.c:664
+msgid "Utf8 conversion error."
+msgstr ""
+
+#: ../src/xml-label.c:1099
+msgid "Problem saving xml file."
+msgstr "Problem podczas zapisu pliku xml."
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:109
+msgid "Other"
+msgstr ""
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:122
+#, fuzzy
+msgid "User defined"
+msgstr "Wstaw pole z³±czenia"
+
+#: ../libglabels/db.c:473
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:866
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:1450
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:1527
+#, c-format
+msgid "Generic %s full page template"
+msgstr ""
+
+#: ../libglabels/xml-template.c:221
+msgid "Missing name or brand/part attributes."
+msgstr ""
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:238
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr ""
+
+#: ../libglabels/xml-template.c:250
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr ""
+
+#: ../libglabels/xml-template.c:609
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+
+#: ../libglabels/xml-template.c:619
+msgid "Name attribute also missing."
+msgstr ""
+
+#.
+#. * Local Variables:       -- emacs
+#. * mode: C                -- emacs
+#. * c-basic-offset: 8      -- emacs
+#. * tab-width: 8           -- emacs
+#. * indent-tabs-mode: nil  -- emacs
+#. * End:                   -- emacs
+#.
+#: ../data/builder/merge-properties-dialog.builder.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr ""
+
+#: ../data/builder/merge-properties-dialog.builder.h:2
+#, fuzzy
+msgid "<b>Source</b>"
+msgstr "¬ród³o"
+
+#: ../data/builder/merge-properties-dialog.builder.h:3
+msgid "Format:"
+msgstr "Format:"
+
+#: ../data/builder/merge-properties-dialog.builder.h:4
+msgid "Location:"
+msgstr "Po³o¿enie:"
+
+#: ../data/builder/merge-properties-dialog.builder.h:5
+#, fuzzy
+msgid "Select all"
+msgstr "O_dznacz wszystko"
+
+#: ../data/builder/merge-properties-dialog.builder.h:6
+#, fuzzy
+msgid "Unselect all"
+msgstr "O_dznacz wszystko"
+
+#: ../data/builder/object-editor.builder.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/builder/object-editor.builder.h:3
+msgid "00000000000 00000"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:5
+#: ../data/builder/prefs-dialog.builder.h:7
+msgid "Alignment:"
+msgstr "Wyrównanie:"
+
+#: ../data/builder/object-editor.builder.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:7
+msgid "Angle:"
+msgstr "K±t"
+
+#: ../data/builder/object-editor.builder.h:8
+msgid "Checksum"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:9
+#: ../data/builder/prefs-dialog.builder.h:8
+msgid "Color:"
+msgstr "Kolor:"
+
+#: ../data/builder/object-editor.builder.h:11
+msgid "Enable shadow"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:12
+#, fuzzy
+msgid "Family:"
+msgstr "Wype³nienie"
+
+#: ../data/builder/object-editor.builder.h:13
+#, fuzzy
+msgid "File:"
+msgstr "Wype³nienie"
+
+#: ../data/builder/object-editor.builder.h:14
+msgid "Fill"
+msgstr "Wype³nienie"
+
+#: ../data/builder/object-editor.builder.h:15
+#: ../data/builder/template-designer.builder.h:30
+msgid "Height:"
+msgstr "Wysoko¶æ:"
+
+#: ../data/builder/object-editor.builder.h:17
+msgid "Insert merge field"
+msgstr "Wstaw pole z³±czenia"
+
+#: ../data/builder/object-editor.builder.h:18
+msgid "Key:"
+msgstr "Klucz:"
+
+#: ../data/builder/object-editor.builder.h:19
+msgid "Length:"
+msgstr "D³ugo¶æ:"
+
+#: ../data/builder/object-editor.builder.h:21
+#: ../data/builder/prefs-dialog.builder.h:12
+msgid "Line Spacing:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:22
+msgid "Literal:"
+msgstr "Litera³:"
+
+#: ../data/builder/object-editor.builder.h:23
+msgid "Opacity:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:24
+msgid "Position"
+msgstr "Pozycja"
+
+#: ../data/builder/object-editor.builder.h:25
+msgid "Reset image size"
+msgstr "Wyzeruj rozmiar obrazu"
+
+#: ../data/builder/object-editor.builder.h:26
+msgid "Shadow"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:27
+msgid "Size"
+msgstr "Rozmiar"
+
+#: ../data/builder/object-editor.builder.h:28
+#, fuzzy
+msgid "Size:"
+msgstr "Rozmiar"
+
+#: ../data/builder/object-editor.builder.h:29
+#, fuzzy
+msgid "Style"
+msgstr "Styl"
+
+#: ../data/builder/object-editor.builder.h:30
+#, fuzzy
+msgid "Style:"
+msgstr "Styl"
+
+#: ../data/builder/object-editor.builder.h:32
+#: ../data/builder/prefs-dialog.builder.h:20
+#: ../data/builder/template-designer.builder.h:61
+msgid "Width:"
+msgstr "Szeroko¶æ:"
+
+#: ../data/builder/object-editor.builder.h:33
+msgid "X Offset:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:34
+msgid "X:"
+msgstr "X:"
+
+#: ../data/builder/object-editor.builder.h:35
+msgid "Y Offset:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:36
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/builder/object-editor.builder.h:37
+msgid "degrees"
+msgstr "stopni(e)"
+
+#: ../data/builder/object-editor.builder.h:38
+msgid "dialog1"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:39
+msgid "digits:"
+msgstr ""
+
+#: ../data/builder/object-editor.builder.h:40
+#, fuzzy
+msgid "format:"
+msgstr "Format:"
+
+#: ../data/builder/prefs-dialog.builder.h:1
+msgid "   "
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:9
+msgid "Font:"
+msgstr "Czcionka:"
+
+#: ../data/builder/prefs-dialog.builder.h:10
+msgid "ISO A4"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:11
+msgid "Inches"
+msgstr "Cale"
+
+#: ../data/builder/prefs-dialog.builder.h:13
+#, fuzzy
+msgid "Locale"
+msgstr "Skala"
+
+#: ../data/builder/prefs-dialog.builder.h:14
+msgid "Millimeters"
+msgstr "Milimetry"
+
+#: ../data/builder/prefs-dialog.builder.h:15
+msgid "Object defaults"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:16
+msgid "Points"
+msgstr "Punkty"
+
+#: ../data/builder/prefs-dialog.builder.h:17
+msgid "Select default properties for new objects."
+msgstr ""
+
+#: ../data/builder/prefs-dialog.builder.h:18
+msgid "Select locale specific behavior."
+msgstr ""
+
+#. Most popular (at top of list)
+#: ../data/builder/prefs-dialog.builder.h:19 ../templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:1
+msgid "Bold"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:2
+#, fuzzy
+msgid "Center align"
+msgstr "Ogólne"
+
+#: ../data/builder/property-bar.builder.h:4
+#, fuzzy
+msgid "Font size"
+msgstr "Nie zapisuj"
+
+#: ../data/builder/property-bar.builder.h:5
+msgid "Italic"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:6
+msgid "Left align"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:8
+msgid "Line width"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:9
+msgid "Right align"
+msgstr ""
+
+#: ../data/builder/property-bar.builder.h:10
+msgid "Text color"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:2
+msgid "(e.g., 8163A)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:4
+msgid "1. Outer radius:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:5
+msgid "1. Radius:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:6
+#, fuzzy
+msgid "1. Width:"
+msgstr "Szeroko¶æ:"
+
+#: ../data/builder/template-designer.builder.h:7
+#, fuzzy
+msgid "2. Height:"
+msgstr "Wysoko¶æ:"
+
+#: ../data/builder/template-designer.builder.h:8
+msgid "2. Inner radius:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:10
+msgid "3. Clipping width:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:11
+msgid "3. Margin"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:12
+msgid "3. Round (radius of corner):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:13
+msgid "4. Clipping height:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:17
+msgid "6. Margin"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:18
+msgid "Brand/Manufacturer:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:27
+msgid "Description:"
+msgstr "Opis:"
+
+#: ../data/builder/template-designer.builder.h:28
+msgid "Distance from left edge (x0):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:29
+msgid "Distance from top edge (y0):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:31
+msgid "Horizontal pitch (dx):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:37
+#, fuzzy
+msgid "Layout #1"
+msgstr "Wygl±d:"
+
+#: ../data/builder/template-designer.builder.h:38
+#, fuzzy
+msgid "Layout #2"
+msgstr "Wygl±d:"
+
+#: ../data/builder/template-designer.builder.h:39
+msgid "Number across (nx):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:40
+msgid "Number down (ny):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:41
+msgid "Number of layouts:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:42
+msgid "Page size:"
+msgstr "Rozmiar strony:"
+
+#: ../data/builder/template-designer.builder.h:43
+msgid "Part #:"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:45
+msgid "Please enter the following layout information."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:49
+msgid "Please select the page size of the template stationery."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:50
+#, fuzzy
+msgid "Print test sheet"
+msgstr "na pierwszym arkuszu"
+
+#: ../data/builder/template-designer.builder.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:52
+msgid "Round"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:57
+msgid "Vertical pitch (dy):"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:62
+msgid "cd_size_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:63
+msgid "finish_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:65
+msgid "layout_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:66
+msgid "name_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:67
+msgid "nlayouts_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:68
+msgid "pg_size_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:69
+msgid "rect_size_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:70
+msgid "round_size_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:71
+msgid "shape_page"
+msgstr ""
+
+#: ../data/builder/template-designer.builder.h:72
+msgid "start_page"
+msgstr ""
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:1
+#, fuzzy
+msgid "<b>Copies</b>"
+msgstr "Kopie"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:2
+msgid "<b>Merge Control</b>"
+msgstr ""
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:3
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "Opcje"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:4
+msgid "Collate"
+msgstr "Uk³adanie"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:5
+msgid "Copies:"
+msgstr "Kopie:"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:7
+msgid "Sheets:"
+msgstr "Arkusze:"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:8
+msgid "Start on label"
+msgstr "Rozpocznij od etykiety"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:9
+msgid "from:"
+msgstr "od:"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:10
+msgid "on 1st sheet"
+msgstr "na pierwszym arkuszu"
+
+#: ../data/builder/print-op-dialog-custom-widget.builder.h:14
+msgid "to:"
+msgstr "do:"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr ""
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr ""
+
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+#, fuzzy
+msgid "gLabels Project File"
+msgstr "W³a¶ciwo¶ci tekstu"
+
+#. Other ISO A series sizes
+#: ../templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr ""
+
+#. ISO B series sizes
+#: ../templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr ""
+
+#: ../templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr ""
+
+#. Other US paper sizes
+#: ../templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr ""
+
+#: ../templates/categories.xml.h:1
+msgid "Any card"
+msgstr ""
+
+#: ../templates/categories.xml.h:2
+#, fuzzy
+msgid "Any label"
+msgstr "Otwórz etykietê"
+
+#: ../templates/categories.xml.h:3
+msgid "Business cards"
+msgstr ""
+
+#: ../templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr ""
+
+#: ../templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr ""
+
+#: ../templates/categories.xml.h:6
+#, fuzzy
+msgid "Rectangular labels"
+msgstr "Etykiety"
+
+#: ../templates/categories.xml.h:7
+#, fuzzy
+msgid "Round labels"
+msgstr "Rozpocznij od etykiety"
+
+#: ../templates/categories.xml.h:8
+#, fuzzy
+msgid "Square labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:2
+#: ../templates/avery-iso-templates.xml.h:2
+#: ../templates/dymo-other-templates.xml.h:4
+#: ../templates/misc-iso-templates.xml.h:2
+#: ../templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr ""
+
+#. ===================================================================
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:4
+#: ../templates/avery-iso-templates.xml.h:8
+#: ../templates/misc-us-templates.xml.h:4
+#: ../templates/misc-iso-templates.xml.h:12
+#: ../templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr ""
+
+#. ===================================================================
+#. ===============================================================
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:6
+#: ../templates/avery-iso-templates.xml.h:14
+#: ../templates/misc-us-templates.xml.h:8
+#: ../templates/misc-iso-templates.xml.h:16
+#: ../templates/zweckform-iso-templates.xml.h:8
+#, fuzzy
+msgid "CD/DVD Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:10
+#, fuzzy
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:12
+#: ../templates/avery-iso-templates.xml.h:16
+msgid "Diskette Labels"
+msgstr ""
+
+#. the LSK labels can be torn in half down the center
+#: ../templates/avery-us-templates.xml.h:14
+#, fuzzy
+msgid "Divider Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:16
+#, fuzzy
+msgid "Filing Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:20
+#, fuzzy
+msgid "ID Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:24
+#, fuzzy
+msgid "Large Round Labels"
+msgstr "Rozpocznij od etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:30
+#: ../templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:32
+#: ../templates/misc-us-templates.xml.h:28
+#, fuzzy
+msgid "Round Labels"
+msgstr "Rozpocznij od etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:36
+#, fuzzy
+msgid "Small Round Labels"
+msgstr "Rozpocznij od etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:38
+#, fuzzy
+msgid "Square Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:6
+#, fuzzy
+msgid "Allround labels"
+msgstr "Rozpocznij od etykiety"
+
+#. ===============================================================
+#: ../templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr ""
+
+#. ===============================================================
+#: ../templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr ""
+
+#. ===============================================================
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:20
+#: ../templates/misc-us-templates.xml.h:18
+#: ../templates/misc-iso-templates.xml.h:36
+#: ../templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:22
+#, fuzzy
+msgid "Mailing labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:26
+#, fuzzy
+msgid "Mini Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/avery-iso-templates.xml.h:28
+#, fuzzy
+msgid "Shipping labels"
+msgstr "Otwórz etykietê"
+
+#. ===================================================================
+#: ../templates/avery-other-templates.xml.h:2
+#, fuzzy
+msgid "File Folder Labels"
+msgstr "Etykiety"
+
+#: ../templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr ""
+
+#: ../templates/brother-other-templates.xml.h:2
+#, fuzzy
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Otwórz etykietê"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:10
+#, fuzzy
+msgid "Large Address Labels"
+msgstr "Rozpocznij od etykiety"
+
+#. ===================================================================
+#: ../templates/dymo-other-templates.xml.h:14
+#, fuzzy
+msgid "Shipping Address Labels"
+msgstr "Otwórz etykietê"
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:12
+#: ../templates/misc-iso-templates.xml.h:18
+msgid "CD/DVD Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:14
+#, fuzzy
+msgid "Cassette Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:16
+#, fuzzy
+msgid "DLT Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:20
+msgid "Microtube labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:22
+msgid "Mini-CD Labels"
+msgstr ""
+
+#: ../templates/misc-us-templates.xml.h:23
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr ""
+
+#: ../templates/misc-us-templates.xml.h:24
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:26
+#: ../templates/misc-iso-templates.xml.h:42
+msgid "PRO CD Labels 2-up (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-us-templates.xml.h:30
+msgid "Slimline CD Case (rightside up)"
+msgstr ""
+
+#: ../templates/misc-us-templates.xml.h:31
+msgid "Slimline CD Case (upside down)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:4
+#: ../templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:14
+#, fuzzy
+msgid "CD Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:30
+#, fuzzy
+msgid "General Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:44
+#: ../templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/misc-other-templates.xml.h:2
+#, fuzzy
+msgid "Multi-Purpose Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:12
+#, fuzzy
+msgid "File Back Labels"
+msgstr "Etykiety"
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr ""
+
+#~ msgid "print this message"
+#~ msgstr "wy¶wietla ten komunikat"
+
+#~ msgid "print the version of glabels-batch being used"
+#~ msgstr "wy¶wietla aktualnie u¿ywan± wersjê glabel-batch"
+
+#~ msgid "[OPTION...] GLABELS_FILE..."
+#~ msgstr "[OPCJA...] PLIK_GLABELS..."
+
+#~ msgid "missing glabels file\n"
+#~ msgstr "brak pliku glabels\n"
+
+#~ msgid "Open"
+#~ msgstr "Otwórz"
+
+#, fuzzy
+#~ msgid "_Delete"
+#~ msgstr "Usuñ"
+
+#, fuzzy
+#~ msgid "P_rinter"
+#~ msgstr "Wydrukuj"
+
+#~ msgid "Document merge control"
+#~ msgstr "Kontrola z³±czania dokumentów"
+
+#~ msgid "Print preview"
+#~ msgstr "Podgl±d wydruku"
+
+#~ msgid "Label size:"
+#~ msgstr "Rozmiar etykiety:"
+
+#~ msgid "Layout:"
+#~ msgstr "Wygl±d:"
+
+#~ msgid "%d x %d  (%d per sheet)"
+#~ msgstr "%d x %d (%d na arkusz)"
+
+#, fuzzy
+#~ msgid "custom"
+#~ msgstr "W³asny klucz pola"
+
+#, fuzzy
+#~ msgid "magenta"
+#~ msgstr "Obraz"
+
+#, fuzzy
+#~ msgid "No paper files found!"
+#~ msgstr "Nie znaleziono pliku szablonu!"
+
+#, fuzzy
+#~ msgid "Customize"
+#~ msgstr "W³asny klucz pola"
+
+#, fuzzy
+#~ msgid "Font name"
+#~ msgstr "Nie zapisuj"
+
+#, fuzzy
+#~ msgid "Font selector"
+#~ msgstr "Usuwa wszelkie zaznaczenia"
+
+#, fuzzy
+#~ msgid "New"
+#~ msgstr "_Nowa"
+
+#, fuzzy
+#~ msgid "Object property editor"
+#~ msgstr "W³a¶ciwo¶ci tekstu"
+
+#, fuzzy
+#~ msgid "Pr_eferences..."
+#~ msgstr "Glabels: Preferencje"
+
+#, fuzzy
+#~ msgid "Properties"
+#~ msgstr "W³a¶ciwo¶ci tekstu"
+
+#, fuzzy
+#~ msgid "Save"
+#~ msgstr "Zapisz jako"
+
+#~ msgid "Save As"
+#~ msgstr "Zapisz jako"
+
+#, fuzzy
+#~ msgid "Select _All"
+#~ msgstr "O_dznacz wszystko"
+
+#, fuzzy
+#~ msgid "U_n-select All"
+#~ msgstr "O_dznacz wszystko"
+
+#, fuzzy
+#~ msgid "_Merge Properties..."
+#~ msgstr "W³a¶ciwo¶ci z³±czania"
+
+#, fuzzy
+#~ msgid "Object _Properties..."
+#~ msgstr "W³a¶ciwo¶ci tekstu"
+
+#~ msgid "Display units"
+#~ msgstr "Jednostki wy¶wietlania"
+
+#~ msgid "Default page size"
+#~ msgstr "Domy¶lny rozmiar strony"
+
+#~ msgid "Outline"
+#~ msgstr "Ramka"
+
+#~ msgid "Edit line object properties"
+#~ msgstr "Modyfikacja w³a¶ciwo¶ci linii"
+
+#~ msgid "Edit text object properties"
+#~ msgstr "Modyfikacja w³a¶ciowo¶ci tekstu"
+
+#~ msgid "Maintain current aspect ratio"
+#~ msgstr "Utrzymywanie aktualnych proporcji"
+
+#, fuzzy
+#~ msgid "Open %s"
+#~ msgstr "Otwórz"
+
+#~ msgid "Revert to saved copy of %s?"
+#~ msgstr "Przywróciæ zapisan± kopiê pliku %s?"
+
+#~ msgid "Unknown media type. Using default."
+#~ msgstr "Nieznany typ no¶nika. U¿yto warto¶ci domy¶lnych."
+
+#~ msgid ""
+#~ "``%s'' has been modified.\n"
+#~ "\n"
+#~ "Do you wish to save it?"
+#~ msgstr ""
+#~ "Plik \"%s\" zosta³ zmodyfikowany.\n"
+#~ "\n"
+#~ "Czy chcesz go zapisaæ?"
+
+#~ msgid "Close / Save label as"
+#~ msgstr "Zamyka / Zapisuje etykietê jako"
+
+#~ msgid "Label no longer valid!"
+#~ msgstr "Etykieta nie jest ju¿ poprawna!"
+
+#~ msgid "Error writing file"
+#~ msgstr "B³±d podczas zapisu pliku"
+
+#~ msgid "Edit properties..."
+#~ msgstr "Modyfikuj w³a¶ciwo¶ci..."
+
+#~ msgid "Appearance"
+#~ msgstr "Wygl±d"
+
+#~ msgid "Position/Size"
+#~ msgstr "Pozycja/Rozmiar"
+
+#~ msgid "Image format not currently supported"
+#~ msgstr "Format obrazu aktualnie nie jest obs³ugiwany"
+
+#~ msgid "Show text with barcode"
+#~ msgstr "Wy¶wietlanie tekstu z kodem paskowym"
+
+#~ msgid "Column"
+#~ msgstr "Kolumna"
+
+#~ msgid "Sample data"
+#~ msgstr "Próbne dane"
+
+#~ msgid "Make a new, empty label"
+#~ msgstr "Tworzy now±, pust± etykietê"
+
+#~ msgid "  New   "
+#~ msgstr "  Nowa  "
+
+#~ msgid "New Label/Card"
+#~ msgstr "Nowa Etykieta/Karta"
+
+#~ msgid "  Open  "
+#~ msgstr "  Otwórz  "
+
+#~ msgid "  Save  "
+#~ msgstr "  Zapisz  "
+
+#~ msgid " Print  "
+#~ msgstr " Wydrukuj  "
+
+#~ msgid "Function is not implemented!"
+#~ msgstr "Funkcja nie jest zaimplementowana!"
diff --git a/po/pt.po b/po/pt.po
new file mode 100644 (file)
index 0000000..0fcc7b8
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,2741 @@
+# Portuguese translation of Glabels.
+# Copyright © 2010 Glabels
+# Filipe Roque <fliproque@gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels 1.91.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-04 12:55+0100\n"
+"PO-Revision-Date: 2010-03-19 02:02+0000\n"
+"Last-Translator: Filipe Roque <fliproque@gmail.com>\n"
+"Language-Team: Portuguese <>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/glabels.c:75 ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[FICHEIRO...]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- Criador de etiquetas gLabels"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "define o nome do ficheiro de saída (padrão=\"output.ps\")"
+
+#: ../src/glabels-batch.c:54 ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "nome do ficheiro"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "número de páginas (padrão=1)"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "páginas"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "número de cópias (padrão=1)"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "cópias"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "primeira etiqueta na primeira página (padrão=1)"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "primeiro"
+
+#: ../src/glabels-batch.c:62 ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "imprimir contornos (para testar alinhamento da impressora)"
+
+#: ../src/glabels-batch.c:64 ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "imprimir ao contrário (como uma imagem de espelho)"
+
+#: ../src/glabels-batch.c:66 ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "imprimir marcas de cortes"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "introduza ficheiro para fusão"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "- processamento em lote de ficheiros gLabels"
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "não foi possível fundir com o ficheiro gLabels %s\n"
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "impossível abrir o ficheiro gLabels %s\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(nenhum) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(modificado)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "_Seleccionar Modo"
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Texto"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "_Linha"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "_Caixa"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_Elipse"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "_Imagem"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "_Código de barras"
+
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "Propriedades de _Fusão"
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "_Propriedades de Objecto"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "Trazer para a _Frente"
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "Enviar para _Trás"
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "Girar para a_Esquerda"
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "Girar para a _Direita"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "Inverter _Horizontalmente"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "Inverter _Verticalmente"
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "_Esquerdas"
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "_Direitas"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "_Centros"
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "_Topos"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "Bases"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "Centros"
+
+#: ../src/stock.c:93 ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "Ce_ntro da Etiqueta"
+
+#: ../src/stock.c:95 ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "Encher cor"
+
+#: ../src/stock.c:96 ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Cor da linha"
+
+#: ../src/stock.c:97 ../src/stock.c:99
+msgid "Linked"
+msgstr "Ligado"
+
+#: ../src/stock.c:98 ../src/stock.c:100
+msgid "Not Linked"
+msgstr "Não ligado"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Ficheiro"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "Abir _Ficheiros Recentes"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Ver"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "Personalizar barra de ferramentas principal"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "Personalizar barra de ferramentas de desenho"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Personalizar propriedades da barras de ferramentas"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "_Objectos"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Criar"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "_Ordem"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "_Girar/Inverter"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "Alinhar na _Horizontal"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "Alinhar na _Vertical"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "A_juda"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Menu de contexto"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Novo"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Cria um novo ficheiro"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Abrir..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Abrir um ficheiro"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Guardar"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Guarda o ficheiro actual"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "Guardar _como..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Guarda o ficheiro actual com um nome diferente"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "Im_primir..."
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Imprime o ficheiro actual"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Propriedades..."
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Editar propriedades do documento"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "_Editor de Modelos..."
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Cria um novo modelo personalizado"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "_Fechar"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Fechar o ficheiro actual"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "_Sair"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Sai do programa"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Cortar"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Corta a selecção"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Copiar"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Copia a selecção"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Colar"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Cola a área de transferência"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Apagar"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Apaga os objectos seleccionados"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "Seleccionar Tudo"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Selecciona todos os objectos"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "Desmarcar Tudo"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Remover todas as selecções"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Preferências"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Configurar a aplicação"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Mais Zoom"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Aumentar ampliação"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Menos Zoom"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Diminuir amplificação"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Zoom 1:1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "Restaura escala para 100%"
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "Zoom para caber"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "Definir a escala para caber na janela"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "_Seleccionar Modo"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "Selecciona, movimenta e modifica objectos"
+
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "Texto"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Criar objecto de texto"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Caixa"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "Criar caixa/rectângulo"
+
+#: ../src/ui.c:282 ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "Linha"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "Criar linha"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "_Elipse"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "Criar elipse/círculo"
+
+#: ../src/ui.c:296 ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "Imagem"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "Criar objecto de imagem"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Código de barras"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "Criar código de barras"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "Trazer para a frente"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "Sobe objectos para o topo"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "Enviar para trás"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "Descer objecto para o fundo"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Girar para a esquerda"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr "Girar objecto 90º sentido anti-horário"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Girar para a direita"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "Girar objecto 90º sentido horário"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "Inverter horizontalmente"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "Inverter objecto horizontalmente"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "Inverter verticalmente"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "Inverter objecto verticalmente"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Alinhar à esquerda"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "Alinhar pela margem esquerda"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Alinhar à direita"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "Alinhar pela margem direita"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "Alinhar centros horizontais"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "Alinhar objectos pelos centros horizontais"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "Alinhar pelos topos"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "Alinhar objectos pela margem superior"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "Alinhar pelas bases"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "Alinhar objectos pela margem inferior"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "Alinhar centros verticais"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "Alinhar objectos pelos centros verticais"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "Centra horizontalmente"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "Centra objectos pelo centro horizontal da etiqueta"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "Centra verticalmente"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "Centra objectos pelo centro vertical da etiqueta"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "Propriedades de Fusão"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "Editar propriedades de fusão"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Manual"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "Abre o manual do gLabels"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "Acerca..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "Acerca do gLabels"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "Propriedades da barra de ferramentas"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr ""
+"Muda a visibilidade da barra de ferramentas de propriedades na janela actual"
+
+#: ../src/ui.c:444 ../src/ui.c:489 ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Mostrar dicas"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "Mostrar dicas na barra de ferramentas de propriedades"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Grelha"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr "Muda a visibilidade da grelha na janela actual"
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "Marcação"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Muda a visibilidade das linhas de marcação na janela actual"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "Barra de ferramentas principal"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Muda a visibilidade da barra de ferramentas principal na janela actual"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "Barra de ferramentas de desenho"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr ""
+"Muda a visibilidade da barra de ferramentas de desenho na janela actual"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Exibe dicas na barra de ferramentas principal"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "Exibe dicas na barra de ferramentas de desenho"
+
+#: ../src/ui-property-bar.c:1232 ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "Padrão"
+
+#: ../src/ui-property-bar.c:1239 ../src/object-editor.c:599
+msgid "No line"
+msgstr "Nenhuma linha"
+
+#: ../src/ui-property-bar.c:1247 ../src/object-editor.c:606
+msgid "No fill"
+msgstr "Sem enchimento"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Propriedades de objecto"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "gLabels inclui contribuições de:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Veja o ficheiro AUTHORS para ver créditos adicionais,"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "ou visite http://gLabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Um programa de criação de etiquetas e cartões de visita.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr "translator-credits"
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"gLabels é software livre; você pode redistribuí-lo e/ou modificá-lo \n"
+"sob os termos da Licença Pública Geral GNU conforme publicada \n"
+"pela Free Software Foundation; ou a versão 2 da Licença, ou (sob \n"
+"sua opção) qualquer versão posterior.\n"
+"\n"
+"Este programa é distribuído na esperança de que seja útil, mas SEM \n"
+"QUALQUER GARANTIA; sem mesmo as garantias implícitas de \n"
+"COMERCIALIZAÇÃO ou AJUSTES A UM PROPÓSITO PARTICULAR. Veja \n"
+"a Licença Pública Geral GNU para mais detalhes.\n"
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "gLabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Nova Etiqueta ou Cartão"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Propriedades de etiqueta"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "Todos os ficheiros"
+
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "Documentos do gLabels"
+
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "Selecção de nome do ficheiro vazia"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr ""
+"Por favor, seleccione um ficheiro ou forneça um nome de ficheiro válido"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "ficheiro inexistente"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Impossível abrir o ficheiro \"%s\""
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "Formato de ficheiro não suportado"
+
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Impossível guardar o ficheiro \"%s\""
+
+#: ../src/file.c:517 ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "Erro encontrado ao guardar. O ficheiro ainda não foi guardado."
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Guardar \"%s\" como"
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "Por favor, forneça um nome de ficheiro válido"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Sobrescrever o ficheiro \"%s\"?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "O ficheiro já existe."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Guardar modificações no documento \"%s\" antes de fechar?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "As suas modificações serão perdidas se você não as guardar."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Fechar sem guardar"
+
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "pontos"
+
+#: ../src/prefs.c:161 ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "polegadas"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "mm"
+
+#: ../src/prefs-dialog.c:162 ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "Preferências do gLabels"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "Propriedades do objecto caixa"
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "Propriedades do objecto elipse"
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "Propriedades do objecto linha"
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "Propriedades do objecto imagem"
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "Propriedades do objecto texto"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "Propriedades do objecto código de barras"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "Todos os ficheiros"
+
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "Todas as imagens"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr "Propriedades de Fusão"
+
+#: ../src/merge-properties-dialog.c:289 ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr "Seleccionar a fonte da base de dados da fusão"
+
+#: ../src/merge-properties-dialog.c:298 ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr "Não definido"
+
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "Seleccionar"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr "Registro/Campo"
+
+#: ../src/merge-properties-dialog.c:340 ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "Dados"
+
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr "Fixo"
+
+#. ===================================================================
+#: ../src/print-op.c:237 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Etiquetas"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "Criador de modelos do gLabels"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "Bem-vindo"
+
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "Nome e Descrição"
+
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "Tamanho da página"
+
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "Forma da Etiqueta ou Cartão"
+
+#: ../src/template-designer.c:637
+msgid "Label or Card Size"
+msgstr "Tamanho da Etiqueta ou Cartão"
+
+#: ../src/template-designer.c:737
+msgid "Label Size (round)"
+msgstr "Tamanho da etiqueta (redonda)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "Tamanho da etiqueta (CD/DVD)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "Número de disposições"
+
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "Disposição"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr "Desenho Completo"
+
+#: ../src/template-designer.c:1253
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+"<span foreground='red' weight='bold'>Marca e série # coincidem com um modelo "
+"existente!</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (qualquer)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (ZIP apenas)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (qualquer)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A ou UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Código 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Código 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Código 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Código 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Interleaved 2 of 5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Sem título"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "Dados do Código de Barras vazio"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Código de barras inválido"
+
+#: ../src/xml-label.c:193
+msgid "xmlParseFile error"
+msgstr "erro: xmlParseFile"
+
+#: ../src/xml-label.c:234
+msgid "xmlParseDoc error"
+msgstr "erro: xmlParseDoc"
+
+#: ../src/xml-label.c:270
+msgid "No document root"
+msgstr "Sem documento raiz"
+
+#: ../src/xml-label.c:278
+msgid "Importing from glabels 0.1 format"
+msgstr "Importando do formato do gLabels 0.1"
+
+#: ../src/xml-label.c:287
+msgid "Importing from glabels 0.4 format"
+msgstr "Importando do formato do gLabels 0.4"
+
+#: ../src/xml-label.c:296
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "Espaço de nome gLabels desconhecido -- Usando %s"
+
+#: ../src/xml-label.c:327 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Mau nó de raiz  = \"%s\""
+
+#: ../src/xml-label.c:364
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "Mau nó do documento = \"%s\""
+
+#: ../src/xml-label.c:409 ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "Mau nó = \"%s\""
+
+#: ../src/xml-label.c:851
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "Mau nó de dados  = \"%s\""
+
+#: ../src/xml-label.c:1088 ../libglabels/xml-template.c:682
+msgid "Utf8 conversion error."
+msgstr "Erro de conversão UTF8"
+
+#: ../src/xml-label.c:1095
+msgid "Problem saving xml file."
+msgstr "Problema a gravar um ficheiro xml."
+
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "Nenhum"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Ficheiro de texto separado com vírgulas (CSV)"
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "Ficheiro de texto separado com dois pontos"
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "Ficheiro de texto separado por tabulações"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Dados do Livro de Endereços padrão do Evolution"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "Dados de um ficheiro com VCards"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "Impossível construir consulta"
+
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "Impossível abrir livro de endereços."
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "Impossível listar campos disponíveis."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "Impossível obter contactos."
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "Páginas:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "de:"
+
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "para:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "Iniciar na etiqueta"
+
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr "na primeira folha"
+
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "Cópias:"
+
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "Comparar"
+
+#: ../src/wdgt-media-select.c:288 ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297 ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309 ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609 ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "Qualquer"
+
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d por página"
+
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:689 ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s diâmetro"
+
+#: ../src/wdgt-media-select.c:693 ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s diâmetro"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "Nenhum modelo recente encontrado."
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr "Tente seleccionar um modelo da página \"Procure todos os modelos\"."
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr "Sem correspondência."
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr ""
+"Tente seleccionar uma marca, tamanho de pagina ou categorias diferentes."
+
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "Personalizar"
+
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "Personalizar cor"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "Escolher cor personalizada"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "preto"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "castanho claro"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr "castanho dourado"
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "verde escuro #2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "azul-marinho"
+
+#: ../src/mygal/color-palette.c:577 ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "azul escuro"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "violeta #2"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "cinzento muito escuro"
+
+#: ../src/mygal/color-palette.c:582 ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "vermelho escuro"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "vermelho-laranja"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "dourado"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "verde escuro"
+
+#: ../src/mygal/color-palette.c:586 ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr "azul (dull)"
+
+#: ../src/mygal/color-palette.c:587 ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "azul"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr "violeta (dull)"
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "cizento escuro"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "vermelho"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "laranja"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "lima"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr "verde (dull)"
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr "azul (dull) #2"
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "azul celeste #2"
+
+#: ../src/mygal/color-palette.c:598 ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "violeta"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "cinzento"
+
+#: ../src/mygal/color-palette.c:602 ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "magenta"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "laranja brilhante"
+
+#: ../src/mygal/color-palette.c:604 ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "amarelo"
+
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "verde"
+
+#: ../src/mygal/color-palette.c:606 ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "Ciano"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "azul brilhante"
+
+#: ../src/mygal/color-palette.c:608 ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "violeta-vermelho"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "cinzento claro"
+
+#: ../src/mygal/color-palette.c:612 ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "rosa"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "laranja claro"
+
+#: ../src/mygal/color-palette.c:614 ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "amarelo claro"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "verde claro"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "ciano claro"
+
+#: ../src/mygal/color-palette.c:617 ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "azul claro"
+
+#: ../src/mygal/color-palette.c:618 ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "violeta claro"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "branco"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr "azul-violeta"
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "violeta escuro"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "azul celeste"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "Erro fatal do gLabels"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "Erro do gLabels"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "Outro"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Utilizador definido"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Incapaz de localizar definições de tamanhos de papel. Libglabels pode não "
+"estar instalado correctamente!"
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Incapaz de localizar definições de categoria. Libglabels pode não estar "
+"instalado correctamente!"
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"Incapaz de localizar modelos. Libglabels pode não estar instalado "
+"correctamente!"
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "Modelo completo %s genérico"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "Falta atributos de nome ou marca/série"
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr ""
+"Tamanho de página identificador \"%s\" desconhecido, tentando como nome"
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Tamanho de página identificador ou nome \"%s\" desconhecido"
+
+#: ../libglabels/xml-template.c:627
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+"Falta atributo \"marca\" ou \"série\" requerido, tentando nome obsoleto."
+
+#: ../libglabels/xml-template.c:637
+msgid "Name attribute also missing."
+msgstr "Atributo nome também falta."
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>Selecção/previsão de registro</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Fonte</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Formato:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Localização:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Seleccionar Tudo"
+
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "Desmarcar Tudo"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialog1"
+
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Orientação da etiqueta</b>"
+
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Tipo de media</b>"
+
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+"<span weight=\"bold\" size=\"larger\">propriedades do objecto Xxx</span>"
+
+#: ../data/glade/object-editor.glade.h:5 ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Alinhamento:"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "Permitir que fusão encolha o texto automaticamente"
+
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Ângulo:"
+
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Soma de verificação"
+
+#: ../data/glade/object-editor.glade.h:9 ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Cor:"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Activar sombra"
+
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Família:"
+
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "Ficheiro:"
+
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr "Preencher"
+
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Altura:"
+
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "Inserir campo de fusão"
+
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr "Chave:"
+
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Comprimento:"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "Espaçamento de linhas:"
+
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "Literal:"
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Opacidade:"
+
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "Posição"
+
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Redefinir tamanho da imagem"
+
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Seleccionar um ficheiro"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Sombra"
+
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "Tamanho"
+
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Tamanho:"
+
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "Estilo:"
+
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Estilo:"
+
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Largura:"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "Deslocamento X:"
+
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Deslocamento Y:"
+
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "graus"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr "dígitos:"
+
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "Formato:"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "..."
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Tamanho de página padrão</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Preencher</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Linha</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Texto</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Unidades</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Fonte:"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Polegadas"
+
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "Local"
+
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Milímetros"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Padrões do objecto"
+
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Pontos"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "Seleccione as propriedades padrões para novos objectos."
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "Seleccione comportamento específico do local."
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "US Letter"
+
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Opções</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>Controlo de Impressão (Fusão)</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>Controlo de Impressão (Simples)</b>"
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Negrito"
+
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Alinhar pelos centros"
+
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Família de fontes"
+
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Tamanho de fonte"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Itálico"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Alinhamento à esquerda"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Espessura da linha"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Alinhamento à direita"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Cor do texto"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "Cor do texto"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(ex., \"Etiquetas de correio,\" \"Cartões de visita,\" ...)"
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(ex., 8163A)"
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(ex., Avery, Acme, ...)"
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Raio exterior:"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Raio"
+
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Largura:"
+
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Altura:"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Raio interior"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Desperdício (impressão sobreposta permitida)"
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. Largura de corte:"
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Margem"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Arredondar (raio do canto):"
+
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. Altura de corte:"
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. Desperdício horizontal (impressão sobreposta permitida):"
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. Desperdício vertical (impressão sobreposta permitida):"
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "5. Desperdício (impressão sobreposta permitida):"
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Margem"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "Marca/Fabricante:"
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (incluindo Mini-CD)"
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Parabéns!\n"
+"\n"
+"Você completou o criador de modelos do gLabels.\n"
+"Se desejar aceitar e guardar o seu desenho, carregue \"Aplicar\"\n"
+"\n"
+"Caso contrário, você poderá carregar \"Cancelar\" para abandonar este "
+"desenho\n"
+"ou \"Retroceder\" para continuar a editar."
+
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Descrição:"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "Distância da margem esquerda (x0):"
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "Distância da margem superior (y0):"
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "Espaçamento horizontal (dx):"
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"Quantas disposições o seu modelo vai conter?\n"
+"\n"
+"Uma disposição é um conjunto de etiquetas ou cartões que podem ser "
+"arranjados numa grelha simples.\n"
+"Muitos modelos só precisam de uma disposição, como no primeiro exemplo.\n"
+"O segundo exemplo ilustra quando duas disposições são necessárias."
+
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Disposição #1"
+
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Disposição #2"
+
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "Número de colunas (nx):"
+
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "Número de linhas (ny):"
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Número de disposições:"
+
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Tamanho da página:"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "Série #:"
+
+#: ../data/glade/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+"Por favor introduza a seguinte informação identificativa acerca do modelo."
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "Por favor introduza a seguinte informação da disposição."
+
+#: ../data/glade/template-designer.glade.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+"Por favor introduza a seguinte informação dos parâmetros de tamanho de uma "
+"etiqueta simples no seu modelo"
+
+#: ../data/glade/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"Por favor introduza a seguinte informação dos parâmetros de tamanho de uma "
+"etiqueta simples ou cartão no seu modelo"
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "Por favor seleccione a forma básica das suas etiquetas ou cartões."
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "Por favor seleccione o tamanho da página do modelo"
+
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "Imprimir folha de teste"
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Rectangular ou quadrado (pode ter cantos redondos)"
+
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "Redondo"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr "Modelos que precisam de duas disposições."
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr "Modelos que precisam apenas de uma disposição."
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "Espaçamento vertical (dy):"
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Bem-vindo ao criador de modelos do gLabels.\n"
+"\n"
+"Este diálogo o ajudará na criação de um modelo personalizado."
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "cd_size_page"
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "finish_page"
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "layout_page"
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr "name_page"
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "nlayouts_page"
+
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "pg_size_page"
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "rect_size_page"
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "round_size_page"
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "shape_page"
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr "start_page"
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "Série:"
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Categoria:"
+
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Modelos recentes"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Procura em todos os modelos"
+
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "Girar"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "US Executive"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "US Legal"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "Qualquer cartão"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "Qualquer etiqueta"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Cartões de visita"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD ou outros"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "Produtos para correio/expedição"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Etiquetas rectangulares"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Etiquetas arredondadas"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "Etiquetas quadradas"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Etiquetas de endereços"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Etiquetas de endereços"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr "Etiquetas redondas"
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Cartões de visita"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "Livro de CD"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "Folheto de CD "
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "Etiquetas de CD/DVD"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr "Etiquetas de disquete"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "Etiquetas de disquete"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:20
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "Etiquetas de correio"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "Etiquetas de correio"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "Mini etiquetas de correio"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+msgid "Mini Labels"
+msgstr "Mini etiquetas"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "Etiquetas de expedição"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "Etiquetas para pastas de papéis"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "Etiquetas de CD/DVD (Etiquetas de disco)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Etiquetas de CD/DVD (Etiquetas de lombada)"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "Etiquetas de divisão"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "Etiquetas de enchimento"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "Etiquetas de folha inteira"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "Etiquetas de identificação"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "Cartões de índice"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Etiquetas grandes arredondadas"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "Etiquetas de crachá "
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "Postais"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "Etiquetas de endereço de retorno"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Round Labels"
+msgstr "Etiquetas arredondadas"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "Etiquetas de expedição"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Etiquetas pequenas arredondadas"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "Etiquetas quadradas"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr "Cartões tenda"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "Etiquetas de cassete de vídeo (face)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "Etiquetas de cassete de vídeo (lombada)"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "Etiquetas genéricas 17mm x 54mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Etiquetas de expedição 62mm x 100mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "Etiquetas padrão de endereços 29mm x 90mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "Disquete 3,5 polegadas"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "Pasta de ficheiros"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr "Pasta"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "Etiquetas grandes de endereços"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "Etiquetas de endereços de expedição"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "Etiquetas redondas"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "Etiquetas de dossier"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr "Etiquetas de dossier (grande)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr "Etiquetas de dossier (pequeno)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "Etiquetas de CD"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr "Etiquetas de CD/DVD (apenas face)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "Etiquetas de CD/DVD - formato padrão (apenas face)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "Etiquetas de disquete (apenas face)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "Autocolantes EPSON Photo Stickers 16"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Etiquetas"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "Autocolantes de íman de frigorífico"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Etiquetas genéricas"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "Etiquetas Inkjet/Laser 70x37mm"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr "Etiquetas de correio de 2 colunas"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr "Etiquetas de correio de 3 colunas"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "Etiquetas PRO CD 2-up (apenas face)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Etiquetas rectangulares"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Universal Labels"
+msgstr "Etiquetas Universais"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:48
+msgid "Video Labels (face only)"
+msgstr "Etiquetas de vídeo (apenas face)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "Etiquetas genéricas"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "Mini CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "Modelo de rectângulos de CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "Etiquetas CD/DVD (apenas face)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "Etiquetas de cassete"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "Etiquetas DLT"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:18
+msgid "Jewel Case Booklet"
+msgstr "Livro de CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Microtube labels"
+msgstr "Etiquetas Microtube"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "Mini-CD Labels"
+msgstr "Etiquetas Mini-CD"
+
+#: ../data/templates/misc-us-templates.xml.h:25
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "Etiquetas PRO CD 2-up (lomba do CD apenas)"
+
+#: ../data/templates/misc-us-templates.xml.h:26
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "Etiquetas PRO CD 2-up (face apenas)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:32
+msgid "Slimline CD Case (rightside up)"
+msgstr "Caixa Slimline CD (lado direito para cima)"
+
+#: ../data/templates/misc-us-templates.xml.h:33
+msgid "Slimline CD Case (upside down)"
+msgstr "Caixa Slimline CD (invertido)"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Etiquetas de correcção e cobrir"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr "Etiquetas de ficheiro"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr "Etiquetas de dossier"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "Etiquetas genéricas Stick+Lift"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "Etiquetas QSL-Karten 70mm x 50,8mm"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr "Etiquetas de cópia rectangulares"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "Etiquetas de vídeo (traseira)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Criar etiquetas, cartões de visita e capas de media"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "Editor de etiquetas gLabels"
+
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "Propriedades de ficheiro gLabels"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opção `%s' é ambígua\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opção `--%s' não permite argumento\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opção `%c%s' não permite argumento\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opção `%s' requer um argumento\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opção não reconhecida `--%s'\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, 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.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opção ilegal -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opção inválida -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opção requer um argumento -- %c\n"
+
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644 (file)
index 0000000..11eedec
--- /dev/null
@@ -0,0 +1,2624 @@
+# Brazilian Portuguese translation of Glabels.
+# Copyright (C) 2001 Jim Evins <evins@snaught.com>
+# Paulo R. Ormenese <pormenese@uol.com.br>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels 1.91.0\n"
+"POT-Creation-Date: 2004-08-08 00:43-0400\n"
+"PO-Revision-Date: 2003-01-03 23:15-0300\n"
+"Last-Translator: Paulo R. Ormenese <pormenese@uol.com.br>\n"
+"Language-Team: Brazilian portuguese <>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/glabels.c:55
+msgid "Show view debugging messages."
+msgstr "Exibe mensagens de depuração de visualização."
+
+#: src/glabels.c:58
+msgid "Show item debugging messages."
+msgstr "Exibe mensagens de depuração de item."
+
+#: src/glabels.c:61
+msgid "Show printing debugging messages."
+msgstr "Exibe mensagens de depuração de impressão."
+
+#: src/glabels.c:64
+msgid "Show prefs debugging messages."
+msgstr "Exibe mensagens de depuração de preferências."
+
+#: src/glabels.c:67
+msgid "Show file debugging messages."
+msgstr "Exibe mensagens de depuração de arquivo."
+
+#: src/glabels.c:70
+msgid "Show document debugging messages."
+msgstr "Exibe mensagens de depuração de documeto."
+
+#: src/glabels.c:73
+msgid "Show template debugging messages."
+msgstr "Exibe mensagens de depuração de modelo."
+
+#: src/glabels.c:76
+#, fuzzy
+msgid "Show paper debugging messages."
+msgstr "Exibe mensagens de depuração de preferências."
+
+#: src/glabels.c:79
+msgid "Show xml debugging messages."
+msgstr "Exibe mensagens de depuração de xml."
+
+#: src/glabels.c:82
+msgid "Show document merge debugging messages."
+msgstr "Exibe mensagens de depuração de fusão de documento."
+
+#: src/glabels.c:85
+msgid "Show commands debugging messages."
+msgstr "Exibe mensagens de depuração de comandos."
+
+#: src/glabels.c:88
+msgid "Show undo debugging messages."
+msgstr "Exibe mensagens de depuração de desfazer."
+
+#: src/glabels.c:91
+msgid "Show recent debugging messages."
+msgstr "Exibe mensagens de depuração de recentes"
+
+#: src/glabels.c:94
+msgid "Show window debugging messages."
+msgstr "Exibe mensagens de depuração de janela."
+
+#: src/glabels.c:97
+msgid "Show ui debugging messages."
+msgstr "Exibe mensagens de depuração de ui."
+
+#: src/glabels.c:100
+#, fuzzy
+msgid "Show property_bar debugging messages."
+msgstr "Exibe mensagens de depuração de preferências."
+
+#: src/glabels.c:103
+msgid "Show media select widget debugging messages."
+msgstr "Exibe mensagens de depuração de widget de seleção de mídia."
+
+#: src/glabels.c:106
+msgid "Show mini preview widget debugging messages."
+msgstr "Exibe mensagens de depuração de widget de mini previsão."
+
+#: src/glabels.c:109
+#, fuzzy
+msgid "Show pixbuf cache debugging messages."
+msgstr "Exibe mensagens de depuração de visualização."
+
+#: src/glabels.c:112
+msgid "Show widget debugging messages."
+msgstr "Exibe mensagens de depuração de widget."
+
+#: src/glabels.c:115
+#, fuzzy
+msgid "Show object editor debugging messages."
+msgstr "Exibe mensagens de depuração de recentes"
+
+#: src/glabels.c:118
+msgid "Turn on all debugging messages."
+msgstr "Ativa todas as mensagens de depuração."
+
+#: src/glabels.c:187
+msgid "Could not initialize Bonobo!\n"
+msgstr "Impossível inicializar Bonobo!\n"
+
+#: src/glabels-batch.c:48
+msgid "print this message"
+msgstr "mostra esta mensagem"
+
+#: src/glabels-batch.c:50
+msgid "print the version of glabels-batch being used"
+msgstr "mostra a versão de glabels-batch que está sendo usada"
+
+#: src/glabels-batch.c:52
+msgid "set output filename (default=\"output.ps\")"
+msgstr "define o nome do arquivo de saída (padrão=\"output.ps\")"
+
+#: src/glabels-batch.c:52
+msgid "filename"
+msgstr "nome_de_arquivo"
+
+#: src/glabels-batch.c:54
+msgid "number of sheets (default=1)"
+msgstr "número de páginas (padrão=1)"
+
+#: src/glabels-batch.c:54
+msgid "sheets"
+msgstr "páginas"
+
+#: src/glabels-batch.c:56
+msgid "number of copies (default=1)"
+msgstr "número de cópias (padrão=1)"
+
+#: src/glabels-batch.c:56
+msgid "copies"
+msgstr "cópias"
+
+#: src/glabels-batch.c:58 src/print-dialog.c:336
+msgid "print outlines (to test printer alignment)"
+msgstr "imprimir contornos (testar alinhamento da impressora)"
+
+#: src/glabels-batch.c:60 src/print-dialog.c:344
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "imprimir ao contrário (como uma imagem de espelho)"
+
+#: src/glabels-batch.c:96
+msgid "[OPTION...] GLABELS_FILE..."
+msgstr "[OPÇÃO...] ARQUIVO_GLABELS..."
+
+#: src/glabels-batch.c:116
+msgid "missing glabels file\n"
+msgstr "faltando arquivo glabels\n"
+
+#: src/glabels-batch.c:157
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "impossível abrir o arquivo glabels %s\n"
+
+#: src/window.c:244
+msgid "(none) - gLabels"
+msgstr "(sem nome) - gLabels"
+
+#: src/window.c:414
+msgid "(modified)"
+msgstr "(modificado)"
+
+#: src/stock.c:65 data/ui/glabels-ui.xml.h:165
+msgid "_Select Mode"
+msgstr "_Selecionar Modo"
+
+#: src/stock.c:66 data/ui/glabels-ui.xml.h:166
+msgid "_Text"
+msgstr "_Texto"
+
+#: src/stock.c:67 data/ui/glabels-ui.xml.h:151
+msgid "_Line"
+msgstr "_Linha"
+
+#: src/stock.c:68 data/ui/glabels-ui.xml.h:133
+msgid "_Box"
+msgstr "_Caixa"
+
+#: src/stock.c:69 data/ui/glabels-ui.xml.h:144
+msgid "_Ellipse"
+msgstr "_Elipse"
+
+#: src/stock.c:70 data/ui/glabels-ui.xml.h:149
+msgid "_Image"
+msgstr "_Imagem"
+
+#: src/stock.c:71 data/ui/glabels-ui.xml.h:11
+msgid "Bar_code"
+msgstr "_Código barras"
+
+#: src/stock.c:72
+msgid "_Merge Properties"
+msgstr "Propriedades de _Fusão"
+
+#: src/stock.c:73
+msgid "Object _Properties"
+msgstr "_Propriedades de Objeto"
+
+#: src/stock.c:74 data/ui/glabels-ui.xml.h:13
+msgid "Bring to _Front"
+msgstr "Trazer para _Frente"
+
+#: src/stock.c:75 data/ui/glabels-ui.xml.h:110
+msgid "Send to _Back"
+msgstr "Enviar para _trás"
+
+#: src/stock.c:76 data/ui/glabels-ui.xml.h:97
+msgid "Rotate _Left"
+msgstr "Girar _Esquerda"
+
+#: src/stock.c:77 data/ui/glabels-ui.xml.h:98
+msgid "Rotate _Right"
+msgstr "Girar _Direita"
+
+#: src/stock.c:78 data/ui/glabels-ui.xml.h:52
+msgid "Flip _Horizontally"
+msgstr "Refletir _Horizontalmente"
+
+#: src/stock.c:79 data/ui/glabels-ui.xml.h:53
+msgid "Flip _Vertically"
+msgstr "Refletir _Verticalmente"
+
+#: src/stock.c:80 data/ui/glabels-ui.xml.h:150
+msgid "_Lefts"
+msgstr "_Esquerdas"
+
+#: src/stock.c:81 data/ui/glabels-ui.xml.h:162
+msgid "_Rights"
+msgstr "_Direitas"
+
+#: src/stock.c:82 data/ui/glabels-ui.xml.h:134
+msgid "_Centers"
+msgstr "C_entros"
+
+#: src/stock.c:83 data/ui/glabels-ui.xml.h:167
+msgid "_Tops"
+msgstr "_Topos"
+
+#: src/stock.c:84
+msgid "Bottoms"
+msgstr "Bases"
+
+#: src/stock.c:85
+msgid "Centers"
+msgstr "Centros"
+
+#: src/stock.c:86 src/stock.c:87 data/ui/glabels-ui.xml.h:62
+msgid "Label Ce_nter"
+msgstr "Ce_ntro Etiqueta"
+
+#: src/stock.c:88 data/ui/glabels-ui.xml.h:51
+msgid "Fill color"
+msgstr ""
+
+#: src/stock.c:89 data/ui/glabels-ui.xml.h:64
+msgid "Line color"
+msgstr ""
+
+#: src/stock.c:90 src/stock.c:92
+#, fuzzy
+msgid "Linked"
+msgstr "Linha"
+
+#: src/stock.c:91 src/stock.c:93
+#, fuzzy
+msgid "Not Linked"
+msgstr "Nenhum"
+
+#: src/ui-property-bar.c:345 src/object-editor.c:499
+#, fuzzy
+msgid "Default"
+msgstr "Apagar"
+
+#: src/ui-property-bar.c:360 src/object-editor.c:512
+msgid "No fill"
+msgstr ""
+
+#: src/ui-property-bar.c:375 src/object-editor.c:505
+#, fuzzy
+msgid "No line"
+msgstr "Nenhum"
+
+#: src/ui-sidebar.c:180
+#, fuzzy
+msgid "Object properties"
+msgstr "_Propriedades de Objeto"
+
+#: src/commands.c:385
+msgid ""
+"A label and business card creation program for GNOME.\n"
+" \n"
+"Glabels 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.\n"
+" \n"
+"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.\n"
+msgstr ""
+"Um programa para criação de etiquetas e cartões de negócios para o GNOME.\n"
+"\n"
+"Glabels é software livre; você pode redistribuí-lo e/ou modificá-lo sob os "
+"termos da Licença Pública Geral GNU conforme publicada pela Free Software "
+"Foundation; ou a versão 2 da Licença, ou (sob sua opção) qualquer versão "
+"posterior.\n"
+"\n"
+"Este programa é distribuido na esperança de que seja útil, mas SEM QUALQUER "
+"GARANTIA; sem mesmo as garantias implícitas de COMERCIALIZAÇÃO ou AJUSTES A "
+"UM PROPÓSITO PARTICULAR. Veja a Licença Pública Geral GNU para mais "
+"detalhes.\n"
+
+#: src/commands.c:399
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Veja o arquivo AUTHORS para ver créditos adicionais,"
+
+#: src/commands.c:400
+#, fuzzy
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "ou visite http://snaught.com/glabels"
+
+#: src/commands.c:409
+msgid " "
+msgstr ""
+
+#: src/commands.c:424
+msgid "glabels"
+msgstr "glabels"
+
+#: src/file.c:100
+msgid "New Label or Card"
+msgstr "Nova Etiqueta ou Cartão"
+
+#: src/file.c:132 src/file.c:304
+msgid "Media Type"
+msgstr "Tipo de mídia"
+
+#: src/file.c:138 src/file.c:310
+msgid "Label orientation"
+msgstr "Orientação da etiqueta"
+
+#: src/file.c:269
+#, fuzzy
+msgid "Label properties"
+msgstr "_Propriedades de Objeto"
+
+#: src/file.c:452 src/file.c:870
+msgid "All files"
+msgstr ""
+
+#: src/file.c:457 src/file.c:875
+#, fuzzy
+msgid "gLabels documents"
+msgstr "Preferências do gLabels"
+
+#: src/file.c:505 src/file.c:617 src/file.c:934 src/file.c:1130
+msgid "Empty file name selection"
+msgstr "Seleção de nome de arquivo vazia"
+
+#: src/file.c:506 src/file.c:520 src/file.c:618 src/file.c:632
+msgid "Please select a file or supply a valid file name"
+msgstr "Por favor, selecione um arquivo ou forneça um nome de arquivo válido"
+
+#: src/file.c:519 src/file.c:631
+msgid "File does not exist"
+msgstr "Arquivo inexistente"
+
+#: src/file.c:563 data/ui/glabels-ui.xml.h:75
+msgid "Open"
+msgstr "Abrir"
+
+#: src/file.c:565
+msgid "Open label"
+msgstr "Abrir etiqueta"
+
+#: src/file.c:707
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Impossível abrir o arquivo \"%s\""
+
+#: src/file.c:715
+msgid "Not a supported file format"
+msgstr "Formato de arquivo não suportado"
+
+#: src/file.c:797 src/file.c:979 src/file.c:1174
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Impossível salvar o arquivo \"%s\""
+
+#: src/file.c:805 src/file.c:987 src/file.c:1182
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "Erro encontrado ao salvar. O arquivo ainda não foi salvo."
+
+#: src/file.c:848 src/file.c:1048
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Salvar \"%s\" como"
+
+#: src/file.c:935 src/file.c:1131
+msgid "Please supply a valid file name"
+msgstr "Por favor, forneça um nome de arquivo válido"
+
+#: src/file.c:952 src/file.c:1147
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Sobrescrever o arquivo \"%s\"?"
+
+#: src/file.c:960 src/file.c:1155
+msgid "File already exists."
+msgstr "O arquivo já existe."
+
+#: src/file.c:1271
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Salvar modificações no documento \"%s\" antes de fechar?"
+
+#: src/file.c:1279
+msgid "Your changes will be lost if you don't save them."
+msgstr "Suas modificações serão perdidas se você não salvá-las."
+
+#: src/file.c:1282
+msgid "Close without saving"
+msgstr "Fechar sem salvar"
+
+#. Should not happen
+#: src/prefs.c:156 src/prefs.c:163 data/glade/prefs-dialog.glade.h:23
+#: data/glade/object-editor.glade.h:37
+msgid "points"
+msgstr "pontos"
+
+#: src/prefs.c:158 data/glade/object-editor.glade.h:36
+#: data/glade/template-designer.glade.h:74
+msgid "inches"
+msgstr "poleg."
+
+#: src/prefs.c:160
+msgid "mm"
+msgstr "mm"
+
+#: src/prefs-dialog.c:248 data/glade/prefs-dialog.glade.h:22
+msgid "gLabels Preferences"
+msgstr "Preferências do gLabels"
+
+#.
+#. * Submenu: Order
+#.
+#: src/view.c:3570 data/ui/glabels-ui.xml.h:157
+msgid "_Order"
+msgstr "_Ordenar"
+
+#.
+#. * Submenu: Rotate/Flip
+#.
+#: src/view.c:3591 data/ui/glabels-ui.xml.h:163
+msgid "_Rotate/Flip"
+msgstr "_Girar/Refletir"
+
+#.
+#. * Submenu: Align Horizontally
+#.
+#: src/view.c:3624
+msgid "Align _Horizontally"
+msgstr "Alinhar _Horizontalmente"
+
+#.
+#. * Submenu: Align Vertically
+#.
+#: src/view.c:3663
+msgid "Align _Vertically"
+msgstr "Alinhar _Verticalmente"
+
+#: src/view.c:3724 data/ui/glabels-ui.xml.h:140
+msgid "_Delete"
+msgstr "_Apagar"
+
+#. Build editor.
+#: src/view-box.c:223
+#, fuzzy
+msgid "Box object properties"
+msgstr "Editar propriedades do objeto caixa"
+
+#. Build editor.
+#: src/view-ellipse.c:223
+#, fuzzy
+msgid "Ellipse object properties"
+msgstr "Editar propriedades do objeto elipse"
+
+#. Build editor.
+#: src/view-line.c:223
+#, fuzzy
+msgid "Line object properties"
+msgstr "Edita propriedades do objeto"
+
+#. Build editor.
+#: src/view-image.c:222
+#, fuzzy
+msgid "Image object properties"
+msgstr "Editar propriedades do objeto imagem"
+
+#. Build editor.
+#: src/view-text.c:250
+#, fuzzy
+msgid "Text object properties"
+msgstr "Edita propriedades do objeto"
+
+#: src/view-text.c:562 data/glade/object-editor.glade.h:28
+msgid "Text"
+msgstr "Texto"
+
+#. Build editor.
+#: src/view-barcode.c:209
+#, fuzzy
+msgid "Barcode object properties"
+msgstr "Editar propriedades do objeto código de barras"
+
+#: src/view-barcode.c:579 src/print.c:1088
+#, fuzzy
+msgid "Invalid barcode data"
+msgstr "Código de barras inválido"
+
+#: src/merge-properties-dialog.c:231
+msgid "Merge Properties"
+msgstr "Propriedades de Fusão"
+
+#. ---- Source section ----
+#: src/merge-properties-dialog.c:237
+msgid "Source"
+msgstr "Fonte"
+
+#: src/merge-properties-dialog.c:245
+msgid "Format:"
+msgstr "Formato:"
+
+#. Location line
+#: src/merge-properties-dialog.c:273
+msgid "Location:"
+msgstr "Localização"
+
+#: src/merge-properties-dialog.c:282 src/merge-properties-dialog.c:393
+msgid "Select merge-database source"
+msgstr "Selecione a fonte da base de dados da fusão"
+
+#: src/merge-properties-dialog.c:289 src/merge-properties-dialog.c:404
+msgid "N/A"
+msgstr "Não definido"
+
+#. ---- Sample Fields section ----
+#: src/merge-properties-dialog.c:300
+msgid "Record selection/preview:"
+msgstr "Seleção/previsão de registro:"
+
+#: src/merge-properties-dialog.c:326
+msgid "Select"
+msgstr "Selecionar"
+
+#: src/merge-properties-dialog.c:334
+msgid "Record/Field"
+msgstr "Registro/Campo"
+
+#: src/merge-properties-dialog.c:342 data/glade/object-editor.glade.h:9
+msgid "Data"
+msgstr "Dado"
+
+#: src/print-dialog.c:266 data/ui/glabels-ui.xml.h:82
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/print-dialog.c:281
+msgid "_Job"
+msgstr "_Trabalho"
+
+#: src/print-dialog.c:286
+msgid "P_rinter"
+msgstr "Imp_ressora"
+
+#. ----------- Add simple-copies widget ------------
+#: src/print-dialog.c:314
+msgid "Copies"
+msgstr "Cópias"
+
+#. ------- Add merge control widget ------------
+#: src/print-dialog.c:322
+msgid "Document merge control"
+msgstr "Controle de fusão do documento"
+
+#. ----------- Add custom print options area ------------
+#: src/print-dialog.c:330
+msgid "Options"
+msgstr "Opções"
+
+#: src/print-dialog.c:351
+msgid "print crop marks"
+msgstr ""
+
+#: src/print-dialog.c:553 src/print-dialog.c:592
+msgid "Print preview"
+msgstr "Visualizar impressão"
+
+#: src/template-designer.c:409 data/glade/template-designer.glade.h:73
+msgid "gLabels Template Designer"
+msgstr ""
+
+#: src/bc.c:60
+msgid "POSTNET (any)"
+msgstr ""
+
+#: src/bc.c:63
+msgid "POSTNET-5 (ZIP only)"
+msgstr ""
+
+#: src/bc.c:66
+msgid "POSTNET-9 (ZIP+4)"
+msgstr ""
+
+#: src/bc.c:69
+msgid "POSTNET-11 (DPBC)"
+msgstr ""
+
+#: src/bc.c:72
+msgid "EAN (any)"
+msgstr ""
+
+#: src/bc.c:75
+msgid "EAN-8"
+msgstr ""
+
+#: src/bc.c:78
+msgid "EAN-8 +2"
+msgstr ""
+
+#: src/bc.c:81
+msgid "EAN-8 +5"
+msgstr ""
+
+#: src/bc.c:84
+msgid "EAN-13"
+msgstr ""
+
+#: src/bc.c:87
+msgid "EAN-13 +2"
+msgstr ""
+
+#: src/bc.c:90
+msgid "EAN-13 +5"
+msgstr ""
+
+#: src/bc.c:93
+msgid "UPC (UPC-A or UPC-E)"
+msgstr ""
+
+#: src/bc.c:96
+msgid "UPC-A"
+msgstr ""
+
+#: src/bc.c:99
+msgid "UPC-A +2"
+msgstr ""
+
+#: src/bc.c:102
+msgid "UPC-A +5"
+msgstr ""
+
+#: src/bc.c:105
+msgid "UPC-E"
+msgstr ""
+
+#: src/bc.c:108
+msgid "UPC-E +2"
+msgstr ""
+
+#: src/bc.c:111
+msgid "UPC-E +5"
+msgstr ""
+
+#: src/bc.c:114
+msgid "ISBN"
+msgstr ""
+
+#: src/bc.c:117
+msgid "ISBN +5"
+msgstr ""
+
+#: src/bc.c:120
+msgid "Code 39"
+msgstr ""
+
+#: src/bc.c:123
+msgid "Code 128"
+msgstr ""
+
+#: src/bc.c:126
+msgid "Code 128C"
+msgstr ""
+
+#: src/bc.c:129
+msgid "Code 128B"
+msgstr ""
+
+#: src/bc.c:132
+msgid "Interleaved 2 of 5"
+msgstr ""
+
+#: src/bc.c:135
+msgid "Codabar"
+msgstr ""
+
+#: src/bc.c:138
+msgid "MSI"
+msgstr ""
+
+#: src/bc.c:141
+msgid "Plessey"
+msgstr ""
+
+#: src/label.c:569
+msgid "Untitled"
+msgstr "Sem_título"
+
+#: src/xml-label.c:176 src/xml-label.c:213
+msgid "xmlParseFile error"
+msgstr "erro: xmlParseFile"
+
+#: src/xml-label.c:250
+msgid "No document root"
+msgstr "Sem raiz do documento"
+
+#: src/xml-label.c:264
+msgid "Importing from glabels 0.1 format"
+msgstr "Importando do formato do glabels 0.1"
+
+#: src/xml-label.c:272
+msgid "Importing from glabels 0.4 format"
+msgstr "Importando do formato do glabels 0.4"
+
+#: src/xml-label.c:279
+#, fuzzy
+msgid "Importing from glabels 1.91 format"
+msgstr "Importando do formato do glabels 0.1"
+
+#: src/xml-label.c:282
+msgid "bad document, unknown glabels Namespace"
+msgstr "documento ruim, espaço de nome glabels não encontrado"
+
+#: src/xml-label.c:311 src/xml-label-04.c:75 src/xml-label-191.c:131
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Nó raiz ruim = \"%s\""
+
+#: src/xml-label.c:348 src/xml-label-191.c:165
+#, fuzzy, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "Nó raiz ruim = \"%s\""
+
+#: src/xml-label.c:393 src/xml-label-04.c:123 src/xml-label-191.c:197
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "nó ruim = \"%s\""
+
+#: src/xml-label.c:796 src/xml-label-191.c:605
+#, fuzzy, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "nó ruim = \"%s\""
+
+#: src/xml-label.c:962 libglabels/xml-template.c:528
+msgid "Utf8 conversion error."
+msgstr ""
+
+#: src/xml-label.c:969 libglabels/xml-template.c:535
+msgid "Problem saving xml file."
+msgstr "Problema salvando arquivo xml."
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: src/xml-label-191.c:680 libglabels/xml-template.c:192
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr ""
+
+#: src/xml-label-191.c:690 libglabels/xml-template.c:202
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr ""
+
+#: src/merge.c:172 src/merge.c:213 src/merge.c:399 src/merge.c:402
+msgid "None"
+msgstr "Nenhum"
+
+#: src/merge-init.c:53
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Arquivo texto separado com vírgulas (CSV)"
+
+#: src/merge-init.c:60
+msgid "Text file with colon delimeters"
+msgstr "Arquivo texto separado com dois pontos"
+
+#: src/merge-init.c:67
+msgid "Text file with tab delimeters"
+msgstr "Arquivo texto separado com tab"
+
+#: src/wdgt-image-select.c:201 data/glade/object-editor.glade.h:11
+msgid "File:"
+msgstr "Arquivo:"
+
+#: src/wdgt-image-select.c:245 data/glade/object-editor.glade.h:16
+msgid "Key:"
+msgstr "Chave:"
+
+#: src/wdgt-print-copies.c:179
+msgid "Sheets:"
+msgstr "Páginas:"
+
+#: src/wdgt-print-copies.c:197
+msgid "Labels"
+msgstr "Etiquetas"
+
+#: src/wdgt-print-copies.c:200
+msgid "from:"
+msgstr "de:"
+
+#: src/wdgt-print-copies.c:207
+msgid "to:"
+msgstr "até:"
+
+#: src/wdgt-print-merge.c:178
+msgid "Start on label"
+msgstr "Iniciar na etiqueta"
+
+#: src/wdgt-print-merge.c:186
+msgid "on 1st sheet"
+msgstr "na primeira folha"
+
+#: src/wdgt-print-merge.c:195
+msgid "Copies:"
+msgstr "Cópias:"
+
+#: src/wdgt-print-merge.c:201
+msgid "Collate"
+msgstr "Ordenar"
+
+#: src/wdgt-media-select.c:269 data/glade/template-designer.glade.h:29
+msgid "Description:"
+msgstr "Descrição:"
+
+#: src/wdgt-media-select.c:279 data/glade/template-designer.glade.h:53
+msgid "Page size:"
+msgstr "Tamanho da página:"
+
+#: src/wdgt-media-select.c:290
+msgid "Label size:"
+msgstr "Tamanho da etiqueta:"
+
+#: src/wdgt-media-select.c:301
+msgid "Layout:"
+msgstr "Disposição:"
+
+#: src/wdgt-media-select.c:578
+#, c-format
+msgid "%d x %d  (%d per sheet)"
+msgstr "%d x %d  (%d por página)"
+
+#: src/wdgt-media-select.c:582
+#, c-format
+msgid "%d per sheet"
+msgstr "%d por página"
+
+#: src/wdgt-media-select.c:614
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: src/wdgt-media-select.c:619
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: src/wdgt-media-select.c:630 src/wdgt-media-select.c:644
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s diâmetro"
+
+#: src/wdgt-media-select.c:634 src/wdgt-media-select.c:648
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s diâmetro"
+
+#: src/wdgt-rotate-label.c:193
+msgid "Rotate"
+msgstr "Girar"
+
+#. This is the default custom color
+#: src/mygal/color-palette.c:396
+#, fuzzy
+msgid "custom"
+msgstr "Personalizar"
+
+#. "Custom" color - we'll pop up a GnomeColorPicker
+#: src/mygal/color-palette.c:438
+#, fuzzy
+msgid "Custom Color:"
+msgstr "Personaliza barras de ferramentas"
+
+#: src/mygal/color-palette.c:446
+msgid "Choose Custom Color"
+msgstr ""
+
+#: src/mygal/color-palette.c:579
+msgid "black"
+msgstr ""
+
+#: src/mygal/color-palette.c:580
+msgid "light brown"
+msgstr ""
+
+#: src/mygal/color-palette.c:581
+msgid "brown gold"
+msgstr ""
+
+#: src/mygal/color-palette.c:582
+msgid "dark green #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:583
+msgid "navy"
+msgstr ""
+
+#: src/mygal/color-palette.c:584 src/mygal/color-palette.c:640
+msgid "dark blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:585
+msgid "purple #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:586
+msgid "very dark gray"
+msgstr ""
+
+#: src/mygal/color-palette.c:589 src/mygal/color-palette.c:645
+msgid "dark red"
+msgstr ""
+
+#: src/mygal/color-palette.c:590
+msgid "red-orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:591
+msgid "gold"
+msgstr ""
+
+#: src/mygal/color-palette.c:592
+msgid "dark green"
+msgstr ""
+
+#: src/mygal/color-palette.c:593 src/mygal/color-palette.c:646
+msgid "dull blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:594 src/mygal/color-palette.c:647
+msgid "blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:595
+msgid "dull purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:596
+msgid "dark grey"
+msgstr ""
+
+#: src/mygal/color-palette.c:599
+msgid "red"
+msgstr ""
+
+#: src/mygal/color-palette.c:600
+msgid "orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:601
+msgid "lime"
+msgstr ""
+
+#: src/mygal/color-palette.c:602
+msgid "dull green"
+msgstr ""
+
+#: src/mygal/color-palette.c:603
+msgid "dull blue #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:604
+msgid "sky blue #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:605 src/mygal/color-palette.c:644
+msgid "purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:606
+msgid "gray"
+msgstr ""
+
+#: src/mygal/color-palette.c:609 src/mygal/color-palette.c:641
+#, fuzzy
+msgid "magenta"
+msgstr "Imagem"
+
+#: src/mygal/color-palette.c:610
+msgid "bright orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:611 src/mygal/color-palette.c:642
+msgid "yellow"
+msgstr ""
+
+#: src/mygal/color-palette.c:612
+#, fuzzy
+msgid "green"
+msgstr "graus"
+
+#: src/mygal/color-palette.c:613 src/mygal/color-palette.c:643
+msgid "cyan"
+msgstr ""
+
+#: src/mygal/color-palette.c:614
+msgid "bright blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:615 src/mygal/color-palette.c:632
+msgid "red purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:616
+msgid "light grey"
+msgstr ""
+
+#: src/mygal/color-palette.c:619 src/mygal/color-palette.c:636
+msgid "pink"
+msgstr ""
+
+#: src/mygal/color-palette.c:620
+msgid "light orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:621 src/mygal/color-palette.c:633
+msgid "light yellow"
+msgstr ""
+
+#: src/mygal/color-palette.c:622
+msgid "light green"
+msgstr ""
+
+#: src/mygal/color-palette.c:623
+msgid "light cyan"
+msgstr ""
+
+#: src/mygal/color-palette.c:624 src/mygal/color-palette.c:634
+msgid "light blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:625 src/mygal/color-palette.c:638
+msgid "light purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:626
+msgid "white"
+msgstr ""
+
+#: src/mygal/color-palette.c:631
+msgid "purplish blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:635
+msgid "dark purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:637
+msgid "sky blue"
+msgstr ""
+
+#: libglabels/template.c:848
+#, c-format
+msgid "Generic %s full page"
+msgstr "Página completa %s genérico"
+
+#: libglabels/template.c:897
+msgid "No template files found!"
+msgstr "Nenhum arquivo modelo encontrado!"
+
+#. Create and append an "Other" entry.
+#: libglabels/paper.c:67
+msgid "Other"
+msgstr ""
+
+#: libglabels/paper.c:361
+#, fuzzy
+msgid "No paper files found!"
+msgstr "Nenhum arquivo modelo encontrado!"
+
+#: data/ui/glabels-ui.xml.h:1
+msgid "About glabels"
+msgstr "Sobre glabels"
+
+#: data/ui/glabels-ui.xml.h:2
+msgid "About..."
+msgstr "Sobre..."
+
+#: data/ui/glabels-ui.xml.h:3
+msgid "Align _Horizontal"
+msgstr "Alinhar _Horizontal"
+
+#: data/ui/glabels-ui.xml.h:4
+msgid "Align _Vertical"
+msgstr "Alinhar _Vertical"
+
+#: data/ui/glabels-ui.xml.h:5
+msgid "Align objects to bottoms"
+msgstr "Alinha objetos pelas bases"
+
+#: data/ui/glabels-ui.xml.h:6
+msgid "Align objects to horizontal centers"
+msgstr "Alinha objetos pelos centros horizontais"
+
+#: data/ui/glabels-ui.xml.h:7
+msgid "Align objects to left edges"
+msgstr "Alinha objetos pelas bordas esquerdas"
+
+#: data/ui/glabels-ui.xml.h:8
+msgid "Align objects to right edges"
+msgstr "Alinha objetos pelas bordas direitas"
+
+#: data/ui/glabels-ui.xml.h:9
+msgid "Align objects to tops"
+msgstr "Alinha objetos pelos topos"
+
+#: data/ui/glabels-ui.xml.h:10
+msgid "Align objects to vertical centers"
+msgstr "Alinha objetos pelos centros verticais"
+
+#: data/ui/glabels-ui.xml.h:12
+msgid "Bold"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:14
+#, fuzzy
+msgid "Center align"
+msgstr "Centros"
+
+#: data/ui/glabels-ui.xml.h:15
+msgid "Center objects to horizontal label center"
+msgstr "Centra objetos no centro horizontal da etiqueta"
+
+#: data/ui/glabels-ui.xml.h:16
+msgid "Center objects to vertical label center"
+msgstr "Centra objetos no centro vertical da etiqueta"
+
+#: data/ui/glabels-ui.xml.h:17
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Muda a visibilidade das linhas de marcação na janela atual"
+
+#: data/ui/glabels-ui.xml.h:18
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "Muda a visibilidade da barra de ferramentas de desenho na janela atual"
+
+#: data/ui/glabels-ui.xml.h:19
+msgid "Change the visibility of the grid in the current window"
+msgstr "Muda a visibilidade da grade na janela atual"
+
+#: data/ui/glabels-ui.xml.h:20
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Muda a visibilidade da barra de ferramentas principal na janela atual"
+
+#: data/ui/glabels-ui.xml.h:21
+#, fuzzy
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "Muda a visibilidade da barra de ferramentas principal na janela atual"
+
+#: data/ui/glabels-ui.xml.h:22
+msgid "Close"
+msgstr "Fechar"
+
+#: data/ui/glabels-ui.xml.h:23
+msgid "Close the current file"
+msgstr "Fechar o arquivo atual"
+
+#: data/ui/glabels-ui.xml.h:24
+msgid "Configure the application"
+msgstr "Configurar a aplicação"
+
+#: data/ui/glabels-ui.xml.h:25
+msgid "Contents"
+msgstr "Conteúdo"
+
+#: data/ui/glabels-ui.xml.h:26
+msgid "Copy"
+msgstr "Copiar"
+
+#: data/ui/glabels-ui.xml.h:27
+msgid "Copy the selection"
+msgstr "Copia a seleção"
+
+#: data/ui/glabels-ui.xml.h:28
+#, fuzzy
+msgid "Create a custom template"
+msgstr "Cria um novo documento"
+
+#: data/ui/glabels-ui.xml.h:29
+msgid "Create a new document"
+msgstr "Cria um novo documento"
+
+#: data/ui/glabels-ui.xml.h:30
+msgid "Create barcode object"
+msgstr "Criar objeto código de barras"
+
+#: data/ui/glabels-ui.xml.h:31
+msgid "Create box/rectangle object"
+msgstr "Criar objeto caixa/retângulo"
+
+#: data/ui/glabels-ui.xml.h:32
+msgid "Create ellipse/circle object"
+msgstr "Criar objeto elipse/círculo"
+
+#: data/ui/glabels-ui.xml.h:33
+msgid "Create image object"
+msgstr "Criar objeto imagem"
+
+#: data/ui/glabels-ui.xml.h:34
+msgid "Create line object"
+msgstr "Criar objeto linha"
+
+#: data/ui/glabels-ui.xml.h:35
+msgid "Create text object"
+msgstr "Criar objeto texto"
+
+#: data/ui/glabels-ui.xml.h:36
+msgid "Cu_t"
+msgstr "Cor_tar"
+
+#: data/ui/glabels-ui.xml.h:37
+msgid "Customize"
+msgstr "Personalizar"
+
+#: data/ui/glabels-ui.xml.h:38
+msgid "Customize Drawing Toolbar"
+msgstr "Personaliza barra de ferramentas de desenho"
+
+#: data/ui/glabels-ui.xml.h:39
+msgid "Customize Main Toolbar"
+msgstr "Personaliza barra de ferramentas principal"
+
+#: data/ui/glabels-ui.xml.h:40
+#, fuzzy
+msgid "Customize Property Toolbar"
+msgstr "Personaliza barras de ferramentas"
+
+#: data/ui/glabels-ui.xml.h:41
+msgid "Customize toolbars"
+msgstr "Personaliza barras de ferramentas"
+
+#: data/ui/glabels-ui.xml.h:42
+msgid "Cut"
+msgstr "Cortar"
+
+#: data/ui/glabels-ui.xml.h:43
+msgid "Cut the selection"
+msgstr "Corta a seleção"
+
+#: data/ui/glabels-ui.xml.h:44
+msgid "Decrease magnification"
+msgstr "Diminuir aumento"
+
+#: data/ui/glabels-ui.xml.h:45
+msgid "Delete"
+msgstr "Apagar"
+
+#: data/ui/glabels-ui.xml.h:46
+msgid "Delete the selected objects"
+msgstr "Apaga os objetos selecionados"
+
+#: data/ui/glabels-ui.xml.h:47
+msgid "Drawing toolbar"
+msgstr "Barra de ferramentas de desenho"
+
+#: data/ui/glabels-ui.xml.h:48
+msgid "Dump XML"
+msgstr "Descarregar XML"
+
+#: data/ui/glabels-ui.xml.h:49
+msgid "Dump the UI Xml description"
+msgstr "Descarrega a descrição da UI Xml"
+
+#: data/ui/glabels-ui.xml.h:50
+msgid "Edit merge properties"
+msgstr "Editar propriedades de fusão"
+
+#: data/ui/glabels-ui.xml.h:54
+msgid "Flip object horizontally"
+msgstr "Reflete objeto horizontalmente"
+
+#: data/ui/glabels-ui.xml.h:55
+msgid "Flip object vertically"
+msgstr "Reflete objeto verticalmente"
+
+#: data/ui/glabels-ui.xml.h:56
+#, fuzzy
+msgid "Font name"
+msgstr "Não salve"
+
+#: data/ui/glabels-ui.xml.h:57
+#, fuzzy
+msgid "Font selector"
+msgstr "Copia a seleção"
+
+#: data/ui/glabels-ui.xml.h:58
+#, fuzzy
+msgid "Font size"
+msgstr "Não salve"
+
+#: data/ui/glabels-ui.xml.h:59
+msgid "Icon and _Text"
+msgstr "Ícone e _Texto"
+
+#: data/ui/glabels-ui.xml.h:60
+msgid "Increase magnification"
+msgstr "Aumentar aumento"
+
+#: data/ui/glabels-ui.xml.h:61
+msgid "Italic"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:63
+msgid "Left align"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:65
+msgid "Line width"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:66
+msgid "Lower object to bottom"
+msgstr "Abaixa objeto à base"
+
+#: data/ui/glabels-ui.xml.h:67
+msgid "M_arkup"
+msgstr "M_arcação"
+
+#: data/ui/glabels-ui.xml.h:68
+msgid "Main toolbar"
+msgstr "Barra de ferramentas principal"
+
+#: data/ui/glabels-ui.xml.h:69
+msgid "Markup"
+msgstr "Marcação"
+
+#: data/ui/glabels-ui.xml.h:70
+#, fuzzy
+msgid "Modify document properties"
+msgstr "Editar propriedades de fusão do documento"
+
+#: data/ui/glabels-ui.xml.h:71
+msgid "New"
+msgstr "Novo"
+
+#: data/ui/glabels-ui.xml.h:72
+#, fuzzy
+msgid "Object property editor"
+msgstr "_Propriedades de Objeto"
+
+#: data/ui/glabels-ui.xml.h:73
+msgid "Only show icons in the drawing toolbar"
+msgstr "Exibe somente ícones na barra de ferramentas de desenho"
+
+#: data/ui/glabels-ui.xml.h:74
+msgid "Only show icons in the main toolbar"
+msgstr "Exibe somente ícones na barra de ferramentas principal"
+
+#: data/ui/glabels-ui.xml.h:76
+msgid "Open a file"
+msgstr "Abrir um arquivo"
+
+#: data/ui/glabels-ui.xml.h:77
+msgid "Open the glabels manual"
+msgstr "Abre o manual do glabels"
+
+#: data/ui/glabels-ui.xml.h:78
+msgid "Paste"
+msgstr "Colar"
+
+#: data/ui/glabels-ui.xml.h:79
+msgid "Paste the clipboard"
+msgstr "Cola a área de transferência"
+
+#: data/ui/glabels-ui.xml.h:80
+msgid "Pr_eferences..."
+msgstr "Pr_eferências..."
+
+#: data/ui/glabels-ui.xml.h:81
+msgid "Preferences"
+msgstr "Preferências"
+
+#: data/ui/glabels-ui.xml.h:83
+msgid "Print the current file"
+msgstr "Imprime o arquivo atual"
+
+#: data/ui/glabels-ui.xml.h:84
+#, fuzzy
+msgid "Proper_ties..."
+msgstr "Propriedades"
+
+#: data/ui/glabels-ui.xml.h:85
+msgid "Properties"
+msgstr "Propriedades"
+
+#: data/ui/glabels-ui.xml.h:86
+msgid "Property toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:87
+msgid "Quit"
+msgstr "Sair"
+
+#: data/ui/glabels-ui.xml.h:88
+msgid "Quit the program"
+msgstr "Sai do programa"
+
+#: data/ui/glabels-ui.xml.h:89
+msgid "Raise object to top"
+msgstr "Sobe objetos ao topo"
+
+#: data/ui/glabels-ui.xml.h:90
+msgid "Recent _Files"
+msgstr "_Arquivos recentes"
+
+#: data/ui/glabels-ui.xml.h:91
+msgid "Redo"
+msgstr "Refazer"
+
+#: data/ui/glabels-ui.xml.h:92
+msgid "Redo the undone action"
+msgstr "Refaz a ação desfeita"
+
+#: data/ui/glabels-ui.xml.h:93
+msgid "Remove all selections"
+msgstr "Remover todas as seleções"
+
+#: data/ui/glabels-ui.xml.h:95
+#, no-c-format
+msgid "Restore scale to 100%"
+msgstr "Restaura escala para 100%"
+
+#: data/ui/glabels-ui.xml.h:96
+msgid "Right align"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:99
+msgid "Rotate object 90 clockwise"
+msgstr "Gira objeto 90 sentido horário"
+
+#: data/ui/glabels-ui.xml.h:100
+msgid "Rotate object 90 counter-clockwise"
+msgstr "Gira objeto 90 sentido anti-horário"
+
+#: data/ui/glabels-ui.xml.h:101
+msgid "Save"
+msgstr "Salvar"
+
+#: data/ui/glabels-ui.xml.h:102
+msgid "Save As"
+msgstr "Salvar como"
+
+#: data/ui/glabels-ui.xml.h:103
+msgid "Save _As..."
+msgstr "Salvar _como..."
+
+#: data/ui/glabels-ui.xml.h:104
+msgid "Save the current file"
+msgstr "Salva o arquivo atual"
+
+#: data/ui/glabels-ui.xml.h:105
+msgid "Save the current file with a different name"
+msgstr "Salva o arquivo atual com um nome diferente"
+
+#: data/ui/glabels-ui.xml.h:106
+msgid "Select All"
+msgstr "Selecionar Tudo"
+
+#: data/ui/glabels-ui.xml.h:107
+msgid "Select _All"
+msgstr "Selecionar _Tudo"
+
+#: data/ui/glabels-ui.xml.h:108
+msgid "Select all objects"
+msgstr "Seleciona todos os objetos"
+
+#: data/ui/glabels-ui.xml.h:109
+msgid "Select, move and modify objects"
+msgstr "Seleciona, movimenta e modifica objetos"
+
+#: data/ui/glabels-ui.xml.h:111
+msgid "Set drawing toolbar button style according to desktop default"
+msgstr ""
+"Define estilo de botão da barra de ferramentas de desenho de acordo com "
+"padrão do desktop"
+
+#: data/ui/glabels-ui.xml.h:112
+msgid "Set main toolbar button style according to desktop default"
+msgstr ""
+"Define estilo de botão da barra de ferramentas principal de acordo com "
+"padrão do desktop"
+
+#: data/ui/glabels-ui.xml.h:113
+msgid "Show _Tooltips"
+msgstr "Exibir _Dicas"
+
+#: data/ui/glabels-ui.xml.h:114
+#, fuzzy
+msgid "Show both icons and texts in the drawing toolbar"
+msgstr "Exibe dicas na barra de ferramentas de desenho"
+
+#: data/ui/glabels-ui.xml.h:115
+#, fuzzy
+msgid "Show both icons and texts in the main toolbar"
+msgstr "Exibe dicas na barra de ferramentas principal"
+
+#: data/ui/glabels-ui.xml.h:116
+msgid "Show tooltips in the drawing toolbar"
+msgstr "Exibe dicas na barra de ferramentas de desenho"
+
+#: data/ui/glabels-ui.xml.h:117
+msgid "Show tooltips in the main toolbar"
+msgstr "Exibe dicas na barra de ferramentas principal"
+
+#: data/ui/glabels-ui.xml.h:118
+#, fuzzy
+msgid "Show tooltips in the property toolbar"
+msgstr "Exibe dicas na barra de ferramentas principal"
+
+#: data/ui/glabels-ui.xml.h:119
+msgid "Template Designer"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:120
+msgid "Template _Designer..."
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:121
+msgid "Text color"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:122
+msgid "U_n-select All"
+msgstr "D_esmarcar Tudo"
+
+#: data/ui/glabels-ui.xml.h:123
+msgid "Un-select All"
+msgstr "Desmarcar Tudo"
+
+#: data/ui/glabels-ui.xml.h:124
+msgid "Undo"
+msgstr "Desfazer"
+
+#: data/ui/glabels-ui.xml.h:125
+msgid "Undo the last action"
+msgstr "Desfaz a última ação"
+
+#: data/ui/glabels-ui.xml.h:126
+msgid "Zoom _1:1"
+msgstr "Zoom _1:1"
+
+#: data/ui/glabels-ui.xml.h:127
+msgid "Zoom _In"
+msgstr "M_ais Zoom"
+
+#: data/ui/glabels-ui.xml.h:128
+msgid "Zoom _Out"
+msgstr "M_enos Zoom"
+
+#: data/ui/glabels-ui.xml.h:129
+#, fuzzy
+msgid "Zoom to _fit"
+msgstr "Zoom para 1:1"
+
+#: data/ui/glabels-ui.xml.h:130
+msgid "Zoom to fit window"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:131
+msgid "_About..."
+msgstr "_Sobre..."
+
+#: data/ui/glabels-ui.xml.h:132
+msgid "_Bottoms"
+msgstr "_Bases"
+
+#: data/ui/glabels-ui.xml.h:135
+msgid "_Close"
+msgstr "_Fechar"
+
+#: data/ui/glabels-ui.xml.h:136
+msgid "_Contents"
+msgstr "_Conteúdo"
+
+#: data/ui/glabels-ui.xml.h:137
+msgid "_Copy"
+msgstr "_Copiar"
+
+#: data/ui/glabels-ui.xml.h:138
+msgid "_Create Object"
+msgstr "_Criar Objeto"
+
+#: data/ui/glabels-ui.xml.h:139
+msgid "_Debug"
+msgstr "_Depurar"
+
+#: data/ui/glabels-ui.xml.h:141
+msgid "_Desktop Default"
+msgstr "Padrão _Desktop"
+
+#: data/ui/glabels-ui.xml.h:142
+msgid "_Drawing Toolbar"
+msgstr "Barra de _Desenho"
+
+#: data/ui/glabels-ui.xml.h:143
+msgid "_Edit"
+msgstr "_Editar"
+
+#: data/ui/glabels-ui.xml.h:145
+msgid "_File"
+msgstr "_Arquivo"
+
+#: data/ui/glabels-ui.xml.h:146
+msgid "_Grid"
+msgstr "_Grade"
+
+#: data/ui/glabels-ui.xml.h:147
+msgid "_Help"
+msgstr "A_juda"
+
+#: data/ui/glabels-ui.xml.h:148
+msgid "_Icon"
+msgstr "_Ícone"
+
+#: data/ui/glabels-ui.xml.h:152
+msgid "_Main Toolbar"
+msgstr "Barra _Principal"
+
+#: data/ui/glabels-ui.xml.h:153
+msgid "_Merge Properties..."
+msgstr "Propriedades de _Fusão..."
+
+#: data/ui/glabels-ui.xml.h:154
+msgid "_New"
+msgstr "_Novo"
+
+#: data/ui/glabels-ui.xml.h:155
+msgid "_Objects"
+msgstr "_Objetos"
+
+#: data/ui/glabels-ui.xml.h:156
+msgid "_Open..."
+msgstr "_Abrir..."
+
+#: data/ui/glabels-ui.xml.h:158
+msgid "_Paste"
+msgstr "_Colar"
+
+#: data/ui/glabels-ui.xml.h:159
+msgid "_Print..."
+msgstr "Im_primir..."
+
+#: data/ui/glabels-ui.xml.h:160
+#, fuzzy
+msgid "_Property Toolbar"
+msgstr "Barra de _Desenho"
+
+#: data/ui/glabels-ui.xml.h:161
+msgid "_Quit"
+msgstr "_Sair"
+
+#: data/ui/glabels-ui.xml.h:164
+msgid "_Save"
+msgstr "_Salvar"
+
+#: data/ui/glabels-ui.xml.h:168
+msgid "_View"
+msgstr "_Visualizar"
+
+#: data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:2 data/glade/object-editor.glade.h:1
+#: data/glade/template-designer.glade.h:5
+msgid "*"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Line</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Text</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:7
+msgid "<span weight=\"bold\">Units</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:8 data/glade/object-editor.glade.h:4
+msgid "Alignment:"
+msgstr "Alinhamento:"
+
+#: data/glade/prefs-dialog.glade.h:9 data/glade/object-editor.glade.h:8
+msgid "Color:"
+msgstr "Cor:"
+
+#: data/glade/prefs-dialog.glade.h:10
+msgid "Font:"
+msgstr "Fonte:"
+
+#: data/glade/prefs-dialog.glade.h:11
+msgid "ISO A4"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:12
+msgid "Inches"
+msgstr "Polegadas"
+
+#: data/glade/prefs-dialog.glade.h:13 data/glade/object-editor.glade.h:19
+msgid "Line Spacing:"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:14
+msgid "Locale"
+msgstr "Local"
+
+#: data/glade/prefs-dialog.glade.h:15
+msgid "Millimeters"
+msgstr "Milímetros"
+
+#: data/glade/prefs-dialog.glade.h:16
+msgid "Object defaults"
+msgstr "Padrões do objeto"
+
+#: data/glade/prefs-dialog.glade.h:17
+msgid "Points"
+msgstr "Pontos"
+
+#: data/glade/prefs-dialog.glade.h:18
+msgid "Select default properties for new objects."
+msgstr "Selecione as propriedades padrões para novos objetos."
+
+#: data/glade/prefs-dialog.glade.h:19
+msgid "Select locale specific behavior."
+msgstr "Selecione comportamento específico do local."
+
+#: data/glade/prefs-dialog.glade.h:20 data/templates/paper-sizes.xml.h:25
+msgid "US Letter"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:21 data/glade/object-editor.glade.h:29
+#: data/glade/template-designer.glade.h:72
+msgid "Width:"
+msgstr "Largura:"
+
+#: data/glade/object-editor.glade.h:2
+msgid "00000000000 00000"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:3
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:5
+msgid "Allow merge to automatically shrink text"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:6
+msgid "Angle:"
+msgstr "Ângulo:"
+
+#: data/glade/object-editor.glade.h:7
+msgid "Checksum"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:10
+#, fuzzy
+msgid "Family:"
+msgstr "Arquivo:"
+
+#: data/glade/object-editor.glade.h:12
+msgid "Fill"
+msgstr "Preencher"
+
+#: data/glade/object-editor.glade.h:13 data/glade/template-designer.glade.h:33
+msgid "Height:"
+msgstr "Altura:"
+
+#: data/glade/object-editor.glade.h:14
+msgid "Image"
+msgstr "Imagem"
+
+#: data/glade/object-editor.glade.h:15
+msgid "Insert merge field"
+msgstr "Inserir campo de fusão"
+
+#: data/glade/object-editor.glade.h:17
+msgid "Length:"
+msgstr "Comprimento:"
+
+#: data/glade/object-editor.glade.h:18
+msgid "Line"
+msgstr "Linha"
+
+#: data/glade/object-editor.glade.h:20
+msgid "Literal:"
+msgstr "Literal:"
+
+#: data/glade/object-editor.glade.h:21
+msgid "Load image"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:22
+msgid "Position"
+msgstr "Posição"
+
+#: data/glade/object-editor.glade.h:23
+msgid "Reset image size"
+msgstr "Redefinir tamanho da imagem"
+
+#: data/glade/object-editor.glade.h:24
+msgid "Size"
+msgstr "Tamanho"
+
+#: data/glade/object-editor.glade.h:25
+#, fuzzy
+msgid "Size:"
+msgstr "Tamanho"
+
+#: data/glade/object-editor.glade.h:26
+#, fuzzy
+msgid "Style"
+msgstr "Estilo:"
+
+#: data/glade/object-editor.glade.h:27
+msgid "Style:"
+msgstr "Estilo:"
+
+#: data/glade/object-editor.glade.h:30
+msgid "X:"
+msgstr "X:"
+
+#: data/glade/object-editor.glade.h:31
+msgid "Y:"
+msgstr "Y:"
+
+#: data/glade/object-editor.glade.h:32
+msgid "degrees"
+msgstr "graus"
+
+#: data/glade/object-editor.glade.h:33
+msgid "dialog1"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:34
+msgid "digits:"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:35
+#, fuzzy
+msgid "format:"
+msgstr "Formato:"
+
+#: data/glade/template-designer.glade.h:1
+msgid "  "
+msgstr ""
+
+#: data/glade/template-designer.glade.h:2
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:3
+msgid "(e.g., 8163A)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:4
+msgid "(e.g., Avery, Acme, ...)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:6
+msgid "1. Outer radius:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:7
+msgid "1. Radius:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:8
+#, fuzzy
+msgid "1. Width:"
+msgstr "Largura:"
+
+#: data/glade/template-designer.glade.h:9
+#, fuzzy
+msgid "2. Height:"
+msgstr "Altura:"
+
+#: data/glade/template-designer.glade.h:10
+msgid "2. Inner radius:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:11
+msgid "2. Waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:12
+msgid "3. Clipping width:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:13
+msgid "3. Margin"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:14
+msgid "3. Round (radius of corner):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:15
+msgid "4. Clipping height:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:16
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:17
+msgid "5. Vert. waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:18
+msgid "5. Waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:19
+msgid "6. Margin"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:20
+msgid "Brand/Manufacturer:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:21
+msgid "CD/DVD (including credit card CDs)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:22
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:30
+msgid "Design Completed"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:31
+msgid "Distance from left edge (x0):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:32
+msgid "Distance from top edge (y0):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:34
+msgid "Horizontal pitch (dx):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:35
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:40
+msgid "Label Size (CD/DVD)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:41
+#, fuzzy
+msgid "Label Size (Round)"
+msgstr "Tamanho da etiqueta:"
+
+#: data/glade/template-designer.glade.h:42
+#, fuzzy
+msgid "Label or Card Shape"
+msgstr "Nova Etiqueta ou Cartão"
+
+#: data/glade/template-designer.glade.h:43
+msgid "Label or Card Size (Rectangular)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:44
+#, fuzzy
+msgid "Layout #1"
+msgstr "Disposição:"
+
+#: data/glade/template-designer.glade.h:45
+#, fuzzy
+msgid "Layout #2"
+msgstr "Disposição:"
+
+#: data/glade/template-designer.glade.h:46
+#, fuzzy
+msgid "Layout(s)"
+msgstr "Disposição:"
+
+#: data/glade/template-designer.glade.h:47
+#, fuzzy
+msgid "Name and Description"
+msgstr "Descrição:"
+
+#: data/glade/template-designer.glade.h:48
+msgid "Number across (nx):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:49
+msgid "Number down (ny):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:50
+msgid "Number of Layouts"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:51
+msgid "Number of layouts:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:52
+#, fuzzy
+msgid "Page Size"
+msgstr "Tamanho da página:"
+
+#: data/glade/template-designer.glade.h:54
+msgid "Part #:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:55
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:56
+msgid "Please enter the following layout information."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:57
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:58
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:59
+msgid "Please select the basic shape of the labels or cards."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:60
+msgid "Please select the page size of the template stationery."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:61
+#, fuzzy
+msgid "Print test sheet"
+msgstr "na primeira folha"
+
+#: data/glade/template-designer.glade.h:62
+msgid "Rectangular or square (can have rounded corners)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:63
+msgid "Round"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:64
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:66
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:68
+msgid "Vertical pitch (dy):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:69
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:1
+msgid "A0"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:2
+msgid "A1"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:3
+msgid "A10"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:4
+msgid "A2"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:5
+msgid "A3"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:6
+msgid "A4"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:7
+msgid "A5"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:8
+msgid "A6"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:9
+msgid "A7"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:10
+msgid "A8"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:11
+msgid "A9"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:12
+msgid "B0"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:13
+msgid "B1"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:14
+msgid "B10"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:15
+msgid "B2"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:16
+msgid "B3"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:17
+msgid "B4"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:18
+msgid "B5"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:19
+msgid "B6"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:20
+msgid "B7"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:21
+msgid "B8"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:22
+msgid "B9"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:23
+msgid "US Executive"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:24
+msgid "US Legal"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:1
+#: data/templates/zweckform-iso-templates.xml.h:1
+msgid "Address Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:2
+#: data/templates/avery-iso-templates.xml.h:2
+#: data/templates/zweckform-iso-templates.xml.h:3
+#: data/templates/misc-us-templates.xml.h:2
+#: data/templates/misc-iso-templates.xml.h:9
+msgid "Business Cards"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:3
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:4
+msgid "Diskette Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:5
+#, fuzzy
+msgid "Filing Labels"
+msgstr "Etiquetas"
+
+#: data/templates/avery-us-templates.xml.h:6
+msgid "Full Sheet Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:7
+#, fuzzy
+msgid "Large Round Labels"
+msgstr "Iniciar na etiqueta"
+
+#: data/templates/avery-us-templates.xml.h:8
+msgid "Name Badge Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:9
+msgid "Return Address Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:10
+msgid "Shipping Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:11
+#, fuzzy
+msgid "Small Round Labels"
+msgstr "Iniciar na etiqueta"
+
+#: data/templates/avery-us-templates.xml.h:12
+#, fuzzy
+msgid "Square Labels"
+msgstr "Etiquetas"
+
+#: data/templates/avery-us-templates.xml.h:13
+msgid "Video Tape Face Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:14
+msgid "Video Tape Spine Labels"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:1
+msgid "Address labels"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:3
+msgid "CD Booklet"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:4
+msgid "CD Inlet"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:5
+#: data/templates/zweckform-iso-templates.xml.h:4
+#: data/templates/misc-us-templates.xml.h:4
+#: data/templates/misc-iso-templates.xml.h:10
+#, fuzzy
+msgid "CD/DVD Labels"
+msgstr "Etiquetas"
+
+#: data/templates/avery-iso-templates.xml.h:6
+#, fuzzy
+msgid "Diskette labels"
+msgstr "Sobre glabels"
+
+#: data/templates/avery-iso-templates.xml.h:7
+#: data/templates/zweckform-iso-templates.xml.h:7
+#: data/templates/misc-iso-templates.xml.h:17
+msgid "Mailing Labels"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:8
+#, fuzzy
+msgid "Mailing labels"
+msgstr "glabels"
+
+#: data/templates/avery-iso-templates.xml.h:9
+msgid "Mini Address Labels"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:10
+#, fuzzy
+msgid "Shipping labels"
+msgstr "Abrir etiqueta"
+
+#: data/templates/zweckform-iso-templates.xml.h:2
+#, fuzzy
+msgid "Allround Labels"
+msgstr "Sobre glabels"
+
+#: data/templates/zweckform-iso-templates.xml.h:5
+msgid "Correction and Cover-up Labels"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:6
+msgid "Lever Arch File Labels"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:8
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:9
+msgid "Rectangular Copier Labels"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:10
+#: data/templates/misc-iso-templates.xml.h:22
+msgid "Rectangular Labels"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:11
+msgid "Video Labels (back)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:1
+msgid "Business Card CD"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:3
+msgid "CD Template Rectangles"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:5
+msgid "CD/DVD Labels (Face Only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:6
+#: data/templates/misc-iso-templates.xml.h:11
+msgid "CD/DVD Labels (face only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:7
+#, fuzzy
+msgid "DLT Labels"
+msgstr "Etiquetas"
+
+#: data/templates/misc-us-templates.xml.h:8
+#, fuzzy
+msgid "Microtube labels"
+msgstr "Sobre glabels"
+
+#: data/templates/misc-us-templates.xml.h:9
+msgid "Mini-CD Labels"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:10
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:11
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:12
+#: data/templates/misc-iso-templates.xml.h:21
+msgid "PRO CD Labels 2-up (face only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:13
+msgid "Slimline CD Case (rightside up)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:14
+msgid "Slimline CD Case (upside down)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:1
+msgid "Agipa 119488: Business Cards"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:2
+msgid "Allround Labels --24"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:3
+msgid "Allround Labels --44"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:4
+msgid "Allround Labels --64"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:5
+msgid "Allround Labels --65"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:7
+msgid "Arch File Labels (large)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (small)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:12
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:13
+msgid "Diskette Labels (face only)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:14
+msgid "EPSON Photo Stickers 16"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:15
+msgid "Etiketten"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:16
+msgid "Fridge Magnet Stickers"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:18
+msgid "Mailing Labels --14"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:19
+msgid "Mailing Labels-2 columns"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:20
+msgid "Mailing Labels-3 columns"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:23
+msgid "Video Labels (face only)"
+msgstr ""
+
+#: data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers."
+msgstr ""
+
+#: data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr ""
+
+#: data/mime/glabels.keys.in.h:1 data/mime/glabels.xml.in.h:1
+#, fuzzy
+msgid "gLabels Project File"
+msgstr "_Propriedades de Objeto"
+
+#~ msgid "Object _Properties..."
+#~ msgstr "_Propriedades do Objeto..."
+
+#~ msgid "Display units"
+#~ msgstr "Exibir unidades"
+
+#~ msgid "Default page size"
+#~ msgstr "Tamanho de página padrão"
+
+#~ msgid "Outline"
+#~ msgstr "Contorno"
+
+#~ msgid "Edit line object properties"
+#~ msgstr "Editar propriedades do objeto linha"
+
+#~ msgid "Edit text object properties"
+#~ msgstr "Editar propriedades do objeto texto"
+
+#~ msgid "Edit text:"
+#~ msgstr "Editar texto:"
+
+#~ msgid "Maintain current aspect ratio"
+#~ msgstr "Manter taxa de aspecto atual"
+
+#, fuzzy
+#~ msgid "CD Labels"
+#~ msgstr "Etiquetas"
+
+#~ msgid "Open %s"
+#~ msgstr "Abrir %s"
+
+#~ msgid "Scale:"
+#~ msgstr "Escala:"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "Show text with barcode"
+#~ msgstr "Exibir texto com código de barras"
+
+#~ msgid "Edit properties..."
+#~ msgstr "Editar propriedades..."
+
+#~ msgid "Fields"
+#~ msgstr "Campos"
+
+#~ msgid "Column"
+#~ msgstr "Coluna"
+
+#~ msgid "Custom field key"
+#~ msgstr "Chave do campo específico"
+
+#~ msgid "Sample data"
+#~ msgstr "Dado de amostra"
+
+#~ msgid "Revert to saved copy of %s?"
+#~ msgstr "Reverter para a cópia gravada de %s?"
+
+#~ msgid "Unknown media type. Using default."
+#~ msgstr "Tipo de mídia desconhecido. Usando padrão."
+
+#~ msgid ""
+#~ "``%s'' has been modified.\n"
+#~ "\n"
+#~ "Do you wish to save it?"
+#~ msgstr ""
+#~ "``%s'' foi modificado.\n"
+#~ "\n"
+#~ "Deseja salvá-lo?"
+
+#~ msgid "Close / Save label as"
+#~ msgstr "Fechar / Salvar etiqueta como"
+
+#~ msgid "Label no longer valid!"
+#~ msgstr "Etiqueta não é mais válida"
+
+#~ msgid "Error writing file"
+#~ msgstr "Erro gravando o arquivo"
+
+#~ msgid "Appearance"
+#~ msgstr "Aparência"
+
+#~ msgid "Position/Size"
+#~ msgstr "Posição/Tamanho"
+
+#~ msgid "Image format not currently supported"
+#~ msgstr "Formato de imagem não suportado atualmente"
+
+#~ msgid "Barcode data"
+#~ msgstr "Dado do Código de Barras:"
+
+#~ msgid "General"
+#~ msgstr "Geral"
+
+#~ msgid "Make a new, empty label"
+#~ msgstr "Criar uma etiqueta nova, vazia"
+
+#~ msgid "  New   "
+#~ msgstr "  Novo  "
+
+#~ msgid "New Label/Card"
+#~ msgstr "Nova Etiqueta/Cartão"
+
+#~ msgid "  Open  "
+#~ msgstr " Abrir  "
+
+#~ msgid "  Save  "
+#~ msgstr " Salvar "
+
+#~ msgid " Print  "
+#~ msgstr " Imprimir  "
+
+#~ msgid "Function is not implemented!"
+#~ msgstr "Função não está implementada!"
+
+#~ msgid "Function is not yet implemented!"
+#~ msgstr "Função ainda não implementada!"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644 (file)
index 0000000..1e5e15a
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,3017 @@
+# Russian translation of glabels.
+# Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Alexandre Prokoudine <alexandre.prokoudine@gmail.com>, 2009, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels 2.2.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-09-08 15:34+0400\n"
+"PO-Revision-Date: 2009-09-08 16:34+0400\n"
+"Last-Translator: Alexandre Prokoudine <alexandre.prokoudine@gmail.com>\n"
+"Language-Team: Russian <gnome-cyr@lists.gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: UTF-8\n"
+"X-Generator: KBabel 1.10\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../src/glabels.c:75 ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[ФАЙЛ...]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "— дизайнер этикеток gLabels"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "Установить название выходного файла (по умолчанию — \"output.ps\""
+
+#: ../src/glabels-batch.c:54 ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "название"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "Количество листов (по умолчанию = 1)"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "страниц"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "Количество копий (по умолчанию = 1)"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "копий"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "первая этикетка на первой странице (по умолчанию = 1)"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "первое"
+
+#: ../src/glabels-batch.c:62 ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "Печатать контуры этикеток (для тестирования выравнивания)"
+
+#: ../src/glabels-batch.c:64 ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "Печатать зеркальное отображение"
+
+#: ../src/glabels-batch.c:66 ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "Печатать метки под обрез"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "Входной файл для заполнения полей"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "— пакетная обработка файлов этикеток gLabels"
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "Не удалось выполнить заполнение полей документа файлом gLabels %s\n"
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "Не удалось открыть файл %s\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(нет открытых макетов) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(изменено)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "_Режим выделения"
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Текст"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "_Линия"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "_Прямоугольник"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_Эллипс"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "_Изображение"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "_Штрих-код"
+
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "Заполнение полей данными"
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "_Свойства объекта"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "На _передний план"
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "На _задний план"
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "Повернуть на_лево"
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "Повернуть на_право"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "Отразить _горизонтально"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "Отразить _вертикально"
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "С_лева"
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "С_права"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "По _центру"
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "По _верху"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "По низу"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "По центру"
+
+#: ../src/stock.c:93 ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "_Центр этикетки"
+
+#: ../src/stock.c:95 ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "Цвет заливки"
+
+#: ../src/stock.c:96 ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Цвет линии"
+
+#: ../src/stock.c:97 ../src/stock.c:99
+msgid "Linked"
+msgstr "Прикреплено"
+
+#: ../src/stock.c:98 ../src/stock.c:100
+msgid "Not Linked"
+msgstr "Не прикреплено"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Файл"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "Н_едавние файлы"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "_Правка"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Вид"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "Панель инструментов"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "Панель рисования"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Панель свойств"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "_Объекты"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Добавить"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "_Порядок"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "П_овернуть/Отразить"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "Выровнять по _горизонтали"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "Выровнять по _вертикали"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "_Справка"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Контекстное меню"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Создать"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Создать новый документ"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Открыть..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Открыть документ"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Сохранить"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Сохранить текущий документ"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "Сохранить _как..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Сохранить текущий документ под другим именем"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "_Напечатать..."
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Напечатать текущий файл"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Свойства..."
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Изменить свойства документа"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "Дизайнер _шаблонов..."
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Создать свой шаблон"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "_Закрыть"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Закрыть текущий файл"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "В_ыход"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Завершить работу с программой"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Вырезать"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Вырезать выделенное"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Копировать"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Скопировать выделенное"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Вставить"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Вставить из буфера"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Удалить"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Удалить выбранные объекты"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "Выделить все"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Выделить все объекты"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "Снять выделение"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Снять выделение со всех объектов"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Параметры"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Настроить программу"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Приблизить"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Уменьшить масштаб"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Отдалить"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Увеличить масштаб"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Масштаб 1:1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "Восстановить масштаб 1:1"
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "Уместить целиком в окне"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "Изменить масштаб, чтобы изображение было видно полностью"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "Режим выбора"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "Выбрать, переместить или изменить объекты"
+
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "Текст"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Добавить текст"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Прямоугольник"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "Добавить прямоугольник"
+
+#: ../src/ui.c:282 ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "Обводка"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "Добавить линию"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "Эллипс"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "Добавить эллипс/круг"
+
+#: ../src/ui.c:296 ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "Изображение"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "Добавить растровое изображение"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Штрих-код"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "Добавить штрих-код"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "На передний план"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "Переместить объект на передний план"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "На задний план"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "Переместить объект на задний план"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Повернуть влево"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr "Повернуть объект на 90 градусов против часовой стрелки"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Повернуть вправо"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "Повернуть объект на 90 градусов по часовой стрелке"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "Отразить горизонтально"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "Отразить объект горизонтально"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "Отразить вертикально"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "Отразить объект вертикально"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Выровнять по левому краю"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "Выровнять объекты по левому краю"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Выровнять по правому краю"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "Выровнять объекты по правому краю"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "Выровнять по горизонтальным центрам"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "Выровнять объекты по горизонтальным центрам"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "Выровнять по верхнему краю"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "Выровнять объекты по верхним краям"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "Выровнять по нижнему краю"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "Выровнять объекты по нижним краям"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "Выровнять по вертикальным центрам"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "Выровнять объекты по вертикальным центрам"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "Отцентрировать по горизонтали"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "Центрировать объекты по центру горизонтальной метки"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "Отцентрировать по вертикали"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "Центрировать объекты по центру вертикальной метки"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "Заполнить поля данными"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "Изменить параметры заполнения полей данными"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Содержание"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "Показать справку по gLabels"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "О программе..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "О gLabels"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "Панель свойств"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "Изменить видимость панели свойств в текущем окне"
+
+#: ../src/ui.c:444 ../src/ui.c:489 ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Показывать подсказки"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "Показывать подсказки на панели свойств"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Сетка"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr "Изменить видимость сетки в текущем окне"
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "Разметка"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Изменить видимость линии разметки в текущем окне"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "Показывать панель инструментов"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Изменить видимость главной панели инструментов в текущем окне"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "Панель рисования"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "Изменить видимость панели инструментов для рисования в текущем окне"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Показывать подсказки в главной панели инструментов"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "Показывать подсказки в панели рисования"
+
+#: ../src/ui-property-bar.c:1232 ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "По умолчанию"
+
+#: ../src/ui-property-bar.c:1239 ../src/object-editor.c:599
+msgid "No line"
+msgstr "Без обводки"
+
+#: ../src/ui-property-bar.c:1247 ../src/object-editor.c:606
+msgid "No fill"
+msgstr "Без заливки"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Свойства объекта"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "В разработке gLabels поучаствовали:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr ""
+"Подробная информация об участниках\n"
+"изложена в файле AUTHORS, а также"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "на сайте http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Программа для создания этикетов и визитных карточек.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr ""
+"Виталий Липатов <lav@altlinux.ru>, 2002-2005\n"
+"Александр Прокудин <alexandre.prokoudine@gmail.com>, 2008"
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"Glabels является свободным программным обеспечением;\n"
+"вы вправе распространять её и/или модифицировать в соответствии\n"
+"с условиями версии 2 либо по вашему выбору более поздней\n"
+"версии Стандартной Общественной Лицензии GNU, \n"
+"опубликованной Free Software Foundation.\n"
+" \n"
+"Мы распространяем данную программу в надежде на то, что она\n"
+"будет вам полезной, однако НЕ ПРЕДОСТАВЛЯЕМ НА НЕЁ НИКАКИХ\n"
+"ГАРАНТИЙ, в том числе ГАРАНТИИ ТОВАРНОГО СОСТОЯНИЯ ПРИ\n"
+"ПРОДАЖЕ И ПРИГОДНОСТИ ДЛЯ ИСПОЛЬЗОВАНИЯ В КОНКРЕТНЫХ\n"
+"ЦЕЛЯХ. Для получения более подробной информации ознакомьтесь\n"
+"со Стандартной Общественной Лицензией GNU.\n"
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "glabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Новая этикетка или визитка"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Свойства этикетки"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "Все файлы"
+
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "Документы gLabels"
+
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "Пустой выбор файла"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr "Выберите файл или введите корректное название файла"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "Файл не существует"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Невозможно открыть файл  \"%s\""
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "Файл неподдерживаемого формата"
+
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Невозможно сохранить файл \"%s\""
+
+#: ../src/file.c:517 ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "Произошла ошибка при сохранении файла.  Файл всё ещё не сохранён."
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Сохранить \"%s\" как"
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "Укажите корректное название файла"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Перезаписать файл \"%s\"?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "Файл уже существует."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Сохранить изменения в документе \"%s\" перед закрытием?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "Все изменения будут потеряны, если вы их не сохраните."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Закрыть без сохранения"
+
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "пунктов"
+
+#: ../src/prefs.c:161 ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "дюймов"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "мм"
+
+#: ../src/prefs-dialog.c:162 ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "Параметры gLabels"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "Свойства прямоугольника"
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "Свойства эллипса"
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "Свойство линии"
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "Свойства изображения"
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "Свойства текста"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "Свойства объекта типа штрих-код"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "Все файлы"
+
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "Все изображения"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr "Параметры заполнения данными"
+
+#: ../src/merge-properties-dialog.c:289 ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr "Выбрать источник данных для заполнения данными"
+
+#: ../src/merge-properties-dialog.c:298 ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr "Н/Д"
+
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "Выбрано"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr "Запись/Поле"
+
+#: ../src/merge-properties-dialog.c:340 ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "Данные"
+
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr ""
+
+#. ===================================================================
+#: ../src/print-op.c:237 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Этикетки"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "Дизайнер шаблонов gLabels"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "Добро пожаловать"
+
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "Название и описание"
+
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "Формат страницы"
+
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "Форма этикетки или визитки"
+
+#: ../src/template-designer.c:637
+#, fuzzy
+msgid "Label or Card Size"
+msgstr "Форма этикетки или визитки"
+
+#: ../src/template-designer.c:737
+#, fuzzy
+msgid "Label Size (round)"
+msgstr "Размер метки (диаметр)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "Размер метки (CD/DVD)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "Количество форм"
+
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "Формы"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr "Оформление завершено"
+
+#: ../src/template-designer.c:1253
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (любой)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (только почтовый индекс)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (любой)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A or UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Code 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Code 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Interleaved 2 of 5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Без названия"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "Данные штрих-кода не введены"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Неверные данные штрих-кода"
+
+#: ../src/xml-label.c:189 ../src/xml-label.c:226
+msgid "xmlParseFile error"
+msgstr "Ошибка при разборе файла XML"
+
+#: ../src/xml-label.c:262
+msgid "No document root"
+msgstr "Нет корня документа"
+
+#: ../src/xml-label.c:270
+msgid "Importing from glabels 0.1 format"
+msgstr "Выполняется импорт из файла gLabels версии 0.1"
+
+#: ../src/xml-label.c:279
+msgid "Importing from glabels 0.4 format"
+msgstr "Выполняется импорт из файла gLabels версии 0.4"
+
+#: ../src/xml-label.c:288
+#, fuzzy, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "документ неверного типа, неизвестное пространство имён glabels"
+
+#: ../src/xml-label.c:319 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Неверный корневой узел = \"%s\""
+
+#: ../src/xml-label.c:356
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "Неверный узел в узле документа=  \"%s\""
+
+#: ../src/xml-label.c:401 ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "неверный узел =  \"%s\""
+
+#: ../src/xml-label.c:840
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "неверный узел в узле данных=  \"%s\""
+
+#: ../src/xml-label.c:1077 ../libglabels/xml-template.c:670
+msgid "Utf8 conversion error."
+msgstr "Ошибка преобразования UTF8."
+
+#: ../src/xml-label.c:1084
+msgid "Problem saving xml file."
+msgstr "Неполадки при сохранении файла XML."
+
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "Нет"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Текст с разделителем «запятая» (CSV)"
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "Текст с разделителем «двоеточие»"
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "Текст с разделителем «символ табуляции»"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Данные из используемой по умолчанию адресной книги Evolution"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "Данные из файла, содержащего VCard"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "Не удалось сформировать запрос."
+
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "Не удалось открыть адресную книгу."
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "Не удалось перечислить доступные поля."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "Не удалось получить контактные данные."
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "Листов:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "с:"
+
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "по:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "Начать с этикетки"
+
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr "на первом листе"
+
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "Копий:"
+
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "Собирать"
+
+#: ../src/wdgt-media-select.c:288 ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297 ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309 ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609 ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "Любой вариант"
+
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d на лист"
+
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:689 ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s диаметр"
+
+#: ../src/wdgt-media-select.c:693 ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s диаметр"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "Недавно открывавшихся шаблонов не обнаружено."
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr "Попробуйте выбрать шаблон на вкладке «Поиск по шаблонам»."
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr "Нет совпадений."
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr "Попробуйте выбрать другую марку, формат страницы или категорию"
+
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "выборочно"
+
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "Заказной цвет:"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "Выберите пользовательский цвет"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "Чёрный"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "светло-коричневый"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr "золотой коричневый"
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "чёрно-зелёный №2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "морской"
+
+#: ../src/mygal/color-palette.c:577 ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "Тёмно-синий"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "пурпурный №2"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "очень тёмно-серый"
+
+#: ../src/mygal/color-palette.c:582 ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "Тёмно-красный"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "красно-оранжевый"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "Золотой"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "Тёмно-зелёный"
+
+#: ../src/mygal/color-palette.c:586 ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr "тускло-синий"
+
+#: ../src/mygal/color-palette.c:587 ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "Синий"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr "тускло-пурпурный"
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "тёмно-серый"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "красный"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "Оранжевый"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "лимонный"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr "Тускло-зелёный"
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr "тускло-синий №2"
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "небесно-синий №2"
+
+#: ../src/mygal/color-palette.c:598 ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "Пурпурный"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "серый"
+
+#: ../src/mygal/color-palette.c:602 ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "малиновый"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "ярко-оранжевый"
+
+#: ../src/mygal/color-palette.c:604 ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "Жёлтый"
+
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "Зелёный"
+
+#: ../src/mygal/color-palette.c:606 ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "Циановый"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "ярко-синий"
+
+#: ../src/mygal/color-palette.c:608 ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "красно-пурпурный"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "светло-серый"
+
+#: ../src/mygal/color-palette.c:612 ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "Розовый"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "светло-оранжевый"
+
+#: ../src/mygal/color-palette.c:614 ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "Светло-жёлтый"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "Светло-зеленый"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "Светло-циановый"
+
+#: ../src/mygal/color-palette.c:617 ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "светло-синий"
+
+#: ../src/mygal/color-palette.c:618 ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "светло-пурпурный"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "Белый"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr "пурпурно-синий"
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "тёмно-пурпурный"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "Небесно-синий"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "Фатальная ошибка gLabels!"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "Ошибка gLabels!"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "Другой"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Определено пользователем"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:1538
+#, fuzzy, c-format
+msgid "Generic %s full page template"
+msgstr "Основная %s полная страница"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr ""
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr ""
+"Неизвестный идентификатор размера страницы \"%s\", пробуем как название"
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Неизвестный идентификатор размера страницы или название \"%s\""
+
+#: ../libglabels/xml-template.c:615
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+
+#: ../libglabels/xml-template.c:625
+msgid "Name attribute also missing."
+msgstr "Атрибут имени также отсутствует."
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>Просмотр и выбор записей</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Источник</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Формат:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Расположение:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Выделить всё"
+
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "Снять выделение"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialog1"
+
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Расположение этикетки</b>"
+
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Тип носителя</b>"
+
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Xxx свойства объекта</span>"
+
+#: ../data/glade/object-editor.glade.h:5 ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Выключка:"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "При заполнении данными текст обрезаем"
+
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Угол:"
+
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Контрольная сумма"
+
+#: ../data/glade/object-editor.glade.h:9 ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Цвет:"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Отбрасывать тень"
+
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Семейство:"
+
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "Файл:"
+
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr "Заливка"
+
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Высота:"
+
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "Вставить объединительное поле"
+
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr "Ключ:"
+
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Длина:"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "Между строк:"
+
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "Код:"
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Непрозрачность:"
+
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "Расположение"
+
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Установить размер изображения по умолчанию"
+
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Выберите файл"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Тень"
+
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "Размер"
+
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Размер:"
+
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "Стиль"
+
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Стиль:"
+
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Ширина:"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "Смещение по X:"
+
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Смещение по Y:"
+
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "градусов"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr "Цифр:"
+
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "Формат:"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Размер страницы по умолчанию</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Заливка</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Обводка</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Текст</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Единицы измерения</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Шрифт:"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Дюймы"
+
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "Местные параметры"
+
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Миллиметры"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Свойства объектов по умолчанию"
+
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Пункты"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "Укажите используемые по умолчанию свойства новых объектов "
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "Укажите местные параметры"
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "US Letter"
+
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Параметры</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>Управление печатью (объединение)</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>Управление печатью (простая)</b>"
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Жирный"
+
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Выровнять по центру"
+
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Гарнитура"
+
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Размер шрифта"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Курсив"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Выровнять слева"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Толщина линии"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Выровнять справа"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Цвет текста"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "Цвет текста"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(например, «Почтовые этикетки,» «Визитные карточки,» ...)"
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(например, 8163A)"
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(например, Avery, Acme, ...)"
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Наружный радиус:"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Радиус:"
+
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Ширина:"
+
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Высота:"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Внутренний радиус:"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Пустое поле (на нём можно будет печать):"
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. Ширина для обрезки:"
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Поле"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Закругление (радиус вершины):"
+
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. Высота обрезки:"
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. Пустое гориз. пространство (может быть заполнено):"
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. Пустое верт. пространство (может быть заполнено):"
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "5. Пустое пространство (может быть заполнено):"
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Поле"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "Производитель или торговая марка:"
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (включая CD размером с визитку)"
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Поздравляем!\n"
+"\n"
+"Вы завершили создание шаблона в gLabels.\n"
+"Для сохранения результата нажмите кнопку «Применить».\n"
+"\n"
+"Вы также можете нажать кнопку «Отменить», чтобы не сохранять,\n"
+"либо кнопку «Назад», чтобы продолжить редактирование."
+
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Описание:"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "Расстояние от левого угла (x0):"
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "Расстояние от верхнего угла (y0)"
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "Интервал по горизонтали (dx):"
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"Сколько макетов будет содержать шаблон? \n"
+"\n"
+"Макет — это набор этикеток или визиток, которые могут быть распределены по "
+"простой сетке.\n"
+"Большинству шаблонов требуется только один макет, как в первом примере.\n"
+"Второй пример иллюстрирует случай, когда необходимо применять два макета."
+
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Макет №1"
+
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Макет №2"
+
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "По горизонтали (nx):"
+
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "По вертикали (ny):"
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Количество макетов:"
+
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Формат страницы:"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "Часть №:"
+
+#: ../data/glade/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr "Укажите следующую идентификационную информацию для бланка."
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "Введите следующую информацию об оформлении."
+
+#: ../data/glade/template-designer.glade.h:46
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr "Введите геометрические размеры одиночной этикетки в вашем шаблоне."
+
+#: ../data/glade/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"Введите геометрические размеры одиночной этикетки или визитки в вашем "
+"шаблоне."
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "Выберите основную фигуру этикетки или карточки."
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "Выберите размер страницы для шаблона."
+
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "Напечатать тестовую страницу"
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Прямоугольник или квадрат (может иметь скруглённые края)"
+
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "Круг"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"Для данного шаблона\n"
+"требуется две формы."
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"Для данного шаблона требуется\n"
+"только одна форма."
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "Интервал по вертикали (dy):"
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Добро пожаловать в Дизайнер шаблонов gLabels.\n"
+"\n"
+"Этот диалог будет сопровождать вас в создании вашего собственного шаблона "
+"gLabels."
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr ""
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "Марка:"
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Категория:"
+
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Недавние шаблоны"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Поиск по шаблонам"
+
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "С поворотом"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "US Executive"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "US Legal"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "Любые карточки"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "Любые этикетки"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Визитные карточки"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD и прочие носители"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "Корреспонденция"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Прямоугольные этикетки"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Круглые этикетки"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "Квадратные этикетки"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Этикетка с адресом"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Адресные наклейки"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+#, fuzzy
+msgid "Allround labels"
+msgstr "Маленькие круглые этикетки"
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Визитные карточки"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "Вкладыш в CD"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "Буклет для CD"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "Этикетки для CD/DVD"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr "Наклейки на дискеты"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "Наклейки на дискеты"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:18
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "Почтовые этикетки"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "Почтовые наклейки"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "Маленькие наклейки с адресом"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+#, fuzzy
+msgid "Mini Labels"
+msgstr "Этикетки для Мини-CD"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "Ценники"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "Наклейки для папок"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "Наклейки для CD/DVD (наклейки на диск)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "Наклейки на CD/DVD"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+#, fuzzy
+msgid "Divider Labels"
+msgstr "Этикетки для CD"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "Заполняемые этикетки"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "Этикетки на всю страницу"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "Идентификационные этикетки"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+#, fuzzy
+msgid "Index Cards"
+msgstr "Визитные карточки"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Этикетки с большим закруглением"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "Именной бейджик"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "Почтовые открытки"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "Наклейка для обратного адреса"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "Round Labels"
+msgstr "Круглые этикетки"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "Ценники"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Маленькие круглые этикетки"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "Прямоугольные этикетки"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "Лицевые наклейки на видеокассету"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "Торцевые наклейки на видеокассету"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr ""
+
+#: ../data/templates/brother-other-templates.xml.h:2
+#, fuzzy
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Ценники"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+#, fuzzy
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "Этикетка с адресом"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "Дискета 3,5 дюйма"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "Папка для файлов"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "Большие наклейки с адресом"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+#, fuzzy
+msgid "Shipping Address Labels"
+msgstr "Маленькие наклейки с адресом"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+#, fuzzy
+msgid "Arch File Labels"
+msgstr "Файл"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+#, fuzzy
+msgid "Arch File Labels (large)"
+msgstr "Файл большой"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+#, fuzzy
+msgid "Arch File Labels (small)"
+msgstr "Файл маленький"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "Этикетки для CD"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr "Вкладыши CD/DVD (лицевая сторона)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "Наклейки стандартного формата для CD/DVD (лицевая сторона)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "Наклейки для дискет (лицевая сторона)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "EPSON Photo Stickers 16"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Этикетки"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "Магнитные стикеры для холодильника"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Этикетки общего назначения"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:26
+#, fuzzy
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "CD"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Прямоугольные метки"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr "Наклейки на видеокассеты (лицевая сторона)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+#, fuzzy
+msgid "Multi-Purpose Labels"
+msgstr "Этикетки для Microtube"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "Визитная карточка на CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "Прямоугольный шаблон для CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "Наклейки для CD/DVD (лицевая сторона)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "Наклейки на кассеты"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "Этикетки на DLT"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:20
+msgid "Microtube labels"
+msgstr "Этикетки для Microtube"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Mini-CD Labels"
+msgstr "Этикетки для Мини-CD"
+
+#: ../data/templates/misc-us-templates.xml.h:23
+#, fuzzy
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "CD CD"
+
+#: ../data/templates/misc-us-templates.xml.h:24
+#, fuzzy
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Slimline CD Case (rightside up)"
+msgstr "Тонкие коробки для CD (правая сторона вверху)"
+
+#: ../data/templates/misc-us-templates.xml.h:31
+msgid "Slimline CD Case (upside down)"
+msgstr "Тонкие коробки для CD (кверх ногами)"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Исправляющие и покрывающие метки"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+#, fuzzy
+msgid "File Back Labels"
+msgstr "Заполняемые этикетки"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+#, fuzzy
+msgid "Lever Arch File Labels"
+msgstr "Файл"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+#, fuzzy
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "x"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "Видеонаклейки (оборотная сторона)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Создание этикеток, визитных карточек и вкладышей для дисков"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "Дизайнер этикеток gLabels"
+
+#: ../data/mime/glabels.keys.in.h:1 ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "Файл проекта gLabels"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: неизвестный ключ `--%s'\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: неизвестный ключ `%c%s'\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: некорректный ключ -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ключу необходим аргумент -- %c\n"
+
+#, fuzzy
+#~ msgid "Launch gLabels label and business card designer."
+#~ msgstr "Программа для создания этикеток и визитных карточек\n"
+
+#~ msgid "Print files created with gLabels."
+#~ msgstr "Напечатать созданные в gLabels файлы."
+
+#~ msgid "IEC18004 (QRCode)"
+#~ msgstr "IEC18004 (QRCode)"
+
+#~ msgid "Default Color"
+#~ msgstr "Цвет по умолчанию"
+
+#~ msgid "Dark Red"
+#~ msgstr "Тёмно-красный"
+
+#~ msgid "Brown"
+#~ msgstr "Коричневый"
+
+#~ msgid "Dark Goldenrod"
+#~ msgstr "Темный золотарник"
+
+#~ msgid "Dark Green"
+#~ msgstr "Тёмно-зелёный"
+
+#~ msgid "Dark Cyan"
+#~ msgstr "Темно-циановый"
+
+#~ msgid "Navy Blue"
+#~ msgstr "Тёмно-синий"
+
+#~ msgid "Dark Violet"
+#~ msgstr "Тёмно-фиолетовый"
+
+#~ msgid "Red"
+#~ msgstr "Красный"
+
+#~ msgid "Dark Yellow"
+#~ msgstr "Темно-желтый"
+
+#~ msgid "Turquoise"
+#~ msgstr "Бирюзовый"
+
+#~ msgid "Salmon"
+#~ msgstr "Сомон"
+
+#~ msgid "SkyBlue"
+#~ msgstr "Небесно-синий"
+
+#~ msgid "Violet"
+#~ msgstr "Фиолетовый"
+
+#~ msgid "Khaki"
+#~ msgstr "Хаки"
+
+#~ msgid "Light Green"
+#~ msgstr "Светло-зелёный"
+
+#~ msgid "Slate Gray"
+#~ msgstr "Аспидно-серый"
+
+#~ msgid "Thistle"
+#~ msgstr "Чертополох"
+
+#~ msgid "10% Gray"
+#~ msgstr "10% серый"
+
+#~ msgid "25% Gray"
+#~ msgstr "25% серый"
+
+#~ msgid "40% Gray"
+#~ msgstr "40% серый"
+
+#~ msgid "50% Gray"
+#~ msgstr "50% серый"
+
+#~ msgid "60% Gray"
+#~ msgstr "60% серый"
+
+#~ msgid "Custom Color #%u"
+#~ msgstr "Заказной цвет #%u"
+
+#~ msgid "Normal"
+#~ msgstr "Обычное"
+
+#~ msgid "         "
+#~ msgstr "         "
+
+#~ msgid "  "
+#~ msgstr "  "
+
+#~ msgid "Could not initialize Bonobo!\n"
+#~ msgstr "Невозможно инициализировать Bonobo!\n"
+
+#~ msgid "print this message"
+#~ msgstr "напечатать это сообщение"
+
+#~ msgid "print the version of glabels-batch being used"
+#~ msgstr "выводит версию используемого glabels-batch"
+
+#~ msgid "[OPTION...] GLABELS_FILE..."
+#~ msgstr "[ПАРАМЕТРЫ...] файл_glabels..."
+
+#~ msgid "missing glabels file\n"
+#~ msgstr "не указан файл glabels\n"
+
+#~ msgid "Open"
+#~ msgstr "Открыть"
+
+#~ msgid "Align _Horizontally"
+#~ msgstr "Выровнять _горизонтально"
+
+#~ msgid "Align _Vertically"
+#~ msgstr "Выровнять _вертикально"
+
+#~ msgid "_Delete"
+#~ msgstr "У_далить"
+
+#~ msgid "Print"
+#~ msgstr "Напечатать"
+
+#~ msgid "_Job"
+#~ msgstr "_Задание"
+
+#~ msgid "P_rinter"
+#~ msgstr "П_ринтер"
+
+#~ msgid "Copies"
+#~ msgstr "Копий"
+
+#~ msgid "Document merge control"
+#~ msgstr "Управление объединением"
+
+#~ msgid "Print preview"
+#~ msgstr "Просмотреть"
+
+#~ msgid "Importing from glabels 1.91 format"
+#~ msgstr "Импортируем из формата glabels версии 1.91"
+
+#~ msgid "Label size:"
+#~ msgstr "Размер этикетки:"
+
+#~ msgid "Layout:"
+#~ msgstr "Формат:"
+
+#~ msgid "%d x %d  (%d per sheet)"
+#~ msgstr "%d x %d (%d на лист)"
+
+#~ msgid "No paper files found!"
+#~ msgstr "Не найдены файлы описания бумаги!"
+
+#~ msgid "Close"
+#~ msgstr "Закрыть"
+
+#~ msgid "Cu_t"
+#~ msgstr "_Вырезать"
+
+#~ msgid "Customize"
+#~ msgstr "Настроить"
+
+#~ msgid "Customize toolbars"
+#~ msgstr "Настроить панель инструментов"
+
+#~ msgid "Dump XML"
+#~ msgstr "Дамп XML"
+
+#~ msgid "Dump the UI Xml description"
+#~ msgstr "Дамп XML-описания UI"
+
+#~ msgid "Font selector"
+#~ msgstr "Выбор шрифта"
+
+#~ msgid "Icon and _Text"
+#~ msgstr "Пиктограмма и _Текст"
+
+#~ msgid "M_arkup"
+#~ msgstr "_Разметка"
+
+#~ msgid "New"
+#~ msgstr "Создать"
+
+#~ msgid "Object property editor"
+#~ msgstr "Редактор свойств объекта"
+
+#~ msgid "Only show icons in the main toolbar"
+#~ msgstr "Показывать только картинки в главной панели инструментов"
+
+#~ msgid "Pr_eferences..."
+#~ msgstr "_Настроить..."
+
+#~ msgid "Properties"
+#~ msgstr "Свойства"
+
+#~ msgid "Quit"
+#~ msgstr "Выйти"
+
+#~ msgid "Redo the undone action"
+#~ msgstr "Повторить отменённое действие"
+
+#~ msgid "Save"
+#~ msgstr "Сохранить"
+
+#~ msgid "Save As"
+#~ msgstr "Сохранить как"
+
+#~ msgid "Select _All"
+#~ msgstr "Выбрать вс_ё"
+
+#~ msgid "Set main toolbar button style according to desktop default"
+#~ msgstr ""
+#~ "Установить стиль кнопок главной панели инструментов согласно настройкам "
+#~ "рабочего стола"
+
+#~ msgid "Show both icons and texts in the main toolbar"
+#~ msgstr "Показывать и пиктограммы и текст в главной панели инструментов"
+
+#~ msgid "Template Designer"
+#~ msgstr "Дизайнер шаблонов"
+
+#~ msgid "U_n-select All"
+#~ msgstr "_Снять выделение со всего"
+
+#~ msgid "Undo"
+#~ msgstr "Отменить"
+
+#~ msgid "Undo the last action"
+#~ msgstr "Отменить последнее действие"
+
+#~ msgid "_About..."
+#~ msgstr "_О программе..."
+
+#~ msgid "_Bottoms"
+#~ msgstr "По _низу"
+
+#~ msgid "_Contents"
+#~ msgstr "_Содержание справки"
+
+#~ msgid "_Copy"
+#~ msgstr "_Запомнить"
+
+#~ msgid "_Create Object"
+#~ msgstr "_Создать объект"
+
+#~ msgid "_Debug"
+#~ msgstr "_Отладка"
+
+#~ msgid "_Desktop Default"
+#~ msgstr "_Согласно настройкам рабочего стола"
+
+#~ msgid "_Drawing Toolbar"
+#~ msgstr "Показывать панель _рисования"
+
+#~ msgid "_Icon"
+#~ msgstr "_Пиктограмма"
+
+#~ msgid "_Main Toolbar"
+#~ msgstr "Показывать панель _инструментов"
+
+#~ msgid "_Merge Properties..."
+#~ msgstr "_Свойства объединения..."
+
+#~ msgid "_Paste"
+#~ msgstr "Вст_авить"
+
+#~ msgid "_Property Toolbar"
+#~ msgstr "Показывать панель с_войств"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Load image"
+#~ msgstr "Загрузить изображение"
+
+#~ msgid "Label or Card Size (Rectangular)"
+#~ msgstr "Развер этикетки или визитки (прямоугольник)"
diff --git a/po/sl.po b/po/sl.po
new file mode 100644 (file)
index 0000000..ff7d034
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,2884 @@
+# Slovenian translation for glabels.
+# Copyright (C) 2009 glabels's COPYRIGHT HOLDER
+# This file is distributed under the same license as the glabels package.
+#
+# Andrej Žnidaršič <andrej.znidarsic@gmail.com>, 2009 - 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels master\n"
+"Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?group_id=46122&ati\n"
+"POT-Creation-Date: 2010-03-20 14:05+0000\n"
+"PO-Revision-Date: 2010-03-20 17:02+0100\n"
+"Last-Translator: Andrej Žnidaršič <andrej.znidarsic@gmail.com>\n"
+"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../src/glabels.c:75
+#: ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[DATOTEKA...]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- snovalnik nalepk gLabels"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "nastavi odvodno ime datoteke (privzeto=\"output.pdf\")"
+
+#: ../src/glabels-batch.c:54
+#: ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "ime datoteke"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "število delovnih listov (privzeto=1)"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr "delovni listi"
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "število kopij (privzeto=1)"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "kopije"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr "prva nalepka na prvem delovnem listu (privzeto=1)"
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr "prva"
+
+#: ../src/glabels-batch.c:62
+#: ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr "natisni orise (za preizkus poravnave tiskalnika)"
+
+#: ../src/glabels-batch.c:64
+#: ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "natisni obrnjeno (to je zrcalna slika)"
+
+#: ../src/glabels-batch.c:66
+#: ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "natisni oznake obrezave"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr "vhodna datoteka za združevanje"
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr "- paketno obdelovanje datotek gLabels nalepk"
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr "združevanja dokumenta z glabels datoteko %s ni mogoče izvesti\n"
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "Datoteke glables %s ni mogoče odpreti\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(brez) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr " (spremenjeno)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr "_Način izbora"
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Besedilo"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "Č_rta"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "_Okvir"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_Elipsa"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "Sl_ika"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "Črtna _koda"
+
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr "_Združi lastnosti"
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "Lastnosti _predmeta"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr "Prinesi v _ospredje"
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr "Pošlji _nazaj"
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr "Zavrti _levo"
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr "Zavrti _desno"
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr "Zrcali _vodoravno"
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr "Zrcali _navpično"
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr "_Levo"
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr "_Desno"
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr "_Središča"
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr "_Vrhovi"
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr "Dna"
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr "Središča"
+
+#: ../src/stock.c:93
+#: ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr "Sre_dišče nalepke"
+
+#: ../src/stock.c:95
+#: ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr "Barva polnila"
+
+#: ../src/stock.c:96
+#: ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Barva črte"
+
+#: ../src/stock.c:97
+#: ../src/stock.c:99
+msgid "Linked"
+msgstr "Povezano"
+
+#: ../src/stock.c:98
+#: ../src/stock.c:100
+msgid "Not Linked"
+msgstr "Nepovezano"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Datoteka"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "Odpri nedavne _datoteke"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "_Uredi"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Pogled"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "Prilagodi glavno orodno vrstico"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "Prilagodi orodno vrstico risanja"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Prilagodi orodno vrstico lastnosti"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "P_redmeti"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Ustvari"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "_Razvrsti"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "_Zavrti/zrcali"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "_Vodoravna poravnava"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "_Navpična poravnava"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "Pomo_č"
+
+#. Popup entries.
+#: ../src/ui.c:109
+#: ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Vsebinski meni"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Novo"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Ustvarjanje nove datoteke"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Odpri ..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Odpiranje datoteke"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Shrani"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Shranjevanje trenutne datoteke"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "Shrani _kot ..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Shranjevanje trenutne datoteke z drugim imenom"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "Na_tisni ..."
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Tiskanje trenutne datoteke"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Lastnosti ..."
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Spreminjanje lastnosti dokumenta"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "_Snovalnik predlog ..."
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Ustvarjanje predloge po meri"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "_Zapri"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Zapri trenutno datoteko"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "_Končaj"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Končanje programa"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Izreži"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Izrez izbora"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Kopiraj"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Kopiranje izbora"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Prilepi"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Prilepi iz odložišča"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Izbriši"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Izbriši izbrane predmete"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "Izberi vse"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Izbor vseh predmetov"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "Odstrani izbor vsega"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Odstrani vse izbore"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Nastavitve"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Nastavitev programa"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Približaj"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Približaj predmet"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Oddalji"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Oddalji predmet"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Velikost 1:1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "Obnavljanje velikosti na 100%"
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "Prilagodi oknu"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "Prilagajanje velikost oknu"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "Način izbiranja"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "Izbor, premikanje in spreminjanje predmetov"
+
+#: ../src/ui.c:268
+#: ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "Besedilo"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Ustvarjanje besedilnega predmeta"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Okvir"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "Ustvarjanje okvirja/pravokotnika"
+
+#: ../src/ui.c:282
+#: ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "Črta"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "Ustvarjanje črte"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "Elipsa"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "Ustvarjanje elipse/kroga"
+
+#: ../src/ui.c:296
+#: ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "Slika"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "Ustvarjanje slikovnega predmeta"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Črtna koda"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "Ustvarjanje predmeta črtne kode"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "Prinesi v ospredje"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "Vzdigni predmet na vrh"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "Pošlji nazaj"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "Spusti predmet na dno"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Zavrti levo"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr "Vrtenje predmeta 90 stopinj v levo"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Zavrti desno"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "Vrtenje predmeta 90 stopinj v desno"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "Zrcali vodoravno"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "Zrcaljenje predmeta vodoravno"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "Zrcali navpično"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "Zrcaljenje predmeta navpično"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Poravnava levo"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "Poravnava predmetov na levi rob"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Poravnava desno"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "Poravnava predmetov na desni rob"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "Poravnava vodoravne sredine"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "Poravnava predmetov na vodoravno središče"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "Poravnava vrhov"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "Poravnava predmetov na zgornji rob"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "Poravnava dnov"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "Poravnava predmetov na spodni rob"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "Poravnava navpične sredine"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "Poravnava predmetov na navpično središče"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "Sredini vodoravno"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "Sredinjenje predmetov na vodoravno središče nalepke"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "Sredini navpično"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "Sredinjenje predmetov na navpično središče nalepke"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "Lastnosti združevanja"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "Urejanje lastnosti združevanja"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Vsebina"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "Odpri priročnik glables"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "O programu ..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "O glables"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "Orodna vrstica lastnosti"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "Sprememba vidnosti orodne vrstice lastnosti v trenutnem oknu"
+
+#: ../src/ui.c:444
+#: ../src/ui.c:489
+#: ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Pokaži namige"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr "Pokaži namige za orodno vrstico lastnosti"
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Mreža"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr "Sprememba vidnosti mreže v trenutnem oknu"
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr "Označeno"
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr "Sprememba vidnosti črt nalepke v trenutnem oknu"
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr "Glavna orodna vrstica"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "Sprememba vidnosti glavne orodne vrstice v trenutnem oknu"
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr "Orodna vrstica risanja"
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "Sprememba vidnosti orodne vrstice risanja v trenutnem oknu"
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Pokaži namige za glavno orodno vrstico"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr "Pokaži namige za orodno vrstico risanja"
+
+#: ../src/ui-property-bar.c:1232
+#: ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "Privzeto"
+
+#: ../src/ui-property-bar.c:1239
+#: ../src/object-editor.c:599
+msgid "No line"
+msgstr "Brez črte"
+
+#: ../src/ui-property-bar.c:1247
+#: ../src/object-editor.c:606
+msgid "No fill"
+msgstr "Brez polnila"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Lastnosti predmeta"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "Glabels vključuje prispevke od:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Poglejte si datoteko AUTHORS za celotne zasluge,"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "ali pa obiščite http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Program za snovanje nalepk in poslovnih vizitk.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr "Andrej Žnidaršič <andrej.znidarsic@gmail.com>"
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"Ta program je prosta programska oprema; lahko ga redistribuirate in/ali\n"
+"spreminjate pod pogoji GNU General Public Licence kot je objavljena\n"
+"s strani Free Software Foundation; ali različico 2 Licence ali (na vašo željo)\n"
+" katerakoli kasnejša različica.\n"
+"\n"
+"Ta program je distribuiran v upanju da bo uporaben,\n"
+"toda BREZ KAKRŠNIHKOLI ZAGOTOVIL; tudi brez impliciranih\n"
+"zagotovila za PRODAJO ali PRIMERNOST ZA DOLOČEN NAMEN.\n"
+" Oglejte si GNU General Public Licence za več podrobnosti.\n"
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "glabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Nova nalepka ali vizitka"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Lastnosti nalepke"
+
+#: ../src/file.c:292
+#: ../src/file.c:578
+msgid "All files"
+msgstr "Vse datoteke"
+
+#: ../src/file.c:297
+#: ../src/file.c:583
+msgid "gLabels documents"
+msgstr "Dokumenti gLabels"
+
+#: ../src/file.c:343
+#: ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "Prazen izbor imena datoteke"
+
+#: ../src/file.c:346
+#: ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr "Izberite datoteko ali vpišite veljavno ime datoteke"
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "Datoteka ne obstaja"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Datoteke \"%s\" ni mogoče odpreti"
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "Ni podprt zapis datoteke"
+
+#: ../src/file.c:513
+#: ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Datoteke \"%s\" ni mogoče shraniti"
+
+#: ../src/file.c:517
+#: ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "Med shranjevanjem je prišlo do napake. Datoteka še vedno ni shranjena."
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Shrani \"%s\" kot"
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr "Vnesite veljavno ime datoteke"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Ali naj bo datoteka \"%s\" prepisana?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "Datoteka že obstaja."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Ali želite pred zapiranjem shraniti spremembe v dokumentu \"%s\"?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "V primeru, da sprememb na shranite, bodo trajno izgubljene."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Zapri brez shranjevanja"
+
+#. Should not happen
+#: ../src/prefs.c:159
+#: ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "točke"
+
+#: ../src/prefs.c:161
+#: ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "palcev"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "mm"
+
+#: ../src/prefs-dialog.c:162
+#: ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "Nastavitve programa"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "Lastnosti okvirja"
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr "Lastnosti elipse"
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr "Lastnosti črte"
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr "Lastnosti slike"
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr "Lastnosti besedila"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "Lastnosti črtne kode"
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "Vse datoteke"
+
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "Vse slike"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr "Lastnosti združevanja"
+
+#: ../src/merge-properties-dialog.c:289
+#: ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr "Izbor vira podatkovne zbirke za združevanje"
+
+#: ../src/merge-properties-dialog.c:298
+#: ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr "N/A"
+
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "Izberi"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr "Posnemi/polje"
+
+#: ../src/merge-properties-dialog.c:340
+#: ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "Podatki"
+
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr "Nespremenljivo"
+
+#. ===================================================================
+#: ../src/print-op.c:237
+#: ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Nalepke"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "Snovalnik predlog gLables"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "Dobrodošli"
+
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "Ime in opis"
+
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "Velikost strani"
+
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "Oblika vizitke ali nalepke"
+
+#: ../src/template-designer.c:637
+msgid "Label or Card Size"
+msgstr "Velikost vizitke ali nalepke"
+
+#: ../src/template-designer.c:737
+msgid "Label Size (round)"
+msgstr "Velikost nalepke (okrogla)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "Velikost nalepke (CD/DVD)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "Število razporeditev"
+
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "Razporeditev"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr "Snovanje je končano"
+
+#: ../src/template-designer.c:1253
+msgid "<span foreground='red' weight='bold'>Brand and part# match an existing template!</span>"
+msgstr "<span foreground='red' weight='bold'>Znamka in številka dela se skladata z obstoječo predlogo!</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (any)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (ZIP only)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (katerakoli)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A or UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Koda 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Koda 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Koda 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Koda 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Prepleteno 2 od 5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Številka črtne kode"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (Podatkovna matrika)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Brez naslova"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "Podatki črtne kode so prazni"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Neveljavni podatki črtne kode"
+
+#: ../src/xml-label.c:193
+msgid "xmlParseFile error"
+msgstr "napaka xml datoteke razčlenjevanja"
+
+#: ../src/xml-label.c:234
+msgid "xmlParseDoc error"
+msgstr "napaka xmlParseDoc"
+
+#: ../src/xml-label.c:270
+msgid "No document root"
+msgstr "Ni korena dokumenta"
+
+#: ../src/xml-label.c:278
+msgid "Importing from glabels 0.1 format"
+msgstr "Uvažanje iz zapisa glables 0.1"
+
+#: ../src/xml-label.c:287
+msgid "Importing from glabels 0.4 format"
+msgstr "Uvažanje iz zapisa glables 0.4"
+
+#: ../src/xml-label.c:296
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "Neznan imenski prostor glables -- uporaba %s"
+
+#: ../src/xml-label.c:327
+#: ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "Slabo korensko vozlišče = \"%s\""
+
+#: ../src/xml-label.c:364
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "slabo vozlišče v vozlišču dokumenta = \"%s\""
+
+#: ../src/xml-label.c:409
+#: ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "slabo vozlišče = \"%s\""
+
+#: ../src/xml-label.c:851
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "slabo vozlišče v podatkovnem vozlišču  = \"%s\""
+
+#: ../src/xml-label.c:1088
+#: ../libglabels/xml-template.c:682
+msgid "Utf8 conversion error."
+msgstr "Napaka pretvarjanja Utf8."
+
+#: ../src/xml-label.c:1095
+msgid "Problem saving xml file."
+msgstr "Težava med shranjevanjem xml datoteke."
+
+#: ../src/merge.c:170
+#: ../src/merge.c:211
+#: ../src/merge.c:375
+#: ../src/merge.c:378
+msgid "None"
+msgstr "Brez"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "Besedila datoteka ločena z vejicami (CSV)"
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr "Besedila datoteka ločena s stolpci"
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr "Besedila datoteka ločena s tabulatorji"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "Podatki iz privzetega imenika Evolution"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "Podatki iz datoteke, ki vsebuje VCards"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "Poizvedbe ni mogoče izgraditi"
+
+#: ../src/merge-evolution.c:315
+#: ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "Imenika ni mogoče odpreti."
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "Dostopnih polj ni mogoče razvrstiti."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "Stikov ni mogoče dobiti."
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "Listi:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "od:"
+
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "za:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "Začni na nalepki"
+
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr "na prvem listu"
+
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "Kopije:"
+
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "Združi"
+
+#: ../src/wdgt-media-select.c:288
+#: ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297
+#: ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309
+#: ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609
+#: ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "Katerikoli"
+
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d na list"
+
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:689
+#: ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s premer"
+
+#: ../src/wdgt-media-select.c:693
+#: ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s premer"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "Nedavnih predlog ni mogoče najti."
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr "Poskusite izbrati predlogo s strani \"Išči vse predloge\"."
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr "Ni skladanja."
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr "Poskusite z izbiro druge znamke, velikosti strani ali kategorije."
+
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "po meri"
+
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "Barva po meri:"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "Izberite barvo po meri"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "črna"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "svetlo rjava"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr "rjavo zlata"
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "temno zelena 2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "mornarska"
+
+#: ../src/mygal/color-palette.c:577
+#: ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "temno modra"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "vijolična 2"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "zelo temno siva"
+
+#: ../src/mygal/color-palette.c:582
+#: ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "temno rdeča"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "rdeče-oranžna"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "zlata"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "temno zelena"
+
+#: ../src/mygal/color-palette.c:586
+#: ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr "mračno modra"
+
+#: ../src/mygal/color-palette.c:587
+#: ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "modra"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr "mračno vijolična"
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "temno siva"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "rdeča"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "oranžna"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "rumeno-zelena"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr "mračno zelena"
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr "mračno modra 2"
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "nebeško modra 2"
+
+#: ../src/mygal/color-palette.c:598
+#: ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "vijolična"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "siva"
+
+#: ../src/mygal/color-palette.c:602
+#: ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "škrlatna"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "bistro oranžna"
+
+#: ../src/mygal/color-palette.c:604
+#: ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "rumena"
+
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "zelena"
+
+#: ../src/mygal/color-palette.c:606
+#: ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "sinja"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "bistro modra"
+
+#: ../src/mygal/color-palette.c:608
+#: ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "rdeče vijolična"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "svetlo siva"
+
+#: ../src/mygal/color-palette.c:612
+#: ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "roza"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "svetlo oranžna"
+
+#: ../src/mygal/color-palette.c:614
+#: ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "svetlo rumena"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "svetlo zelena"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "svetlo sinja"
+
+#: ../src/mygal/color-palette.c:617
+#: ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "svetlo modra"
+
+#: ../src/mygal/color-palette.c:618
+#: ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "svetlo vijolična"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "bela"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr "vijolično modra"
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "temo vijolična"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "nebeško modra"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "Usodna napaka gLables!"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "Napaka gLables!"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "Ostalo"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Uporabniško določeno"
+
+#: ../libglabels/db.c:482
+msgid "Unable to locate paper size definitions.  Libglabels may not be installed correctly!"
+msgstr "Definicij velikosti papirja ni mogoče najti. Libglabels morda ni pravilno nameščen!"
+
+#: ../libglabels/db.c:875
+msgid "Unable to locate category definitions.  Libglabels may not be installed correctly!"
+msgstr "Definicij kategorije ni mogoče najti. Libglabels morda ni pravilno nameščen!"
+
+#: ../libglabels/db.c:1461
+msgid "Unable to locate any template files.  Libglabels may not be installed correctly!"
+msgstr "Datotek predlog ni mogoče najti. Libglabels morda ni pravilno nameščen!"
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "Splošna predloga cele strani %s"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "Manjkajoče ime ali atributa znamke/dela."
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "Neznan id velikosti strani \"%s\", poskušanje kot ime"
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "Neznan id velikosti strani ali ime \"%s\""
+
+#: ../libglabels/xml-template.c:627
+msgid "Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr "Zahtevan atribut \"znamka\" ali \"del\" manjka; poskušanje s skrajšanim imenom. "
+
+#: ../libglabels/xml-template.c:637
+msgid "Name attribute also missing."
+msgstr "Atributi imena manjkajo."
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>Posnemi izbiro/predogled</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Vir</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Zapis:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Mesto:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Izberi vse"
+
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "Prekliči izbor vsega"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "pogovorno okno 1"
+
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Usmeritev nalepke</b>"
+
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Vrsta medija</b>"
+
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">lastnosti predmeta Xxx</span>"
+
+#: ../data/glade/object-editor.glade.h:5
+#: ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Poravnava:"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "Dovoli samodejno skrčenje besedila ob združevanju"
+
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Kot:"
+
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Nadzorna vsota"
+
+#: ../data/glade/object-editor.glade.h:9
+#: ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Barva:"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Omogoči senco"
+
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Družina:"
+
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "Datoteka:"
+
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr "Polnilo"
+
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Višina:"
+
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "Vstavi polje združevanja"
+
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr "Ključ:"
+
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Dolžina:"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "Razmik vrstic:"
+
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "Dosledno:"
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Prekrivnost:"
+
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "Lega"
+
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Ponastavi velikost slike"
+
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Izbor datoteke"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Senca"
+
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "Velikost"
+
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Velikost:"
+
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "Slog"
+
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Slog:"
+
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Širina:"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "Odmik X osi:"
+
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Odmik Y osi:"
+
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "stopinje"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr "številke:"
+
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "oblika:"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">Privzeta velikost strani</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">Polnilo</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Črta</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Besedilo</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Enote</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Pisava:"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Palci"
+
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "Jezikovna oznaka"
+
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Milimetri"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Privzete vrednosti predmeta"
+
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Točke"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "Izbor privzeti lastnosti za nove predmete."
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr "Izberite z jezikovno oznako določeno obnašanje."
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "Ameriško pismo"
+
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Možnosti</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>Nadzor tiskanja (združi)</B>"
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>Nadzor tiskanja (preprost)</b>"
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Krepko"
+
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Poravnava na sredino"
+
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Družina pisav"
+
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Velikost pisave"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Ležeče"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Poravnava levo"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Širine vrstice"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Poravnava desno"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Barva besedila"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "Barva besedila"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(na primer \"Poštne nalepke\", \"Poslovne vizitke\" ...)"
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(na primer 1000)"
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(na primer Mobitel, Simobil, ...)"
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Zunanji polmer:"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Polmer:"
+
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Širina"
+
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Višina:"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Notranji polmer:"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr "2. Vmesni prostor:"
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr "3. Širina odreza:"
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Obroba"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Okroglo (polmer kota):"
+
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr "4. Višina odreza:"
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "5. Vodoravni vmesni prostor:"
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. Navpični vmesni prostor:"
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr "5. Vmesni prostor:"
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Obroba"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr "Znamka/Izdelovalec:"
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (vključujoč CD-je v obliki kreditnih kartic)"
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Čestitamo!\n"
+"\n"
+"Dokončali ste snovanje predloge gLables.\n"
+"V primeru, da želite sprejeti in shraniti vaše oblikovanje, kliknite \"Uporabi.\"\n"
+"\n"
+"V nasprotnem primeru lahko kliknete \"Prekliči\" in program končate\n"
+"ali pa \"Nazaj\" za nadaljevanje oblikovanja."
+
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Opis:"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr "Razdalja od levega roba (x0):"
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr "Razdalja od zgornjega roba (y0):"
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr "Vodoravna razdalja (dx):"
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"Koliko razporeditev bo vsebovala vaša predloga? \n"
+"\n"
+"Razporeditev je niz nalepk ali vizitk, ki je lahko urejen v preprosto mrežo.\n"
+"Večina predlog potrebuje le eno razporeditev, kot na prvem primeru.\n"
+"Drugi primer vsebuje dve razporeditvi. "
+
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Razporeditev št. 1"
+
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Razporeditev št. 2"
+
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr "Vodoravno število (nx):"
+
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr "Navpično število (ny):"
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Število razporeditev:"
+
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Velikost strani:"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr "Del št:"
+
+#: ../data/glade/template-designer.glade.h:44
+msgid "Please enter the following identifying information about the template stationery."
+msgstr "Vnesite podrobnosti določitve predloge pisalnih pripomočkov."
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr "Vnesite sledeče podrobnosti razporeditve."
+
+#: ../data/glade/template-designer.glade.h:46
+msgid "Please enter the following size parameters of a single label in your template."
+msgstr "Vnesite sledeče parametre velikosti posamezne nalepke v vaši predlogi."
+
+#: ../data/glade/template-designer.glade.h:47
+msgid "Please enter the following size parameters of a single label or card in your template."
+msgstr "Vnesite sledeče parametre velikosti posamezne nalepke ali poslovne vizitke v vaši predlogi."
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr "Izberite osnovno obliko nalepk ali vizitk."
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr "Izberite velikost strani predloge pisalnih pripomočkov."
+
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr "Natisni preizkusni list"
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Kvadrat ali pravokotnik (lahko ima zaokrožene robove)"
+
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "Krog"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"Predloge z \n"
+"dvema razporeditvama."
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"Predloge z le\n"
+"eno razporeditvijo."
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "Navpična razdalja (dy):"
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Dobrodošli v snovalniku predlog gLabels.\n"
+"\n"
+"To pogovorno okno vam bo pomagalo pri ustvarjanju predloge gLables po meri."
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "stran_velikosti_cd"
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "končna_stran"
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "razporeditvena_stran"
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr "ime_strani"
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "št_razporeditev_stran"
+
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "stran_velikosti_strani"
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "pravokotna_stran"
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "okrogla_stran"
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "oblikovna_stran"
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr "začetna_sran"
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "Znamka:"
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Kategorija:"
+
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Nedavne predloge"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Išči po vseh predlogah"
+
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "Zavrti"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "Ameriška izvršilna"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "Ameriška pravna"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "Katerakoli vizika"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "Katerakoli nalepka"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Poslovne nalepke"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD ali drugi mediji"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "Pošiljanje izdelkov po pošti"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Pravokotne nalepke"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Okrogle nalepke"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "Kvadratne nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Nalepke naslovov"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Nalepke naslovov"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr "Vsestranske nalepke"
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Poslovne vizitke"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr "CD polica"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr "Robovi CD"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "CD/DVD nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr "Nalepke disket"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "Nalepke disket"
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:20
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr "Poštne nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr "Poštne nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr "Mini nalepke naslovov"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+msgid "Mini Labels"
+msgstr "Mini nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "Nalepke pošiljanja"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "Nalepke map z datotekami"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "CD/DVD nalepke (nalepke diska)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "CD/DVD nalepke (nalepke robov)"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "Nalepke ločilnikov"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr "Nalepke kartotek"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr "Celostranske nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "ID nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "Kartice kazal"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Velike okrogle nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr "Nalepke z imeni"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "Razglednice"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr "Nalepke za naslov vračila"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Round Labels"
+msgstr "Okrogle nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "Nalepke pošiljanja"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Majhne okrogle nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr "Kvadratne nalepke"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr "Karte za šotorjenje"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "Nalepke ploskev video kaset"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr "Nalepke robov video kaset"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "Večnamenske nalepke 17mm x 54mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Nalepke pošiljanja 62mm x 100 mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "Standardne nalepke naslovov 29mm x 90mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "3,5-palčna disketa"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "Mapa z datotekami"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr "Izročna mapa"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "Velike nalepke naslovov"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "Nalepke naslova pošiljanja"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "Različne nalepke"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr "Nalepke datotek arhiva"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr "Nalepke datotek arhiva (velike)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr "Nalepke datotek arhiva (majhne)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "CD nalepke"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr "CD/DVD nalepke (le ploskev)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "Običajna oblika CD/DVD nalepk (le ploskev)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr "Nalepke disket (le ploskev)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr "Foto nalepke EPSON 16"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr "Nalepke"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr "Nalepke magnetov za na hladilnik"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Splošne nalepke"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "Nalepke črnila/laserja 70x37mm"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr "Poštne nalepke - 2 stolpca"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr "Poštne nalepke - 3 stolpci"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "PRO CD nalepke 2-up (le ploskev)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Pravokotne nalepke"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Universal Labels"
+msgstr "Splošne oznake"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:48
+msgid "Video Labels (face only)"
+msgstr "Video nalepke (le ploskev)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "Večnamenske nalepke"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "CD poslovne vizitke"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "Pravokotne CD predloge"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr "CD/DVD nalepke (le ploskev)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr "Nalepke kaset"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr "Nalepke DLT"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:18
+msgid "Jewel Case Booklet"
+msgstr "Knjižica škatlice z dragulji"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Microtube labels"
+msgstr "Nalepke Microtube"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "Mini-CD Labels"
+msgstr "Nalepke mini CD-jev"
+
+#: ../data/templates/misc-us-templates.xml.h:25
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "PRO CD nalepke 2-up (le rob CD)"
+
+#: ../data/templates/misc-us-templates.xml.h:26
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "PRO CD nalepke 2-up (le ploskev)"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:32
+msgid "Slimline CD Case (rightside up)"
+msgstr "Ozko CD ohišje (od desne navzgor)"
+
+#: ../data/templates/misc-us-templates.xml.h:33
+msgid "Slimline CD Case (upside down)"
+msgstr "Ozko CD ohišje (od zgoraj navzdol)"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "Nalepke popravljanja in prekrivanja"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr "Nalepke predalnikov"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr "Nalepke arhivskih datotek"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "Večnamenske odstranljive lepljive nalepke"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr "Nalepke QSL-kart 70mm x 50,8 mm"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr "Pravokotne kopirne nalepke"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "Video nalepke (zadnja stran)"
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Ustvarjanje nalepk, poslovnih vizitk in medijskih platnic"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "gLabels snovalnik nalepk"
+
+#: ../data/mime/glabels.keys.in.h:1
+#: ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "Datoteka projekta gLabels"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: možnost `%s' je dvoumna\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: možnost `--%s' ne dovoli argumenta\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: možnost `%c%s' ne dovoli argumenta\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: možnost `%s' zahteva argument\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nepoznana možnost `--%s'\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nepoznana možnost `%c%s'\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: neveljavna možnost -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: neveljavna možnost -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: možnost zahteva argument -- %c\n"
+
+#~ msgid "Code 93"
+#~ msgstr "Koda 93"
+#~ msgid "IEC18004 (QRCode)"
+#~ msgstr "IEC18004 (QRKoda)"
+#~ msgid "Default Color"
+#~ msgstr "Privzeta barva"
+#~ msgid "Brown"
+#~ msgstr "Rjava"
+#~ msgid "Dark Goldenrod"
+#~ msgstr "Temna zlata palica"
+#~ msgid "Dark Cyan"
+#~ msgstr "Temno sinja"
+#~ msgid "Navy Blue"
+#~ msgstr "Mornarsko modra"
+#~ msgid "Dark Yellow"
+#~ msgstr "Temno rumena"
+#~ msgid "Turquoise"
+#~ msgstr "Turkizna"
+#~ msgid "Salmon"
+#~ msgstr "Lososova"
+#~ msgid "Violet"
+#~ msgstr "Vijolična"
+#~ msgid "Khaki"
+#~ msgstr "Kakijeva"
+#~ msgid "Slate Gray"
+#~ msgstr "Skrilavčno siva"
+#~ msgid "Thistle"
+#~ msgstr "Osatna"
+#~ msgid "10\\% Gray"
+#~ msgstr "10\\% Siva"
+#~ msgid "25\\% Gray"
+#~ msgstr "25\\% Siva"
+#~ msgid "40\\% Gray"
+#~ msgstr "40\\% Siva"
+#~ msgid "50\\% Gray"
+#~ msgstr "50\\% Siva"
+#~ msgid "60\\% Gray"
+#~ msgstr "60\\% siva"
+#~ msgid "Custom Color #%u"
+#~ msgstr "Barva po meri #%u"
+#~ msgid "Recent fonts"
+#~ msgstr "Nedavne pisave"
+#~ msgid "Proportional fonts"
+#~ msgstr "Sorazmerne pisave"
+#~ msgid "Fixed-width fonts"
+#~ msgstr "Pisave stalne širine"
+#~ msgid "All fonts"
+#~ msgstr "Vse pisave"
+#~ msgctxt "Short sample text"
+#~ msgid "Aa"
+#~ msgstr "Aa"
+#~ msgctxt "Lower case sample text"
+#~ msgid "abcdefghijklmnopqrstuvwxyz"
+#~ msgstr "abcčdefghijklmnoprsštuvzž"
+#~ msgctxt "Upper case sample text"
+#~ msgid "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+#~ msgstr "ABCČDEFGHIJKLMNOPRSŠTUVZŽ"
+#~ msgctxt "Numbers and special characters sample text"
+#~ msgid "0123456789 .:,;(*!?)"
+#~ msgstr "0123456789 .:,;(*!?)"
+#~ msgid "Sample text"
+#~ msgstr "Vzorčno besedilo"
+#~ msgid "Print files created with gLabels."
+#~ msgstr "Tiskanje datotek ustvarjenih z gLables."
+#~ msgid ""
+#~ "%s\n"
+#~ "Run '%s --help' to see a full list of available command line options.\n"
+#~ msgstr ""
+#~ "%s\n"
+#~ "Zaženite '%s --help' za ogled celotnega seznama razpoložljivih možnosti "
+#~ "ukazne vrstice.\n"
+#~ msgid "Launch gLabels label and business card designer."
+#~ msgstr "Zagon snovalnika nalepk in poslovnih vizitk gLabels. "
+#~ msgid "Text: Comma Separated Values (CSV)"
+#~ msgstr "Besedilo: Z vejico ločene vrednosti (CSV)"
+#~ msgid "Text: Comma Separated Values (CSV) with keys on line 1"
+#~ msgstr "Besedilo: z vejico ločene vrednosti (CSV) s ključi v prvi vrstici"
+#~ msgid "Text: Tab Separated Values (TSV)"
+#~ msgstr "Besedilo: s tabulatorjem ločene vrednosti (TSV)"
+#~ msgid "Text: Tab Separated Values (TSV) with keys on line 1"
+#~ msgstr ""
+#~ "Besedilo: s tabulatorjem ločene vrednosti (TSV) s ključi v prvi vrstici"
+#~ msgid "Text: Colon separated values"
+#~ msgstr "Besedilo: z dvopičjem ločene vrednosti"
+#~ msgid "Text: Colon separated values with keys on line 1"
+#~ msgstr "Besedilo: z dvopičjem ločene vrednosti s ključi v prvi vrstici"
+
+#, fuzzy
+#~ msgid "VCards"
+#~ msgstr "Vizitk vCard v besedilu"
+#~ msgid "Normal"
+#~ msgstr "Običajna"
+#~ msgid "cm"
+#~ msgstr "cm"
+#~ msgid "picas"
+#~ msgstr "pic"
+#~ msgid "<b>Copies</b>"
+#~ msgstr "<b>Kopije</b>"
+#~ msgid "#10 Envelope"
+#~ msgstr "Ovojnica št. 10"
+#~ msgid "C5"
+#~ msgstr "C5"
+#~ msgid "C6"
+#~ msgstr "C6"
+#~ msgid "DL"
+#~ msgstr "DL"
+#~ msgid "Monarch Envelope"
+#~ msgstr "Ovojnica Monarch"
+
diff --git a/po/sv.po b/po/sv.po
new file mode 100644 (file)
index 0000000..254761b
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,2786 @@
+# Swedish translation for glabels.
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glabels package.
+# Daniel Nylander <po@danielnylander.se>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-11-04 06:28+0100\n"
+"PO-Revision-Date: 2009-11-04 06:37+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/glabels.c:75
+#: ../src/glabels-batch.c:70
+msgid "[FILE...]"
+msgstr "[FIL...]"
+
+#: ../src/glabels.c:91
+msgid "- gLabels label designer"
+msgstr "- Etikettdesignern gLabels"
+
+#: ../src/glabels-batch.c:54
+msgid "set output filename (default=\"output.pdf\")"
+msgstr ""
+
+#: ../src/glabels-batch.c:54
+#: ../src/glabels-batch.c:68
+msgid "filename"
+msgstr "filnamn"
+
+#: ../src/glabels-batch.c:56
+msgid "number of sheets (default=1)"
+msgstr "antal ark (standard=1)"
+
+#: ../src/glabels-batch.c:56
+msgid "sheets"
+msgstr ""
+
+#: ../src/glabels-batch.c:58
+msgid "number of copies (default=1)"
+msgstr "antal kopior (standard=1)"
+
+#: ../src/glabels-batch.c:58
+msgid "copies"
+msgstr "kopior"
+
+#: ../src/glabels-batch.c:60
+msgid "first label on first sheet (default=1)"
+msgstr ""
+
+#: ../src/glabels-batch.c:60
+msgid "first"
+msgstr ""
+
+#: ../src/glabels-batch.c:62
+#: ../data/glade/print-custom-widget.glade.h:6
+msgid "print outlines (to test printer alignment)"
+msgstr ""
+
+#: ../src/glabels-batch.c:64
+#: ../data/glade/print-custom-widget.glade.h:5
+msgid "print in reverse (i.e. a mirror image)"
+msgstr ""
+
+#: ../src/glabels-batch.c:66
+#: ../data/glade/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "skriv ut beskäringsmarkeringar"
+
+#: ../src/glabels-batch.c:68
+msgid "input file for merging"
+msgstr ""
+
+#: ../src/glabels-batch.c:96
+msgid "- batch process gLabels label files"
+msgstr ""
+
+#: ../src/glabels-batch.c:142
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr ""
+
+#: ../src/glabels-batch.c:164
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "kan inte öppna glabels-filen %s\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(ingen) - gLabels"
+
+#: ../src/window.c:432
+msgid "(modified)"
+msgstr "(ändrad)"
+
+#: ../src/stock.c:72
+msgid "_Select Mode"
+msgstr ""
+
+#: ../src/stock.c:73
+msgid "_Text"
+msgstr "_Text"
+
+#: ../src/stock.c:74
+msgid "_Line"
+msgstr "_Linje"
+
+#: ../src/stock.c:75
+msgid "_Box"
+msgstr "_Rektangel"
+
+#: ../src/stock.c:76
+msgid "_Ellipse"
+msgstr "_Ellips"
+
+#: ../src/stock.c:77
+msgid "_Image"
+msgstr "_Bild"
+
+#: ../src/stock.c:78
+msgid "Bar_code"
+msgstr "Streck_kod"
+
+#: ../src/stock.c:79
+msgid "_Merge Properties"
+msgstr ""
+
+#: ../src/stock.c:80
+msgid "Object _Properties"
+msgstr "Objekt_egenskaper"
+
+#: ../src/stock.c:81
+msgid "Bring to _Front"
+msgstr ""
+
+#: ../src/stock.c:82
+msgid "Send to _Back"
+msgstr ""
+
+#: ../src/stock.c:83
+msgid "Rotate _Left"
+msgstr ""
+
+#: ../src/stock.c:84
+msgid "Rotate _Right"
+msgstr ""
+
+#: ../src/stock.c:85
+msgid "Flip _Horizontally"
+msgstr ""
+
+#: ../src/stock.c:86
+msgid "Flip _Vertically"
+msgstr ""
+
+#: ../src/stock.c:87
+msgid "_Lefts"
+msgstr ""
+
+#: ../src/stock.c:88
+msgid "_Rights"
+msgstr ""
+
+#: ../src/stock.c:89
+msgid "_Centers"
+msgstr ""
+
+#: ../src/stock.c:90
+msgid "_Tops"
+msgstr ""
+
+#: ../src/stock.c:91
+msgid "Bottoms"
+msgstr ""
+
+#: ../src/stock.c:92
+msgid "Centers"
+msgstr ""
+
+#: ../src/stock.c:93
+#: ../src/stock.c:94
+msgid "Label Ce_nter"
+msgstr ""
+
+#: ../src/stock.c:95
+#: ../data/glade/property-bar.glade.h:3
+msgid "Fill color"
+msgstr ""
+
+#: ../src/stock.c:96
+#: ../data/glade/property-bar.glade.h:8
+msgid "Line color"
+msgstr "Radfärg"
+
+#: ../src/stock.c:97
+#: ../src/stock.c:99
+msgid "Linked"
+msgstr "Länkad"
+
+#: ../src/stock.c:98
+#: ../src/stock.c:100
+msgid "Not Linked"
+msgstr "Inte länkad"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "_Arkiv"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "Öppna tidigare _filer"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "R_edigera"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "_Visa"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr ""
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr ""
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "Anpassa egenskapsverktygsrad"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "_Objekt"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "_Skapa"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "_Ordna"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "_Rotera/Vänd"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "Justera _horisontellt"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "Justera _vertikalt"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "_Hjälp"
+
+#. Popup entries.
+#: ../src/ui.c:109
+#: ../src/ui.c:110
+msgid "Context Menu"
+msgstr "Sammanhangsmeny"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "_Ny"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "Skapa en ny fil"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "_Öppna..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "Öppna en fil"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "_Spara"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "Spara aktuell fil"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "Spara s_om..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "Spara den aktuella filen med ett annat namn"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "Skriv _ut..."
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "Skriv ut aktuell fil"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "Egenskaper..."
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "Ändra dokumentegenskaper"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "Mall_designer..."
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "Skapa en anpassad mall"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "S_täng"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "Stäng aktuell fil"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "A_vsluta"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "Avsluta programmet"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "Klipp ut"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "Klipp ut markeringen"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "Kopiera"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "Kopiera markeringen"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "Klistra in"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "Klistra in urklipp"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "Ta bort"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "Ta bort markerade objekt"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "Markera allt"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "Markera alla objekt"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "Avmarkera allt"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "Ta bort alla markeringar"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "Inställningar"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "Konfigurera programmet"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "Zooma in"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "Öka förstorning"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "Zooma ut"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "Minska förstorning"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "Zooma 1 till 1"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr ""
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr ""
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr ""
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr ""
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr ""
+
+#: ../src/ui.c:268
+#: ../src/view-text.c:494
+#: ../data/glade/object-editor.glade.h:32
+msgid "Text"
+msgstr "Text"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "Skapa textobjekt"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "Rektangel"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr ""
+
+#: ../src/ui.c:282
+#: ../data/glade/object-editor.glade.h:20
+msgid "Line"
+msgstr "Linje"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr ""
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "Ellips"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr ""
+
+#: ../src/ui.c:296
+#: ../data/glade/object-editor.glade.h:16
+msgid "Image"
+msgstr "Bild"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr ""
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "Streckkod"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr ""
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr ""
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr ""
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr ""
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr ""
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "Rotera åt vänster"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr ""
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "Rotera åt höger"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr ""
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr ""
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr ""
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr ""
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr ""
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "Justera vänster"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr ""
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "Justera höger"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr ""
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr ""
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr ""
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr ""
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr ""
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr ""
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr ""
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr ""
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr ""
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr ""
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr ""
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr ""
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr ""
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr ""
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr ""
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "Innehåll"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr ""
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "Om..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "Om glabels"
+
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr ""
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr ""
+
+#: ../src/ui.c:444
+#: ../src/ui.c:489
+#: ../src/ui.c:497
+msgid "Show tooltips"
+msgstr "Visa verktygstips"
+
+#: ../src/ui.c:446
+msgid "Show tooltips for property toolbar"
+msgstr ""
+
+#: ../src/ui.c:452
+msgid "Grid"
+msgstr "Rutnät"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of the grid in the current window"
+msgstr ""
+
+#: ../src/ui.c:460
+msgid "Markup"
+msgstr ""
+
+#: ../src/ui.c:462
+msgid "Change the visibility of markup lines in the current window"
+msgstr ""
+
+#: ../src/ui.c:473
+msgid "Main toolbar"
+msgstr ""
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr ""
+
+#: ../src/ui.c:481
+msgid "Drawing toolbar"
+msgstr ""
+
+#: ../src/ui.c:483
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr ""
+
+#: ../src/ui.c:491
+msgid "Show tooltips for main toolbar"
+msgstr "Visa verktygstips för huvudverktygsrad"
+
+#: ../src/ui.c:499
+msgid "Show tooltips for drawing toolbar"
+msgstr ""
+
+#: ../src/ui-property-bar.c:1232
+#: ../src/object-editor.c:587
+#: ../src/object-editor.c:593
+msgid "Default"
+msgstr "Standard"
+
+#: ../src/ui-property-bar.c:1239
+#: ../src/object-editor.c:599
+msgid "No line"
+msgstr "Ingen linje"
+
+#: ../src/ui-property-bar.c:1247
+#: ../src/object-editor.c:606
+msgid "No fill"
+msgstr ""
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "Objektegenskaper"
+
+#: ../src/ui-commands.c:1084
+msgid "Glabels includes contributions from:"
+msgstr "Glabels inkluderar bidrag från:"
+
+#: ../src/ui-commands.c:1090
+msgid "See the file AUTHORS for additional credits,"
+msgstr "Se filen AUTHORS för ytterligare tack,"
+
+#: ../src/ui-commands.c:1091
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "eller besök http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1103
+msgid "A label and business card creation program.\n"
+msgstr "Ett program för att skapa etiketter och visitkort.\n"
+
+#: ../src/ui-commands.c:1107
+msgid "translator-credits"
+msgstr ""
+"Daniel Nylander <po@danielnylander.se>\n"
+"\n"
+"Skicka synpunkter på översättningen till\n"
+"<tp-sv@listor.tp-sv.se>."
+
+#: ../src/ui-commands.c:1110
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+
+#: ../src/ui-commands.c:1136
+msgid "glabels"
+msgstr "glabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "Ny etikett eller kort"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "Etikettegenskaper"
+
+#: ../src/file.c:292
+#: ../src/file.c:578
+msgid "All files"
+msgstr "Alla filer"
+
+#: ../src/file.c:297
+#: ../src/file.c:583
+msgid "gLabels documents"
+msgstr "gLabels-dokument"
+
+#: ../src/file.c:343
+#: ../src/file.c:640
+msgid "Empty file name selection"
+msgstr ""
+
+#: ../src/file.c:346
+#: ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr ""
+
+#: ../src/file.c:359
+msgid "File does not exist"
+msgstr "Filen finns inte"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "Kunde inte öppna filen \"%s\""
+
+#: ../src/file.c:436
+msgid "Not a supported file format"
+msgstr "Filformatet stöds inte"
+
+#: ../src/file.c:513
+#: ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "Kunde inte spara filen \"%s\""
+
+#: ../src/file.c:517
+#: ../src/file.c:694
+msgid "Error encountered during save.  The file is still not saved."
+msgstr ""
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr "Spara \"%s\" som"
+
+#: ../src/file.c:643
+msgid "Please supply a valid file name"
+msgstr ""
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "Skriv över filen \"%s\"?"
+
+#: ../src/file.c:668
+msgid "File already exists."
+msgstr "Filen finns inte."
+
+#: ../src/file.c:764
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "Spara ändringar till dokumentet \"%s\" innan stängning?"
+
+#: ../src/file.c:768
+msgid "Your changes will be lost if you don't save them."
+msgstr "Dina ändringar kommer att gå förlorade om du inte sparar dem."
+
+#: ../src/file.c:771
+msgid "Close without saving"
+msgstr "Stäng utan att spara"
+
+#. Should not happen
+#: ../src/prefs.c:159
+#: ../src/prefs.c:166
+#: ../data/glade/object-editor.glade.h:43
+#: ../data/glade/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "punkter"
+
+#: ../src/prefs.c:161
+#: ../data/glade/object-editor.glade.h:42
+#: ../data/glade/template-designer.glade.h:64
+msgid "inches"
+msgstr "tum"
+
+#: ../src/prefs.c:163
+msgid "mm"
+msgstr "mm"
+
+#: ../src/prefs-dialog.c:162
+#: ../data/glade/prefs-dialog.glade.h:21
+msgid "gLabels Preferences"
+msgstr "Inställningar för gLabels"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr ""
+
+#. Build editor.
+#: ../src/view-ellipse.c:175
+msgid "Ellipse object properties"
+msgstr ""
+
+#. Build editor.
+#: ../src/view-line.c:174
+msgid "Line object properties"
+msgstr ""
+
+#. Build editor.
+#: ../src/view-image.c:174
+msgid "Image object properties"
+msgstr ""
+
+#. Build editor.
+#: ../src/view-text.c:178
+msgid "Text object properties"
+msgstr ""
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr ""
+
+#: ../src/object-editor-image-page.c:270
+msgid "All Files"
+msgstr "Alla filer"
+
+#: ../src/object-editor-image-page.c:275
+msgid "All Images"
+msgstr "Alla bilder"
+
+#: ../src/object-editor-image-page.c:290
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:263
+msgid "Merge Properties"
+msgstr ""
+
+#: ../src/merge-properties-dialog.c:289
+#: ../src/merge-properties-dialog.c:397
+msgid "Select merge-database source"
+msgstr ""
+
+#: ../src/merge-properties-dialog.c:298
+#: ../src/merge-properties-dialog.c:417
+msgid "N/A"
+msgstr ""
+
+#: ../src/merge-properties-dialog.c:324
+msgid "Select"
+msgstr "Välj"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Record/Field"
+msgstr ""
+
+#: ../src/merge-properties-dialog.c:340
+#: ../data/glade/object-editor.glade.h:10
+msgid "Data"
+msgstr "Data"
+
+#: ../src/merge-properties-dialog.c:410
+msgid "Fixed"
+msgstr ""
+
+#. ===================================================================
+#: ../src/print-op.c:237
+#: ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "Etiketter"
+
+#: ../src/template-designer.c:358
+msgid "gLabels Template Designer"
+msgstr "gLabels malldesigner"
+
+#: ../src/template-designer.c:419
+msgid "Welcome"
+msgstr "Välkommen"
+
+#: ../src/template-designer.c:463
+msgid "Name and Description"
+msgstr "Namn och beskrivning"
+
+#: ../src/template-designer.c:516
+msgid "Page Size"
+msgstr "Sidstorlek"
+
+#: ../src/template-designer.c:587
+msgid "Label or Card Shape"
+msgstr "Etikett- eller kortform"
+
+#: ../src/template-designer.c:637
+msgid "Label or Card Size"
+msgstr "Etikett- eller kortstorlek"
+
+#: ../src/template-designer.c:737
+msgid "Label Size (round)"
+msgstr "Etikettstorlek (rund)"
+
+#: ../src/template-designer.c:820
+msgid "Label Size (CD/DVD)"
+msgstr "Etikettstorlek (CD/DVD)"
+
+#: ../src/template-designer.c:913
+msgid "Number of Layouts"
+msgstr "Antal layouter"
+
+#: ../src/template-designer.c:976
+msgid "Layout(s)"
+msgstr "Layout(er)"
+
+#: ../src/template-designer.c:1087
+msgid "Design Completed"
+msgstr ""
+
+#: ../src/template-designer.c:1253
+msgid "<span foreground='red' weight='bold'>Brand and part# match an existing template!</span>"
+msgstr ""
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr ""
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr ""
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr ""
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr ""
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr ""
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A eller UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Code 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Code 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr ""
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "Namnlös"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr ""
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "Ogiltig streckkodsdata"
+
+#: ../src/xml-label.c:189
+#: ../src/xml-label.c:226
+msgid "xmlParseFile error"
+msgstr "xmlParseFile-fel"
+
+#: ../src/xml-label.c:262
+msgid "No document root"
+msgstr "Ingen dokumentrot"
+
+#: ../src/xml-label.c:270
+msgid "Importing from glabels 0.1 format"
+msgstr "Importerar från formatet glabels 0.1"
+
+#: ../src/xml-label.c:279
+msgid "Importing from glabels 0.4 format"
+msgstr "Importerar från formatet glabels 0.4"
+
+#: ../src/xml-label.c:288
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "Okänd glabels Namespace -- Använder %s"
+
+#: ../src/xml-label.c:319
+#: ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr ""
+
+#: ../src/xml-label.c:356
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr ""
+
+#: ../src/xml-label.c:401
+#: ../src/xml-label-04.c:127
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr ""
+
+#: ../src/xml-label.c:840
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr ""
+
+#: ../src/xml-label.c:1077
+#: ../libglabels/xml-template.c:670
+msgid "Utf8 conversion error."
+msgstr ""
+
+#: ../src/xml-label.c:1084
+msgid "Problem saving xml file."
+msgstr ""
+
+#: ../src/merge.c:170
+#: ../src/merge.c:211
+#: ../src/merge.c:375
+#: ../src/merge.c:378
+msgid "None"
+msgstr "Ingen"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr ""
+
+#: ../src/merge-init.c:66
+msgid "Text file with colon delimeters"
+msgstr ""
+
+#: ../src/merge-init.c:73
+msgid "Text file with tab delimeters"
+msgstr ""
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr ""
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr ""
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr ""
+
+#: ../src/merge-evolution.c:315
+#: ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "Kunde inte öppna adressboken."
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "Kunde inte lista tillgängliga fält."
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "Kunde inte få tag på kontakter."
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr ""
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "från:"
+
+#: ../src/wdgt-print-copies.c:178
+msgid "to:"
+msgstr "till:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr ""
+
+#: ../src/wdgt-print-merge.c:159
+msgid "on 1st sheet"
+msgstr ""
+
+#: ../src/wdgt-print-merge.c:168
+msgid "Copies:"
+msgstr "Kopior"
+
+#: ../src/wdgt-print-merge.c:173
+msgid "Collate"
+msgstr "Sortera"
+
+#: ../src/wdgt-media-select.c:288
+#: ../src/wdgt-media-select.c:292
+#: ../src/wdgt-media-select.c:297
+#: ../src/wdgt-media-select.c:306
+#: ../src/wdgt-media-select.c:309
+#: ../src/wdgt-media-select.c:402
+#: ../src/wdgt-media-select.c:609
+#: ../src/wdgt-media-select.c:618
+msgid "Any"
+msgstr "Alla"
+
+#: ../src/wdgt-media-select.c:643
+#, c-format
+msgid "%d per sheet"
+msgstr "%d per ark"
+
+#: ../src/wdgt-media-select.c:673
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:678
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:689
+#: ../src/wdgt-media-select.c:703
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s diameter"
+
+#: ../src/wdgt-media-select.c:693
+#: ../src/wdgt-media-select.c:707
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s diameter"
+
+#: ../src/wdgt-media-select.c:781
+msgid "No recent templates found."
+msgstr "Inga tidigare mallar hittades."
+
+#: ../src/wdgt-media-select.c:782
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr "Prova att välja en mall från sidan \"Sök alla mallar\"."
+
+#: ../src/wdgt-media-select.c:861
+msgid "No match."
+msgstr ""
+
+#: ../src/wdgt-media-select.c:862
+msgid "Try selecting a different brand, page size or category."
+msgstr ""
+
+#. This is the default custom color
+#: ../src/mygal/color-palette.c:389
+msgid "custom"
+msgstr "anpassad"
+
+#. "Custom" color - we'll pop up a GtkColorButton
+#: ../src/mygal/color-palette.c:431
+msgid "Custom Color:"
+msgstr "Anpassad färg:"
+
+#: ../src/mygal/color-palette.c:439
+msgid "Choose Custom Color"
+msgstr "Välj anpassad färg"
+
+#: ../src/mygal/color-palette.c:572
+msgid "black"
+msgstr "svart"
+
+#: ../src/mygal/color-palette.c:573
+msgid "light brown"
+msgstr "ljusbrun"
+
+#: ../src/mygal/color-palette.c:574
+msgid "brown gold"
+msgstr ""
+
+#: ../src/mygal/color-palette.c:575
+msgid "dark green #2"
+msgstr "mörkgrön 2"
+
+#: ../src/mygal/color-palette.c:576
+msgid "navy"
+msgstr "marin"
+
+#: ../src/mygal/color-palette.c:577
+#: ../src/mygal/color-palette.c:633
+msgid "dark blue"
+msgstr "mörkblå"
+
+#: ../src/mygal/color-palette.c:578
+msgid "purple #2"
+msgstr "lila 2"
+
+#: ../src/mygal/color-palette.c:579
+msgid "very dark gray"
+msgstr "mycket mörk grå"
+
+#: ../src/mygal/color-palette.c:582
+#: ../src/mygal/color-palette.c:638
+msgid "dark red"
+msgstr "mörkröd"
+
+#: ../src/mygal/color-palette.c:583
+msgid "red-orange"
+msgstr "rödorange"
+
+#: ../src/mygal/color-palette.c:584
+msgid "gold"
+msgstr "guld"
+
+#: ../src/mygal/color-palette.c:585
+msgid "dark green"
+msgstr "mörkgrön"
+
+#: ../src/mygal/color-palette.c:586
+#: ../src/mygal/color-palette.c:639
+msgid "dull blue"
+msgstr ""
+
+#: ../src/mygal/color-palette.c:587
+#: ../src/mygal/color-palette.c:640
+msgid "blue"
+msgstr "blå"
+
+#: ../src/mygal/color-palette.c:588
+msgid "dull purple"
+msgstr ""
+
+#: ../src/mygal/color-palette.c:589
+msgid "dark grey"
+msgstr "mörkgrå"
+
+#: ../src/mygal/color-palette.c:592
+msgid "red"
+msgstr "röd"
+
+#: ../src/mygal/color-palette.c:593
+msgid "orange"
+msgstr "orange"
+
+#: ../src/mygal/color-palette.c:594
+msgid "lime"
+msgstr "lime"
+
+#: ../src/mygal/color-palette.c:595
+msgid "dull green"
+msgstr ""
+
+#: ../src/mygal/color-palette.c:596
+msgid "dull blue #2"
+msgstr ""
+
+#: ../src/mygal/color-palette.c:597
+msgid "sky blue #2"
+msgstr "himmelsblå 2"
+
+#: ../src/mygal/color-palette.c:598
+#: ../src/mygal/color-palette.c:637
+msgid "purple"
+msgstr "lila"
+
+#: ../src/mygal/color-palette.c:599
+msgid "gray"
+msgstr "grå"
+
+#: ../src/mygal/color-palette.c:602
+#: ../src/mygal/color-palette.c:634
+msgid "magenta"
+msgstr "magenta"
+
+#: ../src/mygal/color-palette.c:603
+msgid "bright orange"
+msgstr "klarorange"
+
+#: ../src/mygal/color-palette.c:604
+#: ../src/mygal/color-palette.c:635
+msgid "yellow"
+msgstr "gul"
+
+#: ../src/mygal/color-palette.c:605
+msgid "green"
+msgstr "grön"
+
+#: ../src/mygal/color-palette.c:606
+#: ../src/mygal/color-palette.c:636
+msgid "cyan"
+msgstr "cyan"
+
+#: ../src/mygal/color-palette.c:607
+msgid "bright blue"
+msgstr "klarblå"
+
+#: ../src/mygal/color-palette.c:608
+#: ../src/mygal/color-palette.c:625
+msgid "red purple"
+msgstr "rödlila"
+
+#: ../src/mygal/color-palette.c:609
+msgid "light grey"
+msgstr "ljusgrå"
+
+#: ../src/mygal/color-palette.c:612
+#: ../src/mygal/color-palette.c:629
+msgid "pink"
+msgstr "rosa"
+
+#: ../src/mygal/color-palette.c:613
+msgid "light orange"
+msgstr "ljusorange"
+
+#: ../src/mygal/color-palette.c:614
+#: ../src/mygal/color-palette.c:626
+msgid "light yellow"
+msgstr "ljusgul"
+
+#: ../src/mygal/color-palette.c:615
+msgid "light green"
+msgstr "ljusgrön"
+
+#: ../src/mygal/color-palette.c:616
+msgid "light cyan"
+msgstr "ljuscyan"
+
+#: ../src/mygal/color-palette.c:617
+#: ../src/mygal/color-palette.c:627
+msgid "light blue"
+msgstr "ljusblå"
+
+#: ../src/mygal/color-palette.c:618
+#: ../src/mygal/color-palette.c:631
+msgid "light purple"
+msgstr "ljuslila"
+
+#: ../src/mygal/color-palette.c:619
+msgid "white"
+msgstr "vit"
+
+#: ../src/mygal/color-palette.c:624
+msgid "purplish blue"
+msgstr ""
+
+#: ../src/mygal/color-palette.c:628
+msgid "dark purple"
+msgstr "mörklila"
+
+#: ../src/mygal/color-palette.c:630
+msgid "sky blue"
+msgstr "himmelsblå"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "Ödesdigert fel i gLabels!"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "Fel i gLabels!"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr ""
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "Användardefinierad"
+
+#: ../libglabels/db.c:482
+msgid "Unable to locate paper size definitions.  Libglabels may not be installed correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:875
+msgid "Unable to locate category definitions.  Libglabels may not be installed correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:1461
+msgid "Unable to locate any template files.  Libglabels may not be installed correctly!"
+msgstr ""
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr ""
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr ""
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr ""
+
+#: ../libglabels/xml-template.c:256
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr ""
+
+#: ../libglabels/xml-template.c:615
+msgid "Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+
+#: ../libglabels/xml-template.c:625
+msgid "Name attribute also missing."
+msgstr ""
+
+#: ../data/glade/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr ""
+
+#: ../data/glade/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>Källa</b>"
+
+#: ../data/glade/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "Format:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "Plats:"
+
+#: ../data/glade/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "Markera allt"
+
+#: ../data/glade/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "Avmarkera allt"
+
+#: ../data/glade/merge-properties-dialog.glade.h:7
+#: ../data/glade/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "dialog1"
+
+#: ../data/glade/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>Etikettorientering</b>"
+
+#: ../data/glade/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>Mediatyp</b>"
+
+#: ../data/glade/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/glade/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/glade/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:5
+#: ../data/glade/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "Justering:"
+
+#: ../data/glade/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "Vinkel:"
+
+#: ../data/glade/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "Kontrollsumma"
+
+#: ../data/glade/object-editor.glade.h:9
+#: ../data/glade/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "Färg:"
+
+#: ../data/glade/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "Aktivera skugga"
+
+#: ../data/glade/object-editor.glade.h:12
+msgid "Family:"
+msgstr "Familj:"
+
+#: ../data/glade/object-editor.glade.h:13
+msgid "File:"
+msgstr "Fil:"
+
+#: ../data/glade/object-editor.glade.h:14
+msgid "Fill"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:15
+#: ../data/glade/template-designer.glade.h:30
+msgid "Height:"
+msgstr "Höjd:"
+
+#: ../data/glade/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:18
+msgid "Key:"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:19
+msgid "Length:"
+msgstr "Längd:"
+
+#: ../data/glade/object-editor.glade.h:21
+#: ../data/glade/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:22
+msgid "Literal:"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "Opacitet:"
+
+#: ../data/glade/object-editor.glade.h:24
+msgid "Position"
+msgstr "Position"
+
+#: ../data/glade/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "Återställ bildstorlek"
+
+#: ../data/glade/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "Välj en fil"
+
+#: ../data/glade/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "Skugga"
+
+#: ../data/glade/object-editor.glade.h:28
+msgid "Size"
+msgstr "Storlek"
+
+#: ../data/glade/object-editor.glade.h:29
+msgid "Size:"
+msgstr "Storlek:"
+
+#: ../data/glade/object-editor.glade.h:30
+msgid "Style"
+msgstr "Stil"
+
+#: ../data/glade/object-editor.glade.h:31
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../data/glade/object-editor.glade.h:33
+#: ../data/glade/prefs-dialog.glade.h:20
+#: ../data/glade/template-designer.glade.h:61
+msgid "Width:"
+msgstr "Bredd:"
+
+#: ../data/glade/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/glade/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/glade/object-editor.glade.h:38
+msgid "degrees"
+msgstr "grader"
+
+#: ../data/glade/object-editor.glade.h:40
+msgid "digits:"
+msgstr ""
+
+#: ../data/glade/object-editor.glade.h:41
+msgid "format:"
+msgstr "format:"
+
+#: ../data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/glade/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr ""
+
+#: ../data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr ""
+
+#: ../data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">Linje</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">Text</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">Enheter</span>"
+
+#: ../data/glade/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "Typsnitt:"
+
+#: ../data/glade/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr "ISO A4"
+
+#: ../data/glade/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "Tum"
+
+#: ../data/glade/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr ""
+
+#: ../data/glade/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "Millimeter"
+
+#: ../data/glade/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "Objektstandard"
+
+#: ../data/glade/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "Punkter"
+
+#: ../data/glade/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr ""
+
+#: ../data/glade/prefs-dialog.glade.h:18
+msgid "Select locale specific behavior."
+msgstr ""
+
+#. Most popular (at top of list)
+#: ../data/glade/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "US Letter"
+
+#: ../data/glade/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>Alternativ</b>"
+
+#: ../data/glade/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr ""
+
+#: ../data/glade/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr ""
+
+#: ../data/glade/property-bar.glade.h:1
+msgid "Bold"
+msgstr "Fet"
+
+#: ../data/glade/property-bar.glade.h:2
+msgid "Center align"
+msgstr "Centerjustera"
+
+#: ../data/glade/property-bar.glade.h:4
+msgid "Font family"
+msgstr "Typsnittsfamilj"
+
+#: ../data/glade/property-bar.glade.h:5
+msgid "Font size"
+msgstr "Typsnittsstorlek"
+
+#: ../data/glade/property-bar.glade.h:6
+msgid "Italic"
+msgstr "Kursiv"
+
+#: ../data/glade/property-bar.glade.h:7
+msgid "Left align"
+msgstr "Vänsterjustera"
+
+#: ../data/glade/property-bar.glade.h:9
+msgid "Line width"
+msgstr "Radbredd"
+
+#: ../data/glade/property-bar.glade.h:10
+msgid "Right align"
+msgstr "Högerjustera"
+
+#: ../data/glade/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "Textfärg"
+
+#: ../data/glade/property-bar.glade.h:12
+msgid "Text color"
+msgstr "Textfärg"
+
+#: ../data/glade/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. Yttre radie:"
+
+#: ../data/glade/template-designer.glade.h:5
+msgid "1. Radius:"
+msgstr "1. Radie:"
+
+#: ../data/glade/template-designer.glade.h:6
+msgid "1. Width:"
+msgstr "1. Bredd:"
+
+#: ../data/glade/template-designer.glade.h:7
+msgid "2. Height:"
+msgstr "2. Höjd:"
+
+#: ../data/glade/template-designer.glade.h:8
+msgid "2. Inner radius:"
+msgstr "2. Inre radie:"
+
+#: ../data/glade/template-designer.glade.h:9
+msgid "2. Waste (overprint allowed):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:10
+msgid "3. Clipping width:"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:11
+msgid "3. Margin"
+msgstr "3. Marginal"
+
+#: ../data/glade/template-designer.glade.h:12
+msgid "3. Round (radius of corner):"
+msgstr "3. Rund (radie för hörn):"
+
+#: ../data/glade/template-designer.glade.h:13
+msgid "4. Clipping height:"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:14
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:15
+msgid "5. Vert. waste (overprint allowed):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:16
+msgid "5. Waste (overprint allowed):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:17
+msgid "6. Margin"
+msgstr "6. Marginal"
+
+#: ../data/glade/template-designer.glade.h:18
+msgid "Brand/Manufacturer:"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:19
+msgid "CD/DVD (including credit card CDs)"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:20
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"Gratulerar!\n"
+"\n"
+"Du är nu färdig med gLabels malldesigner.\n"
+"Klicka på \"Verkställ\" om du vill acceptera och spara din design.\n"
+"\n"
+"Om inte, klicka på \"Avbryt\" för att förkasta din design\n"
+"eller \"Bakåt\" för att fortsätta redigera denna design."
+
+#: ../data/glade/template-designer.glade.h:27
+msgid "Description:"
+msgstr "Beskrivning:"
+
+#: ../data/glade/template-designer.glade.h:28
+msgid "Distance from left edge (x0):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:29
+msgid "Distance from top edge (y0):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:31
+msgid "Horizontal pitch (dx):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:32
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "Layout #1"
+
+#: ../data/glade/template-designer.glade.h:38
+msgid "Layout #2"
+msgstr "Layout #2"
+
+#: ../data/glade/template-designer.glade.h:39
+msgid "Number across (nx):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:40
+msgid "Number down (ny):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:41
+msgid "Number of layouts:"
+msgstr "Antal layouter:"
+
+#: ../data/glade/template-designer.glade.h:42
+#: ../data/glade/wdgt-media-select.glade.h:3
+msgid "Page size:"
+msgstr "Sidstorlek:"
+
+#: ../data/glade/template-designer.glade.h:43
+msgid "Part #:"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:44
+msgid "Please enter the following identifying information about the template stationery."
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:45
+msgid "Please enter the following layout information."
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:46
+msgid "Please enter the following size parameters of a single label in your template."
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:47
+msgid "Please enter the following size parameters of a single label or card in your template."
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:48
+msgid "Please select the basic shape of the labels or cards."
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:49
+msgid "Please select the page size of the template stationery."
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:50
+msgid "Print test sheet"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:51
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "Rektangulär eller fyrkantig (kan ha runda hörn)"
+
+#: ../data/glade/template-designer.glade.h:52
+msgid "Round"
+msgstr "Rund"
+
+#: ../data/glade/template-designer.glade.h:53
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:55
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"Välkommen till gLabels malldesigner.\n"
+"\n"
+"Denna dialog hjälper dig att skapa en anpassad gLabels-mall."
+
+#: ../data/glade/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:63
+msgid "finish_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:65
+msgid "layout_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:66
+msgid "name_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:71
+msgid "shape_page"
+msgstr ""
+
+#: ../data/glade/template-designer.glade.h:72
+msgid "start_page"
+msgstr ""
+
+#: ../data/glade/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr ""
+
+#: ../data/glade/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "Kategori:"
+
+#: ../data/glade/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "Tidigare mallar"
+
+#: ../data/glade/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "Sök alla mallar"
+
+#: ../data/glade/wdgt-rotate-label.glade.h:1
+msgid "Rotate"
+msgstr "Rotera"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+
+#: ../data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "US Executive"
+
+#. Other US paper sizes
+#: ../data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "US Legal"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr ""
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr ""
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "Visitkort"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr ""
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr ""
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "Rektangulära etiketter"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "Runda etiketter"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "Adressetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:4
+msgid "Address labels"
+msgstr "Adressetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr ""
+
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "Visitkort"
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:10
+msgid "CD Booklet"
+msgstr ""
+
+#. ===============================================================
+#: ../data/templates/avery-iso-templates.xml.h:12
+msgid "CD Inlet"
+msgstr ""
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "CD/DVD-etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:16
+#: ../data/templates/avery-us-templates.xml.h:12
+msgid "Diskette Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr ""
+
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:20
+#: ../data/templates/misc-iso-templates.xml.h:36
+#: ../data/templates/misc-us-templates.xml.h:18
+#: ../data/templates/zweckform-iso-templates.xml.h:16
+msgid "Mailing Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:22
+msgid "Mailing labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:24
+msgid "Mini Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:26
+#, fuzzy
+msgid "Mini Labels"
+msgstr "Etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:28
+msgid "Shipping labels"
+msgstr "Leveransetiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+#, fuzzy
+msgid "File Folder Labels"
+msgstr "Stora runda etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr ""
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+#, fuzzy
+msgid "Divider Labels"
+msgstr "CD-etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:16
+msgid "Filing Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:18
+msgid "Full Sheet Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+#, fuzzy
+msgid "Index Cards"
+msgstr "Visitkort"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "Stora runda etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:26
+msgid "Name Badge Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:30
+#: ../data/templates/dymo-other-templates.xml.h:12
+msgid "Return Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+#: ../data/templates/misc-us-templates.xml.h:28
+msgid "Round Labels"
+msgstr "Runda etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:36
+msgid "Small Round Labels"
+msgstr "Små runda etiketter"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:38
+msgid "Square Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:44
+msgid "Video Tape Spine Labels"
+msgstr ""
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr ""
+
+#: ../data/templates/brother-other-templates.xml.h:2
+#, fuzzy
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "Leveransetiketter"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (large)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:10
+msgid "Arch File Labels (small)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:14
+msgid "CD Labels"
+msgstr "CD-etiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:18
+#: ../data/templates/misc-us-templates.xml.h:12
+msgid "CD/DVD Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:20
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:22
+msgid "Diskette Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:24
+msgid "EPSON Photo Stickers 16"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:26
+msgid "Etiketten"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:28
+msgid "Fridge Magnet Stickers"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "Allmänna etiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:38
+msgid "Mailing Labels-2 columns"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:40
+msgid "Mailing Labels-3 columns"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:42
+#: ../data/templates/misc-us-templates.xml.h:26
+msgid "PRO CD Labels 2-up (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "Rektangulära etiketter"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:10
+msgid "CD/DVD Labels (Face Only)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:14
+msgid "Cassette Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:16
+msgid "DLT Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:20
+msgid "Microtube labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:22
+msgid "Mini-CD Labels"
+msgstr ""
+
+#: ../data/templates/misc-us-templates.xml.h:23
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr ""
+
+#: ../data/templates/misc-us-templates.xml.h:24
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:30
+msgid "Slimline CD Case (rightside up)"
+msgstr ""
+
+#: ../data/templates/misc-us-templates.xml.h:31
+msgid "Slimline CD Case (upside down)"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:22
+msgid "Rectangular Copier Labels"
+msgstr ""
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr ""
+
+#: ../data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "Skapa etiketter, visitkort och skivomslag"
+
+#: ../data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "Etikettdesignern gLabels"
+
+#: ../data/mime/glabels.keys.in.h:1
+#: ../data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "gLabels-projektfil"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: flaggan `%s' är tvetydig\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: flaggan `--%s' tillåter inte ett argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: flaggan `%c%s' tillåter inte ett argument\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: flaggan `%s' kräver ett argument\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: okänd flagga `--%s'\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, 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.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: otillåten flagga -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: otillåten flagga -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: flaggan kräver ett argument -- %c\n"
+
+#~ msgid "Default Color"
+#~ msgstr "Standardfärg"
+#~ msgid "Brown"
+#~ msgstr "Brun"
+#~ msgid "Dark Yellow"
+#~ msgstr "Mörkgul"
+#~ msgid "Turquoise"
+#~ msgstr "Turkos"
+#~ msgid "Violet"
+#~ msgstr "Violett"
+#~ msgid "Khaki"
+#~ msgstr "Khaki"
+#~ msgid "10% Gray"
+#~ msgstr "10% grå"
+#~ msgid "25% Gray"
+#~ msgstr "25% grå"
+#~ msgid "40% Gray"
+#~ msgstr "40% grå"
+#~ msgid "50% Gray"
+#~ msgstr "50% grå"
+#~ msgid "60% Gray"
+#~ msgstr "60% grå"
+#~ msgid "Custom Color #%u"
+#~ msgstr "Anpassad färg #%u"
+#~ msgid "All fonts"
+#~ msgstr "Alla typsnitt"
+#~ msgid "Launch gLabels label and business card designer."
+#~ msgstr "Starta gLabels för att skapa etiketter och visitkort."
+#~ msgid "Normal"
+#~ msgstr "Normal"
+#~ msgid "<b>Copies</b>"
+#~ msgstr "<b>Kopior</b>"
+#~ msgid "         "
+#~ msgstr "         "
+#~ msgid "  "
+#~ msgstr "  "
+
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644 (file)
index 0000000..d33a27e
--- /dev/null
@@ -0,0 +1,2670 @@
+# German translation of glabels.
+# Copyright (C) 2001-2008 Jim Evins <evins@snaught.com>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels\n"
+"Report-Msgid-Bugs-To: \n" 
+"POT-Creation-Date: 2009-05-17 14:09+0800\n" 
+"PO-Revision-Date: 2009-10-05 20:26-0400\n"
+"Last-Translator: Careon <zzbusagain@yahoo.com.cn>\n" 
+"Language-Team: Careon <zzbusagain@yahoo.com.cn>\n" 
+"MIME-Version: 1.0\n" 
+"Content-Type: text/plain; charset=UTF-8\n" 
+"Content-Transfer-Encoding: 8bit\n" 
+"X-Poedit-Language: Chinese\n" 
+"X-Poedit-Country: CHINA\n" 
+"X-Poedit-SourceCharset: utf-8\n" 
+#: ../src/glabels.c:66 ../src/glabels-batch.c:69
+msgid "[FILE...]"
+msgstr "[文件...]"
+
+#: ../src/glabels.c:83
+msgid "Launch gLabels label and business card designer."
+msgstr "启动gLabels标签和名片设计软件。"
+
+#: ../src/glabels.c:91 ../src/glabels-batch.c:105
+#, c-format
+msgid ""
+"%s\n"
+"Run '%s --help' to see a full list of available command line options.\n"
+msgstr ""
+"%s\n"
+"运行'%s --help'来查看可用的命令参数。\n"
+
+#: ../src/glabels-batch.c:53
+msgid "set output filename (default=\"output.pdf\")"
+msgstr "输出文件名(默认值=\"output.pdf\")"
+
+#: src/glabels-batch.c:56 src/glabels-batch.c:70
+msgid "filename"
+msgstr "文件名"
+
+#: src/glabels-batch.c:54
+msgid "number of sheets (default=1)"
+msgstr "每页数量(默认值=1)"
+
+#: src/glabels-batch.c:54
+msgid "sheets"
+msgstr "数量"
+
+#: src/glabels-batch.c:56
+msgid "number of copies (default=1)"
+msgstr "副本数量(默认值=1)"
+
+#: src/glabels-batch.c:56
+msgid "copies"
+msgstr "副本"
+
+#: ../src/glabels-batch.c:59
+msgid "first label on first sheet (default=1)"
+msgstr "第1页的第1个标签 (默认值=1)"
+
+#: ../src/glabels-batch.c:59
+msgid "first"
+msgstr "第1个"
+
+#: src/glabels-batch.c:64 src/print-dialog.c:336
+msgid "print outlines (to test printer alignment)"
+msgstr "打印外框线(用于校正打印机)"
+
+#: src/glabels-batch.c:66 src/print-dialog.c:344
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "反转打印 (例如对称)"
+
+#: ../src/glabels-batch.c:65 ../data/builder/print-custom-widget.glade.h:4
+msgid "print crop marks"
+msgstr "打印裁剪标记"
+
+#: ../src/glabels-batch.c:67
+msgid "input file for merging"
+msgstr "输入要插入的文件名"
+
+#: ../src/glabels-batch.c:97
+msgid "Print files created with gLabels."
+msgstr "打印gLabels文件。"
+
+#: ../src/glabels-batch.c:147
+#, c-format
+msgid "cannot perform document merge with glabels file %s\n"
+msgstr ""
+"无法合并glabels文件%s \n"
+
+#: ../src/glabels-batch.c:169
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "无法打开glabels文件 %s\n"
+
+#: ../src/window.c:259
+msgid "(none) - gLabels"
+msgstr "(无) - gLabels"
+
+#: src/window.c:414
+msgid "(modified)"
+msgstr "(已修改)"
+
+#: src/stock.c:65 data/ui/glabels-ui.xml.h:162
+msgid "_Select Mode"
+msgstr "选择模式(_S)"
+
+#: src/stock.c:66 data/ui/glabels-ui.xml.h:163
+msgid "_Text"
+msgstr "文字(_T)"
+
+#: src/stock.c:67 data/ui/glabels-ui.xml.h:148
+msgid "_Line"
+msgstr "线条(_L)"
+
+#: src/stock.c:68 data/ui/glabels-ui.xml.h:130
+msgid "_Box"
+msgstr "矩形(_B)"
+
+#: src/stock.c:69 data/ui/glabels-ui.xml.h:141
+msgid "_Ellipse"
+msgstr "椭圆(_E)"
+
+#: src/stock.c:70 
+msgid "_Image"
+msgstr "图片(_I)"
+
+#: src/stock.c:71 data/ui/glabels-ui.xml.h:11
+msgid "Bar_code"
+msgstr "条形码(_C)"
+
+#: src/stock.c:72
+msgid "_Merge Properties"
+msgstr "合并属性(_M)"
+
+#: src/stock.c:73
+msgid "Object _Properties"
+msgstr "对象属性(_P)"
+
+#: src/stock.c:74 data/ui/glabels-ui.xml.h:13
+msgid "Bring to _Front"
+msgstr "移到上层(_F)"
+
+#: src/stock.c:75 data/ui/glabels-ui.xml.h:109
+msgid "Send to _Back"
+msgstr "移到下层(_B)"
+
+#: src/stock.c:76 data/ui/glabels-ui.xml.h:96
+msgid "Rotate _Left"
+msgstr "向左旋转(_L)"
+
+#: src/stock.c:77 data/ui/glabels-ui.xml.h:97
+msgid "Rotate _Right"
+msgstr "向右旋转(_R)"
+
+#: src/stock.c:78 data/ui/glabels-ui.xml.h:52
+msgid "Flip _Horizontally"
+msgstr "水平翻转(_H)"
+
+#: src/stock.c:79 data/ui/glabels-ui.xml.h:53
+msgid "Flip _Vertically"
+msgstr "垂直翻转(_V)"
+
+#: src/stock.c:80 data/ui/glabels-ui.xml.h:147
+msgid "_Lefts"
+msgstr "靠左(_L)"
+
+#: src/stock.c:81 data/ui/glabels-ui.xml.h:159
+msgid "_Rights"
+msgstr "靠右(_R)"
+
+#: src/stock.c:82 data/ui/glabels-ui.xml.h:131
+msgid "_Centers"
+msgstr "居中(_C)"
+
+#: src/stock.c:83 data/ui/glabels-ui.xml.h:164
+msgid "_Tops"
+msgstr "顶部(_T)"
+
+#: src/stock.c:84
+msgid "Bottoms"
+msgstr "底部"
+
+#: src/stock.c:85
+msgid "Centers"
+msgstr "居中"
+
+#: src/stock.c:86 src/stock.c:87 data/ui/glabels-ui.xml.h:62
+msgid "Label Ce_nter"
+msgstr "标签中心(_N)"
+
+#: src/stock.c:88 data/ui/glabels-ui.xml.h:51
+msgid "Fill color"
+msgstr "填充色"
+
+#: src/stock.c:89 data/ui/glabels-ui.xml.h:64
+msgid "Line color"
+msgstr "线条颜色"
+
+#: src/stock.c:90 src/stock.c:92
+msgid "Linked"
+msgstr "相连"
+
+#: src/stock.c:91 src/stock.c:93
+msgid "Not Linked"
+msgstr "不相连"
+
+#. Menu entries.
+#: ../src/ui.c:93
+msgid "_File"
+msgstr "文件(_F)"
+
+#: ../src/ui.c:94
+msgid "Open Recent _Files"
+msgstr "打开最近的文件(_F)"
+
+#: ../src/ui.c:95
+msgid "_Edit"
+msgstr "编辑(_E)"
+
+#: ../src/ui.c:96
+msgid "_View"
+msgstr "查看(_V)"
+
+#: ../src/ui.c:97
+msgid "Customize Main Toolbar"
+msgstr "自定义主工具栏"
+
+#: ../src/ui.c:98
+msgid "Customize Drawing Toolbar"
+msgstr "自定义绘图栏"
+
+#: ../src/ui.c:99
+msgid "Customize Properties Toolbar"
+msgstr "自定义属性栏"
+
+#: ../src/ui.c:100
+msgid "_Objects"
+msgstr "对象(_O)"
+
+#: ../src/ui.c:101
+msgid "_Create"
+msgstr "新建(_C)"
+
+#: ../src/ui.c:102
+msgid "_Order"
+msgstr "排序(_O)"
+
+#: ../src/ui.c:103
+msgid "_Rotate/Flip"
+msgstr "旋转/翻转(_R)"
+
+#: ../src/ui.c:104
+msgid "Align _Horizontal"
+msgstr "水平对齐(_H)"
+
+#: ../src/ui.c:105
+msgid "Align _Vertical"
+msgstr "垂直对齐(_V)"
+
+#: ../src/ui.c:106
+msgid "_Help"
+msgstr "帮助(_H)"
+
+#. Popup entries.
+#: ../src/ui.c:109 ../src/ui.c:110
+msgid "Context Menu"
+msgstr "右键菜单"
+
+#: ../src/ui.c:115
+msgid "_New"
+msgstr "新建(_N)"
+
+#: ../src/ui.c:117
+msgid "Create a new file"
+msgstr "新建文件"
+
+#: ../src/ui.c:122
+msgid "_Open..."
+msgstr "打开(_O)..."
+
+#: ../src/ui.c:124
+msgid "Open a file"
+msgstr "打开文件"
+
+#: ../src/ui.c:129
+msgid "_Save"
+msgstr "保存(_S)"
+
+#: ../src/ui.c:131
+msgid "Save current file"
+msgstr "保存当前文件"
+
+#: ../src/ui.c:136
+msgid "Save _As..."
+msgstr "另存为(_A)..."
+
+#: ../src/ui.c:138
+msgid "Save the current file to a different name"
+msgstr "保存当前文件为其它文件名"
+
+#: ../src/ui.c:143
+msgid "_Print..."
+msgstr "打印(_P)..."
+
+#: ../src/ui.c:145
+msgid "Print the current file"
+msgstr "打印当前文件"
+
+#: ../src/ui.c:150
+msgid "Properties..."
+msgstr "属性..."
+
+#: ../src/ui.c:152
+msgid "Modify document properties"
+msgstr "修改文档属性"
+
+#: ../src/ui.c:157
+msgid "Template _Designer..."
+msgstr "模板设计工具(_D)..."
+
+#: ../src/ui.c:159
+msgid "Create a custom template"
+msgstr "新建一个模板"
+
+#: ../src/ui.c:164
+msgid "_Close"
+msgstr "关闭(_C)"
+
+#: ../src/ui.c:166
+msgid "Close the current file"
+msgstr "关闭当前文件"
+
+#: ../src/ui.c:171
+msgid "_Quit"
+msgstr "退出(_Q)"
+
+#: ../src/ui.c:173
+msgid "Quit the program"
+msgstr "退出程序"
+
+#: ../src/ui.c:180
+msgid "Cut"
+msgstr "剪切"
+
+#: ../src/ui.c:182
+msgid "Cut the selection"
+msgstr "剪切选中的内容"
+
+#: ../src/ui.c:187
+msgid "Copy"
+msgstr "复制"
+
+#: ../src/ui.c:189
+msgid "Copy the selection"
+msgstr "复制选中的内容"
+
+#: ../src/ui.c:194
+msgid "Paste"
+msgstr "粘贴"
+
+#: ../src/ui.c:196
+msgid "Paste the clipboard"
+msgstr "粘贴到剪贴板"
+
+#: ../src/ui.c:201
+msgid "Delete"
+msgstr "删除"
+
+#: ../src/ui.c:203
+msgid "Delete the selected objects"
+msgstr "删除选中的对象"
+
+#: ../src/ui.c:208
+msgid "Select All"
+msgstr "全选"
+
+#: ../src/ui.c:210
+msgid "Select all objects"
+msgstr "选中全部对象"
+
+#: ../src/ui.c:215
+msgid "Un-select All"
+msgstr "取消全选"
+
+#: ../src/ui.c:217
+msgid "Remove all selections"
+msgstr "删除全部选中的内容"
+
+#: ../src/ui.c:222
+msgid "Preferences"
+msgstr "参数"
+
+#: ../src/ui.c:224
+msgid "Configure the application"
+msgstr "对程序进行设置"
+
+#: ../src/ui.c:231
+msgid "Zoom in"
+msgstr "放大"
+
+#: ../src/ui.c:233
+msgid "Increase magnification"
+msgstr "放大"
+
+#: ../src/ui.c:238
+msgid "Zoom out"
+msgstr "缩小"
+
+#: ../src/ui.c:240
+msgid "Decrease magnification"
+msgstr "缩小"
+
+#: ../src/ui.c:245
+msgid "Zoom 1 to 1"
+msgstr "1:1 缩放"
+
+#: ../src/ui.c:247
+msgid "Restore scale to 100%"
+msgstr "缩放到实际大小的 100% "
+
+#: ../src/ui.c:252
+msgid "Zoom to fit"
+msgstr "最佳比例"
+
+#: ../src/ui.c:254
+msgid "Set scale to fit window"
+msgstr "缩放到适合窗口"
+
+#: ../src/ui.c:261
+msgid "Select Mode"
+msgstr "模式选择"
+
+#: ../src/ui.c:263
+msgid "Select, move and modify objects"
+msgstr "选择,移动或删除对象"
+
+#: ../src/ui.c:268 ../src/view-text.c:494
+#: ../data/builder/object-editor.glade.h:32
+msgid "Text"
+msgstr "文字"
+
+#: ../src/ui.c:270
+msgid "Create text object"
+msgstr "新建文字对象"
+
+#: ../src/ui.c:275
+msgid "Box"
+msgstr "矩形"
+
+#: ../src/ui.c:277
+msgid "Create box/rectangle object"
+msgstr "新建矩形对象"
+
+#: ../src/ui.c:282 ../data/builder/object-editor.glade.h:20
+msgid "Line"
+msgstr "线条"
+
+#: ../src/ui.c:284
+msgid "Create line object"
+msgstr "新建线条对象"
+
+#: ../src/ui.c:289
+msgid "Ellipse"
+msgstr "椭圆"
+
+#: ../src/ui.c:291
+msgid "Create ellipse/circle object"
+msgstr "新建 椭圆/圆 对象"
+
+#: ../src/ui.c:296 ../data/builder/object-editor.glade.h:16
+msgid "Image"
+msgstr "图片"
+
+#: ../src/ui.c:298
+msgid "Create image object"
+msgstr "新建图片对象"
+
+#: ../src/ui.c:303
+msgid "Barcode"
+msgstr "条形码"
+
+#: ../src/ui.c:305
+msgid "Create barcode object"
+msgstr "新建条形码"
+
+#: ../src/ui.c:310
+msgid "Bring to front"
+msgstr "移到上层"
+
+#: ../src/ui.c:312
+msgid "Raise object to top"
+msgstr "移到最顶端"
+
+#: ../src/ui.c:317
+msgid "Send to back"
+msgstr "移到下层"
+
+#: ../src/ui.c:319
+msgid "Lower object to bottom"
+msgstr "把下层对象移到最底层"
+
+#: ../src/ui.c:324
+msgid "Rotate left"
+msgstr "向左旋转"
+
+#: ../src/ui.c:326
+msgid "Rotate object 90 degrees counter-clockwise"
+msgstr "向左旋转90度"
+
+#: ../src/ui.c:331
+msgid "Rotate right"
+msgstr "向右旋转"
+
+#: ../src/ui.c:333
+msgid "Rotate object 90 degrees clockwise"
+msgstr "向右旋转90度"
+
+#: ../src/ui.c:338
+msgid "Flip horizontally"
+msgstr "水平翻转"
+
+#: ../src/ui.c:340
+msgid "Flip object horizontally"
+msgstr "水平翻转对象"
+
+#: ../src/ui.c:345
+msgid "Flip vertically"
+msgstr "垂直翻转"
+
+#: ../src/ui.c:347
+msgid "Flip object vertically"
+msgstr "垂直翻转对象"
+
+#: ../src/ui.c:352
+msgid "Align left"
+msgstr "左对齐"
+
+#: ../src/ui.c:354
+msgid "Align objects to left edges"
+msgstr "多个对象与左边界对齐"
+
+#: ../src/ui.c:359
+msgid "Align right"
+msgstr "右对齐"
+
+#: ../src/ui.c:361
+msgid "Align objects to right edges"
+msgstr "多个对象与左边界对齐"
+
+#: ../src/ui.c:366
+msgid "Align horizontal center"
+msgstr "水平中心共线"
+
+#: ../src/ui.c:368
+msgid "Align objects to horizontal centers"
+msgstr "多个对象的水平中心共线"
+
+#: ../src/ui.c:373
+msgid "Align tops"
+msgstr "顶端对齐"
+
+#: ../src/ui.c:375
+msgid "Align objects to top edges"
+msgstr "多个对象与上边界对齐"
+
+#: ../src/ui.c:380
+msgid "Align bottoms"
+msgstr "底部对齐"
+
+#: ../src/ui.c:382
+msgid "Align objects to bottom edges"
+msgstr "多个对象与下边界对齐"
+
+#: ../src/ui.c:387
+msgid "Align vertical center"
+msgstr "垂直中心共线"
+
+#: ../src/ui.c:389
+msgid "Align objects to vertical centers"
+msgstr "多个对象的垂直中心共线"
+
+#: ../src/ui.c:394
+msgid "Center horizontally"
+msgstr "水平居中"
+
+#: ../src/ui.c:396
+msgid "Center objects to horizontal label center"
+msgstr "对象中心与水平中心重合"
+
+#: ../src/ui.c:401
+msgid "Center vertically"
+msgstr "垂直居中"
+
+#: ../src/ui.c:403
+msgid "Center objects to vertical label center"
+msgstr "对象中心与垂直中心重合"
+
+#: ../src/ui.c:408
+msgid "Merge properties"
+msgstr "合并属性"
+
+#: ../src/ui.c:410
+msgid "Edit merge properties"
+msgstr "编辑合并属性"
+
+#: ../src/ui.c:417
+msgid "Contents"
+msgstr "内容"
+
+#: ../src/ui.c:419
+msgid "Open glabels manual"
+msgstr "打开glabels帮助手册"
+
+#: ../src/ui.c:424
+msgid "About..."
+msgstr "关于..."
+
+#: ../src/ui.c:426
+msgid "About glabels"
+msgstr "关于glabels"
+
+# CHECK
+#: ../src/ui.c:436
+msgid "Property toolbar"
+msgstr "属性栏"
+
+#: ../src/ui.c:438
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr "改变当前窗口中属性栏的可视性"
+
+#: ../src/ui.c:444
+msgid "Grid"
+msgstr "单元格"
+
+#: ../src/ui.c:446
+msgid "Change the visibility of the grid in the current window"
+msgstr "改变当前窗口中单元格的可视性"
+
+#: ../src/ui.c:452
+msgid "Markup"
+msgstr "标记"
+
+#: ../src/ui.c:454
+msgid "Change the visibility of markup lines in the current window"
+msgstr "改变当前窗口中标记线条的可视性"
+
+#: ../src/ui.c:465
+msgid "Main toolbar"
+msgstr "主工具栏"
+
+#: ../src/ui.c:467
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr "改变当前窗口中主工具栏的可视性"
+
+#: ../src/ui.c:473
+msgid "Drawing toolbar"
+msgstr "绘图栏"
+
+#: ../src/ui.c:475
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr "改变当前窗口中绘图栏的可视性"
+
+#: ../src/ui-property-bar.c:279 ../src/prefs-dialog.c:328
+#: ../src/object-editor-bc-page.c:93 ../src/object-editor-text-page.c:93
+#: ../src/object-editor-shadow-page.c:93
+msgid "Default"
+msgstr "默认值"
+
+#: ../src/ui-property-bar.c:291 ../src/prefs-dialog.c:334
+#: ../src/object-editor-fill-page.c:79
+msgid "No Fill"
+msgstr "没有填充"
+
+#: ../src/ui-property-bar.c:303 ../src/prefs-dialog.c:331
+#: ../src/object-editor-line-page.c:81
+msgid "No Line"
+msgstr "没有线条"
+
+#: ../src/ui-sidebar.c:152
+msgid "Object properties"
+msgstr "对象属性"
+
+#: ../src/ui-commands.c:1064
+msgid "Glabels includes contributions from:"
+msgstr "Glabels 包括的发布内容来自:"
+
+#: ../src/ui-commands.c:1070
+msgid "See the file AUTHORS for additional credits,"
+msgstr "查看AUTHORS文件来获得更多信息,"
+
+#: ../src/ui-commands.c:1071
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr "或者访问 http://glabels.sourceforge.net/"
+
+#: ../src/ui-commands.c:1083
+msgid "A label and business card creation program.\n"
+msgstr "一个标签和名片设计程序。\n"
+
+#: ../src/ui-commands.c:1087
+msgid "translator-credits"
+msgstr ""
+"Marcus Bauer <m@7n7.de>\n"
+"Christian Neumair <christian-neumair@web.de>\n"
+"Mario Blättermann <mariobl@gnome.org>\n"
+"Careone <zzbusagain@yahoo.com.cn>"
+
+#: ../src/ui-commands.c:1090
+msgid ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+msgstr ""
+"Glabels is free software; you can redistribute it and/or modify it\n"
+"under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+"the GNU General Public License for more details.\n"
+
+#: ../src/ui-commands.c:1116
+msgid "glabels"
+msgstr "glabels"
+
+#: ../src/file.c:91
+msgid "New Label or Card"
+msgstr "新建标签或名片"
+
+#: ../src/file.c:191
+msgid "Label properties"
+msgstr "标签属性"
+
+#: ../src/file.c:292 ../src/file.c:578
+msgid "All files"
+msgstr "全部文件"
+
+#: ../src/file.c:297 ../src/file.c:583
+msgid "gLabels documents"
+msgstr "gLabels文件(.glabels)"
+
+#: ../src/file.c:343 ../src/file.c:640
+msgid "Empty file name selection"
+msgstr "没有选择文件"
+
+#: ../src/file.c:346 ../src/file.c:362
+msgid "Please select a file or supply a valid file name"
+msgstr "请选择文件,或输入文件名"
+
+#: src/file.c:519 src/file.c:631
+msgid "File does not exist"
+msgstr "文件不存在"
+
+#: ../src/file.c:433
+#, c-format
+msgid "Could not open file \"%s\""
+msgstr "无法打开文件 \"%s\""
+
+#: src/file.c:715
+msgid "Not a supported file format"
+msgstr "不支持的文件格式"
+
+#: ../src/file.c:513 ../src/file.c:690
+#, c-format
+msgid "Could not save file \"%s\""
+msgstr "无法保存文件 \"%s\""
+
+#: src/file.c:805 src/file.c:987 src/file.c:1182
+msgid "Error encountered during save.  The file is still not saved."
+msgstr "保存时出错。文件没有保存。"
+
+#: ../src/file.c:556
+#, c-format
+msgid "Save \"%s\" as"
+msgstr " \"%s\" 另存为"
+
+#: src/file.c:935 src/file.c:1131
+msgid "Please supply a valid file name"
+msgstr "请输入文件名"
+
+#: ../src/file.c:664
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr "覆盖文件 \"%s\"?"
+
+#: src/file.c:960 src/file.c:1155
+msgid "File already exists."
+msgstr "已有同名文件。"
+
+#: src/file.c:1271
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr "在关闭前先保存文件 \"%s\"?"
+
+#: src/file.c:1279
+msgid "Your changes will be lost if you don't save them."
+msgstr "如果不保存,所做的更改会丢失。"
+
+#: src/file.c:1282
+msgid "Close without saving"
+msgstr "关闭(不保存)"
+
+#. Should not happen
+#: ../src/prefs.c:159 ../src/prefs.c:166
+#: ../data/builder/object-editor.glade.h:43
+#: ../data/builder/prefs-dialog.glade.h:22
+msgid "points"
+msgstr "像素"
+
+#: src/prefs.c:158 data/glade/object-editor.glade.h:36
+#: data/glade/template-designer.glade.h:74
+msgid "inches"
+msgstr "英寸"
+
+#: src/prefs.c:160
+msgid "mm"
+msgstr "mm"
+
+#: src/prefs-dialog.c:248 data/glade/prefs-dialog.glade.h:22
+msgid "gLabels Preferences"
+msgstr "gLabels参数"
+
+#. Build editor.
+#: ../src/view-box.c:175
+msgid "Box object properties"
+msgstr "矩形属性"
+
+#. Build editor.
+#: src/view-ellipse.c:224
+msgid "Ellipse object properties"
+msgstr "椭圆属性"
+
+#. Build editor.
+#: src/view-line.c:224
+msgid "Line object properties"
+msgstr "线条属性"
+
+#. Build editor.
+#: src/view-image.c:223
+msgid "Image object properties"
+msgstr "图片属性"
+
+#. Build editor.
+#: src/view-text.c:251
+msgid "Text object properties"
+msgstr "文字属性"
+
+#. Build editor.
+#: ../src/view-barcode.c:174
+msgid "Barcode object properties"
+msgstr "条形码属性"
+
+#: ../src/object-editor-image-page.c:267
+msgid "All Files"
+msgstr "全部文件"
+
+#: ../src/object-editor-image-page.c:272
+msgid "All Images"
+msgstr "全部图片"
+
+#: ../src/object-editor-image-page.c:287
+#, c-format
+msgid "%s (*.%s)"
+msgstr "%s (*.%s)"
+
+#: ../src/merge-properties-dialog.c:271
+msgid "Merge Properties"
+msgstr "合并属性"
+
+#: ../src/merge-properties-dialog.c:297 ../src/merge-properties-dialog.c:405
+msgid "Select merge-database source"
+msgstr "选择要插入的数据"
+
+#: ../src/merge-properties-dialog.c:306 ../src/merge-properties-dialog.c:425
+msgid "N/A"
+msgstr "无"
+
+#: ../src/merge-properties-dialog.c:332
+msgid "Select"
+msgstr "选择"
+
+#: ../src/merge-properties-dialog.c:340
+msgid "Record/Field"
+msgstr "记录/区域"
+
+#: ../src/merge-properties-dialog.c:348
+#: ../data/builder/object-editor.glade.h:10
+msgid "Data"
+msgstr "数据"
+
+#: ../src/merge-properties-dialog.c:418
+msgid "Fixed"
+msgstr "固定值"
+
+#. ===================================================================
+#: ../src/print-op.c:242 ../src/wdgt-print-copies.c:171
+#: ../data/templates/misc-iso-templates.xml.h:34
+msgid "Labels"
+msgstr "标签"
+
+#: ../src/template-designer.c:411
+msgid "gLabels Template Designer"
+msgstr "gLabels 模板设计工具r"
+
+#: ../src/template-designer.c:481
+msgid "Welcome"
+msgstr "欢迎"
+
+#: ../src/template-designer.c:534
+msgid "Name and Description"
+msgstr "名称和说明"
+
+#: ../src/template-designer.c:595
+msgid "Page Size"
+msgstr "纸张尺寸"
+
+#: ../src/template-designer.c:675
+msgid "Label or Card Shape"
+msgstr "标签或名片形状"
+
+#: ../src/template-designer.c:735
+msgid "Label or Card Size"
+msgstr "标签或名片尺寸"
+
+#: ../src/template-designer.c:844
+msgid "Label Size (round)"
+msgstr "标签尺寸(圆形)"
+
+#: ../src/template-designer.c:935
+msgid "Label Size (CD/DVD)"
+msgstr "标签尺寸(CD/DVD)"
+
+#: ../src/template-designer.c:1036
+msgid "Number of Layouts"
+msgstr "布局个数"
+
+#: ../src/template-designer.c:1110
+msgid "Layout(s)"
+msgstr "布局"
+
+#: ../src/template-designer.c:1229
+msgid "Design Completed"
+msgstr "设计完成"
+
+#: ../src/template-designer.c:1396
+msgid ""
+"<span foreground='red' weight='bold'>Brand and part# match an existing "
+"template!</span>"
+msgstr ""
+"<span foreground='red' weight='bold'>模板中已有的品牌和规格</span>"
+
+#: ../src/bc.c:67
+msgid "POSTNET (any)"
+msgstr "POSTNET (通用)"
+
+#: ../src/bc.c:70
+msgid "POSTNET-5 (ZIP only)"
+msgstr "POSTNET-5 (用于邮编)"
+
+#: ../src/bc.c:73
+msgid "POSTNET-9 (ZIP+4)"
+msgstr "POSTNET-9 (ZIP+4)"
+
+#: ../src/bc.c:76
+msgid "POSTNET-11 (DPBC)"
+msgstr "POSTNET-11 (DPBC)"
+
+#: ../src/bc.c:79
+msgid "CEPNET"
+msgstr "CEPNET"
+
+#: ../src/bc.c:82
+msgid "EAN (any)"
+msgstr "EAN (通用)"
+
+#: ../src/bc.c:85
+msgid "EAN-8"
+msgstr "EAN-8"
+
+#: ../src/bc.c:88
+msgid "EAN-8 +2"
+msgstr "EAN-8 +2"
+
+#: ../src/bc.c:91
+msgid "EAN-8 +5"
+msgstr "EAN-8 +5"
+
+#: ../src/bc.c:94
+msgid "EAN-13"
+msgstr "EAN-13"
+
+#: ../src/bc.c:97
+msgid "EAN-13 +2"
+msgstr "EAN-13 +2"
+
+#: ../src/bc.c:100
+msgid "EAN-13 +5"
+msgstr "EAN-13 +5"
+
+#: ../src/bc.c:103
+msgid "UPC (UPC-A or UPC-E)"
+msgstr "UPC (UPC-A 或者 UPC-E)"
+
+#: ../src/bc.c:106
+msgid "UPC-A"
+msgstr "UPC-A"
+
+#: ../src/bc.c:109
+msgid "UPC-A +2"
+msgstr "UPC-A +2"
+
+#: ../src/bc.c:112
+msgid "UPC-A +5"
+msgstr "UPC-A +5"
+
+#: ../src/bc.c:115
+msgid "UPC-E"
+msgstr "UPC-E"
+
+#: ../src/bc.c:118
+msgid "UPC-E +2"
+msgstr "UPC-E +2"
+
+#: ../src/bc.c:121
+msgid "UPC-E +5"
+msgstr "UPC-E +5"
+
+#: ../src/bc.c:124
+msgid "ISBN"
+msgstr "ISBN"
+
+#: ../src/bc.c:127
+msgid "ISBN +5"
+msgstr "ISBN +5"
+
+#: ../src/bc.c:130
+msgid "Code 39"
+msgstr "Code 39"
+
+#: ../src/bc.c:133
+msgid "Code 128"
+msgstr "Code 128"
+
+#: ../src/bc.c:136
+msgid "Code 128C"
+msgstr "Code 128C"
+
+#: ../src/bc.c:139
+msgid "Code 128B"
+msgstr "Code 128B"
+
+#: ../src/bc.c:142
+msgid "Interleaved 2 of 5"
+msgstr "Interleaved 2 of 5"
+
+#: ../src/bc.c:145
+msgid "Codabar"
+msgstr "Codabar"
+
+#: ../src/bc.c:148
+msgid "MSI"
+msgstr "MSI"
+
+#: ../src/bc.c:151
+msgid "Plessey"
+msgstr "Plessey"
+
+#: ../src/bc.c:154
+msgid "IEC16022 (DataMatrix)"
+msgstr "IEC16022 (DataMatrix)"
+
+#: ../src/label.c:531
+msgid "Untitled"
+msgstr "未命名"
+
+#: ../src/label-barcode.c:426
+msgid "Barcode data empty"
+msgstr "空条形码数据"
+
+#: ../src/label-barcode.c:430
+msgid "Invalid barcode data"
+msgstr "条形码数据无效"
+
+#: ../src/xml-label.c:189 ../src/xml-label.c:226
+msgid "xmlParseFile error"
+msgstr "xml文件语法错误"
+
+#: ../src/xml-label.c:262
+msgid "No document root"
+msgstr "没有文档根"
+
+#: ../src/xml-label.c:270
+msgid "Importing from glabels 0.1 format"
+msgstr "导入glabels 0.1格式"
+
+#: src/xml-label.c:272
+msgid "Importing from glabels 0.4 format"
+msgstr "导入glabels 0.4格式"
+
+#: ../src/xml-label.c:288
+#, c-format
+msgid "Unknown glabels Namespace -- Using %s"
+msgstr "未知的glabels文件名称 -- 使用 %s"
+
+#: ../src/xml-label.c:319 ../src/xml-label-04.c:79
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "错误的根地址 = \"%s\""
+
+#: ../src/xml-label.c:356
+#, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "文档地址内有错误点 =  \"%s\""
+
+#: src/xml-label.c:393 src/xml-label-04.c:123 src/xml-label-191.c:197
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "错误点 =  \"%s\""
+
+#: src/xml-label.c:796 src/xml-label-191.c:605
+#, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "数据地址内有错误点 =  \"%s\""
+
+#: src/xml-label.c:962 libglabels/xml-template.c:535
+msgid "Utf8 conversion error."
+msgstr "UTF-8编码转换错误。"
+
+#: src/xml-label.c:969 libglabels/xml-template.c:542
+msgid "Problem saving xml file."
+msgstr "保存xml文件时出错。"
+
+#: ../src/merge.c:170 ../src/merge.c:211 ../src/merge.c:375 ../src/merge.c:378
+msgid "None"
+msgstr "无"
+
+#: ../src/merge-init.c:59
+msgid "Text file with comma delimeters (CSV)"
+msgstr "用逗号分隔的文本文件 (CSV)"
+
+#: src/merge-init.c:60
+msgid "Text file with colon delimeters"
+msgstr "用冒号分隔的文本文件 (CSV)"
+
+#: src/merge-init.c:67
+msgid "Text file with tab delimeters"
+msgstr "用制表符分隔的文本文件 (CSV)"
+
+#: ../src/merge-init.c:82
+msgid "Data from default Evolution Addressbook"
+msgstr "从Evolution导出的通迅录"
+
+#: ../src/merge-init.c:88
+msgid "Data from a file containing VCards"
+msgstr "从VCards文件导出的数据"
+
+#: ../src/merge-evolution.c:309
+msgid "Couldn't construct query"
+msgstr "不能查询数据组"
+
+#: ../src/merge-evolution.c:315 ../src/merge-evolution.c:326
+msgid "Couldn't open addressbook."
+msgstr "不能打开通迅录"
+
+#: ../src/merge-evolution.c:341
+msgid "Couldn't list available fields."
+msgstr "无法显示有效区域。"
+
+#: ../src/merge-evolution.c:377
+msgid "Couldn't get contacts."
+msgstr "无法读取通迅录信息。"
+
+#: ../src/color-combo.c:210
+msgid "Default Color"
+msgstr "默认颜色"
+
+#: ../src/color-combo-menu.c:86
+msgid "Dark Red"
+msgstr "暗红"
+
+#: ../src/color-combo-menu.c:87
+msgid "Brown"
+msgstr "棕色"
+
+#: ../src/color-combo-menu.c:88
+msgid "Dark Goldenrod"
+msgstr "暗黄"
+
+#: ../src/color-combo-menu.c:89
+msgid "Dark Green"
+msgstr "暗绿"
+
+#: ../src/color-combo-menu.c:90
+msgid "Dark Cyan"
+msgstr "暗品红"
+
+#: ../src/color-combo-menu.c:91
+msgid "Navy Blue"
+msgstr "海水蓝"
+
+#: ../src/color-combo-menu.c:92
+msgid "Dark Violet"
+msgstr "紫黑"
+
+#: ../src/color-combo-menu.c:94
+msgid "Red"
+msgstr "红色"
+
+#: ../src/color-combo-menu.c:95
+msgid "Orange"
+msgstr "桔红"
+
+#: ../src/color-combo-menu.c:96
+msgid "Dark Yellow"
+msgstr "暗黄"
+
+#: ../src/color-combo-menu.c:97
+msgid "Medium green"
+msgstr "中等绿"
+
+#: ../src/color-combo-menu.c:98
+msgid "Turquoise"
+msgstr "蓝绿"
+
+#: ../src/color-combo-menu.c:99
+msgid "Blue"
+msgstr "蓝色"
+
+#: ../src/color-combo-menu.c:100
+msgid "Purple"
+msgstr "紫红"
+
+#: ../src/color-combo-menu.c:102
+msgid "Salmon"
+msgstr "马哈鱼色"
+
+#: ../src/color-combo-menu.c:103
+msgid "Gold"
+msgstr "金黄"
+
+#: ../src/color-combo-menu.c:104
+msgid "Yellow"
+msgstr "黄色"
+
+#: ../src/color-combo-menu.c:105
+msgid "Green"
+msgstr "绿色"
+
+#: ../src/color-combo-menu.c:106
+msgid "Cyan"
+msgstr "蓝绿色"
+
+#: ../src/color-combo-menu.c:107
+msgid "SkyBlue"
+msgstr "天空蓝"
+
+#: ../src/color-combo-menu.c:108
+msgid "Violet"
+msgstr "紫色"
+
+#: ../src/color-combo-menu.c:110
+msgid "Pink"
+msgstr "粉红"
+
+#: ../src/color-combo-menu.c:111
+msgid "Khaki"
+msgstr "浅棕黄色"
+
+#: ../src/color-combo-menu.c:112
+msgid "Light Yellow"
+msgstr "浅黄"
+
+#: ../src/color-combo-menu.c:113
+msgid "Light Green"
+msgstr "浅绿"
+
+#: ../src/color-combo-menu.c:114
+msgid "Light Cyan"
+msgstr "浅品红色"
+
+#: ../src/color-combo-menu.c:115
+msgid "Slate Gray"
+msgstr "石灰白"
+
+#: ../src/color-combo-menu.c:116
+msgid "Thistle"
+msgstr ""
+
+#: ../src/color-combo-menu.c:118
+msgid "White"
+msgstr "白色"
+
+#: ../src/color-combo-menu.c:119
+#, c-format
+msgid "10%% Gray"
+msgstr "10%% 灰色"
+
+#: ../src/color-combo-menu.c:120
+#, c-format
+msgid "25%% Gray"
+msgstr "25%% 灰色"
+
+#: ../src/color-combo-menu.c:121
+#, c-format
+msgid "40%% Gray"
+msgstr "40%% 灰色"
+
+#: ../src/color-combo-menu.c:122
+#, c-format
+msgid "50%% Gray"
+msgstr "50%% 灰色"
+
+#: ../src/color-combo-menu.c:123
+#, c-format
+msgid "60%% Gray"
+msgstr "60%% 灰色"
+
+#: ../src/color-combo-menu.c:124
+msgid "Black"
+msgstr "黑色"
+
+#: ../src/color-combo-menu.c:252 ../src/color-combo-menu.c:369
+msgid "Custom Color"
+msgstr "自定义颜色"
+
+#: ../src/color-combo-menu.c:317
+#, c-format
+msgid "Custom Color #%u"
+msgstr "自定义颜色 #%u"
+
+#: ../src/wdgt-print-copies.c:153
+msgid "Sheets:"
+msgstr "页码:"
+
+#: ../src/wdgt-print-copies.c:173
+msgid "from:"
+msgstr "从:"
+
+#: ../src/wdgt-print-copies.c:179
+msgid "to:"
+msgstr "到:"
+
+#: ../src/wdgt-print-merge.c:154
+msgid "Start on label"
+msgstr "启动后直接打开标签"
+
+#: ../src/wdgt-print-merge.c:161
+msgid "on 1st sheet"
+msgstr "在第1页"
+
+#: ../src/wdgt-print-merge.c:170
+msgid "Copies:"
+msgstr "副本"
+
+#: ../src/wdgt-print-merge.c:176
+msgid "Collate"
+msgstr "集合"
+
+#: ../src/wdgt-media-select.c:290 ../src/wdgt-media-select.c:294
+#: ../src/wdgt-media-select.c:299 ../src/wdgt-media-select.c:308
+#: ../src/wdgt-media-select.c:311 ../src/wdgt-media-select.c:404
+#: ../src/wdgt-media-select.c:611 ../src/wdgt-media-select.c:620
+msgid "Any"
+msgstr "通用"
+
+#: ../src/wdgt-media-select.c:645
+#, c-format
+msgid "%d per sheet"
+msgstr "每页 %d"
+
+#: ../src/wdgt-media-select.c:675
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: ../src/wdgt-media-select.c:680
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: ../src/wdgt-media-select.c:691 ../src/wdgt-media-select.c:705
+#, c-format
+msgid "%s %s diameter"
+msgstr "%s %s 直径"
+
+#: ../src/wdgt-media-select.c:695 ../src/wdgt-media-select.c:709
+#, c-format
+msgid "%.5g %s diameter"
+msgstr "%.5g %s 直径"
+
+#: ../src/wdgt-media-select.c:783
+msgid "No recent templates found."
+msgstr "最近没有使用模板。"
+
+#: ../src/wdgt-media-select.c:784
+msgid "Try selecting a template from the \"Search all templates\" page."
+msgstr "请从 \"查找全部模板\" 页面中选择一个模板。"
+
+#: ../src/wdgt-media-select.c:863
+msgid "No match."
+msgstr "不相符。"
+
+#: ../src/wdgt-media-select.c:864
+msgid "Try selecting a different brand, page size or category."
+msgstr "请选择其它品牌,纸张尺寸或类型。"
+
+#: ../src/wdgt-rotate-label.c:129
+msgid "Normal"
+msgstr "正常"
+
+#: ../src/wdgt-rotate-label.c:130
+msgid "Rotated"
+msgstr "旋转"
+
+#: ../src/critical-error-handler.c:73
+msgid "gLabels Fatal Error!"
+msgstr "gLabels出现严重错误!"
+
+#: ../src/warning-handler.c:73
+msgid "gLabels Error!"
+msgstr "gLabels错误!"
+
+#. Create and append an "Other" entry.
+#: ../libglabels/db.c:118
+msgid "Other"
+msgstr "其它"
+
+#. Create and append a "User defined" entry.
+#: ../libglabels/db.c:131
+msgid "User defined"
+msgstr "自定义的"
+
+#: ../libglabels/db.c:482
+msgid ""
+"Unable to locate paper size definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr "找不到纸张尺寸定义文件。可能是glabels的库文件没有正确安装。"
+
+#: ../libglabels/db.c:875
+msgid ""
+"Unable to locate category definitions.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"找不到类型定义文件。可能是glabels的库文件没有正确安装。"
+
+#: ../libglabels/db.c:1461
+msgid ""
+"Unable to locate any template files.  Libglabels may not be installed "
+"correctly!"
+msgstr ""
+"找不到模板文件。可能是glabels的库文件没有正确安装。"
+
+#: ../libglabels/db.c:1538
+#, c-format
+msgid "Generic %s full page template"
+msgstr "普通的整页模板 %s"
+
+#: ../libglabels/xml-template.c:227
+msgid "Missing name or brand/part attributes."
+msgstr "名称或品牌/规格 属性不完整。"
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: ../libglabels/xml-template.c:244
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr "未知的纸张大小id \"%s\",请试着用纸张规格"
+
+#: src/xml-label-191.c:690 libglabels/xml-template.c:209
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr "未知的纸张大小id或规格 \"%s\""
+
+#: ../libglabels/xml-template.c:615
+msgid ""
+"Missing required \"brand\" or \"part\" attribute, trying deprecated name."
+msgstr ""
+"\"品牌\" 或者 \"规格\" 属性不完整,请尝试改变字母大小写。"
+
+#: ../libglabels/xml-template.c:625
+msgid "Name attribute also missing."
+msgstr "名称属性也不完整。"
+
+#: ../data/builder/merge-properties-dialog.glade.h:1
+msgid "<b>Record selection/preview</b>"
+msgstr "<b>记录选择/预览</b>"
+
+#: ../data/builder/merge-properties-dialog.glade.h:2
+msgid "<b>Source</b>"
+msgstr "<b>来源</b>"
+
+#: ../data/builder/merge-properties-dialog.glade.h:3
+msgid "Format:"
+msgstr "格式:"
+
+#: ../data/builder/merge-properties-dialog.glade.h:4
+msgid "Location:"
+msgstr "位置:"
+
+#: ../data/builder/merge-properties-dialog.glade.h:5
+msgid "Select all"
+msgstr "全选"
+
+#: ../data/builder/merge-properties-dialog.glade.h:6
+msgid "Unselect all"
+msgstr "取消全选"
+
+#: ../data/builder/merge-properties-dialog.glade.h:7
+#: ../data/builder/object-editor.glade.h:39
+msgid "dialog1"
+msgstr "对话框1"
+
+#: ../data/builder/new-label-dialog.glade.h:1
+msgid "<b>Label orientation</b>"
+msgstr "<b>标签方向</b>"
+
+#: ../data/builder/new-label-dialog.glade.h:2
+msgid "<b>Media type</b>"
+msgstr "<b>介质类型</b>"
+
+#: ../data/builder/object-editor.glade.h:2
+#, no-c-format
+msgid "%"
+msgstr "%"
+
+#: ../data/builder/object-editor.glade.h:3
+msgid "00000000000 00000"
+msgstr "00000000000 00000"
+
+#: ../data/builder/object-editor.glade.h:4
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">Xxx对象属性</span>"
+
+#: ../data/builder/object-editor.glade.h:5
+#: ../data/builder/prefs-dialog.glade.h:7
+msgid "Alignment:"
+msgstr "对齐:"
+
+#: ../data/builder/object-editor.glade.h:6
+msgid "Allow merge to automatically shrink text"
+msgstr "自动调整和缩放文字"
+
+#: ../data/builder/object-editor.glade.h:7
+msgid "Angle:"
+msgstr "角度:"
+
+#: ../data/builder/object-editor.glade.h:8
+msgid "Checksum"
+msgstr "校验值"
+
+#: ../data/builder/object-editor.glade.h:9
+#: ../data/builder/prefs-dialog.glade.h:8
+msgid "Color:"
+msgstr "颜色:"
+
+#: ../data/builder/object-editor.glade.h:11
+msgid "Enable shadow"
+msgstr "使用阴影"
+
+#: ../data/builder/object-editor.glade.h:12
+msgid "Family:"
+msgstr "系列:"
+
+#: ../data/builder/object-editor.glade.h:13
+msgid "File:"
+msgstr "文件:"
+
+#: ../data/builder/object-editor.glade.h:14
+msgid "Fill"
+msgstr "填充"
+
+#: ../data/builder/object-editor.glade.h:15
+#: ../data/builder/template-designer.glade.h:30
+msgid "Height:"
+msgstr "高度:"
+
+#: ../data/builder/object-editor.glade.h:17
+msgid "Insert merge field"
+msgstr "插入合并区域"
+
+#: ../data/builder/object-editor.glade.h:18
+msgid "Key:"
+msgstr "键值:"
+
+#: ../data/builder/object-editor.glade.h:19
+msgid "Length:"
+msgstr "长度:"
+
+#: ../data/builder/object-editor.glade.h:21
+#: ../data/builder/prefs-dialog.glade.h:12
+msgid "Line Spacing:"
+msgstr "线条间隔:"
+
+#: ../data/builder/object-editor.glade.h:22
+msgid "Literal:"
+msgstr "文字:"
+
+#: ../data/builder/object-editor.glade.h:23
+msgid "Opacity:"
+msgstr "不透明:"
+
+#: ../data/builder/object-editor.glade.h:24
+msgid "Position"
+msgstr "位置"
+
+#: ../data/builder/object-editor.glade.h:25
+msgid "Reset image size"
+msgstr "恢复图片大小"
+
+#: ../data/builder/object-editor.glade.h:26
+msgid "Select A File"
+msgstr "选择一个文件"
+
+#: ../data/builder/object-editor.glade.h:27
+msgid "Shadow"
+msgstr "阴影"
+
+#: ../data/builder/object-editor.glade.h:28
+msgid "Size"
+msgstr "尺寸"
+
+#: ../data/builder/object-editor.glade.h:29
+msgid "Size:"
+msgstr "尺寸:"
+
+#: ../data/builder/object-editor.glade.h:30
+msgid "Style"
+msgstr "规格"
+
+#: ../data/builder/object-editor.glade.h:31
+msgid "Style:"
+msgstr "规格:"
+
+#: ../data/builder/object-editor.glade.h:33
+#: ../data/builder/prefs-dialog.glade.h:20
+#: ../data/builder/template-designer.glade.h:61
+msgid "Width:"
+msgstr "宽度:"
+
+#: ../data/builder/object-editor.glade.h:34
+msgid "X Offset:"
+msgstr "X 偏移量:"
+
+#: ../data/builder/object-editor.glade.h:35
+msgid "X:"
+msgstr "X:"
+
+#: ../data/builder/object-editor.glade.h:36
+msgid "Y Offset:"
+msgstr "Y 偏移量:"
+
+#: ../data/builder/object-editor.glade.h:37
+msgid "Y:"
+msgstr "Y:"
+
+#: ../data/builder/object-editor.glade.h:38
+msgid "degrees"
+msgstr "度数"
+
+#: ../data/builder/object-editor.glade.h:40
+msgid "digits:"
+msgstr "数字位数:"
+
+#: ../data/builder/object-editor.glade.h:41
+msgid "format:"
+msgstr "格式:"
+
+#: ../data/builder/prefs-dialog.glade.h:1
+msgid "   "
+msgstr "   "
+
+#: ../data/builder/prefs-dialog.glade.h:2
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr "<span weight=\"bold\">默认纸张尺寸</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr "<span weight=\"bold\">填充</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Line</span>"
+msgstr "<span weight=\"bold\">线条</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Text</span>"
+msgstr "<span weight=\"bold\">文字</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Units</span>"
+msgstr "<span weight=\"bold\">单位</span>"
+
+#: ../data/builder/prefs-dialog.glade.h:9
+msgid "Font:"
+msgstr "字体:"
+
+#: ../data/builder/prefs-dialog.glade.h:10
+msgid "ISO A4"
+msgstr ""
+
+#: ../data/builder/prefs-dialog.glade.h:11
+msgid "Inches"
+msgstr "英寸"
+
+#: ../data/builder/prefs-dialog.glade.h:13
+msgid "Locale"
+msgstr "本地化"
+
+#: ../data/builder/prefs-dialog.glade.h:14
+msgid "Millimeters"
+msgstr "毫米"
+
+#: ../data/builder/prefs-dialog.glade.h:15
+msgid "Object defaults"
+msgstr "对象默认值"
+
+#: ../data/builder/prefs-dialog.glade.h:16
+msgid "Points"
+msgstr "像素"
+
+#: ../data/builder/prefs-dialog.glade.h:17
+msgid "Select default properties for new objects."
+msgstr "为新对象选择默认属性"
+
+#: data/glade/prefs-dialog.glade.h:19
+msgid "Select locale specific behavior."
+msgstr "本地化设置"
+
+#. Most popular (at top of list)
+#: ../data/builder/prefs-dialog.glade.h:19
+#: ../data/templates/paper-sizes.xml.h:29
+msgid "US Letter"
+msgstr "美国信封"
+
+#: ../data/builder/print-custom-widget.glade.h:1
+msgid "<b>Options</b>"
+msgstr "<b>选项</b>"
+
+#: ../data/builder/print-custom-widget.glade.h:2
+msgid "<b>Print control (Merge)</b>"
+msgstr "<b>打印控制(合并)</b>"
+
+#: ../data/builder/print-custom-widget.glade.h:3
+msgid "<b>Print control (Simple)</b>"
+msgstr "<b>打印控制(简单)</b>"
+
+#: ../data/builder/property-bar.glade.h:1
+msgid "Bold"
+msgstr "粗体"
+
+#: ../data/builder/property-bar.glade.h:2
+msgid "Center align"
+msgstr "中心对齐"
+
+#: ../data/builder/property-bar.glade.h:4
+msgid "Font family"
+msgstr "字体系列"
+
+#: ../data/builder/property-bar.glade.h:5
+msgid "Font size"
+msgstr "字体大小"
+
+#: ../data/builder/property-bar.glade.h:6
+msgid "Italic"
+msgstr "斜体"
+
+#: ../data/builder/property-bar.glade.h:7
+msgid "Left align"
+msgstr "左对齐"
+
+#: ../data/builder/property-bar.glade.h:9
+msgid "Line width"
+msgstr "线宽"
+
+#: ../data/builder/property-bar.glade.h:10
+msgid "Right align"
+msgstr "右对齐"
+
+#: ../data/builder/property-bar.glade.h:11
+msgid "Text Color"
+msgstr "文字颜色"
+
+#: ../data/builder/template-designer.glade.h:1
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr "(例如:信封标签,名片...)"
+
+#: ../data/builder/template-designer.glade.h:2
+msgid "(e.g., 8163A)"
+msgstr "(例如:8163A)"
+
+#: ../data/builder/template-designer.glade.h:3
+msgid "(e.g., Avery, Acme, ...)"
+msgstr "(例如:Avery, Acme, ...)"
+
+#: ../data/builder/template-designer.glade.h:4
+msgid "1. Outer radius:"
+msgstr "1. 外半径:"
+
+#: data/glade/template-designer.glade.h:7
+msgid "1. Radius:"
+msgstr "1. 半径:"
+
+#: data/glade/template-designer.glade.h:8
+msgid "1. Width:"
+msgstr "1. 宽度:"
+
+#: data/glade/template-designer.glade.h:9
+msgid "2. Height:"
+msgstr "2. 高度:"
+
+#: data/glade/template-designer.glade.h:10
+msgid "2. Inner radius:"
+msgstr "2. 内半径:"
+
+#: data/glade/template-designer.glade.h:11
+msgid "2. Waste (overprint allowed):"
+msgstr "2. 余量(允许叠印):"
+
+#: data/glade/template-designer.glade.h:12
+msgid "3. Clipping width:"
+msgstr "3. 限宽:"
+
+#: data/glade/template-designer.glade.h:13
+msgid "3. Margin"
+msgstr "3. 页边"
+
+#: data/glade/template-designer.glade.h:14
+msgid "3. Round (radius of corner):"
+msgstr "3. 环绕 (半径):"
+
+#: data/glade/template-designer.glade.h:15
+msgid "4. Clipping height:"
+msgstr "4. 限高:"
+
+#: data/glade/template-designer.glade.h:16
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr "4. 水平余量(允许叠印):"
+
+#: data/glade/template-designer.glade.h:17
+msgid "5. Vert. waste (overprint allowed):"
+msgstr "5. 垂直余量(允许叠印):"
+
+#: data/glade/template-designer.glade.h:18
+msgid "5. Waste (overprint allowed):"
+msgstr "5. 余量(允许叠印):"
+
+#: data/glade/template-designer.glade.h:19
+msgid "6. Margin"
+msgstr "6. 页边"
+
+#: data/glade/template-designer.glade.h:20
+msgid "Brand/Manufacturer:"
+msgstr "品牌/制造商:"
+
+#: data/glade/template-designer.glade.h:21
+msgid "CD/DVD (including credit card CDs)"
+msgstr "CD/DVD (包括信用卡CD)"
+
+#: data/glade/template-designer.glade.h:22
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+"祝贺你!\n"
+"\n"
+"模板设计已完成。\n"
+"点击 \"应用\"来进行确认和保存。\n"
+"\n"
+"否则请点击 \"取消\" 来放弃设计,\n"
+"或者点击 \"后退\" 继续设计。"
+
+#: ../data/builder/template-designer.glade.h:27
+msgid "Description:"
+msgstr "说明:"
+
+#: data/glade/template-designer.glade.h:31
+msgid "Distance from left edge (x0):"
+msgstr "到左边界的距离 (x0):"
+
+#: data/glade/template-designer.glade.h:32
+msgid "Distance from top edge (y0):"
+msgstr "到上边界的距离 (y0):"
+
+#: data/glade/template-designer.glade.h:34
+msgid "Horizontal pitch (dx):"
+msgstr "水平栅距 (dx):"
+
+#: data/glade/template-designer.glade.h:35
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+"模板包含多少个布局? \n"
+"\n"
+"“层” 可以把多个标签或名片方便地排列到一个简单的小格子里。\n"
+"绝大多数模板只需要1个布局,如第1个例子所示。\n"
+"第2个图例说明了需要2个布局的例子。"
+
+#: ../data/builder/template-designer.glade.h:37
+msgid "Layout #1"
+msgstr "布局 #1"
+
+#: data/glade/template-designer.glade.h:45
+msgid "Layout #2"
+msgstr "布局 #2"
+
+#: data/glade/template-designer.glade.h:48
+msgid "Number across (nx):"
+msgstr "数字交叉 (nx):"
+
+#: data/glade/template-designer.glade.h:49
+msgid "Number down (ny):"
+msgstr "数字向下 (ny):"
+
+#: data/glade/template-designer.glade.h:51
+msgid "Number of layouts:"
+msgstr "布局个数:"
+
+#: data/glade/template-designer.glade.h:52
+msgid "Page size:"
+msgstr "纸张大小"
+
+#: data/glade/template-designer.glade.h:54
+msgid "Part #:"
+msgstr "规格 #:"
+
+#: ../data/builder/template-designer.glade.h:44
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr "请输入模板的备注信息。"
+
+#: data/glade/template-designer.glade.h:56
+msgid "Please enter the following layout information."
+msgstr "请输入下面的布局数据。"
+
+#: data/glade/template-designer.glade.h:57
+msgid ""
+"Please enter the following size parameters of a single label in your template."
+msgstr "请在模板里输入单个标签的尺寸数据。"
+
+#: ../data/builder/template-designer.glade.h:47
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+"请在模板里输入单个标签或名片的尺寸数据。"
+
+#: data/glade/template-designer.glade.h:59
+msgid "Please select the basic shape of the labels or cards."
+msgstr "请选择标签或名片的基本形状。"
+
+#: data/glade/template-designer.glade.h:60
+msgid "Please select the page size of the template stationery."
+msgstr "请选择模板所采用的纸张大小。"
+
+#: data/glade/template-designer.glade.h:61
+msgid "Print test sheet"
+msgstr "打印测试页"
+
+#: data/glade/template-designer.glade.h:62
+msgid "Rectangular or square (can have rounded corners)"
+msgstr "长方形或正方形(可以倒圆角)"
+
+#: data/glade/template-designer.glade.h:63
+msgid "Round"
+msgstr "圆形"
+
+#: data/glade/template-designer.glade.h:64
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+"模板需要\n"
+"2个布局 "
+
+#: data/glade/template-designer.glade.h:66
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+"模板需要\n"
+"1个布局 "
+
+#: ../data/builder/template-designer.glade.h:57
+msgid "Vertical pitch (dy):"
+msgstr "垂直栅距 (dy):"
+
+#: ../data/builder/template-designer.glade.h:58
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+"欢迎使用 gLabels 模板设计工具。\n"
+"\n"
+"请参照下面的步骤来制作一个你需要的 gLabels 模板。"
+
+#: ../data/builder/template-designer.glade.h:62
+msgid "cd_size_page"
+msgstr "光盘尺寸"
+
+#: ../data/builder/template-designer.glade.h:63
+msgid "finish_page"
+msgstr "完成"
+
+#: ../data/builder/template-designer.glade.h:65
+msgid "layout_page"
+msgstr "布局"
+
+#: ../data/builder/template-designer.glade.h:66
+msgid "name_page"
+msgstr "名称"
+
+#: ../data/builder/template-designer.glade.h:67
+msgid "nlayouts_page"
+msgstr "多层布局"
+
+#: ../data/builder/template-designer.glade.h:68
+msgid "pg_size_page"
+msgstr "纸张大小"
+
+#: ../data/builder/template-designer.glade.h:69
+msgid "rect_size_page"
+msgstr "矩形尺寸"
+
+#: ../data/builder/template-designer.glade.h:70
+msgid "round_size_page"
+msgstr "圆形尺寸"
+
+#: ../data/builder/template-designer.glade.h:71
+msgid "shape_page"
+msgstr "形状"
+
+#: ../data/builder/template-designer.glade.h:72
+msgid "start_page"
+msgstr "起始页"
+
+#: ../data/builder/wdgt-media-select.glade.h:1
+msgid "Brand:"
+msgstr "品牌:"
+
+#: ../data/builder/wdgt-media-select.glade.h:2
+msgid "Category:"
+msgstr "类型:"
+
+#: ../data/builder/wdgt-media-select.glade.h:4
+msgid "Recent templates"
+msgstr "最近的模板"
+
+#: ../data/builder/wdgt-media-select.glade.h:5
+msgid "Search all templates"
+msgstr "查找全部模板"
+
+#. Other ISO A series sizes
+#: ../data/templates/paper-sizes.xml.h:2
+msgid "A0"
+msgstr "A0"
+
+#: ../data/templates/paper-sizes.xml.h:3
+msgid "A1"
+msgstr "A1"
+
+#: ../data/templates/paper-sizes.xml.h:4
+msgid "A10"
+msgstr "A10"
+
+#: ../data/templates/paper-sizes.xml.h:5
+msgid "A2"
+msgstr "A2"
+
+#: ../data/templates/paper-sizes.xml.h:6
+msgid "A3"
+msgstr "A3"
+
+#: ../data/templates/paper-sizes.xml.h:7
+msgid "A4"
+msgstr "A4"
+
+#: ../data/templates/paper-sizes.xml.h:8
+msgid "A5"
+msgstr "A5"
+
+#: ../data/templates/paper-sizes.xml.h:9
+msgid "A6"
+msgstr "A6"
+
+#: ../data/templates/paper-sizes.xml.h:10
+msgid "A7"
+msgstr "A7"
+
+#: ../data/templates/paper-sizes.xml.h:11
+msgid "A8"
+msgstr "A8"
+
+#: ../data/templates/paper-sizes.xml.h:12
+msgid "A9"
+msgstr "A9"
+
+#. ISO B series sizes
+#: ../data/templates/paper-sizes.xml.h:14
+msgid "B0"
+msgstr "B0"
+
+#: ../data/templates/paper-sizes.xml.h:15
+msgid "B1"
+msgstr "B1"
+
+#: ../data/templates/paper-sizes.xml.h:16
+msgid "B10"
+msgstr "B10"
+
+#: ../data/templates/paper-sizes.xml.h:17
+msgid "B2"
+msgstr "B2"
+
+#: ../data/templates/paper-sizes.xml.h:18
+msgid "B3"
+msgstr "B3"
+
+#: ../data/templates/paper-sizes.xml.h:19
+msgid "B4"
+msgstr "B4"
+
+#: ../data/templates/paper-sizes.xml.h:20
+msgid "B5"
+msgstr "B5"
+
+#: ../data/templates/paper-sizes.xml.h:21
+msgid "B6"
+msgstr "B6"
+
+#: ../data/templates/paper-sizes.xml.h:22
+msgid "B7"
+msgstr "B7"
+
+#: ../data/templates/paper-sizes.xml.h:23
+msgid "B8"
+msgstr "B8"
+
+#: ../data/templates/paper-sizes.xml.h:24
+msgid "B9"
+msgstr "B9"
+#: data/templates/paper-sizes.xml.h:25
+msgid "US Executive"
+msgstr "美国常用"
+
+#. Other US paper sizes
+#: data/templates/paper-sizes.xml.h:27
+msgid "US Legal"
+msgstr "美国国标"
+
+#: ../data/templates/categories.xml.h:1
+msgid "Any card"
+msgstr "通用名片"
+
+#: ../data/templates/categories.xml.h:2
+msgid "Any label"
+msgstr "通用标签"
+
+#: ../data/templates/categories.xml.h:3
+msgid "Business cards"
+msgstr "名片"
+
+#: ../data/templates/categories.xml.h:4
+msgid "CD/DVD or other media"
+msgstr "CD/DVD 或其它光盘"
+
+#: ../data/templates/categories.xml.h:5
+msgid "Mailing/shipping products"
+msgstr "信件/快递包裹"
+
+#: ../data/templates/categories.xml.h:6
+msgid "Rectangular labels"
+msgstr "长方形标签"
+
+#: ../data/templates/categories.xml.h:7
+msgid "Round labels"
+msgstr "圆形标签"
+
+#: ../data/templates/categories.xml.h:8
+msgid "Square labels"
+msgstr "正方形标签"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:2
+#: ../data/templates/avery-iso-templates.xml.h:2
+#: ../data/templates/dymo-other-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:2
+#: ../data/templates/zweckform-iso-templates.xml.h:2
+msgid "Address Labels"
+msgstr "通迅录标签"
+
+#. ===================================================================
+#. ============================================================
+#. ===================================================================
+#. ********************************************************************
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:4
+#: ../data/templates/avery-iso-templates.xml.h:8
+#: ../data/templates/misc-us-templates.xml.h:4
+#: ../data/templates/misc-iso-templates.xml.h:12
+#: ../data/templates/zweckform-iso-templates.xml.h:6
+msgid "Business Cards"
+msgstr "名片"
+
+#. ===================================================================
+#. ===============================================================
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:6
+#: ../data/templates/avery-iso-templates.xml.h:14
+#: ../data/templates/misc-us-templates.xml.h:8
+#: ../data/templates/misc-iso-templates.xml.h:16
+#: ../data/templates/zweckform-iso-templates.xml.h:8
+msgid "CD/DVD Labels"
+msgstr "CD/DVD 光盘标签"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:8
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr "CD/DVD 光盘标签(光盘盘面)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:10
+msgid "CD/DVD Labels (Spine Labels)"
+msgstr "CD/DVD 光盘标签(光盘盒内衬纸)"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:12
+#: ../data/templates/avery-iso-templates.xml.h:16
+msgid "Diskette Labels"
+msgstr "软盘标签"
+
+#. the LSK labels can be torn in half down the center
+#: ../data/templates/avery-us-templates.xml.h:14
+msgid "Divider Labels"
+msgstr "分隔标签"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:9
+msgid "Filing Labels"
+msgstr "档案标签"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:11
+msgid "Full Sheet Labels"
+msgstr "整页标签"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:20
+msgid "ID Labels"
+msgstr "编号卡片"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:22
+msgid "Index Cards"
+msgstr "索引卡片"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:24
+msgid "Large Round Labels"
+msgstr "大圆标签"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:15
+msgid "Name Badge Labels"
+msgstr "铭牌标签"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:28
+msgid "Post cards"
+msgstr "贺卡/明信片"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:17
+msgid "Return Address Labels"
+msgstr "退回地址标签"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:32
+msgid "Round Labels"
+msgstr "圆标签"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:34
+msgid "Shipping Labels"
+msgstr "物流标签"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:21
+msgid "Small Round Labels"
+msgstr "小圆标签"
+
+#. ===================================================================
+#: data/templates/avery-us-templates.xml.h:23
+msgid "Square Labels"
+msgstr "正方形标签"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:40
+msgid "Tent Cards"
+msgstr "夹纸条"
+
+#. ===================================================================
+#: ../data/templates/avery-us-templates.xml.h:42
+msgid "Video Tape Face Labels"
+msgstr "录像带正面标签"
+
+#: data/templates/avery-us-templates.xml.h:25
+msgid "Video Tape Spine Labels"
+msgstr "录像带背面标签"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:2
+msgid "Address labels"
+msgstr "通迅录标签"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:6
+msgid "Allround labels"
+msgstr "通用标签"
+
+#. ===============================================================
+#: data/templates/avery-iso-templates.xml.h:6
+msgid "CD Booklet"
+msgstr "CD集标签"
+
+#. ===============================================================
+#: data/templates/avery-iso-templates.xml.h:8
+msgid "CD Inlet"
+msgstr "CD单盒"
+
+#. ===================================================================
+#: ../data/templates/avery-iso-templates.xml.h:18
+msgid "Diskette labels"
+msgstr "软盘标签"
+
+#. ===============================================================
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:14
+#: data/templates/zweckform-iso-templates.xml.h:14
+#: data/templates/misc-iso-templates.xml.h:35
+msgid "Mailing Labels"
+msgstr "信封标签"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:16
+msgid "Mailing labels"
+msgstr "信封标签"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:18
+msgid "Mini Address Labels"
+msgstr "地址标签"
+
+#. ===================================================================
+#: data/templates/avery-iso-templates.xml.h:20
+msgid "Shipping labels"
+msgstr "物流标签"
+
+#. ===================================================================
+#: ../data/templates/avery-other-templates.xml.h:2
+msgid "File Folder Labels"
+msgstr "文件夹标签"
+
+#: ../data/templates/brother-other-templates.xml.h:1
+msgid "Multi Purpose Labels 17mm x 54mm"
+msgstr "多用途标签 17mm x 54mm"
+
+#: ../data/templates/brother-other-templates.xml.h:2
+msgid "Shipping Labels 62mm x 100mm"
+msgstr "物流标签 62mm x 100mm"
+
+#.
+#. *********************************************************************
+#. *********************************************************************
+#. Labels for the Brother QL-500/550/650 PC Label Printers
+#.
+#. These templates work with the Brother Linux Printer CUPS Driver.  It
+#. is unknown if these work correctly with the foomatic print driver for
+#. these printers.
+#.
+#. One difference from typical templates is that the template size is
+#. not the actual media size - it is the size of the printable area,
+#. which is smaller than the media size.  This is because (at least with
+#. the Brother driver) coordinates are relative the corner of this area.
+#.
+#. *********************************************************************
+#. *********************************************************************
+#.
+#: ../data/templates/brother-other-templates.xml.h:20
+msgid "Standard Address Labels 29mm x 90mm"
+msgstr "标准通迅录 29mm x 90mm"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:2
+msgid "3.5in Diskette"
+msgstr "3.5英寸软盘"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:6
+msgid "File Folder"
+msgstr "文件夹"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:8
+msgid "Hanging Folder"
+msgstr "挂起的公文夹"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:10
+msgid "Large Address Labels"
+msgstr "大地址标签"
+
+#. ===================================================================
+#: ../data/templates/dymo-other-templates.xml.h:14
+msgid "Shipping Address Labels"
+msgstr "物流地址标签"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:2
+msgid "Business Card CD"
+msgstr "名片CD"
+
+#. ===================================================================
+#: ../data/templates/misc-us-templates.xml.h:6
+msgid "CD Template Rectangles"
+msgstr "CD方盒 (方形外包装)"
+msgid "CD/DVD Labels (Face Only)"
+msgstr "CD/DVD光盘贴纸(盘面)"
+
+
+#: data/templates/misc-us-templates.xml.h:7
+#: data/templates/misc-iso-templates.xml.h:23
+msgid "CD/DVD Labels (face only)"
+msgstr "CD/DVD光盘贴纸(盘面)"
+
+
+#: data/templates/misc-us-templates.xml.h:9
+msgid "Cassette Labels"
+msgstr "磁带盒标签"
+
+
+#: data/templates/misc-us-templates.xml.h:11
+msgid "DLT Labels"
+msgstr "DLT标签"
+
+
+#: data/templates/misc-us-templates.xml.h:13
+msgid "Microtube labels"
+msgstr "细管标签"
+
+#: data/templates/misc-us-templates.xml.h:14
+msgid "Mini-CD Labels"
+msgstr "微型CD的标签"
+
+#: data/templates/misc-us-templates.xml.h:15
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr "超级CD标签 2-向上(光盘盘面)"
+
+#: data/templates/misc-us-templates.xml.h:16
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr "超级CD标签 2-向上(封面)"
+
+#: data/templates/misc-us-templates.xml.h:17
+#: data/templates/misc-iso-templates.xml.h:42
+msgid "PRO CD Labels 2-up (face only)"
+msgstr "超级CD标签 2-向上(封面)"
+
+#: data/templates/misc-us-templates.xml.h:13
+msgid "Slimline CD Case (rightside up)"
+msgstr "CD收集盒(右侧在上)"
+
+#: data/templates/misc-us-templates.xml.h:19
+msgid "Slimline CD Case (upside down)"
+msgstr "CD收集盒(盖子在下)"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:4
+#: ../data/templates/zweckform-iso-templates.xml.h:4
+msgid "Allround Labels"
+msgstr "通用标签"
+
+#: data/templates/misc-iso-templates.xml.h:11
+msgid "Arch File Labels"
+msgstr "档案标签"
+
+#: data/templates/misc-iso-templates.xml.h:13
+msgid "Arch File Labels (large)"
+msgstr "档案标签(大)"
+
+#: data/templates/misc-iso-templates.xml.h:15
+msgid "Arch File Labels (small)"
+msgstr "档案标签(小)"
+
+#: data/templates/misc-iso-templates.xml.h:19
+msgid "CD Labels"
+msgstr "CD标签"
+
+#: data/templates/misc-iso-templates.xml.h:25
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr "CD/DVD光盘贴纸标准格式(正面)"
+
+#: data/templates/misc-iso-templates.xml.h:27
+msgid "Diskette Labels (face only)"
+msgstr "软盘标签 (封面)"
+
+#: data/templates/misc-iso-templates.xml.h:29
+msgid "EPSON Photo Stickers 16"
+msgstr "爱普生(EPSON)相片纸"
+
+#: data/templates/misc-iso-templates.xml.h:31
+msgid "Etiketten"
+msgstr "包装标签"
+
+#: data/templates/misc-iso-templates.xml.h:33
+msgid "Fridge Magnet Stickers"
+msgstr "冰箱贴纸"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:30
+msgid "General Labels"
+msgstr "通用标签"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:32
+msgid "Inkjet/Laser Labels 70x37mm"
+msgstr "喷墨/激光打印纸 70x37mm"
+
+#. ===================================================================
+#: data/templates/misc-iso-templates.xml.h:37
+msgid "Mailing Labels --14"
+msgstr "信封标签 --14"
+
+#: data/templates/misc-iso-templates.xml.h:39
+msgid "Mailing Labels-2 columns"
+msgstr "信封标签-2栏"
+
+#: data/templates/misc-iso-templates.xml.h:41
+msgid "Mailing Labels-3 columns"
+msgstr "信封标签-3栏"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:44
+#: ../data/templates/zweckform-iso-templates.xml.h:24
+msgid "Rectangular Labels"
+msgstr "长方形标签"
+
+#. ===================================================================
+#: ../data/templates/misc-iso-templates.xml.h:46
+msgid "Video Labels (face only)"
+msgstr "录像带标签(正面)"
+
+#. ===================================================================
+#: ../data/templates/misc-other-templates.xml.h:2
+msgid "Multi-Purpose Labels"
+msgstr "多用途标签"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:10
+msgid "Correction and Cover-up Labels"
+msgstr "改错贴纸标签"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:12
+msgid "File Back Labels"
+msgstr "文件备案标签"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:14
+msgid "Lever Arch File Labels"
+msgstr "装订档案标签"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:18
+msgid "Multi-purpose Stick+Lift Labels"
+msgstr "多用途 易事贴"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:20
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr ""
+
+#. ===================================================================
+#: data/templates/zweckform-iso-templates.xml.h:18
+msgid "Rectangular Copier Labels"
+msgstr "长方形复写标签"
+
+#. ===================================================================
+#: ../data/templates/zweckform-iso-templates.xml.h:26
+msgid "Video Labels (back)"
+msgstr "录像带标签(背面)"
+
+#. ===================================================================
+#: data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers"
+msgstr "制作标签,名片和光盘盒封面"
+
+#: data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr "gLabels标签设计工具"
+
+#: data/mime/glabels.keys.in.h:1 data/mime/glabels.xml.in.h:1
+msgid "gLabels Project File"
+msgstr "gLabels工程文件"
+
+#: ../barcode-0.98/compat/getopt.c:583
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: 选项 `%s' 有歧义\n"
+
+#: ../barcode-0.98/compat/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: 选项 `--%s' 不支持附加参数\n"
+
+#: ../barcode-0.98/compat/getopt.c:612
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: 选项 `%c%s' 不支持附加参数\n"
+
+#: ../barcode-0.98/compat/getopt.c:629
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: 选项 `%s' 需要附加参数\n"
+
+#. --option
+#: ../barcode-0.98/compat/getopt.c:658
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: 未知的选项 '--%s'\n"
+
+#. +option or -option
+#: ../barcode-0.98/compat/getopt.c:662
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: 未知的选项 `%c%s'\n"
+
+#. 1003.2 specifies the format of this message.
+#: ../barcode-0.98/compat/getopt.c:688
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: 非法的选项 -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:691
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: 无效的选项 -- %c\n"
+
+#: ../barcode-0.98/compat/getopt.c:727
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: 选项需要附加参数 -- %c\n"
\ No newline at end of file
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644 (file)
index 0000000..579c4e3
--- /dev/null
@@ -0,0 +1,2650 @@
+# Traditional Chinese Translation for glabels
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Shell Hung <shell@debian.org>, 2002
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glabels 0.4.4\n"
+"POT-Creation-Date: 2004-08-08 00:43-0400\n"
+"PO-Revision-Date: 2002-07-14 18:30+0800\n"
+"Last-Translator: Shell Hung <shell@debian.org>\n"
+"Language-Team: zh-l10n <zh-l10n@linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/glabels.c:55
+msgid "Show view debugging messages."
+msgstr ""
+
+#: src/glabels.c:58
+msgid "Show item debugging messages."
+msgstr ""
+
+#: src/glabels.c:61
+msgid "Show printing debugging messages."
+msgstr ""
+
+#: src/glabels.c:64
+msgid "Show prefs debugging messages."
+msgstr ""
+
+#: src/glabels.c:67
+msgid "Show file debugging messages."
+msgstr ""
+
+#: src/glabels.c:70
+msgid "Show document debugging messages."
+msgstr ""
+
+#: src/glabels.c:73
+msgid "Show template debugging messages."
+msgstr ""
+
+#: src/glabels.c:76
+msgid "Show paper debugging messages."
+msgstr ""
+
+#: src/glabels.c:79
+msgid "Show xml debugging messages."
+msgstr ""
+
+#: src/glabels.c:82
+msgid "Show document merge debugging messages."
+msgstr ""
+
+#: src/glabels.c:85
+msgid "Show commands debugging messages."
+msgstr ""
+
+#: src/glabels.c:88
+msgid "Show undo debugging messages."
+msgstr ""
+
+#: src/glabels.c:91
+msgid "Show recent debugging messages."
+msgstr ""
+
+#: src/glabels.c:94
+msgid "Show window debugging messages."
+msgstr ""
+
+#: src/glabels.c:97
+msgid "Show ui debugging messages."
+msgstr ""
+
+#: src/glabels.c:100
+msgid "Show property_bar debugging messages."
+msgstr ""
+
+#: src/glabels.c:103
+msgid "Show media select widget debugging messages."
+msgstr ""
+
+#: src/glabels.c:106
+msgid "Show mini preview widget debugging messages."
+msgstr ""
+
+#: src/glabels.c:109
+msgid "Show pixbuf cache debugging messages."
+msgstr ""
+
+#: src/glabels.c:112
+msgid "Show widget debugging messages."
+msgstr ""
+
+#: src/glabels.c:115
+msgid "Show object editor debugging messages."
+msgstr ""
+
+#: src/glabels.c:118
+msgid "Turn on all debugging messages."
+msgstr ""
+
+#: src/glabels.c:187
+msgid "Could not initialize Bonobo!\n"
+msgstr ""
+
+#: src/glabels-batch.c:48
+msgid "print this message"
+msgstr "列印這個訊息"
+
+#: src/glabels-batch.c:50
+msgid "print the version of glabels-batch being used"
+msgstr "列印出 glabels-batch 的版本資訊"
+
+#: src/glabels-batch.c:52
+msgid "set output filename (default=\"output.ps\")"
+msgstr "設定輸出檔名稱 (預設為\"output.ps\")"
+
+#: src/glabels-batch.c:52
+msgid "filename"
+msgstr "檔案名稱"
+
+#: src/glabels-batch.c:54
+msgid "number of sheets (default=1)"
+msgstr "紙張數目 (預設為 1)"
+
+#: src/glabels-batch.c:54
+msgid "sheets"
+msgstr "紙張"
+
+#: src/glabels-batch.c:56
+msgid "number of copies (default=1)"
+msgstr "份數 (預設為 1)"
+
+#: src/glabels-batch.c:56
+msgid "copies"
+msgstr "份數"
+
+#: src/glabels-batch.c:58 src/print-dialog.c:336
+msgid "print outlines (to test printer alignment)"
+msgstr "印出外邊 (測試打印機參數)"
+
+#: src/glabels-batch.c:60 src/print-dialog.c:344
+msgid "print in reverse (i.e. a mirror image)"
+msgstr "反方向列印 (如倒向影像)"
+
+#: src/glabels-batch.c:96
+msgid "[OPTION...] GLABELS_FILE..."
+msgstr "[選項...] GLABELS_FILE..."
+
+#: src/glabels-batch.c:116
+msgid "missing glabels file\n"
+msgstr "沒有輸入 glabels 的檔案\n"
+
+#: src/glabels-batch.c:157
+#, c-format
+msgid "cannot open glabels file %s\n"
+msgstr "開啟檔案失敗 %s\n"
+
+#: src/window.c:244
+msgid "(none) - gLabels"
+msgstr ""
+
+#: src/window.c:414
+msgid "(modified)"
+msgstr ""
+
+#: src/stock.c:65 data/ui/glabels-ui.xml.h:165
+#, fuzzy
+msgid "_Select Mode"
+msgstr "選擇"
+
+#: src/stock.c:66 data/ui/glabels-ui.xml.h:166
+#, fuzzy
+msgid "_Text"
+msgstr "文字"
+
+#: src/stock.c:67 data/ui/glabels-ui.xml.h:151
+#, fuzzy
+msgid "_Line"
+msgstr "線"
+
+#: src/stock.c:68 data/ui/glabels-ui.xml.h:133
+#, fuzzy
+msgid "_Box"
+msgstr "盒子"
+
+#: src/stock.c:69 data/ui/glabels-ui.xml.h:144
+#, fuzzy
+msgid "_Ellipse"
+msgstr "橢圓形"
+
+#: src/stock.c:70 data/ui/glabels-ui.xml.h:149
+#, fuzzy
+msgid "_Image"
+msgstr "圖像"
+
+#: src/stock.c:71 data/ui/glabels-ui.xml.h:11
+#, fuzzy
+msgid "Bar_code"
+msgstr "數碼條"
+
+#: src/stock.c:72
+#, fuzzy
+msgid "_Merge Properties"
+msgstr "合併設定"
+
+#: src/stock.c:73
+#, fuzzy
+msgid "Object _Properties"
+msgstr "文字樣貌"
+
+#: src/stock.c:74 data/ui/glabels-ui.xml.h:13
+#, fuzzy
+msgid "Bring to _Front"
+msgstr "帶出到前面"
+
+#: src/stock.c:75 data/ui/glabels-ui.xml.h:110
+#, fuzzy
+msgid "Send to _Back"
+msgstr "放在最底"
+
+#: src/stock.c:76 data/ui/glabels-ui.xml.h:97
+#, fuzzy
+msgid "Rotate _Left"
+msgstr "旋轉"
+
+#: src/stock.c:77 data/ui/glabels-ui.xml.h:98
+#, fuzzy
+msgid "Rotate _Right"
+msgstr "旋轉"
+
+#: src/stock.c:78 data/ui/glabels-ui.xml.h:52
+msgid "Flip _Horizontally"
+msgstr ""
+
+#: src/stock.c:79 data/ui/glabels-ui.xml.h:53
+msgid "Flip _Vertically"
+msgstr ""
+
+#: src/stock.c:80 data/ui/glabels-ui.xml.h:150
+msgid "_Lefts"
+msgstr ""
+
+#: src/stock.c:81 data/ui/glabels-ui.xml.h:162
+msgid "_Rights"
+msgstr ""
+
+#: src/stock.c:82 data/ui/glabels-ui.xml.h:134
+msgid "_Centers"
+msgstr ""
+
+#: src/stock.c:83 data/ui/glabels-ui.xml.h:167
+#, fuzzy
+msgid "_Tops"
+msgstr "工具 (&_T)"
+
+#: src/stock.c:84
+msgid "Bottoms"
+msgstr ""
+
+#: src/stock.c:85
+msgid "Centers"
+msgstr ""
+
+#: src/stock.c:86 src/stock.c:87 data/ui/glabels-ui.xml.h:62
+msgid "Label Ce_nter"
+msgstr ""
+
+#: src/stock.c:88 data/ui/glabels-ui.xml.h:51
+msgid "Fill color"
+msgstr ""
+
+#: src/stock.c:89 data/ui/glabels-ui.xml.h:64
+msgid "Line color"
+msgstr ""
+
+#: src/stock.c:90 src/stock.c:92
+#, fuzzy
+msgid "Linked"
+msgstr "線"
+
+#: src/stock.c:91 src/stock.c:93
+#, fuzzy
+msgid "Not Linked"
+msgstr "沒有"
+
+#: src/ui-property-bar.c:345 src/object-editor.c:499
+#, fuzzy
+msgid "Default"
+msgstr "刪除"
+
+#: src/ui-property-bar.c:360 src/object-editor.c:512
+msgid "No fill"
+msgstr ""
+
+#: src/ui-property-bar.c:375 src/object-editor.c:505
+#, fuzzy
+msgid "No line"
+msgstr "沒有"
+
+#: src/ui-sidebar.c:180
+#, fuzzy
+msgid "Object properties"
+msgstr "文字樣貌"
+
+#: src/commands.c:385
+msgid ""
+"A label and business card creation program for GNOME.\n"
+" \n"
+"Glabels 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.\n"
+" \n"
+"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.\n"
+msgstr ""
+"A label and business card creation program for GNOME.\n"
+" \n"
+"Glabels 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.\n"
+" \n"
+"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.\n"
+
+#: src/commands.c:399
+msgid "See the file AUTHORS for additional credits,"
+msgstr ""
+
+#: src/commands.c:400
+msgid "or visit http://glabels.sourceforge.net/"
+msgstr ""
+
+#: src/commands.c:409
+msgid " "
+msgstr ""
+
+#: src/commands.c:424
+#, fuzzy
+msgid "glabels"
+msgstr "標簽"
+
+#: src/file.c:100
+msgid "New Label or Card"
+msgstr "新增標簽或卡"
+
+#: src/file.c:132 src/file.c:304
+msgid "Media Type"
+msgstr "媒體種類"
+
+#: src/file.c:138 src/file.c:310
+msgid "Label orientation"
+msgstr "標簽方向"
+
+#: src/file.c:269
+#, fuzzy
+msgid "Label properties"
+msgstr "文字樣貌"
+
+#: src/file.c:452 src/file.c:870
+msgid "All files"
+msgstr ""
+
+#: src/file.c:457 src/file.c:875
+#, fuzzy
+msgid "gLabels documents"
+msgstr "Glabels: 設定值"
+
+#: src/file.c:505 src/file.c:617 src/file.c:934 src/file.c:1130
+#, fuzzy
+msgid "Empty file name selection"
+msgstr "移除所有選擇項"
+
+#: src/file.c:506 src/file.c:520 src/file.c:618 src/file.c:632
+msgid "Please select a file or supply a valid file name"
+msgstr ""
+
+#: src/file.c:519 src/file.c:631
+msgid "File does not exist"
+msgstr ""
+
+#: src/file.c:563 data/ui/glabels-ui.xml.h:75
+msgid "Open"
+msgstr "開啟"
+
+#: src/file.c:565
+msgid "Open label"
+msgstr "開啟標簽"
+
+#: src/file.c:707
+#, fuzzy, c-format
+msgid "Could not open file \"%s\""
+msgstr "開啟檔案失敗"
+
+#: src/file.c:715
+msgid "Not a supported file format"
+msgstr ""
+
+#: src/file.c:797 src/file.c:979 src/file.c:1174
+#, fuzzy, c-format
+msgid "Could not save file \"%s\""
+msgstr "不能儲存檔案"
+
+#: src/file.c:805 src/file.c:987 src/file.c:1182
+msgid "Error encountered during save.  The file is still not saved."
+msgstr ""
+
+#: src/file.c:848 src/file.c:1048
+#, fuzzy, c-format
+msgid "Save \"%s\" as"
+msgstr "儲存標簽為..."
+
+#: src/file.c:935 src/file.c:1131
+#, fuzzy
+msgid "Please supply a valid file name"
+msgstr "請必需輸入檔案名稱"
+
+#: src/file.c:952 src/file.c:1147
+#, c-format
+msgid "Overwrite file \"%s\"?"
+msgstr ""
+
+#: src/file.c:960 src/file.c:1155
+msgid "File already exists."
+msgstr ""
+
+#: src/file.c:1271
+#, c-format
+msgid "Save changes to document \"%s\" before closing?"
+msgstr ""
+
+#: src/file.c:1279
+msgid "Your changes will be lost if you don't save them."
+msgstr ""
+
+#: src/file.c:1282
+msgid "Close without saving"
+msgstr ""
+
+#. Should not happen
+#: src/prefs.c:156 src/prefs.c:163 data/glade/prefs-dialog.glade.h:23
+#: data/glade/object-editor.glade.h:37
+msgid "points"
+msgstr "點"
+
+#: src/prefs.c:158 data/glade/object-editor.glade.h:36
+#: data/glade/template-designer.glade.h:74
+msgid "inches"
+msgstr "英寸"
+
+#: src/prefs.c:160
+msgid "mm"
+msgstr "mm"
+
+#: src/prefs-dialog.c:248 data/glade/prefs-dialog.glade.h:22
+#, fuzzy
+msgid "gLabels Preferences"
+msgstr "Glabels: 設定值"
+
+#.
+#. * Submenu: Order
+#.
+#: src/view.c:3570 data/ui/glabels-ui.xml.h:157
+msgid "_Order"
+msgstr ""
+
+#.
+#. * Submenu: Rotate/Flip
+#.
+#: src/view.c:3591 data/ui/glabels-ui.xml.h:163
+#, fuzzy
+msgid "_Rotate/Flip"
+msgstr "旋轉"
+
+#.
+#. * Submenu: Align Horizontally
+#.
+#: src/view.c:3624
+msgid "Align _Horizontally"
+msgstr ""
+
+#.
+#. * Submenu: Align Vertically
+#.
+#: src/view.c:3663
+msgid "Align _Vertically"
+msgstr ""
+
+#: src/view.c:3724 data/ui/glabels-ui.xml.h:140
+#, fuzzy
+msgid "_Delete"
+msgstr "刪除"
+
+#. Build editor.
+#: src/view-box.c:223
+#, fuzzy
+msgid "Box object properties"
+msgstr "修改方塊物件設定"
+
+#. Build editor.
+#: src/view-ellipse.c:223
+#, fuzzy
+msgid "Ellipse object properties"
+msgstr "修改橢圓物件設定"
+
+#. Build editor.
+#: src/view-line.c:223
+#, fuzzy
+msgid "Line object properties"
+msgstr "修改方塊物件設定"
+
+#. Build editor.
+#: src/view-image.c:222
+#, fuzzy
+msgid "Image object properties"
+msgstr "修改圖像物件設定"
+
+#. Build editor.
+#: src/view-text.c:250
+#, fuzzy
+msgid "Text object properties"
+msgstr "修改方塊物件設定"
+
+#: src/view-text.c:562 data/glade/object-editor.glade.h:28
+msgid "Text"
+msgstr "文字"
+
+#. Build editor.
+#: src/view-barcode.c:209
+#, fuzzy
+msgid "Barcode object properties"
+msgstr "修改數碼條物件設定"
+
+#: src/view-barcode.c:579 src/print.c:1088
+#, fuzzy
+msgid "Invalid barcode data"
+msgstr "不正確的數碼條"
+
+#: src/merge-properties-dialog.c:231
+#, fuzzy
+msgid "Merge Properties"
+msgstr "合併設定"
+
+#. ---- Source section ----
+#: src/merge-properties-dialog.c:237
+msgid "Source"
+msgstr "來源檔"
+
+#: src/merge-properties-dialog.c:245
+msgid "Format:"
+msgstr "格式:"
+
+#. Location line
+#: src/merge-properties-dialog.c:273
+msgid "Location:"
+msgstr "位置:"
+
+#: src/merge-properties-dialog.c:282 src/merge-properties-dialog.c:393
+msgid "Select merge-database source"
+msgstr "選擇合併資料庫來源"
+
+#: src/merge-properties-dialog.c:289 src/merge-properties-dialog.c:404
+msgid "N/A"
+msgstr "N/A"
+
+#. ---- Sample Fields section ----
+#: src/merge-properties-dialog.c:300
+msgid "Record selection/preview:"
+msgstr ""
+
+#: src/merge-properties-dialog.c:326
+msgid "Select"
+msgstr "選擇"
+
+#: src/merge-properties-dialog.c:334
+msgid "Record/Field"
+msgstr ""
+
+#: src/merge-properties-dialog.c:342 data/glade/object-editor.glade.h:9
+msgid "Data"
+msgstr "資料"
+
+#: src/print-dialog.c:266 data/ui/glabels-ui.xml.h:82
+msgid "Print"
+msgstr "列印"
+
+#: src/print-dialog.c:281
+msgid "_Job"
+msgstr ""
+
+#: src/print-dialog.c:286
+#, fuzzy
+msgid "P_rinter"
+msgstr "列印"
+
+#. ----------- Add simple-copies widget ------------
+#: src/print-dialog.c:314
+msgid "Copies"
+msgstr "份數"
+
+#. ------- Add merge control widget ------------
+#: src/print-dialog.c:322
+msgid "Document merge control"
+msgstr "文件合併控制"
+
+#. ----------- Add custom print options area ------------
+#: src/print-dialog.c:330
+msgid "Options"
+msgstr "設定"
+
+#: src/print-dialog.c:351
+msgid "print crop marks"
+msgstr ""
+
+#: src/print-dialog.c:553 src/print-dialog.c:592
+msgid "Print preview"
+msgstr "預覽列印"
+
+#: src/template-designer.c:409 data/glade/template-designer.glade.h:73
+msgid "gLabels Template Designer"
+msgstr ""
+
+#: src/bc.c:60
+msgid "POSTNET (any)"
+msgstr ""
+
+#: src/bc.c:63
+msgid "POSTNET-5 (ZIP only)"
+msgstr ""
+
+#: src/bc.c:66
+msgid "POSTNET-9 (ZIP+4)"
+msgstr ""
+
+#: src/bc.c:69
+msgid "POSTNET-11 (DPBC)"
+msgstr ""
+
+#: src/bc.c:72
+msgid "EAN (any)"
+msgstr ""
+
+#: src/bc.c:75
+msgid "EAN-8"
+msgstr ""
+
+#: src/bc.c:78
+msgid "EAN-8 +2"
+msgstr ""
+
+#: src/bc.c:81
+msgid "EAN-8 +5"
+msgstr ""
+
+#: src/bc.c:84
+msgid "EAN-13"
+msgstr ""
+
+#: src/bc.c:87
+msgid "EAN-13 +2"
+msgstr ""
+
+#: src/bc.c:90
+msgid "EAN-13 +5"
+msgstr ""
+
+#: src/bc.c:93
+msgid "UPC (UPC-A or UPC-E)"
+msgstr ""
+
+#: src/bc.c:96
+msgid "UPC-A"
+msgstr ""
+
+#: src/bc.c:99
+msgid "UPC-A +2"
+msgstr ""
+
+#: src/bc.c:102
+msgid "UPC-A +5"
+msgstr ""
+
+#: src/bc.c:105
+msgid "UPC-E"
+msgstr ""
+
+#: src/bc.c:108
+msgid "UPC-E +2"
+msgstr ""
+
+#: src/bc.c:111
+msgid "UPC-E +5"
+msgstr ""
+
+#: src/bc.c:114
+msgid "ISBN"
+msgstr ""
+
+#: src/bc.c:117
+msgid "ISBN +5"
+msgstr ""
+
+#: src/bc.c:120
+msgid "Code 39"
+msgstr ""
+
+#: src/bc.c:123
+msgid "Code 128"
+msgstr ""
+
+#: src/bc.c:126
+msgid "Code 128C"
+msgstr ""
+
+#: src/bc.c:129
+msgid "Code 128B"
+msgstr ""
+
+#: src/bc.c:132
+msgid "Interleaved 2 of 5"
+msgstr ""
+
+#: src/bc.c:135
+msgid "Codabar"
+msgstr ""
+
+#: src/bc.c:138
+msgid "MSI"
+msgstr ""
+
+#: src/bc.c:141
+msgid "Plessey"
+msgstr ""
+
+#: src/label.c:569
+msgid "Untitled"
+msgstr ""
+
+#: src/xml-label.c:176 src/xml-label.c:213
+msgid "xmlParseFile error"
+msgstr "xmlParseFile 錯誤"
+
+#: src/xml-label.c:250
+msgid "No document root"
+msgstr "沒有文件始端"
+
+#: src/xml-label.c:264
+msgid "Importing from glabels 0.1 format"
+msgstr ""
+
+#: src/xml-label.c:272
+msgid "Importing from glabels 0.4 format"
+msgstr ""
+
+#: src/xml-label.c:279
+msgid "Importing from glabels 1.91 format"
+msgstr ""
+
+#: src/xml-label.c:282
+#, fuzzy
+msgid "bad document, unknown glabels Namespace"
+msgstr "不正確的文件種類, 找不到 glabels 格式"
+
+#: src/xml-label.c:311 src/xml-label-04.c:75 src/xml-label-191.c:131
+#, c-format
+msgid "Bad root node = \"%s\""
+msgstr "錯誤的基碼 = \"%s\""
+
+#: src/xml-label.c:348 src/xml-label-191.c:165
+#, fuzzy, c-format
+msgid "bad node in Document node =  \"%s\""
+msgstr "錯誤的基碼 = \"%s\""
+
+#: src/xml-label.c:393 src/xml-label-04.c:123 src/xml-label-191.c:197
+#, c-format
+msgid "bad node =  \"%s\""
+msgstr "錯誤的節點 = \"%s\""
+
+#: src/xml-label.c:796 src/xml-label-191.c:605
+#, fuzzy, c-format
+msgid "bad node in Data node =  \"%s\""
+msgstr "錯誤的節點 = \"%s\""
+
+#: src/xml-label.c:962 libglabels/xml-template.c:528
+msgid "Utf8 conversion error."
+msgstr ""
+
+#: src/xml-label.c:969 libglabels/xml-template.c:535
+msgid "Problem saving xml file."
+msgstr "儲存 XML 檔案時發生錯誤."
+
+#. This should always be an id, but just in case a name
+#. slips by!
+#: src/xml-label-191.c:680 libglabels/xml-template.c:192
+#, c-format
+msgid "Unknown page size id \"%s\", trying as name"
+msgstr ""
+
+#: src/xml-label-191.c:690 libglabels/xml-template.c:202
+#, c-format
+msgid "Unknown page size id or name \"%s\""
+msgstr ""
+
+#: src/merge.c:172 src/merge.c:213 src/merge.c:399 src/merge.c:402
+msgid "None"
+msgstr "沒有"
+
+#: src/merge-init.c:53
+#, fuzzy
+msgid "Text file with comma delimeters (CSV)"
+msgstr "以逗號分格 (CSV)"
+
+#: src/merge-init.c:60
+#, fuzzy
+msgid "Text file with colon delimeters"
+msgstr "以冒號分格"
+
+#: src/merge-init.c:67
+#, fuzzy
+msgid "Text file with tab delimeters"
+msgstr "以 [TAB] 為分格"
+
+#: src/wdgt-image-select.c:201 data/glade/object-editor.glade.h:11
+#, fuzzy
+msgid "File:"
+msgstr "填滿"
+
+#: src/wdgt-image-select.c:245 data/glade/object-editor.glade.h:16
+msgid "Key:"
+msgstr "資料值:"
+
+#: src/wdgt-print-copies.c:179
+msgid "Sheets:"
+msgstr "紙張:"
+
+#: src/wdgt-print-copies.c:197
+msgid "Labels"
+msgstr "標簽"
+
+#: src/wdgt-print-copies.c:200
+msgid "from:"
+msgstr "由:"
+
+#: src/wdgt-print-copies.c:207
+msgid "to:"
+msgstr "到:"
+
+#: src/wdgt-print-merge.c:178
+msgid "Start on label"
+msgstr "由禁簽開級"
+
+#: src/wdgt-print-merge.c:186
+msgid "on 1st sheet"
+msgstr "在首張紙"
+
+#: src/wdgt-print-merge.c:195
+msgid "Copies:"
+msgstr "份數:"
+
+#: src/wdgt-print-merge.c:201
+msgid "Collate"
+msgstr "校對"
+
+#: src/wdgt-media-select.c:269 data/glade/template-designer.glade.h:29
+msgid "Description:"
+msgstr "描述:"
+
+#: src/wdgt-media-select.c:279 data/glade/template-designer.glade.h:53
+msgid "Page size:"
+msgstr "紙張大小:"
+
+#: src/wdgt-media-select.c:290
+msgid "Label size:"
+msgstr "標簽大小:"
+
+#: src/wdgt-media-select.c:301
+msgid "Layout:"
+msgstr "版面:"
+
+#: src/wdgt-media-select.c:578
+#, c-format
+msgid "%d x %d  (%d per sheet)"
+msgstr "%d x %d (每頁 %d)"
+
+#: src/wdgt-media-select.c:582
+#, fuzzy, c-format
+msgid "%d per sheet"
+msgstr "%d x %d (每頁 %d)"
+
+#: src/wdgt-media-select.c:614
+#, c-format
+msgid "%s x %s %s"
+msgstr "%s x %s %s"
+
+#: src/wdgt-media-select.c:619
+#, c-format
+msgid "%.5g x %.5g %s"
+msgstr "%.5g x %.5g %s"
+
+#: src/wdgt-media-select.c:630 src/wdgt-media-select.c:644
+#, c-format
+msgid "%s %s diameter"
+msgstr ""
+
+#: src/wdgt-media-select.c:634 src/wdgt-media-select.c:648
+#, c-format
+msgid "%.5g %s diameter"
+msgstr ""
+
+#: src/wdgt-rotate-label.c:193
+msgid "Rotate"
+msgstr "旋轉"
+
+#. This is the default custom color
+#: src/mygal/color-palette.c:396
+#, fuzzy
+msgid "custom"
+msgstr "自訂欄位鑰"
+
+#. "Custom" color - we'll pop up a GnomeColorPicker
+#: src/mygal/color-palette.c:438
+#, fuzzy
+msgid "Custom Color:"
+msgstr "顏色:"
+
+#: src/mygal/color-palette.c:446
+msgid "Choose Custom Color"
+msgstr ""
+
+#: src/mygal/color-palette.c:579
+msgid "black"
+msgstr ""
+
+#: src/mygal/color-palette.c:580
+msgid "light brown"
+msgstr ""
+
+#: src/mygal/color-palette.c:581
+msgid "brown gold"
+msgstr ""
+
+#: src/mygal/color-palette.c:582
+msgid "dark green #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:583
+msgid "navy"
+msgstr ""
+
+#: src/mygal/color-palette.c:584 src/mygal/color-palette.c:640
+msgid "dark blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:585
+msgid "purple #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:586
+msgid "very dark gray"
+msgstr ""
+
+#: src/mygal/color-palette.c:589 src/mygal/color-palette.c:645
+msgid "dark red"
+msgstr ""
+
+#: src/mygal/color-palette.c:590
+msgid "red-orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:591
+msgid "gold"
+msgstr ""
+
+#: src/mygal/color-palette.c:592
+msgid "dark green"
+msgstr ""
+
+#: src/mygal/color-palette.c:593 src/mygal/color-palette.c:646
+msgid "dull blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:594 src/mygal/color-palette.c:647
+msgid "blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:595
+msgid "dull purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:596
+msgid "dark grey"
+msgstr ""
+
+#: src/mygal/color-palette.c:599
+msgid "red"
+msgstr ""
+
+#: src/mygal/color-palette.c:600
+msgid "orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:601
+msgid "lime"
+msgstr ""
+
+#: src/mygal/color-palette.c:602
+msgid "dull green"
+msgstr ""
+
+#: src/mygal/color-palette.c:603
+msgid "dull blue #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:604
+msgid "sky blue #2"
+msgstr ""
+
+#: src/mygal/color-palette.c:605 src/mygal/color-palette.c:644
+msgid "purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:606
+msgid "gray"
+msgstr ""
+
+#: src/mygal/color-palette.c:609 src/mygal/color-palette.c:641
+#, fuzzy
+msgid "magenta"
+msgstr "圖像"
+
+#: src/mygal/color-palette.c:610
+msgid "bright orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:611 src/mygal/color-palette.c:642
+msgid "yellow"
+msgstr ""
+
+#: src/mygal/color-palette.c:612
+#, fuzzy
+msgid "green"
+msgstr "度數"
+
+#: src/mygal/color-palette.c:613 src/mygal/color-palette.c:643
+msgid "cyan"
+msgstr ""
+
+#: src/mygal/color-palette.c:614
+msgid "bright blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:615 src/mygal/color-palette.c:632
+msgid "red purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:616
+msgid "light grey"
+msgstr ""
+
+#: src/mygal/color-palette.c:619 src/mygal/color-palette.c:636
+msgid "pink"
+msgstr ""
+
+#: src/mygal/color-palette.c:620
+msgid "light orange"
+msgstr ""
+
+#: src/mygal/color-palette.c:621 src/mygal/color-palette.c:633
+msgid "light yellow"
+msgstr ""
+
+#: src/mygal/color-palette.c:622
+msgid "light green"
+msgstr ""
+
+#: src/mygal/color-palette.c:623
+msgid "light cyan"
+msgstr ""
+
+#: src/mygal/color-palette.c:624 src/mygal/color-palette.c:634
+msgid "light blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:625 src/mygal/color-palette.c:638
+msgid "light purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:626
+msgid "white"
+msgstr ""
+
+#: src/mygal/color-palette.c:631
+msgid "purplish blue"
+msgstr ""
+
+#: src/mygal/color-palette.c:635
+msgid "dark purple"
+msgstr ""
+
+#: src/mygal/color-palette.c:637
+msgid "sky blue"
+msgstr ""
+
+#: libglabels/template.c:848
+#, c-format
+msgid "Generic %s full page"
+msgstr ""
+
+#: libglabels/template.c:897
+msgid "No template files found!"
+msgstr "找不到樣版檔案 !"
+
+#. Create and append an "Other" entry.
+#: libglabels/paper.c:67
+msgid "Other"
+msgstr ""
+
+#: libglabels/paper.c:361
+#, fuzzy
+msgid "No paper files found!"
+msgstr "找不到樣版檔案 !"
+
+#: data/ui/glabels-ui.xml.h:1
+msgid "About glabels"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:2
+msgid "About..."
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:3
+msgid "Align _Horizontal"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:4
+msgid "Align _Vertical"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:5
+msgid "Align objects to bottoms"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:6
+msgid "Align objects to horizontal centers"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:7
+msgid "Align objects to left edges"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:8
+msgid "Align objects to right edges"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:9
+msgid "Align objects to tops"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:10
+msgid "Align objects to vertical centers"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:12
+msgid "Bold"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:14
+#, fuzzy
+msgid "Center align"
+msgstr "一般"
+
+#: data/ui/glabels-ui.xml.h:15
+msgid "Center objects to horizontal label center"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:16
+msgid "Center objects to vertical label center"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:17
+msgid "Change the visibility of markup lines in the current window"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:18
+msgid "Change the visibility of the drawing toolbar in the current window"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:19
+msgid "Change the visibility of the grid in the current window"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:20
+msgid "Change the visibility of the main toolbar in the current window"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:21
+msgid "Change the visibility of the property toolbar in the current window"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:22
+msgid "Close"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:23
+#, fuzzy
+msgid "Close the current file"
+msgstr "儲存現在檔案"
+
+#: data/ui/glabels-ui.xml.h:24
+msgid "Configure the application"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:25
+msgid "Contents"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:26
+msgid "Copy"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:27
+#, fuzzy
+msgid "Copy the selection"
+msgstr "移除所有選擇項"
+
+#: data/ui/glabels-ui.xml.h:28
+#, fuzzy
+msgid "Create a custom template"
+msgstr "畫線物件"
+
+#: data/ui/glabels-ui.xml.h:29
+#, fuzzy
+msgid "Create a new document"
+msgstr "畫線物件"
+
+#: data/ui/glabels-ui.xml.h:30
+msgid "Create barcode object"
+msgstr "建立數碼條"
+
+#: data/ui/glabels-ui.xml.h:31
+msgid "Create box/rectangle object"
+msgstr "建立新的盒子/方形物件"
+
+#: data/ui/glabels-ui.xml.h:32
+msgid "Create ellipse/circle object"
+msgstr "建立橢圓形/圖形物件"
+
+#: data/ui/glabels-ui.xml.h:33
+msgid "Create image object"
+msgstr "建立影像物件"
+
+#: data/ui/glabels-ui.xml.h:34
+msgid "Create line object"
+msgstr "畫線物件"
+
+#: data/ui/glabels-ui.xml.h:35
+msgid "Create text object"
+msgstr "建立新的文字物件"
+
+#: data/ui/glabels-ui.xml.h:36
+msgid "Cu_t"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:37
+#, fuzzy
+msgid "Customize"
+msgstr "自訂欄位鑰"
+
+#: data/ui/glabels-ui.xml.h:38
+msgid "Customize Drawing Toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:39
+msgid "Customize Main Toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:40
+msgid "Customize Property Toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:41
+msgid "Customize toolbars"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:42
+msgid "Cut"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:43
+msgid "Cut the selection"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:44
+msgid "Decrease magnification"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:45
+msgid "Delete"
+msgstr "刪除"
+
+#: data/ui/glabels-ui.xml.h:46
+#, fuzzy
+msgid "Delete the selected objects"
+msgstr "建立新的文字物件"
+
+#: data/ui/glabels-ui.xml.h:47
+msgid "Drawing toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:48
+msgid "Dump XML"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:49
+msgid "Dump the UI Xml description"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:50
+msgid "Edit merge properties"
+msgstr "修改合併設定"
+
+#: data/ui/glabels-ui.xml.h:54
+msgid "Flip object horizontally"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:55
+msgid "Flip object vertically"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:56
+#, fuzzy
+msgid "Font name"
+msgstr "不要儲存"
+
+#: data/ui/glabels-ui.xml.h:57
+#, fuzzy
+msgid "Font selector"
+msgstr "移除所有選擇項"
+
+#: data/ui/glabels-ui.xml.h:58
+#, fuzzy
+msgid "Font size"
+msgstr "不要儲存"
+
+#: data/ui/glabels-ui.xml.h:59
+msgid "Icon and _Text"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:60
+msgid "Increase magnification"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:61
+msgid "Italic"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:63
+msgid "Left align"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:65
+msgid "Line width"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:66
+msgid "Lower object to bottom"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:67
+msgid "M_arkup"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:68
+msgid "Main toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:69
+msgid "Markup"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:70
+#, fuzzy
+msgid "Modify document properties"
+msgstr "修改文件合併設定"
+
+#: data/ui/glabels-ui.xml.h:71
+#, fuzzy
+msgid "New"
+msgstr "新增 (&_N)"
+
+#: data/ui/glabels-ui.xml.h:72
+#, fuzzy
+msgid "Object property editor"
+msgstr "文字樣貌"
+
+#: data/ui/glabels-ui.xml.h:73
+msgid "Only show icons in the drawing toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:74
+msgid "Only show icons in the main toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:76
+msgid "Open a file"
+msgstr "開啟檔案"
+
+#: data/ui/glabels-ui.xml.h:77
+#, fuzzy
+msgid "Open the glabels manual"
+msgstr "開啟標簽"
+
+#: data/ui/glabels-ui.xml.h:78
+msgid "Paste"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:79
+msgid "Paste the clipboard"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:80
+#, fuzzy
+msgid "Pr_eferences..."
+msgstr "Glabels: 設定值"
+
+#: data/ui/glabels-ui.xml.h:81
+#, fuzzy
+msgid "Preferences"
+msgstr "Glabels: 設定值"
+
+#: data/ui/glabels-ui.xml.h:83
+#, fuzzy
+msgid "Print the current file"
+msgstr "列印現有檔案"
+
+#: data/ui/glabels-ui.xml.h:84
+#, fuzzy
+msgid "Proper_ties..."
+msgstr "文字樣貌"
+
+#: data/ui/glabels-ui.xml.h:85
+#, fuzzy
+msgid "Properties"
+msgstr "文字樣貌"
+
+#: data/ui/glabels-ui.xml.h:86
+msgid "Property toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:87
+msgid "Quit"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:88
+msgid "Quit the program"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:89
+msgid "Raise object to top"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:90
+msgid "Recent _Files"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:91
+msgid "Redo"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:92
+msgid "Redo the undone action"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:93
+msgid "Remove all selections"
+msgstr "移除所有選擇項"
+
+#: data/ui/glabels-ui.xml.h:95
+#, no-c-format
+msgid "Restore scale to 100%"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:96
+msgid "Right align"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:99
+msgid "Rotate object 90 clockwise"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:100
+msgid "Rotate object 90 counter-clockwise"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:101
+#, fuzzy
+msgid "Save"
+msgstr "另存為..."
+
+#: data/ui/glabels-ui.xml.h:102
+msgid "Save As"
+msgstr "另存為..."
+
+#: data/ui/glabels-ui.xml.h:103
+#, fuzzy
+msgid "Save _As..."
+msgstr "另存為..."
+
+#: data/ui/glabels-ui.xml.h:104
+#, fuzzy
+msgid "Save the current file"
+msgstr "儲存現在檔案"
+
+#: data/ui/glabels-ui.xml.h:105
+msgid "Save the current file with a different name"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:106
+#, fuzzy
+msgid "Select All"
+msgstr "反選擇全部 (&_N)"
+
+#: data/ui/glabels-ui.xml.h:107
+#, fuzzy
+msgid "Select _All"
+msgstr "反選擇全部 (&_N)"
+
+#: data/ui/glabels-ui.xml.h:108
+#, fuzzy
+msgid "Select all objects"
+msgstr "選擇, 移動及修改物件"
+
+#: data/ui/glabels-ui.xml.h:109
+msgid "Select, move and modify objects"
+msgstr "選擇, 移動及修改物件"
+
+#: data/ui/glabels-ui.xml.h:111
+msgid "Set drawing toolbar button style according to desktop default"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:112
+msgid "Set main toolbar button style according to desktop default"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:113
+msgid "Show _Tooltips"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:114
+msgid "Show both icons and texts in the drawing toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:115
+msgid "Show both icons and texts in the main toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:116
+msgid "Show tooltips in the drawing toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:117
+msgid "Show tooltips in the main toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:118
+msgid "Show tooltips in the property toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:119
+msgid "Template Designer"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:120
+msgid "Template _Designer..."
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:121
+msgid "Text color"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:122
+#, fuzzy
+msgid "U_n-select All"
+msgstr "反選擇全部 (&_N)"
+
+#: data/ui/glabels-ui.xml.h:123
+#, fuzzy
+msgid "Un-select All"
+msgstr "反選擇全部 (&_N)"
+
+#: data/ui/glabels-ui.xml.h:124
+msgid "Undo"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:125
+msgid "Undo the last action"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:126
+#, fuzzy
+msgid "Zoom _1:1"
+msgstr "1:1 顯示"
+
+#: data/ui/glabels-ui.xml.h:127
+#, fuzzy
+msgid "Zoom _In"
+msgstr "放大"
+
+#: data/ui/glabels-ui.xml.h:128
+#, fuzzy
+msgid "Zoom _Out"
+msgstr "縮小"
+
+#: data/ui/glabels-ui.xml.h:129
+#, fuzzy
+msgid "Zoom to _fit"
+msgstr "1:1 顯示"
+
+#: data/ui/glabels-ui.xml.h:130
+msgid "Zoom to fit window"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:131
+msgid "_About..."
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:132
+msgid "_Bottoms"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:135
+msgid "_Close"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:136
+msgid "_Contents"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:137
+msgid "_Copy"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:138
+#, fuzzy
+msgid "_Create Object"
+msgstr "建立新的文字物件"
+
+#: data/ui/glabels-ui.xml.h:139
+msgid "_Debug"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:141
+msgid "_Desktop Default"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:142
+msgid "_Drawing Toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:143
+msgid "_Edit"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:145
+#, fuzzy
+msgid "_File"
+msgstr "填滿"
+
+#: data/ui/glabels-ui.xml.h:146
+msgid "_Grid"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:147
+msgid "_Help"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:148
+msgid "_Icon"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:152
+msgid "_Main Toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:153
+#, fuzzy
+msgid "_Merge Properties..."
+msgstr "合併設定"
+
+#: data/ui/glabels-ui.xml.h:154
+msgid "_New"
+msgstr "新增 (&_N)"
+
+#: data/ui/glabels-ui.xml.h:155
+msgid "_Objects"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:156
+#, fuzzy
+msgid "_Open..."
+msgstr "開啟"
+
+#: data/ui/glabels-ui.xml.h:158
+msgid "_Paste"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:159
+#, fuzzy
+msgid "_Print..."
+msgstr "列印"
+
+#: data/ui/glabels-ui.xml.h:160
+msgid "_Property Toolbar"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:161
+msgid "_Quit"
+msgstr ""
+
+#: data/ui/glabels-ui.xml.h:164
+#, fuzzy
+msgid "_Save"
+msgstr "另存為..."
+
+#: data/ui/glabels-ui.xml.h:168
+#, fuzzy
+msgid "_View"
+msgstr "新增 (&_N)"
+
+#: data/glade/prefs-dialog.glade.h:1
+msgid "   "
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:2 data/glade/object-editor.glade.h:1
+#: data/glade/template-designer.glade.h:5
+msgid "*"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:3
+msgid "<span weight=\"bold\">Default page size</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:4
+msgid "<span weight=\"bold\">Fill</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:5
+msgid "<span weight=\"bold\">Line</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:6
+msgid "<span weight=\"bold\">Text</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:7
+msgid "<span weight=\"bold\">Units</span>"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:8 data/glade/object-editor.glade.h:4
+msgid "Alignment:"
+msgstr "對置:"
+
+#: data/glade/prefs-dialog.glade.h:9 data/glade/object-editor.glade.h:8
+msgid "Color:"
+msgstr "顏色:"
+
+#: data/glade/prefs-dialog.glade.h:10
+msgid "Font:"
+msgstr "字型:"
+
+#: data/glade/prefs-dialog.glade.h:11
+msgid "ISO A4"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:12
+msgid "Inches"
+msgstr "英寸"
+
+#: data/glade/prefs-dialog.glade.h:13 data/glade/object-editor.glade.h:19
+msgid "Line Spacing:"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:14
+#, fuzzy
+msgid "Locale"
+msgstr "比例:"
+
+#: data/glade/prefs-dialog.glade.h:15
+msgid "Millimeters"
+msgstr "毫米"
+
+#: data/glade/prefs-dialog.glade.h:16
+msgid "Object defaults"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:17
+msgid "Points"
+msgstr "點"
+
+#: data/glade/prefs-dialog.glade.h:18
+msgid "Select default properties for new objects."
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:19
+msgid "Select locale specific behavior."
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:20 data/templates/paper-sizes.xml.h:25
+msgid "US Letter"
+msgstr ""
+
+#: data/glade/prefs-dialog.glade.h:21 data/glade/object-editor.glade.h:29
+#: data/glade/template-designer.glade.h:72
+msgid "Width:"
+msgstr "闊度:"
+
+#: data/glade/object-editor.glade.h:2
+msgid "00000000000 00000"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:3
+msgid "<span weight=\"bold\" size=\"larger\">Xxx object properties</span>"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:5
+msgid "Allow merge to automatically shrink text"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:6
+msgid "Angle:"
+msgstr "角度:"
+
+#: data/glade/object-editor.glade.h:7
+msgid "Checksum"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:10
+#, fuzzy
+msgid "Family:"
+msgstr "填滿"
+
+#: data/glade/object-editor.glade.h:12
+msgid "Fill"
+msgstr "填滿"
+
+#: data/glade/object-editor.glade.h:13 data/glade/template-designer.glade.h:33
+msgid "Height:"
+msgstr "高度:"
+
+#: data/glade/object-editor.glade.h:14
+msgid "Image"
+msgstr "圖像"
+
+#: data/glade/object-editor.glade.h:15
+msgid "Insert merge field"
+msgstr "插入合併列"
+
+#: data/glade/object-editor.glade.h:17
+msgid "Length:"
+msgstr "長度:"
+
+#: data/glade/object-editor.glade.h:18
+msgid "Line"
+msgstr "線"
+
+#: data/glade/object-editor.glade.h:20
+msgid "Literal:"
+msgstr "文字:"
+
+#: data/glade/object-editor.glade.h:21
+msgid "Load image"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:22
+msgid "Position"
+msgstr "位置"
+
+#: data/glade/object-editor.glade.h:23
+msgid "Reset image size"
+msgstr "重設圖像大小"
+
+#: data/glade/object-editor.glade.h:24
+msgid "Size"
+msgstr "大小"
+
+#: data/glade/object-editor.glade.h:25
+#, fuzzy
+msgid "Size:"
+msgstr "大小"
+
+#: data/glade/object-editor.glade.h:26
+#, fuzzy
+msgid "Style"
+msgstr "樣式"
+
+#: data/glade/object-editor.glade.h:27
+#, fuzzy
+msgid "Style:"
+msgstr "樣式"
+
+#: data/glade/object-editor.glade.h:30
+msgid "X:"
+msgstr "X:"
+
+#: data/glade/object-editor.glade.h:31
+msgid "Y:"
+msgstr "Y:"
+
+#: data/glade/object-editor.glade.h:32
+msgid "degrees"
+msgstr "度數"
+
+#: data/glade/object-editor.glade.h:33
+msgid "dialog1"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:34
+msgid "digits:"
+msgstr ""
+
+#: data/glade/object-editor.glade.h:35
+#, fuzzy
+msgid "format:"
+msgstr "格式:"
+
+#: data/glade/template-designer.glade.h:1
+msgid "  "
+msgstr ""
+
+#: data/glade/template-designer.glade.h:2
+msgid "(e.g., \"Mailing Labels,\" \"Business Cards,\" ...)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:3
+msgid "(e.g., 8163A)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:4
+msgid "(e.g., Avery, Acme, ...)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:6
+msgid "1. Outer radius:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:7
+msgid "1. Radius:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:8
+#, fuzzy
+msgid "1. Width:"
+msgstr "闊度:"
+
+#: data/glade/template-designer.glade.h:9
+#, fuzzy
+msgid "2. Height:"
+msgstr "高度:"
+
+#: data/glade/template-designer.glade.h:10
+msgid "2. Inner radius:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:11
+msgid "2. Waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:12
+msgid "3. Clipping width:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:13
+msgid "3. Margin"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:14
+msgid "3. Round (radius of corner):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:15
+msgid "4. Clipping height:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:16
+msgid "4. Horiz. waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:17
+msgid "5. Vert. waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:18
+msgid "5. Waste (overprint allowed):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:19
+msgid "6. Margin"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:20
+msgid "Brand/Manufacturer:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:21
+msgid "CD/DVD (including credit card CDs)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:22
+msgid ""
+"Congratulations!\n"
+"\n"
+"You have completed the gLabels Template Designer.\n"
+"If you wish to accept and save your design, click \"Apply.\"\n"
+"\n"
+"Otherwise, you may click \"Cancel\" to abandon your design\n"
+"or \"Back\" to continue editing this design."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:30
+msgid "Design Completed"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:31
+msgid "Distance from left edge (x0):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:32
+msgid "Distance from top edge (y0):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:34
+msgid "Horizontal pitch (dx):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:35
+msgid ""
+"How many layouts will your template contain? \n"
+"\n"
+"A layout is a set of labels or cards that can be arranged in a simple grid.\n"
+"Most templates only need one layout, as in the first example.\n"
+"The second example illustrates when two layouts are needed."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:40
+msgid "Label Size (CD/DVD)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:41
+#, fuzzy
+msgid "Label Size (Round)"
+msgstr "標簽大小:"
+
+#: data/glade/template-designer.glade.h:42
+#, fuzzy
+msgid "Label or Card Shape"
+msgstr "新增標簽或卡"
+
+#: data/glade/template-designer.glade.h:43
+msgid "Label or Card Size (Rectangular)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:44
+#, fuzzy
+msgid "Layout #1"
+msgstr "版面:"
+
+#: data/glade/template-designer.glade.h:45
+#, fuzzy
+msgid "Layout #2"
+msgstr "版面:"
+
+#: data/glade/template-designer.glade.h:46
+#, fuzzy
+msgid "Layout(s)"
+msgstr "版面:"
+
+#: data/glade/template-designer.glade.h:47
+#, fuzzy
+msgid "Name and Description"
+msgstr "描述:"
+
+#: data/glade/template-designer.glade.h:48
+msgid "Number across (nx):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:49
+msgid "Number down (ny):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:50
+msgid "Number of Layouts"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:51
+msgid "Number of layouts:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:52
+#, fuzzy
+msgid "Page Size"
+msgstr "紙張大小:"
+
+#: data/glade/template-designer.glade.h:54
+msgid "Part #:"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:55
+msgid ""
+"Please enter the following identifying information about the template "
+"stationery."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:56
+msgid "Please enter the following layout information."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:57
+msgid ""
+"Please enter the following size parameters of a single label in your "
+"template."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:58
+msgid ""
+"Please enter the following size parameters of a single label or card in your "
+"template."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:59
+msgid "Please select the basic shape of the labels or cards."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:60
+msgid "Please select the page size of the template stationery."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:61
+#, fuzzy
+msgid "Print test sheet"
+msgstr "在首張紙"
+
+#: data/glade/template-designer.glade.h:62
+msgid "Rectangular or square (can have rounded corners)"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:63
+msgid "Round"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:64
+msgid ""
+"Templates needing\n"
+"two layouts."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:66
+msgid ""
+"Templates needing only\n"
+"one layout."
+msgstr ""
+
+#: data/glade/template-designer.glade.h:68
+msgid "Vertical pitch (dy):"
+msgstr ""
+
+#: data/glade/template-designer.glade.h:69
+msgid ""
+"Welcome to the gLabels Template Designer.\n"
+"\n"
+"This dialog will assist you in the creation of a custom gLabels template."
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:1
+msgid "A0"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:2
+msgid "A1"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:3
+msgid "A10"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:4
+msgid "A2"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:5
+msgid "A3"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:6
+msgid "A4"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:7
+msgid "A5"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:8
+msgid "A6"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:9
+msgid "A7"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:10
+msgid "A8"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:11
+msgid "A9"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:12
+msgid "B0"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:13
+msgid "B1"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:14
+msgid "B10"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:15
+msgid "B2"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:16
+msgid "B3"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:17
+msgid "B4"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:18
+msgid "B5"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:19
+msgid "B6"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:20
+msgid "B7"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:21
+msgid "B8"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:22
+msgid "B9"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:23
+msgid "US Executive"
+msgstr ""
+
+#: data/templates/paper-sizes.xml.h:24
+msgid "US Legal"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:1
+#: data/templates/zweckform-iso-templates.xml.h:1
+msgid "Address Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:2
+#: data/templates/avery-iso-templates.xml.h:2
+#: data/templates/zweckform-iso-templates.xml.h:3
+#: data/templates/misc-us-templates.xml.h:2
+#: data/templates/misc-iso-templates.xml.h:9
+msgid "Business Cards"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:3
+msgid "CD/DVD Labels (Disc Labels)"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:4
+msgid "Diskette Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:5
+#, fuzzy
+msgid "Filing Labels"
+msgstr "標簽"
+
+#: data/templates/avery-us-templates.xml.h:6
+msgid "Full Sheet Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:7
+#, fuzzy
+msgid "Large Round Labels"
+msgstr "由禁簽開級"
+
+#: data/templates/avery-us-templates.xml.h:8
+msgid "Name Badge Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:9
+msgid "Return Address Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:10
+msgid "Shipping Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:11
+#, fuzzy
+msgid "Small Round Labels"
+msgstr "由禁簽開級"
+
+#: data/templates/avery-us-templates.xml.h:12
+#, fuzzy
+msgid "Square Labels"
+msgstr "標簽"
+
+#: data/templates/avery-us-templates.xml.h:13
+msgid "Video Tape Face Labels"
+msgstr ""
+
+#: data/templates/avery-us-templates.xml.h:14
+msgid "Video Tape Spine Labels"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:1
+msgid "Address labels"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:3
+msgid "CD Booklet"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:4
+msgid "CD Inlet"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:5
+#: data/templates/zweckform-iso-templates.xml.h:4
+#: data/templates/misc-us-templates.xml.h:4
+#: data/templates/misc-iso-templates.xml.h:10
+#, fuzzy
+msgid "CD/DVD Labels"
+msgstr "標簽"
+
+#: data/templates/avery-iso-templates.xml.h:6
+msgid "Diskette labels"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:7
+#: data/templates/zweckform-iso-templates.xml.h:7
+#: data/templates/misc-iso-templates.xml.h:17
+msgid "Mailing Labels"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:8
+#, fuzzy
+msgid "Mailing labels"
+msgstr "標簽"
+
+#: data/templates/avery-iso-templates.xml.h:9
+msgid "Mini Address Labels"
+msgstr ""
+
+#: data/templates/avery-iso-templates.xml.h:10
+#, fuzzy
+msgid "Shipping labels"
+msgstr "開啟標簽"
+
+#: data/templates/zweckform-iso-templates.xml.h:2
+msgid "Allround Labels"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:5
+msgid "Correction and Cover-up Labels"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:6
+msgid "Lever Arch File Labels"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:8
+msgid "QSL-Karten Etiketten 70mm x 50,8mm"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:9
+msgid "Rectangular Copier Labels"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:10
+#: data/templates/misc-iso-templates.xml.h:22
+msgid "Rectangular Labels"
+msgstr ""
+
+#: data/templates/zweckform-iso-templates.xml.h:11
+msgid "Video Labels (back)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:1
+msgid "Business Card CD"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:3
+msgid "CD Template Rectangles"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:5
+msgid "CD/DVD Labels (Face Only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:6
+#: data/templates/misc-iso-templates.xml.h:11
+msgid "CD/DVD Labels (face only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:7
+#, fuzzy
+msgid "DLT Labels"
+msgstr "標簽"
+
+#: data/templates/misc-us-templates.xml.h:8
+msgid "Microtube labels"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:9
+msgid "Mini-CD Labels"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:10
+msgid "PRO CD Labels 2-up (CD spine only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:11
+msgid "PRO CD Labels 2-up (Face only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:12
+#: data/templates/misc-iso-templates.xml.h:21
+msgid "PRO CD Labels 2-up (face only)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:13
+msgid "Slimline CD Case (rightside up)"
+msgstr ""
+
+#: data/templates/misc-us-templates.xml.h:14
+msgid "Slimline CD Case (upside down)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:1
+msgid "Agipa 119488: Business Cards"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:2
+msgid "Allround Labels --24"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:3
+msgid "Allround Labels --44"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:4
+msgid "Allround Labels --64"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:5
+msgid "Allround Labels --65"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:6
+msgid "Arch File Labels"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:7
+msgid "Arch File Labels (large)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:8
+msgid "Arch File Labels (small)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:12
+msgid "CD/DVD Labels Standard Format (face only)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:13
+msgid "Diskette Labels (face only)"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:14
+msgid "EPSON Photo Stickers 16"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:15
+msgid "Etiketten"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:16
+msgid "Fridge Magnet Stickers"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:18
+msgid "Mailing Labels --14"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:19
+msgid "Mailing Labels-2 columns"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:20
+msgid "Mailing Labels-3 columns"
+msgstr ""
+
+#: data/templates/misc-iso-templates.xml.h:23
+msgid "Video Labels (face only)"
+msgstr ""
+
+#: data/desktop/glabels.desktop.in.h:1
+msgid "Create labels, business cards and media covers."
+msgstr ""
+
+#: data/desktop/glabels.desktop.in.h:2
+msgid "gLabels Label Designer"
+msgstr ""
+
+#: data/mime/glabels.keys.in.h:1 data/mime/glabels.xml.in.h:1
+#, fuzzy
+msgid "gLabels Project File"
+msgstr "文字樣貌"
+
+#, fuzzy
+#~ msgid "Object _Properties..."
+#~ msgstr "文字樣貌"
+
+#~ msgid "Display units"
+#~ msgstr "顯示單位"
+
+#~ msgid "Default page size"
+#~ msgstr "預設紙張大小"
+
+#~ msgid "Outline"
+#~ msgstr "外邊"
+
+#~ msgid "Edit line object properties"
+#~ msgstr "修改線物件的設定"
+
+#~ msgid "Edit text object properties"
+#~ msgstr "修改文字物件的設定"
+
+#~ msgid "Maintain current aspect ratio"
+#~ msgstr "保留現有的大小比例"
+
+#, fuzzy
+#~ msgid "CD Labels"
+#~ msgstr "標簽"
+
+#, fuzzy
+#~ msgid "Open %s"
+#~ msgstr "開啟"
+
+#~ msgid "Revert to saved copy of %s?"
+#~ msgstr "要載入已儲存的備份 %s ?"
+
+#~ msgid "Unknown media type. Using default."
+#~ msgstr "不明的媒體類形. 使用預設."
+
+#~ msgid ""
+#~ "``%s'' has been modified.\n"
+#~ "\n"
+#~ "Do you wish to save it?"
+#~ msgstr ""
+#~ "``%s`` 已被修改.\n"
+#~ "\n"
+#~ "要現在儲存嗎 ?"
+
+#~ msgid "Close / Save label as"
+#~ msgstr "關閉 / 儲存標簽為..."
+
+#~ msgid "Label no longer valid!"
+#~ msgstr "標簽並不是正確可讀的 !"
+
+#~ msgid "Error writing file"
+#~ msgstr "在寫入檔案時發生錯誤"
+
+#~ msgid "Edit properties..."
+#~ msgstr "修改設定..."
+
+#~ msgid "Appearance"
+#~ msgstr "樣貌"
+
+#~ msgid "Position/Size"
+#~ msgstr "位置/大小"
+
+#~ msgid "Image format not currently supported"
+#~ msgstr "圖像格式並沒有支援"
+
+#~ msgid "Barcode data"
+#~ msgstr "數碼條資料"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "Show text with barcode"
+#~ msgstr "顯示數碼條文字"
+
+#~ msgid "Fields"
+#~ msgstr "欄位"
+
+#~ msgid "Column"
+#~ msgstr "列"
+
+#~ msgid "Sample data"
+#~ msgstr "樣本資料"
+
+#~ msgid "Make a new, empty label"
+#~ msgstr "製作新檔, 空的樣簽"
+
+#~ msgid "  New   "
+#~ msgstr "  新增  "
+
+#~ msgid "New Label/Card"
+#~ msgstr "新增標簽/卡"
+
+#~ msgid "  Open  "
+#~ msgstr "  開啟  "
+
+#~ msgid "  Save  "
+#~ msgstr "  儲存  "
+
+#~ msgid " Print  "
+#~ msgstr "  列印  "
+
+#~ msgid "Function is not implemented!"
+#~ msgstr "功能未完成 !"
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..aea2482
--- /dev/null
@@ -0,0 +1,290 @@
+LIB_BARCODE_DIR = ../barcode-0.98
+LIB_IEC16022_DIR = ../iec16022-0.2.1
+
+SUBDIRS= pixmaps stock-pixmaps mygal
+
+bin_PROGRAMS = glabels glabels-batch
+
+INCLUDES = \
+       -I$(top_srcdir)                                         \
+       -I$(top_builddir)                                       \
+       -I$(LIB_BARCODE_DIR)                                    \
+       -I$(LIB_IEC16022_DIR)                                   \
+       $(GLABELS_CFLAGS)                                       \
+       $(HAVE_XML_PARSE_HUGE)                                  \
+       $(DISABLE_DEPRECATED_CFLAGS)                            \
+       -DPREFIX=\""$(prefix)"\"                                \
+       -DSYSCONFDIR=\""$(sysconfdir)"\"                        \
+       -DDATADIR=\""$(datadir)"\"                              \
+       -DLIBDIR=\""$(libdir)"\"                                \
+       -DGLABELS_LOCALEDIR=\""$(datadir)/locale"\"             \
+       -DGLABELS_GLADE_DIR=\""$(datadir)/glabels/glade/"\"     \
+       -DGLABELS_ICON_DIR=\""$(datadir)/pixmaps/"\"    \
+       -DGLABELS_PIXMAP_DIR=\""$(datadir)/pixmaps/glabels/"\"  \
+       -DG_LOG_DOMAIN=\""glabels\""
+
+glabels_LDFLAGS = -export-dynamic
+
+glabels_LDADD =                                \
+       $(GLABELS_LIBS)                         \
+       ../libglabels/libglabels.la             \
+       mygal/libmygal.la                       \
+       $(LIB_BARCODE_DIR)/libbarcode.la        \
+       $(LIB_IEC16022_DIR)/libiec16022.la
+
+glabels_batch_LDFLAGS = -export-dynamic
+
+glabels_batch_LDADD =                          \
+       $(GLABELS_LIBS)                         \
+       ../libglabels/libglabels.la             \
+       $(LIB_BARCODE_DIR)/libbarcode.la        \
+       $(LIB_IEC16022_DIR)/libiec16022.la
+
+BUILT_SOURCES =                        \
+       marshal.c                       \
+       marshal.h                       
+
+glabels_SOURCES =                      \
+       glabels.c                       \
+       warning-handler.c               \
+       warning-handler.h               \
+       critical-error-handler.c        \
+       critical-error-handler.h        \
+       window.c                        \
+       window.h                        \
+       stock.c                         \
+       stock.h                         \
+       ui.h                            \
+       ui.c                            \
+       ui-util.h                       \
+       ui-util.c                       \
+       ui-commands.h                   \
+       ui-commands.c                   \
+       ui-property-bar.h               \
+       ui-property-bar.c               \
+       ui-sidebar.h                    \
+       ui-sidebar.c                    \
+       file.h                          \
+       file.c                          \
+       new-label-dialog.h              \
+       new-label-dialog.c              \
+       recent.h                        \
+       recent.c                        \
+       prefs.c                         \
+       prefs.h                         \
+       prefs-model.c                   \
+       prefs-model.h                   \
+       prefs-dialog.c                  \
+       prefs-dialog.h                  \
+       hig.h                           \
+       view.c                          \
+       view.h                          \
+       view-object.c                   \
+       view-object.h                   \
+       view-box.c                      \
+       view-box.h                      \
+       view-ellipse.c                  \
+       view-ellipse.h                  \
+       view-line.c                     \
+       view-line.h                     \
+       view-image.c                    \
+       view-image.h                    \
+       view-text.c                     \
+       view-text.h                     \
+       view-barcode.c                  \
+       view-barcode.h                  \
+       merge-properties-dialog.c       \
+       merge-properties-dialog.h       \
+       object-editor.c                 \
+       object-editor.h                 \
+       object-editor-private.h         \
+       object-editor-position-page.c   \
+       object-editor-size-page.c       \
+       object-editor-lsize-page.c      \
+       object-editor-line-page.c       \
+       object-editor-fill-page.c       \
+       object-editor-image-page.c      \
+       object-editor-text-page.c       \
+       object-editor-edit-page.c       \
+       object-editor-bc-page.c         \
+       object-editor-data-page.c       \
+       object-editor-shadow-page.c     \
+       print.c                         \
+       print.h                         \
+       print-op.c                      \
+       print-op.h                      \
+       template-designer.c             \
+       template-designer.h             \
+       bc.c                            \
+       bc.h                            \
+       bc-gnubarcode.c                 \
+       bc-gnubarcode.h                 \
+       bc-postnet.c                    \
+       bc-postnet.h                    \
+       bc-iec16022.c                   \
+       bc-iec16022.h                   \
+       label.c                         \
+       label.h                         \
+       label-object.c                  \
+       label-object.h                  \
+       label-text.c                    \
+       label-text.h                    \
+       label-box.c                     \
+       label-box.h                     \
+       label-line.c                    \
+       label-line.h                    \
+       label-ellipse.c                 \
+       label-ellipse.h                 \
+       label-image.c                   \
+       label-image.h                   \
+       label-barcode.c                 \
+       label-barcode.h                 \
+       xml-label.c                     \
+       xml-label.h                     \
+       xml-label-04.c                  \
+       xml-label-04.h                  \
+       pixbuf-cache.c                  \
+       pixbuf-cache.h                  \
+       base64.c                        \
+       base64.h                        \
+       merge.c                         \
+       merge.h                         \
+       merge-init.c                    \
+       merge-init.h                    \
+       merge-text.c                    \
+       merge-text.h                    \
+       merge-evolution.c               \
+       merge-evolution.h               \
+       merge-vcard.c                   \
+       merge-vcard.h                   \
+       text-node.c                     \
+       text-node.h                     \
+       mini-preview-pixbuf.c           \
+       mini-preview-pixbuf.h           \
+       mini-preview-pixbuf-cache.c     \
+       mini-preview-pixbuf-cache.h     \
+       wdgt-print-copies.c             \
+       wdgt-print-copies.h             \
+       wdgt-print-merge.c              \
+       wdgt-print-merge.h              \
+       wdgt-media-select.c             \
+       wdgt-media-select.h             \
+       wdgt-mini-preview.c             \
+       wdgt-mini-preview.h             \
+       wdgt-rotate-label.c             \
+       wdgt-rotate-label.h             \
+       wdgt-chain-button.c             \
+       wdgt-chain-button.h             \
+       cairo-label-path.c              \
+       cairo-label-path.h              \
+       cairo-markup-path.c             \
+       cairo-markup-path.h             \
+       cairo-ellipse-path.c            \
+       cairo-ellipse-path.h            \
+       util.c                          \
+       util.h                          \
+       color.c                         \
+       color.h                         \
+       debug.c                         \
+       debug.h                         \
+       $(BUILT_SOURCES)
+
+
+glabels_batch_SOURCES =                \
+       glabels-batch.c                 \
+       print.c                         \
+       print.h                         \
+       print-op.c                      \
+       print-op.h                      \
+       bc.c                            \
+       bc.h                            \
+       bc-gnubarcode.c                 \
+       bc-gnubarcode.h                 \
+       bc-postnet.c                    \
+       bc-postnet.h                    \
+       bc-iec16022.c                   \
+       bc-iec16022.h                   \
+       label.c                         \
+       label.h                         \
+       label-object.c                  \
+       label-object.h                  \
+       label-text.c                    \
+       label-text.h                    \
+       label-box.c                     \
+       label-box.h                     \
+       label-line.c                    \
+       label-line.h                    \
+       label-ellipse.c                 \
+       label-ellipse.h                 \
+       label-image.c                   \
+       label-image.h                   \
+       label-barcode.c                 \
+       label-barcode.h                 \
+       xml-label.c                     \
+       xml-label.h                     \
+       xml-label-04.c                  \
+       xml-label-04.h                  \
+       pixbuf-cache.c                  \
+       pixbuf-cache.h                  \
+       base64.c                        \
+       base64.h                        \
+       merge.c                         \
+       merge.h                         \
+       merge-init.c                    \
+       merge-init.h                    \
+       merge-text.c                    \
+       merge-text.h                    \
+       merge-evolution.c               \
+       merge-evolution.h               \
+       merge-vcard.c                   \
+       merge-vcard.h                   \
+       text-node.c                     \
+       text-node.h                     \
+       prefs.c                         \
+       prefs.h                         \
+       prefs-model.c                   \
+       prefs-model.h                   \
+       util.c                          \
+       util.h                          \
+       color.c                         \
+       color.h                         \
+       debug.c                         \
+       debug.h                         \
+       wdgt-print-copies.c             \
+       wdgt-print-copies.h             \
+       wdgt-print-merge.c              \
+       wdgt-print-merge.h              \
+       wdgt-mini-preview.c             \
+       wdgt-mini-preview.h             \
+       hig.h                           \
+       cairo-label-path.c              \
+       cairo-label-path.h              \
+       cairo-ellipse-path.c            \
+       cairo-ellipse-path.h            \
+       $(BUILT_SOURCES)
+
+marshal.h: marshal.list $(GLIB_GENMARSHAL)
+       $(GLIB_GENMARSHAL) $< --header --prefix=gl_marshal > $@
+
+marshal.c: marshal.list $(GLIB_GENMARSHAL)
+       echo "#include \"marshal.h\"" > $@ && \
+       $(GLIB_GENMARSHAL) $< --body --prefix=gl_marshal >> $@
+
+EXTRA_DIST = \
+       marshal.list                    
+
+CLEANFILES = $(BUILT_SOURCES)
+
+$(bin_PROGRAMS): $(LIB_BARCODE_DIR)/libbarcode.la \
+                $(LIB_IEC16022_DIR)/libiec16022.la \
+                ../libglabels/libglabels.la
+
+$(LIB_BARCODE_DIR)/libbarcode.la:
+       cd $(LIB_BARCODE_DIR); $(MAKE)
+
+$(LIB_IEC16022_DIR)/libiec16022.la:
+       cd $(LIB_IEC16022_DIR); $(MAKE)
+
+../libglabels/libglabels.la:
+       cd ../libglabels; $(MAKE)
+
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644 (file)
index 0000000..90f0642
--- /dev/null
@@ -0,0 +1,1143 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = glabels$(EXEEXT) glabels-batch$(EXEEXT)
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__objects_1 = marshal.$(OBJEXT)
+am_glabels_OBJECTS = glabels.$(OBJEXT) warning-handler.$(OBJEXT) \
+       critical-error-handler.$(OBJEXT) window.$(OBJEXT) \
+       stock.$(OBJEXT) ui.$(OBJEXT) ui-util.$(OBJEXT) \
+       ui-commands.$(OBJEXT) ui-property-bar.$(OBJEXT) \
+       ui-sidebar.$(OBJEXT) file.$(OBJEXT) new-label-dialog.$(OBJEXT) \
+       recent.$(OBJEXT) prefs.$(OBJEXT) prefs-model.$(OBJEXT) \
+       prefs-dialog.$(OBJEXT) view.$(OBJEXT) view-object.$(OBJEXT) \
+       view-box.$(OBJEXT) view-ellipse.$(OBJEXT) view-line.$(OBJEXT) \
+       view-image.$(OBJEXT) view-text.$(OBJEXT) \
+       view-barcode.$(OBJEXT) merge-properties-dialog.$(OBJEXT) \
+       object-editor.$(OBJEXT) object-editor-position-page.$(OBJEXT) \
+       object-editor-size-page.$(OBJEXT) \
+       object-editor-lsize-page.$(OBJEXT) \
+       object-editor-line-page.$(OBJEXT) \
+       object-editor-fill-page.$(OBJEXT) \
+       object-editor-image-page.$(OBJEXT) \
+       object-editor-text-page.$(OBJEXT) \
+       object-editor-edit-page.$(OBJEXT) \
+       object-editor-bc-page.$(OBJEXT) \
+       object-editor-data-page.$(OBJEXT) \
+       object-editor-shadow-page.$(OBJEXT) print.$(OBJEXT) \
+       print-op.$(OBJEXT) template-designer.$(OBJEXT) bc.$(OBJEXT) \
+       bc-gnubarcode.$(OBJEXT) bc-postnet.$(OBJEXT) \
+       bc-iec16022.$(OBJEXT) label.$(OBJEXT) label-object.$(OBJEXT) \
+       label-text.$(OBJEXT) label-box.$(OBJEXT) label-line.$(OBJEXT) \
+       label-ellipse.$(OBJEXT) label-image.$(OBJEXT) \
+       label-barcode.$(OBJEXT) xml-label.$(OBJEXT) \
+       xml-label-04.$(OBJEXT) pixbuf-cache.$(OBJEXT) base64.$(OBJEXT) \
+       merge.$(OBJEXT) merge-init.$(OBJEXT) merge-text.$(OBJEXT) \
+       merge-evolution.$(OBJEXT) merge-vcard.$(OBJEXT) \
+       text-node.$(OBJEXT) mini-preview-pixbuf.$(OBJEXT) \
+       mini-preview-pixbuf-cache.$(OBJEXT) \
+       wdgt-print-copies.$(OBJEXT) wdgt-print-merge.$(OBJEXT) \
+       wdgt-media-select.$(OBJEXT) wdgt-mini-preview.$(OBJEXT) \
+       wdgt-rotate-label.$(OBJEXT) wdgt-chain-button.$(OBJEXT) \
+       cairo-label-path.$(OBJEXT) cairo-markup-path.$(OBJEXT) \
+       cairo-ellipse-path.$(OBJEXT) util.$(OBJEXT) color.$(OBJEXT) \
+       debug.$(OBJEXT) $(am__objects_1)
+glabels_OBJECTS = $(am_glabels_OBJECTS)
+am__DEPENDENCIES_1 =
+glabels_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       ../libglabels/libglabels.la mygal/libmygal.la \
+       $(LIB_BARCODE_DIR)/libbarcode.la \
+       $(LIB_IEC16022_DIR)/libiec16022.la
+glabels_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(glabels_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am_glabels_batch_OBJECTS = glabels-batch.$(OBJEXT) print.$(OBJEXT) \
+       print-op.$(OBJEXT) bc.$(OBJEXT) bc-gnubarcode.$(OBJEXT) \
+       bc-postnet.$(OBJEXT) bc-iec16022.$(OBJEXT) label.$(OBJEXT) \
+       label-object.$(OBJEXT) label-text.$(OBJEXT) \
+       label-box.$(OBJEXT) label-line.$(OBJEXT) \
+       label-ellipse.$(OBJEXT) label-image.$(OBJEXT) \
+       label-barcode.$(OBJEXT) xml-label.$(OBJEXT) \
+       xml-label-04.$(OBJEXT) pixbuf-cache.$(OBJEXT) base64.$(OBJEXT) \
+       merge.$(OBJEXT) merge-init.$(OBJEXT) merge-text.$(OBJEXT) \
+       merge-evolution.$(OBJEXT) merge-vcard.$(OBJEXT) \
+       text-node.$(OBJEXT) prefs.$(OBJEXT) prefs-model.$(OBJEXT) \
+       util.$(OBJEXT) color.$(OBJEXT) debug.$(OBJEXT) \
+       wdgt-print-copies.$(OBJEXT) wdgt-print-merge.$(OBJEXT) \
+       wdgt-mini-preview.$(OBJEXT) cairo-label-path.$(OBJEXT) \
+       cairo-ellipse-path.$(OBJEXT) $(am__objects_1)
+glabels_batch_OBJECTS = $(am_glabels_batch_OBJECTS)
+glabels_batch_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       ../libglabels/libglabels.la $(LIB_BARCODE_DIR)/libbarcode.la \
+       $(LIB_IEC16022_DIR)/libiec16022.la
+glabels_batch_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(glabels_batch_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(glabels_SOURCES) $(glabels_batch_SOURCES)
+DIST_SOURCES = $(glabels_SOURCES) $(glabels_batch_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LIB_BARCODE_DIR = ../barcode-0.98
+LIB_IEC16022_DIR = ../iec16022-0.2.1
+SUBDIRS = pixmaps stock-pixmaps mygal
+INCLUDES = \
+       -I$(top_srcdir)                                         \
+       -I$(top_builddir)                                       \
+       -I$(LIB_BARCODE_DIR)                                    \
+       -I$(LIB_IEC16022_DIR)                                   \
+       $(GLABELS_CFLAGS)                                       \
+       $(HAVE_XML_PARSE_HUGE)                                  \
+       $(DISABLE_DEPRECATED_CFLAGS)                            \
+       -DPREFIX=\""$(prefix)"\"                                \
+       -DSYSCONFDIR=\""$(sysconfdir)"\"                        \
+       -DDATADIR=\""$(datadir)"\"                              \
+       -DLIBDIR=\""$(libdir)"\"                                \
+       -DGLABELS_LOCALEDIR=\""$(datadir)/locale"\"             \
+       -DGLABELS_GLADE_DIR=\""$(datadir)/glabels/glade/"\"     \
+       -DGLABELS_ICON_DIR=\""$(datadir)/pixmaps/"\"    \
+       -DGLABELS_PIXMAP_DIR=\""$(datadir)/pixmaps/glabels/"\"  \
+       -DG_LOG_DOMAIN=\""glabels\""
+
+glabels_LDFLAGS = -export-dynamic
+glabels_LDADD = \
+       $(GLABELS_LIBS)                         \
+       ../libglabels/libglabels.la             \
+       mygal/libmygal.la                       \
+       $(LIB_BARCODE_DIR)/libbarcode.la        \
+       $(LIB_IEC16022_DIR)/libiec16022.la
+
+glabels_batch_LDFLAGS = -export-dynamic
+glabels_batch_LDADD = \
+       $(GLABELS_LIBS)                         \
+       ../libglabels/libglabels.la             \
+       $(LIB_BARCODE_DIR)/libbarcode.la        \
+       $(LIB_IEC16022_DIR)/libiec16022.la
+
+BUILT_SOURCES = \
+       marshal.c                       \
+       marshal.h                       
+
+glabels_SOURCES = \
+       glabels.c                       \
+       warning-handler.c               \
+       warning-handler.h               \
+       critical-error-handler.c        \
+       critical-error-handler.h        \
+       window.c                        \
+       window.h                        \
+       stock.c                         \
+       stock.h                         \
+       ui.h                            \
+       ui.c                            \
+       ui-util.h                       \
+       ui-util.c                       \
+       ui-commands.h                   \
+       ui-commands.c                   \
+       ui-property-bar.h               \
+       ui-property-bar.c               \
+       ui-sidebar.h                    \
+       ui-sidebar.c                    \
+       file.h                          \
+       file.c                          \
+       new-label-dialog.h              \
+       new-label-dialog.c              \
+       recent.h                        \
+       recent.c                        \
+       prefs.c                         \
+       prefs.h                         \
+       prefs-model.c                   \
+       prefs-model.h                   \
+       prefs-dialog.c                  \
+       prefs-dialog.h                  \
+       hig.h                           \
+       view.c                          \
+       view.h                          \
+       view-object.c                   \
+       view-object.h                   \
+       view-box.c                      \
+       view-box.h                      \
+       view-ellipse.c                  \
+       view-ellipse.h                  \
+       view-line.c                     \
+       view-line.h                     \
+       view-image.c                    \
+       view-image.h                    \
+       view-text.c                     \
+       view-text.h                     \
+       view-barcode.c                  \
+       view-barcode.h                  \
+       merge-properties-dialog.c       \
+       merge-properties-dialog.h       \
+       object-editor.c                 \
+       object-editor.h                 \
+       object-editor-private.h         \
+       object-editor-position-page.c   \
+       object-editor-size-page.c       \
+       object-editor-lsize-page.c      \
+       object-editor-line-page.c       \
+       object-editor-fill-page.c       \
+       object-editor-image-page.c      \
+       object-editor-text-page.c       \
+       object-editor-edit-page.c       \
+       object-editor-bc-page.c         \
+       object-editor-data-page.c       \
+       object-editor-shadow-page.c     \
+       print.c                         \
+       print.h                         \
+       print-op.c                      \
+       print-op.h                      \
+       template-designer.c             \
+       template-designer.h             \
+       bc.c                            \
+       bc.h                            \
+       bc-gnubarcode.c                 \
+       bc-gnubarcode.h                 \
+       bc-postnet.c                    \
+       bc-postnet.h                    \
+       bc-iec16022.c                   \
+       bc-iec16022.h                   \
+       label.c                         \
+       label.h                         \
+       label-object.c                  \
+       label-object.h                  \
+       label-text.c                    \
+       label-text.h                    \
+       label-box.c                     \
+       label-box.h                     \
+       label-line.c                    \
+       label-line.h                    \
+       label-ellipse.c                 \
+       label-ellipse.h                 \
+       label-image.c                   \
+       label-image.h                   \
+       label-barcode.c                 \
+       label-barcode.h                 \
+       xml-label.c                     \
+       xml-label.h                     \
+       xml-label-04.c                  \
+       xml-label-04.h                  \
+       pixbuf-cache.c                  \
+       pixbuf-cache.h                  \
+       base64.c                        \
+       base64.h                        \
+       merge.c                         \
+       merge.h                         \
+       merge-init.c                    \
+       merge-init.h                    \
+       merge-text.c                    \
+       merge-text.h                    \
+       merge-evolution.c               \
+       merge-evolution.h               \
+       merge-vcard.c                   \
+       merge-vcard.h                   \
+       text-node.c                     \
+       text-node.h                     \
+       mini-preview-pixbuf.c           \
+       mini-preview-pixbuf.h           \
+       mini-preview-pixbuf-cache.c     \
+       mini-preview-pixbuf-cache.h     \
+       wdgt-print-copies.c             \
+       wdgt-print-copies.h             \
+       wdgt-print-merge.c              \
+       wdgt-print-merge.h              \
+       wdgt-media-select.c             \
+       wdgt-media-select.h             \
+       wdgt-mini-preview.c             \
+       wdgt-mini-preview.h             \
+       wdgt-rotate-label.c             \
+       wdgt-rotate-label.h             \
+       wdgt-chain-button.c             \
+       wdgt-chain-button.h             \
+       cairo-label-path.c              \
+       cairo-label-path.h              \
+       cairo-markup-path.c             \
+       cairo-markup-path.h             \
+       cairo-ellipse-path.c            \
+       cairo-ellipse-path.h            \
+       util.c                          \
+       util.h                          \
+       color.c                         \
+       color.h                         \
+       debug.c                         \
+       debug.h                         \
+       $(BUILT_SOURCES)
+
+glabels_batch_SOURCES = \
+       glabels-batch.c                 \
+       print.c                         \
+       print.h                         \
+       print-op.c                      \
+       print-op.h                      \
+       bc.c                            \
+       bc.h                            \
+       bc-gnubarcode.c                 \
+       bc-gnubarcode.h                 \
+       bc-postnet.c                    \
+       bc-postnet.h                    \
+       bc-iec16022.c                   \
+       bc-iec16022.h                   \
+       label.c                         \
+       label.h                         \
+       label-object.c                  \
+       label-object.h                  \
+       label-text.c                    \
+       label-text.h                    \
+       label-box.c                     \
+       label-box.h                     \
+       label-line.c                    \
+       label-line.h                    \
+       label-ellipse.c                 \
+       label-ellipse.h                 \
+       label-image.c                   \
+       label-image.h                   \
+       label-barcode.c                 \
+       label-barcode.h                 \
+       xml-label.c                     \
+       xml-label.h                     \
+       xml-label-04.c                  \
+       xml-label-04.h                  \
+       pixbuf-cache.c                  \
+       pixbuf-cache.h                  \
+       base64.c                        \
+       base64.h                        \
+       merge.c                         \
+       merge.h                         \
+       merge-init.c                    \
+       merge-init.h                    \
+       merge-text.c                    \
+       merge-text.h                    \
+       merge-evolution.c               \
+       merge-evolution.h               \
+       merge-vcard.c                   \
+       merge-vcard.h                   \
+       text-node.c                     \
+       text-node.h                     \
+       prefs.c                         \
+       prefs.h                         \
+       prefs-model.c                   \
+       prefs-model.h                   \
+       util.c                          \
+       util.h                          \
+       color.c                         \
+       color.h                         \
+       debug.c                         \
+       debug.h                         \
+       wdgt-print-copies.c             \
+       wdgt-print-copies.h             \
+       wdgt-print-merge.c              \
+       wdgt-print-merge.h              \
+       wdgt-mini-preview.c             \
+       wdgt-mini-preview.h             \
+       hig.h                           \
+       cairo-label-path.c              \
+       cairo-label-path.h              \
+       cairo-ellipse-path.c            \
+       cairo-ellipse-path.h            \
+       $(BUILT_SOURCES)
+
+EXTRA_DIST = \
+       marshal.list                    
+
+CLEANFILES = $(BUILT_SOURCES)
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p || test -f $$p1; \
+         then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+           echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+           $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+       ; done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+glabels$(EXEEXT): $(glabels_OBJECTS) $(glabels_DEPENDENCIES) 
+       @rm -f glabels$(EXEEXT)
+       $(glabels_LINK) $(glabels_OBJECTS) $(glabels_LDADD) $(LIBS)
+glabels-batch$(EXEEXT): $(glabels_batch_OBJECTS) $(glabels_batch_DEPENDENCIES) 
+       @rm -f glabels-batch$(EXEEXT)
+       $(glabels_batch_LINK) $(glabels_batch_OBJECTS) $(glabels_batch_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bc-gnubarcode.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bc-iec16022.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bc-postnet.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-ellipse-path.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-label-path.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-markup-path.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/critical-error-handler.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glabels-batch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glabels.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label-barcode.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label-box.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label-ellipse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label-image.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label-line.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label-object.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label-text.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marshal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge-evolution.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge-init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge-properties-dialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge-text.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge-vcard.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mini-preview-pixbuf-cache.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mini-preview-pixbuf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/new-label-dialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-bc-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-data-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-edit-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-fill-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-image-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-line-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-lsize-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-position-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-shadow-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-size-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor-text-page.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object-editor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixbuf-cache.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefs-dialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefs-model.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-op.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/template-designer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text-node.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-commands.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-property-bar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-sidebar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-util.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view-barcode.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view-box.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view-ellipse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view-image.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view-line.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view-object.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view-text.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warning-handler.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wdgt-chain-button.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wdgt-media-select.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wdgt-mini-preview.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wdgt-print-copies.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wdgt-print-merge.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wdgt-rotate-label.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml-label-04.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml-label.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# 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.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+       ctags-recursive install install-am install-strip \
+       tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libtool ctags ctags-recursive distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-binPROGRAMS install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-recursive uninstall uninstall-am \
+       uninstall-binPROGRAMS
+
+
+marshal.h: marshal.list $(GLIB_GENMARSHAL)
+       $(GLIB_GENMARSHAL) $< --header --prefix=gl_marshal > $@
+
+marshal.c: marshal.list $(GLIB_GENMARSHAL)
+       echo "#include \"marshal.h\"" > $@ && \
+       $(GLIB_GENMARSHAL) $< --body --prefix=gl_marshal >> $@
+
+$(bin_PROGRAMS): $(LIB_BARCODE_DIR)/libbarcode.la \
+                $(LIB_IEC16022_DIR)/libiec16022.la \
+                ../libglabels/libglabels.la
+
+$(LIB_BARCODE_DIR)/libbarcode.la:
+       cd $(LIB_BARCODE_DIR); $(MAKE)
+
+$(LIB_IEC16022_DIR)/libiec16022.la:
+       cd $(LIB_IEC16022_DIR); $(MAKE)
+
+../libglabels/libglabels.la:
+       cd ../libglabels; $(MAKE)
+
+# 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/src/base64.c b/src/base64.c
new file mode 100644 (file)
index 0000000..b3de985
--- /dev/null
@@ -0,0 +1,204 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  base64.c:  GLabels base64 encode/decode module
+ *
+ *  Copyright (C)  2003  Jim Evins <evins@snaught.com>
+ *
+ *  This module is based on base64.c from fetchmail:
+ *
+ *  Copyright (C)2002 by Eric S. Raymond.
+ *  Portions are copyrighted by Carl E. Harris and George M. Sipe.
+ *
+ *  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
+ */
+
+/*
+ * This base 64 encoding is defined in RFC2045 section 6.8.
+ */
+#include <config.h>
+
+#include "base64.h"
+
+#include <glib/gmem.h>
+#include <ctype.h>
+#include <string.h>
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+#define LINE_LENGTH 76 /* Must be <= 76 and must be a multiple of 4 */
+#define BAD    -1
+
+#define DECODE64(c)  (isascii(c) ? base64val[c] : BAD)
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+static const gchar base64digits[] =
+   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+static const gchar base64val[] = {
+    BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
+    BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
+    BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD, 62, BAD,BAD,BAD, 63,
+     52, 53, 54, 55,  56, 57, 58, 59,  60, 61,BAD,BAD, BAD,BAD,BAD,BAD,
+    BAD,  0,  1,  2,   3,  4,  5,  6,   7,  8,  9, 10,  11, 12, 13, 14,
+     15, 16, 17, 18,  19, 20, 21, 22,  23, 24, 25,BAD, BAD,BAD,BAD,BAD,
+    BAD, 26, 27, 28,  29, 30, 31, 32,  33, 34, 35, 36,  37, 38, 39, 40,
+     41, 42, 43, 44,  45, 46, 47, 48,  49, 50, 51,BAD, BAD,BAD,BAD,BAD
+};
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+\f
+/*****************************************************************************/
+/* Encode to Base64 string.                                                  */
+/*****************************************************************************/
+gchar *
+gl_base64_encode (const guchar *in, guint inlen)
+{
+       gchar *out, *p_out;
+       gint   buf_size;
+       gint   i;
+
+        /* Calculate output buffer size */
+       buf_size  = 4*((inlen+2)/3);            /* Encoded characters */
+       buf_size += buf_size / LINE_LENGTH + 2; /* Line breaks */
+       buf_size += 1;                          /* null termination */
+       
+       /* Allocate output buffer */
+       out = g_new0 (gchar, buf_size);
+       p_out=out;
+
+       /* Now do the encoding */
+       *p_out++ = '\n';
+       for ( i=0; inlen >= 3; inlen-=3 ) {
+
+               *p_out++ = base64digits[in[0] >> 2];
+               *p_out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)];
+               *p_out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
+               *p_out++ = base64digits[in[2] & 0x3f];
+               in += 3;
+
+               i += 4;
+               if ( (i % LINE_LENGTH) == 0 ) {
+                       *p_out++ = '\n';
+               }
+
+       }
+       if (inlen > 0) {
+               guchar fragment;
+    
+               *p_out++ = base64digits[in[0] >> 2];
+               fragment = (in[0] << 4) & 0x30;
+               if (inlen > 1)
+                       fragment |= in[1] >> 4;
+               *p_out++ = base64digits[fragment];
+               *p_out++ = (inlen < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c];
+               *p_out++ = '=';
+
+               *p_out++ = '\n';
+       }
+       *p_out++ = '\0';
+
+       return out;
+}
+
+/*****************************************************************************/
+/* Decode from a Base64 string.                                              */
+/*****************************************************************************/
+guchar *
+gl_base64_decode (const gchar *in, guint *outlen)
+{
+       gchar           *out, *p_out;
+       gint             buf_size;
+       register guchar  digit1, digit2, digit3, digit4;
+
+        /* Calculate output buffer size */
+       buf_size = strlen (in) * 3 / 4;
+
+       /* Allocate output buffer */
+       out = g_new0 (gchar, buf_size);
+
+       *outlen = 0;
+       p_out = out;
+
+       /* Skip non-printable characters */
+       while ( (*in == '\n') || (*in == '\r') || (*in == ' ') ) {
+               in ++;
+       }
+       if (!*in) {
+               g_free (out);
+               return NULL;
+       }
+
+       /* Now do the decoding */
+       do {
+               digit1 = in[0];
+               if (DECODE64(digit1) == BAD) {
+                       g_free (out);
+                       return NULL;
+               }
+               digit2 = in[1];
+               if (DECODE64(digit2) == BAD) {
+                       g_free (out);
+                       return NULL;
+               }
+               digit3 = in[2];
+               if (digit3 != '=' && DECODE64(digit3) == BAD) {
+                       g_free (out);
+                       return NULL;
+               }
+               digit4 = in[3];
+               if (digit4 != '=' && DECODE64(digit4) == BAD) {
+                       g_free (out);
+                       return NULL;
+               }
+               in += 4;
+
+               *p_out++ = (DECODE64(digit1)<<2) | (DECODE64(digit2) >> 4);
+               (*outlen)++;
+               if (digit3 != '=')
+               {
+                       *p_out++ = ((DECODE64(digit2)<<4)&0xf0) | (DECODE64(digit3)>>2);
+                       (*outlen)++;
+                       if (digit4 != '=')
+                       {
+                               *p_out++ = ((DECODE64(digit3)<<6)&0xc0) | DECODE64(digit4);
+                               (*outlen)++;
+                       }
+               }
+
+               /* Skip non-printable characters */
+               while ( (*in == '\n') || (*in == '\r') || (*in == ' ') ) {
+                       in ++;
+               }
+
+       } while (*in && digit4 != '=');
+
+       return (guchar *)out;
+}
+
diff --git a/src/base64.h b/src/base64.h
new file mode 100644 (file)
index 0000000..420d2a4
--- /dev/null
@@ -0,0 +1,45 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  base64.h:  GLabels base64 encode/decode module
+ *
+ *  Copyright (C)  2003  Jim Evins <evins@snaught.com>
+ *
+ *  This module is based on base64.c from fetchmail:
+ *
+ *  Copyright (C)2002 by Eric S. Raymond.
+ *  Portions are copyrighted by Carl E. Harris and George M. Sipe.
+ *
+ *  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
+ */
+#ifndef __BASE64_H__
+#define __BASE64_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+gchar  *gl_base64_encode (const guchar *in,
+                         guint         inlen);
+
+guchar *gl_base64_decode (const gchar  *in,
+                         guint        *outlen);
+
+G_END_DECLS
+
+#endif
+
diff --git a/src/bc-gnubarcode.c b/src/bc-gnubarcode.c
new file mode 100644 (file)
index 0000000..2c84114
--- /dev/null
@@ -0,0 +1,459 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  bc-gnubarcode.c:  front-end to GNU-barcode-library module
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  Some of this code is borrowed from the postscript renderer (ps.c)
+ *  from the GNU barcode library:
+ *
+ *     Copyright (C) 1999 Alessaandro Rubini (rubini@gnu.org)
+ *     Copyright (C) 1999 Prosa Srl. (prosa@prosa.it)
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "bc-gnubarcode.h"
+
+#include <ctype.h>
+#include <string.h>
+#include <glib/gstring.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+
+#include "barcode.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+#define SHRINK_AMOUNT 0.15     /* shrink bars to account for ink spreading */
+#define FONT_SCALE    0.95     /* Shrink fonts just a hair */
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+static glBarcode *render_pass1     (struct Barcode_Item *bci,
+                                   gint                 flags);
+
+static gboolean   is_length_valid  (const gchar         *digits,
+                                   gint                 n1,
+                                   gint                 n2);
+
+static gboolean   is_length1_valid (const gchar         *digits,
+                                   gint                 n1,
+                                   gint                 n2);
+
+static gboolean   is_length2_valid (const gchar         *digits,
+                                   gint                 n1,
+                                   gint                 n2);
+
+\f
+/*****************************************************************************/
+/* Generate intermediate representation of barcode.                          */
+/*****************************************************************************/
+glBarcode *
+gl_barcode_gnubarcode_new (const gchar    *id,
+                          gboolean        text_flag,
+                          gboolean        checksum_flag,
+                          gdouble         w,
+                          gdouble         h,
+                          const gchar    *digits)
+{
+       glBarcode           *gbc;
+       struct Barcode_Item *bci;
+       gint                 flags;
+
+       /* Assign type flag.  Pre-filter by length for subtypes. */
+       if (g_strcasecmp (id, "EAN") == 0) {
+               flags = BARCODE_EAN;
+       } else if (g_strcasecmp (id, "EAN-8") == 0) {
+               if (!is_length_valid (digits, 7, 8)) {
+                       return NULL;
+               }
+               flags = BARCODE_EAN;
+       } else if (g_strcasecmp (id, "EAN-8+2") == 0) {
+               if (!is_length1_valid (digits, 7, 8) || !is_length2_valid (digits, 2, 2)) {
+                       return NULL;
+               }
+               flags = BARCODE_EAN;
+       } else if (g_strcasecmp (id, "EAN-8+5") == 0) {
+               if (!is_length1_valid (digits, 7, 8) || !is_length2_valid (digits, 5, 5)) {
+                       return NULL;
+               }
+               flags = BARCODE_EAN;
+       } else if (g_strcasecmp (id, "EAN-13") == 0) {
+               if (!is_length_valid (digits, 12, 13)) {
+                       return NULL;
+               }
+               flags = BARCODE_EAN;
+       } else if (g_strcasecmp (id, "EAN-13+2") == 0) {
+               if (!is_length1_valid (digits, 12,13) || !is_length2_valid (digits, 2,2)) {
+                       return NULL;
+               }
+               flags = BARCODE_EAN;
+       } else if (g_strcasecmp (id, "EAN-13+5") == 0) {
+               if (!is_length1_valid (digits, 12,13) || !is_length2_valid (digits, 5,5)) {
+                       return NULL;
+               }
+               flags = BARCODE_EAN;
+       } else if (g_strcasecmp (id, "UPC") == 0) {
+               flags = BARCODE_UPC;
+       } else if (g_strcasecmp (id, "UPC-A") == 0) {
+               if (!is_length_valid (digits, 11, 12)) {
+                       return NULL;
+               }
+               flags = BARCODE_UPC;
+       } else if (g_strcasecmp (id, "UPC-A+2") == 0) {
+               if (!is_length1_valid (digits, 11,12) || !is_length2_valid (digits, 2,2)) {
+                       return NULL;
+               }
+               flags = BARCODE_UPC;
+       } else if (g_strcasecmp (id, "UPC-A+5") == 0) {
+               if (!is_length1_valid (digits, 11,12) || !is_length2_valid (digits, 5,5)) {
+                       return NULL;
+               }
+               flags = BARCODE_UPC;
+       } else if (g_strcasecmp (id, "UPC-E") == 0) {
+               if (!is_length_valid (digits, 6, 8)) {
+                       return NULL;
+               }
+               flags = BARCODE_UPC;
+       } else if (g_strcasecmp (id, "UPC-E+2") == 0) {
+               if (!is_length1_valid (digits, 6, 8) || !is_length2_valid (digits, 2,2)) {
+                       return NULL;
+               }
+               flags = BARCODE_UPC;
+       } else if (g_strcasecmp (id, "UPC-E+5") == 0) {
+               if (!is_length1_valid (digits, 6, 8) || !is_length2_valid (digits, 5,5)) {
+                       return NULL;
+               }
+               flags = BARCODE_UPC;
+       } else if (g_strcasecmp (id, "ISBN") == 0) {
+               if (!is_length_valid (digits, 9, 10)) {
+                       return NULL;
+               }
+               flags = BARCODE_ISBN;
+       } else if (g_strcasecmp (id, "ISBN+5") == 0) {
+               if (!is_length1_valid (digits, 9, 10) || !is_length2_valid (digits, 5,5)) {
+                       return NULL;
+               }
+               flags = BARCODE_ISBN;
+       } else if (g_strcasecmp (id, "Code39") == 0) {
+               flags = BARCODE_39;
+       } else if (g_strcasecmp (id, "Code128") == 0) {
+               flags = BARCODE_128;
+       } else if (g_strcasecmp (id, "Code128C") == 0) {
+               flags = BARCODE_128C;
+       } else if (g_strcasecmp (id, "Code128B") == 0) {
+               flags = BARCODE_128B;
+       } else if (g_strcasecmp (id, "I25") == 0) {
+               flags = BARCODE_I25;
+       } else if (g_strcasecmp (id, "CBR") == 0) {
+               flags = BARCODE_CBR;
+       } else if (g_strcasecmp (id, "MSI") == 0) {
+               flags = BARCODE_MSI;
+       } else if (g_strcasecmp (id, "PLS") == 0) {
+               flags = BARCODE_PLS;
+       } else {
+               g_message( "Illegal barcode id %s", id );
+               flags = BARCODE_ANY;
+       }
+
+
+       bci = Barcode_Create ((char *)digits);
+
+       /* First encode using GNU Barcode library */
+       if (!text_flag) {
+               flags |= BARCODE_NO_ASCII;
+       }
+       if (!checksum_flag) {
+               flags |= BARCODE_NO_CHECKSUM;
+       }
+
+       bci->scalef = 0.0;
+       bci->width  = w;
+       bci->height = h;
+
+       Barcode_Encode (bci, flags);
+       if (!bci->partial || !bci->textinfo) {
+               Barcode_Delete (bci);
+               return NULL;
+       }
+
+       /* now render with our custom back-end,
+          to create appropriate intermdediate format */
+       gbc = render_pass1 (bci, flags);
+
+       Barcode_Delete (bci);
+       return gbc;
+}
+
+/*--------------------------------------------------------------------------
+ * PRIVATE.  Render to glBarcode intermediate representation of barcode.
+ *
+ *  Some of this code is borrowed from the postscript renderer (ps.c)
+ *  from the GNU barcode library:
+ *
+ *     Copyright (C) 1999 Alessaandro Rubini (rubini@gnu.org)
+ *     Copyright (C) 1999 Prosa Srl. (prosa@prosa.it)
+ *
+ *--------------------------------------------------------------------------*/
+static glBarcode *
+render_pass1 (struct Barcode_Item *bci,
+             gint                 flags)
+{
+       gint           validbits = BARCODE_NO_ASCII;
+       glBarcode     *gbc;
+       glBarcodeLine *line;
+       glBarcodeChar *bchar;
+       gdouble        scalef = 1.0;
+       gdouble        x;
+       gint           i, j, barlen;
+       gdouble        f1, f2;
+       gint           mode = '-'; /* text below bars */
+       gdouble        x0, y0, yr;
+       gchar         *p, c;
+
+       if (bci->width > (2*bci->margin)) {
+               bci->width -= 2*bci->margin;
+       }
+       if (bci->height > (2*bci->margin)) {
+               bci->height -= 2*bci->margin;
+       }
+
+       /* If any flag is clear in "flags", inherit it from "bci->flags" */
+       if (!(flags & BARCODE_NO_ASCII)) {
+               flags |= bci->flags & BARCODE_NO_ASCII;
+       }
+       flags = bci->flags = (flags & validbits) | (bci->flags & ~validbits);
+
+       /* First calculate barlen */
+       barlen = bci->partial[0] - '0';
+       for (p = bci->partial + 1; *p != 0; p++) {
+               if (isdigit (*p)) {
+                       barlen += *p - '0';
+               } else {
+                       if ((*p != '+') && (*p != '-')) {
+                               barlen += *p - 'a' + 1;
+                       }
+               }
+       }
+
+       /* The scale factor depends on bar length */
+       if (!bci->scalef) {
+               if (!bci->width) bci->width = barlen; /* default */
+               scalef = bci->scalef = (double)bci->width / (double)barlen;
+               if (scalef < 0.5) scalef = 0.5;
+       }
+
+       /* The width defaults to "just enough" */
+       bci->width = barlen * scalef + 1;
+
+       /* But it can be too small, in this case enlarge and center the area */
+       if (bci->width < barlen * scalef) {
+               int wid = barlen * scalef + 1;
+               bci->xoff -= (wid - bci->width)/2 ;
+               bci->width = wid;
+               /* Can't extend too far on the left */
+               if (bci->xoff < 0) {
+                       bci->width += -bci->xoff;
+                       bci->xoff = 0;
+               }
+       }
+
+       /* The height defaults to 80 points (rescaled) */
+       if (!bci->height)
+               bci->height = 80 * scalef;
+
+       /* If too small (5 + text), reduce the scale factor and center */
+       i = 5 + 10 * ((bci->flags & BARCODE_NO_ASCII)==0);
+       if (bci->height < i * scalef ) {
+#if 0
+               double scaleg = ((double)bci->height) / i;
+               int wid = bci->width * scaleg / scalef;
+               bci->xoff += (bci->width - wid)/2;
+               bci->width = wid;
+               scalef = scaleg;
+#else
+               bci->height = i * scalef;
+#endif
+       }
+
+       gbc = g_new0 (glBarcode, 1);
+
+       /* Now traverse the code string and create a list of lines */
+       x = bci->margin + (bci->partial[0] - '0') * scalef;
+       for (p = bci->partial + 1, i = 1; *p != 0; p++, i++) {
+               /* special cases: '+' and '-' */
+               if (*p == '+' || *p == '-') {
+                       mode = *p;      /* don't count it */
+                       i++;
+                       continue;
+               }
+               /* j is the width of this bar/space */
+               if (isdigit (*p))
+                       j = *p - '0';
+               else
+                       j = *p - 'a' + 1;
+               if (i % 2) {    /* bar */
+                       x0 = x + (j * scalef) / 2;
+                       y0 = bci->margin;
+                       yr = bci->height;
+                       if (!(bci->flags & BARCODE_NO_ASCII)) { /* leave space for text */
+                               if (mode == '-') {
+                                       /* text below bars: 10 or 5 points */
+                                       yr -= (isdigit (*p) ? 10 : 5) * scalef;
+                               } else {        /* '+' */
+                                       /* above bars: 10 or 0 from bottom,
+                                          and 10 from top */
+                                       y0 += 10 * scalef;
+                                       yr -= (isdigit (*p) ? 20 : 10) * scalef;
+                               }
+                       }
+                       line = g_new0 (glBarcodeLine, 1);
+                       line->x = x0;
+                       line->y = y0;
+                       line->length = yr;
+                       line->width = (j * scalef) - SHRINK_AMOUNT;
+                       gbc->lines = g_list_append (gbc->lines, line);
+               }
+               x += j * scalef;
+
+       }
+
+       /* Now the text */
+       mode = '-';             /* reinstantiate default */
+       if (!(bci->flags & BARCODE_NO_ASCII)) {
+               for (p = bci->textinfo; p; p = strchr (p, ' ')) {
+                       while (*p == ' ')
+                               p++;
+                       if (!*p)
+                               break;
+                       if (*p == '+' || *p == '-') {
+                               mode = *p;
+                               continue;
+                       }
+                       if (sscanf (p, "%lf:%lf:%c", &f1, &f2, &c) != 3) {
+                               g_message ("impossible data: %s", p);
+                               continue;
+                       }
+                       bchar = g_new0 (glBarcodeChar, 1);
+                       bchar->x = f1 * scalef + bci->margin;
+                       if (mode == '-') {
+                               bchar->y =
+                                   bci->margin + bci->height - 8 * scalef;
+                       } else {
+                               bchar->y = bci->margin;
+                       }
+                       bchar->fsize = f2 * FONT_SCALE * scalef;
+                       bchar->c = c;
+                       gbc->chars = g_list_append (gbc->chars, bchar);
+               }
+       }
+
+       /* Fill in other info */
+       gbc->height = bci->height + 2.0 * bci->margin;
+       gbc->width = bci->width + 2.0 * bci->margin;
+
+#if 0
+       g_print ("w=%f, h=%f\n", gbc->width, gbc->height);
+#endif
+
+       return gbc;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Validate specific length of string (for subtypes).                       */
+/*--------------------------------------------------------------------------*/
+static gboolean
+is_length_valid (const gchar *digits,
+                gint         n1,
+                gint         n2)
+{
+       gchar *p;
+       gint   i;
+
+       if (!digits) {
+               return FALSE;
+       }
+
+       for (p = (gchar *)digits, i=0; *p != 0; p++) {
+               if (g_ascii_isdigit (*p)) {
+                       i++;
+               }
+       }
+
+       return (i >= n1) && (i <= n2);
+}
+
+/*--------------------------------------------------------------------------*/
+/* Validate specific length of string (for subtypes).                       */
+/*--------------------------------------------------------------------------*/
+static gboolean
+is_length1_valid (const gchar *digits,
+                 gint         n1,
+                 gint         n2)
+{
+       gchar *p;
+       gint   i;
+
+       if (!digits) {
+               return FALSE;
+       }
+
+       for (p = (gchar *)digits, i=0; !g_ascii_isspace (*p) && *p != 0; p++) {
+               if (g_ascii_isdigit (*p)) {
+                       i++;
+               }
+       }
+
+       return (i >= n1) && (i <= n2);
+}
+
+/*--------------------------------------------------------------------------*/
+/* Validate specific length of second string (for subtypes).                */
+/*--------------------------------------------------------------------------*/
+static gboolean
+is_length2_valid (const gchar *digits,
+                 gint         n1,
+                 gint         n2)
+{
+       gchar *p;
+       gint   i;
+
+       if (!digits) {
+               return FALSE;
+       }
+
+       for (p = (gchar *)digits; !g_ascii_isspace (*p) && (*p != 0); p++) {
+               /* Skip over 1st string */
+       }
+
+       for (i=0; *p != 0; p++) {
+               if (g_ascii_isdigit (*p)) {
+                       i++;
+               }
+       }
+
+       return (i >= n1) && (i <= n2);
+}
+
diff --git a/src/bc-gnubarcode.h b/src/bc-gnubarcode.h
new file mode 100644 (file)
index 0000000..1e91d99
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  bc_gnubarcode.h:  front-end to GNU-barcode-library module header file
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __BC_GNUBARCODE_H__
+#define __BC_GNUBARCODE_H__
+
+#include "bc.h"
+
+G_BEGIN_DECLS
+
+glBarcode *gl_barcode_gnubarcode_new (const gchar    *id,
+                                     gboolean        text_flag,
+                                     gboolean        checksum_flag,
+                                     gdouble         w,
+                                     gdouble         h,
+                                     const gchar    *digits);
+
+G_END_DECLS
+
+#endif /* __BC_GNUBARCODE_H__ */
diff --git a/src/bc-iec16022.c b/src/bc-iec16022.c
new file mode 100644 (file)
index 0000000..8fb87fc
--- /dev/null
@@ -0,0 +1,151 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  bc-iec16022.c:  front-end to iec16022-library module
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "bc-iec16022.h"
+
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+#include <glib/gmessages.h>
+
+#include "iec16022ecc200.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+#define MIN_PIXEL_SIZE 1.0
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+static glBarcode *render_iec16022 (const gchar *grid,
+                                   gint         i_width,
+                                   gint         i_height,
+                                   gdouble      w,
+                                   gdouble      h);
+
+/*****************************************************************************/
+/* Generate intermediate representation of barcode.                          */
+/*****************************************************************************/
+glBarcode *
+gl_barcode_iec16022_new (const gchar    *id,
+                         gboolean        text_flag,
+                         gboolean        checksum_flag,
+                         gdouble         w,
+                         gdouble         h,
+                         const gchar    *digits)
+{
+        gchar               *grid;
+        gint                 i_width, i_height;
+        glBarcode           *gbc;
+
+        if ( strlen (digits) == 0 )
+        {
+                return NULL;
+        }
+
+        i_width  = 0;
+        i_height = 0;
+
+        grid = (gchar *)iec16022ecc200 (&i_width, &i_height, NULL,
+                                        strlen (digits), (unsigned char *)digits,
+                                        NULL, NULL, NULL);
+
+        /* now render with our custom back-end,
+           to create appropriate intermdediate format */
+        gbc = render_iec16022 (grid, i_width, i_height, w, h);
+
+        free (grid);
+        return gbc;
+}
+
+/*--------------------------------------------------------------------------
+ * PRIVATE.  Render to glBarcode intermediate representation of barcode.
+ *--------------------------------------------------------------------------*/
+static glBarcode *
+render_iec16022 (const gchar *grid,
+                 gint         i_width,
+                 gint         i_height,
+                 gdouble      w,
+                 gdouble      h)
+{
+        glBarcode     *gbc;
+        glBarcodeLine *line;
+        gint           x, y;
+        gdouble        aspect_ratio, pixel_size;
+
+       /* Treat requested size as a bounding box, scale to maintain aspect
+        * ratio while fitting it in this bounding box. */
+       aspect_ratio = (gdouble)i_height / (gdouble)i_width;
+       if ( h > w*aspect_ratio ) {
+               h = w * aspect_ratio;
+       } else {
+               w = h / aspect_ratio;
+       }
+
+        /* Now determine pixel size. */
+        pixel_size = w / i_width;
+        if ( pixel_size < MIN_PIXEL_SIZE )
+        {
+                pixel_size = MIN_PIXEL_SIZE;
+        }
+
+        gbc = g_new0 (glBarcode, 1);
+
+        /* Now traverse the code string and create a list of boxes */
+        for ( y = i_height-1; y >= 0; y-- )
+        {
+
+                for ( x = 0; x < i_width; x++ )
+                {
+
+                        if (*grid++)
+                        {
+                                line = g_new0 (glBarcodeLine, 1);
+                                line->x      = x*pixel_size + pixel_size/2.0;
+                                line->y      = y*pixel_size;
+                                line->length = pixel_size;
+                                line->width  = pixel_size;
+                                gbc->lines = g_list_append (gbc->lines, line);
+                        }
+
+                }
+
+        }
+
+        /* Fill in other info */
+        gbc->height = i_height * pixel_size;
+        gbc->width  = i_width  * pixel_size;
+
+#if 0
+        g_print ("w=%f, h=%f\n", gbc->width, gbc->height);
+#endif
+
+        return gbc;
+}
+
diff --git a/src/bc-iec16022.h b/src/bc-iec16022.h
new file mode 100644 (file)
index 0000000..099387a
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  bc_iec16022.h:  front-end to iec16022-library module header file
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __BC_IEC16022_H__
+#define __BC_IEC16022_H__
+
+#include "bc.h"
+
+G_BEGIN_DECLS
+
+glBarcode *gl_barcode_iec16022_new (const gchar    *id,
+                                    gboolean        text_flag,
+                                    gboolean        checksum_flag,
+                                    gdouble         w,
+                                    gdouble         h,
+                                    const gchar    *digits);
+
+G_END_DECLS
+
+#endif /* __BC_IEC16022_H__ */
diff --git a/src/bc-postnet.c b/src/bc-postnet.c
new file mode 100644 (file)
index 0000000..5b710c0
--- /dev/null
@@ -0,0 +1,222 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  bc_postnet.c:  GLabels POSTNET barcode module
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+/*
+ * This module implements the POSTNET barcode specified in the USPS
+ * publication 25, Mar 2001.
+ */
+
+#include <config.h>
+
+#include "bc-postnet.h"
+
+#include <ctype.h>
+#include <glib/gstring.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+#define POSTNET_BAR_WIDTH      1.25
+#define POSTNET_FULLBAR_HEIGHT 9.00
+#define POSTNET_HALFBAR_HEIGHT 3.50
+#define POSTNET_BAR_PITCH      3.25
+#define POSTNET_HORIZ_MARGIN   9.00
+#define POSTNET_VERT_MARGIN    3.00
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+static gchar *symbols[] = {
+       /* 0 */ "11000",
+       /* 1 */ "00011",
+       /* 2 */ "00101",
+       /* 3 */ "00110",
+       /* 4 */ "01001",
+       /* 5 */ "01010",
+       /* 6 */ "01100",
+       /* 7 */ "10001",
+       /* 8 */ "10010",
+       /* 9 */ "10100",
+};
+
+static gchar *frame_symbol = "1";
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+static gchar    *postnet_code    (const gchar *digits);
+
+static gboolean  is_length_valid (const gchar *digits,
+                                 gint         n);
+
+\f
+/****************************************************************************/
+/* Generate list of lines that form the barcode for the given digits.       */
+/****************************************************************************/
+glBarcode *
+gl_barcode_postnet_new (const gchar    *id,
+                       gboolean        text_flag,
+                       gboolean        checksum_flag,
+                       gdouble         w,
+                       gdouble         h,
+                       const gchar    *digits)
+{
+       gchar         *code, *p;
+       glBarcode     *gbc;
+       glBarcodeLine *line;
+       gdouble        x;
+
+       /* Validate code length for all subtypes. */
+       if ( (g_strcasecmp (id, "POSTNET") == 0) ) {
+               if (!is_length_valid (digits, 5) &&
+                   !is_length_valid (digits, 9) &&
+                   !is_length_valid (digits, 11)) {
+                       return NULL;
+               }
+       }
+       if ( (g_strcasecmp (id, "POSTNET-5") == 0) ) {
+               if (!is_length_valid (digits, 5)) {
+                       return NULL;
+               }
+       }
+       if ( (g_strcasecmp (id, "POSTNET-9") == 0) ) {
+               if (!is_length_valid (digits, 9)) {
+                       return NULL;
+               }
+       }
+       if ( (g_strcasecmp (id, "POSTNET-11") == 0) ) {
+               if (!is_length_valid (digits, 11)) {
+                       return NULL;
+               }
+       }
+       if ( (g_strcasecmp (id, "CEPNET") == 0) ) {
+               if (!is_length_valid (digits, 8)) {
+                       return NULL;
+               }
+       }
+
+       /* First get code string */
+       code = postnet_code (digits);
+       if (code == NULL) {
+               return NULL;
+       }
+
+       gbc = g_new0 (glBarcode, 1);
+
+       /* Now traverse the code string and create a list of lines */
+       x = POSTNET_HORIZ_MARGIN;
+       for (p = code; *p != 0; p++) {
+               line = g_new0 (glBarcodeLine, 1);
+               line->x = x;
+               line->y = POSTNET_VERT_MARGIN;
+               if (*p == '0') {
+                       line->y +=
+                           POSTNET_FULLBAR_HEIGHT - POSTNET_HALFBAR_HEIGHT;
+                       line->length = POSTNET_HALFBAR_HEIGHT;
+               } else {
+                       line->length = POSTNET_FULLBAR_HEIGHT;
+               }
+               line->width = POSTNET_BAR_WIDTH;
+
+               gbc->lines = g_list_append (gbc->lines, line);
+
+               x += POSTNET_BAR_PITCH;
+       }
+
+       g_free (code);
+
+       gbc->width = x + POSTNET_HORIZ_MARGIN;
+       gbc->height = POSTNET_FULLBAR_HEIGHT + 2 * POSTNET_VERT_MARGIN;
+
+       gbc->chars = NULL;
+
+       return gbc;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Generate string of symbols, representing barcode.              */
+/*--------------------------------------------------------------------------*/
+static gchar *
+postnet_code (const gchar *digits)
+{
+       gchar   *p;
+       gint     len;
+       gint     d, sum;
+       GString *code;
+       gchar   *ret;
+
+       /* Left frame bar */
+       code = g_string_new (frame_symbol);
+
+       sum = 0;
+       for (p = (gchar *)digits, len = 0; (*p != 0) && (len < 11); p++) {
+               if (g_ascii_isdigit (*p)) {
+                       /* Only translate valid characters (0-9) */
+                       d = (*p) - '0';
+                       sum += d;
+                       code = g_string_append (code, symbols[d]);
+                       len++;
+               }
+       }
+
+       /* Create correction character */
+       d = (10 - (sum % 10)) % 10;
+       code = g_string_append (code, symbols[d]);
+
+       /* Right frame bar */
+       code = g_string_append (code, frame_symbol);
+
+       ret = g_strdup (code->str);
+       g_string_free (code, TRUE);
+
+       return ret;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Validate specific length of string (for subtypes).                       */
+/*--------------------------------------------------------------------------*/
+static gboolean
+is_length_valid (const gchar *digits,
+                gint         n)
+{
+       gchar *p;
+       gint   i;
+
+       if (!digits) {
+               return FALSE;
+       }
+
+       for (p = (gchar *)digits, i=0; *p != 0; p++) {
+               if (g_ascii_isdigit (*p)) {
+                       i++;
+               }
+       }
+
+       return (i == n);
+}
+
diff --git a/src/bc-postnet.h b/src/bc-postnet.h
new file mode 100644 (file)
index 0000000..6e642ab
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  bc_postnet.h:  GLabels POSTNET barcode module header file
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __BC_POSTNET_H__
+#define __BC_POSTNET_H__
+
+#include "bc.h"
+
+G_BEGIN_DECLS
+
+glBarcode *gl_barcode_postnet_new (const gchar    *id,
+                                  gboolean        text_flag,
+                                  gboolean        checksum_flag,
+                                  gdouble         w,
+                                  gdouble         h,
+                                  const gchar    *digits);
+
+G_END_DECLS
+
+#endif /* __BC_POSTNET_H__ */
diff --git a/src/bc.c b/src/bc.c
new file mode 100644 (file)
index 0000000..bcb427f
--- /dev/null
+++ b/src/bc.c
@@ -0,0 +1,386 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  bc.c:  GLabels barcode module
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "bc.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+
+#include "bc-postnet.h"
+#include "bc-gnubarcode.h"
+#include "bc-iec16022.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+typedef struct {
+       gchar            *id;
+       gchar            *name;
+       glBarcodeNewFunc  new;
+       gboolean          can_text;
+       gboolean          text_optional;
+       gboolean          can_checksum;
+       gboolean          checksum_optional;
+       gchar            *default_digits;
+       gboolean          can_freeform;
+       guint             prefered_n;
+} Backend;
+
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+static const Backend backends[] = {
+
+       { "POSTNET", N_("POSTNET (any)"), gl_barcode_postnet_new,
+         FALSE, FALSE, TRUE, FALSE, "12345-6789-12", FALSE, 11},
+
+       { "POSTNET-5", N_("POSTNET-5 (ZIP only)"), gl_barcode_postnet_new,
+         FALSE, FALSE, TRUE, FALSE, "12345", FALSE, 5},
+
+       { "POSTNET-9", N_("POSTNET-9 (ZIP+4)"), gl_barcode_postnet_new,
+         FALSE, FALSE, TRUE, FALSE, "12345-6789", FALSE, 9},
+
+       { "POSTNET-11", N_("POSTNET-11 (DPBC)"), gl_barcode_postnet_new,
+         FALSE, FALSE, TRUE, FALSE, "12345-6789-12", FALSE, 11},
+
+       { "CEPNET", N_("CEPNET"), gl_barcode_postnet_new,
+         FALSE, FALSE, TRUE, FALSE, "12345-678", FALSE, 8},
+
+       { "EAN", N_("EAN (any)"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "000000000000 00000", FALSE, 17},
+
+       { "EAN-8", N_("EAN-8"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "0000000", FALSE, 7},
+
+       { "EAN-8+2", N_("EAN-8 +2"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "0000000 00", FALSE, 9},
+
+       { "EAN-8+5", N_("EAN-8 +5"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "0000000 00000", FALSE, 12},
+
+       { "EAN-13", N_("EAN-13"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "000000000000", FALSE, 12},
+
+       { "EAN-13+2", N_("EAN-13 +2"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "000000000000 00", FALSE, 14},
+
+       { "EAN-13+5", N_("EAN-13 +5"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "000000000000 00000", FALSE, 17},
+
+       { "UPC", N_("UPC (UPC-A or UPC-E)"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "00000000000 00000", FALSE, 16},
+
+       { "UPC-A", N_("UPC-A"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "00000000000", FALSE, 11},
+
+       { "UPC-A+2", N_("UPC-A +2"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "00000000000 00", FALSE, 13},
+
+       { "UPC-A+5", N_("UPC-A +5"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "00000000000 00000", FALSE, 16},
+
+       { "UPC-E", N_("UPC-E"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "000000", FALSE, 6},
+
+       { "UPC-E+2", N_("UPC-E +2"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "000000 00", FALSE, 8},
+
+       { "UPC-E+5", N_("UPC-E +5"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "000000 00000", FALSE, 11},
+
+       { "ISBN", N_("ISBN"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, TRUE, "0-00000-000-0", FALSE, 10},
+
+       { "ISBN+5", N_("ISBN +5"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, TRUE, "0-00000-000-0 00000", FALSE, 15},
+
+       { "Code39", N_("Code 39"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, TRUE, "0000000000", TRUE, 10},
+
+       { "Code128", N_("Code 128"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, TRUE, "0000000000", TRUE, 10},
+
+       { "Code128C", N_("Code 128C"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, FALSE, "0000000000", TRUE, 10},
+
+       { "Code128B", N_("Code 128B"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, TRUE, "0000000000", TRUE, 10},
+
+       { "I25", N_("Interleaved 2 of 5"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, TRUE, "0000000000", TRUE, 10},
+
+       { "CBR", N_("Codabar"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, TRUE, "0000000000", TRUE, 10},
+
+       { "MSI", N_("MSI"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, TRUE, "0000000000", TRUE, 10},
+
+       { "PLS", N_("Plessey"), gl_barcode_gnubarcode_new,
+         TRUE, TRUE, TRUE, TRUE, "0000000000", TRUE, 10},
+
+       { "IEC16022", N_("IEC16022 (DataMatrix)"), gl_barcode_iec16022_new,
+         FALSE, FALSE, TRUE, FALSE, "12345678", TRUE, 8},
+
+       { NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE, NULL, FALSE, 0}
+
+};
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+\f
+/*---------------------------------------------------------------------------*/
+/* Convert id to index into above table.                                     */
+/*---------------------------------------------------------------------------*/
+static gint
+id_to_index (const gchar *id)
+{
+       gint i;
+
+       if (id == 0) {
+               return 0; /* NULL request default. I.e., the first element. */
+       }
+
+       for (i=0; backends[i].id != NULL; i++) {
+               if (g_strcasecmp (id, backends[i].id) == 0) {
+                       return i;
+               }
+       }
+
+       g_message( "Unknown barcode id \"%s\"", id );
+       return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+/* Convert name to index into above table.                                   */
+/*---------------------------------------------------------------------------*/
+static gint
+name_to_index (const gchar *name)
+{
+       gint i;
+
+       g_return_val_if_fail (name!=NULL, 0);
+
+       for (i=0; backends[i].id != NULL; i++) {
+               if (g_strcasecmp (name, backends[i].name) == 0) {
+                       return i;
+               }
+       }
+
+       g_message( "Unknown barcode name \"%s\"", name );
+       return 0;
+}
+
+/*****************************************************************************/
+/* Call appropriate barcode backend to create barcode in intermediate format.*/
+/*****************************************************************************/
+glBarcode *
+gl_barcode_new (const gchar    *id,
+               gboolean        text_flag,
+               gboolean        checksum_flag,
+               gdouble         w,
+               gdouble         h,
+               const gchar    *digits)
+{
+       glBarcode *gbc;
+       gint       i;
+
+       g_return_val_if_fail (digits!=NULL, NULL);
+
+       i = id_to_index (id);
+       gbc = backends[i].new (backends[i].id,
+                              text_flag,
+                              checksum_flag,
+                              w,
+                              h,
+                              digits);
+
+       return gbc;
+}
+
+/*****************************************************************************/
+/* Free previously created barcode.                                          */
+/*****************************************************************************/
+void
+gl_barcode_free (glBarcode **gbc)
+{
+       GList *p;
+
+       if (*gbc != NULL) {
+
+               for (p = (*gbc)->lines; p != NULL; p = p->next) {
+                       g_free (p->data);
+                       p->data = NULL;
+               }
+               g_list_free ((*gbc)->lines);
+               (*gbc)->lines = NULL;
+
+               for (p = (*gbc)->chars; p != NULL; p = p->next) {
+                       g_free (p->data);
+                       p->data = NULL;
+               }
+               g_list_free ((*gbc)->chars);
+               (*gbc)->chars = NULL;
+
+               g_free (*gbc);
+               *gbc = NULL;
+       }
+}
+
+/*****************************************************************************/
+/* Get a list of names for valid barcode styles.                             */
+/*****************************************************************************/
+GList *
+gl_barcode_get_styles_list  (void)
+{
+       gint   i;
+       GList *list = NULL;
+
+       for (i=0; backends[i].id != NULL; i++) {
+               list = g_list_append (list, g_strdup (backends[i].name));
+       }
+
+       return list;
+}
+
+/*****************************************************************************/
+/* Free up a previously allocated list of style names.                       */
+/*****************************************************************************/
+void
+gl_barcode_free_styles_list (GList *styles_list)
+{
+       GList *p;
+
+       for (p=styles_list; p != NULL; p=p->next) {
+               g_free (p->data);
+               p->data = NULL;
+       }
+
+       g_list_free (styles_list);
+}
+
+
+/*****************************************************************************/
+/* Return an appropriate set of digits for the given barcode style.          */
+/*****************************************************************************/
+gchar *
+gl_barcode_default_digits (const gchar *id,
+                          guint        n)
+{
+       int i;
+
+       i = id_to_index (id);
+
+       if (backends[i].can_freeform) {
+
+               return g_strnfill (MAX (n,1), '0');
+
+       } else {
+
+               return g_strdup (backends[i].default_digits);
+
+       }
+}
+
+/*****************************************************************************/
+/* Query text capabilities.                                                  */
+/*****************************************************************************/
+gboolean
+gl_barcode_can_text (const gchar *id)
+{
+       return backends[id_to_index (id)].can_text;
+}
+
+gboolean
+gl_barcode_text_optional (const gchar *id)
+{
+       return backends[id_to_index (id)].text_optional;
+}
+
+/*****************************************************************************/
+/* Query checksum capabilities.                                              */
+/*****************************************************************************/
+gboolean
+gl_barcode_can_csum (const gchar *id)
+{
+       return backends[id_to_index (id)].can_checksum;
+}
+
+gboolean
+gl_barcode_csum_optional (const gchar *id)
+{
+       return backends[id_to_index (id)].checksum_optional;
+}
+
+
+/*****************************************************************************/
+/* Query if freeform input is allowed.                                       */
+/*****************************************************************************/
+gboolean
+gl_barcode_can_freeform     (const gchar    *id)
+{
+       return backends[id_to_index (id)].can_freeform;
+}
+
+/*****************************************************************************/
+/* Query prefered number of digits of input.                                 */
+/*****************************************************************************/
+guint
+gl_barcode_get_prefered_n (const gchar    *id)
+{
+       return backends[id_to_index (id)].prefered_n;
+}
+
+/*****************************************************************************/
+/* Convert style to text.                                                    */
+/*****************************************************************************/
+const gchar *
+gl_barcode_id_to_name (const gchar *id)
+{
+       return backends[id_to_index (id)].name;
+}
+
+/*****************************************************************************/
+/* Convert name to style.                                                    */
+/*****************************************************************************/
+const gchar *
+gl_barcode_name_to_id (const gchar *name)
+{
+       g_return_val_if_fail (name!=NULL, backends[0].id);
+
+       return backends[name_to_index (name)].id;
+}
diff --git a/src/bc.h b/src/bc.h
new file mode 100644 (file)
index 0000000..f46d889
--- /dev/null
+++ b/src/bc.h
@@ -0,0 +1,90 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  bc.h:  GLabels barcode module header file
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __BC_H__
+#define __BC_H__
+
+#include <glib/gtypes.h>
+#include <glib/glist.h>
+#include <pango/pango.h>
+
+G_BEGIN_DECLS
+
+typedef struct {
+       gdouble x, y, length, width;
+} glBarcodeLine;
+
+typedef struct {
+       gdouble x, y, fsize;
+       gchar c;
+} glBarcodeChar;
+
+typedef struct {
+       gdouble width, height;
+       GList *lines;           /* List of glBarcodeLine */
+       GList *chars;           /* List of glBarcodeChar */
+} glBarcode;
+
+typedef glBarcode *(*glBarcodeNewFunc) (const gchar    *id,
+                                       gboolean        text_flag,
+                                       gboolean        checksum_flag,
+                                       gdouble         w,
+                                       gdouble         h,
+                                       const gchar    *digits);
+
+
+#define GL_BARCODE_FONT_FAMILY      "Sans"
+#define GL_BARCODE_FONT_WEIGHT      PANGO_WEIGHT_NORMAL
+
+
+glBarcode       *gl_barcode_new              (const gchar    *id,
+                                             gboolean        text_flag,
+                                             gboolean        checksum_flag,
+                                             gdouble         w,
+                                             gdouble         h,
+                                             const gchar    *digits);
+
+void             gl_barcode_free             (glBarcode     **bc);
+
+GList           *gl_barcode_get_styles_list  (void);
+void             gl_barcode_free_styles_list (GList          *styles_list);
+
+gchar           *gl_barcode_default_digits   (const gchar    *id,
+                                             guint            n);
+
+gboolean         gl_barcode_can_text         (const gchar    *id);
+gboolean         gl_barcode_text_optional    (const gchar    *id);
+
+gboolean         gl_barcode_can_csum         (const gchar    *id);
+gboolean         gl_barcode_csum_optional    (const gchar    *id);
+
+gboolean         gl_barcode_can_freeform     (const gchar    *id);
+guint            gl_barcode_get_prefered_n   (const gchar    *id);
+
+const gchar     *gl_barcode_id_to_name       (const gchar    *id);
+const gchar     *gl_barcode_name_to_id       (const gchar    *name);
+
+G_END_DECLS
+
+#endif /* __BC_H__ */
+
diff --git a/src/cairo-ellipse-path.c b/src/cairo-ellipse-path.c
new file mode 100644 (file)
index 0000000..3a4cb88
--- /dev/null
@@ -0,0 +1,79 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  cairo_ellipse_path.c:  Cairo ellipse path module
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "cairo-ellipse-path.h"
+
+#include <math.h>
+#include <glib.h>
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros and constants.             */
+/*===========================================*/
+
+#define ARC_FINE   2
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+
+\f
+/*****************************************************************************/
+/* Create ellipse path                                                       */
+/*****************************************************************************/
+void
+gl_cairo_ellipse_path (cairo_t           *cr,
+                       gdouble            rx,
+                       gdouble            ry)
+{
+        gdouble x, y;
+        gint i_theta;
+
+        gl_debug (DEBUG_VIEW, "START");
+
+        cairo_new_path (cr);
+        cairo_move_to (cr, 2*rx, ry);
+        for (i_theta = ARC_FINE; i_theta <= 360; i_theta += ARC_FINE) {
+                x = rx + rx * cos (i_theta * G_PI / 180.0);
+                y = ry + ry * sin (i_theta * G_PI / 180.0);
+                cairo_line_to (cr, x, y);
+        }
+        cairo_close_path (cr);
+
+        gl_debug (DEBUG_VIEW, "END");
+}
+
+
diff --git a/src/cairo-ellipse-path.h b/src/cairo-ellipse-path.h
new file mode 100644 (file)
index 0000000..3c6a756
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  cairo_ellipse_path.h:  Cairo ellipse path module header file
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __CAIRO_ELLIPSE_PATH_H__
+#define __CAIRO_ELLIPSE_PATH_H__
+
+#include <glib.h>
+#include <cairo.h>
+
+G_BEGIN_DECLS
+
+void gl_cairo_ellipse_path (cairo_t  *cr,
+                            gdouble   rx,
+                            gdouble   ry);
+
+
+G_END_DECLS
+
+#endif
diff --git a/src/cairo-label-path.c b/src/cairo-label-path.c
new file mode 100644 (file)
index 0000000..7f8f61f
--- /dev/null
@@ -0,0 +1,264 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  cairo_label_path.c:  Cairo label path module
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "cairo-label-path.h"
+
+#include <math.h>
+#include <glib.h>
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void gl_cairo_rect_label_path             (cairo_t                *cr,
+                                                  lglTemplate            *template,
+                                                  gboolean                rotate_flag,
+                                                  gboolean                waste_flag);
+static void gl_cairo_round_label_path            (cairo_t                *cr,
+                                                  lglTemplate            *template,
+                                                  gboolean                rotate_flag,
+                                                  gboolean                waste_flag);
+static void gl_cairo_cd_label_path               (cairo_t                *cr,
+                                                  lglTemplate            *template,
+                                                  gboolean                rotate_flag,
+                                                  gboolean                waste_flag);
+
+\f
+/*--------------------------------------------------------------------------*/
+/* Create label path                                                        */
+/*--------------------------------------------------------------------------*/
+void
+gl_cairo_label_path (cairo_t           *cr,
+                     lglTemplate       *template,
+                     gboolean           rotate_flag,
+                     gboolean           waste_flag)
+{
+        const lglTemplateFrame *frame;
+
+        gl_debug (DEBUG_PATH, "START");
+
+        frame = (lglTemplateFrame *)template->frames->data;
+
+        switch (frame->shape) {
+
+        case LGL_TEMPLATE_FRAME_SHAPE_RECT:
+                gl_cairo_rect_label_path (cr, template, rotate_flag, waste_flag);
+                break;
+
+        case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
+                gl_cairo_round_label_path (cr, template, rotate_flag, waste_flag);
+                break;
+
+        case LGL_TEMPLATE_FRAME_SHAPE_CD:
+                gl_cairo_cd_label_path (cr, template, rotate_flag, waste_flag);
+                break;
+
+        default:
+                g_message ("Unknown label style");
+                break;
+        }
+
+        gl_debug (DEBUG_PATH, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Create rectangular label path                                            */
+/*--------------------------------------------------------------------------*/
+static void
+gl_cairo_rect_label_path (cairo_t           *cr,
+                          lglTemplate       *template,
+                          gboolean           rotate_flag,
+                          gboolean           waste_flag)
+{
+        const lglTemplateFrame *frame;
+        gdouble                 w, h, r;
+        gdouble                 x_waste, y_waste;
+
+        gl_debug (DEBUG_PATH, "START");
+
+        frame = (lglTemplateFrame *)template->frames->data;
+        r = frame->rect.r;
+
+        x_waste = 0.0;
+        y_waste = 0.0;
+
+        if (rotate_flag)
+        {
+                lgl_template_frame_get_size (frame, &h, &w);
+                if (waste_flag)
+                {
+                        x_waste = frame->rect.y_waste;
+                        y_waste = frame->rect.x_waste;
+                }
+        }
+        else
+        {
+                lgl_template_frame_get_size (frame, &w, &h);
+                if (waste_flag)
+                {
+                        x_waste = frame->rect.x_waste;
+                        y_waste = frame->rect.y_waste;
+                }
+        }
+
+
+        if ( r == 0.0 )
+        {
+                cairo_rectangle (cr, -x_waste, -y_waste, w+x_waste, h+y_waste);
+        }
+        else
+        {
+                cairo_new_path (cr);
+                cairo_arc_negative (cr, r-x_waste,   r-y_waste,   r, 3*G_PI/2, G_PI);
+                cairo_arc_negative (cr, r-x_waste,   h-r+y_waste, r, G_PI,     G_PI/2);
+                cairo_arc_negative (cr, w-r+x_waste, h-r+y_waste, r, G_PI/2,   0.);
+                cairo_arc_negative (cr, w-r+x_waste, r-y_waste,   r, 2*G_PI,   3*G_PI/2);
+                cairo_close_path (cr);
+        }
+
+        gl_debug (DEBUG_PATH, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Create round label path                                                  */
+/*--------------------------------------------------------------------------*/
+static void
+gl_cairo_round_label_path (cairo_t           *cr,
+                           lglTemplate       *template,
+                           gboolean           rotate_flag,
+                           gboolean           waste_flag)
+{
+        const lglTemplateFrame *frame;
+        gdouble                 w, h;
+        gdouble                 waste;
+
+        gl_debug (DEBUG_PATH, "START");
+
+        frame = (lglTemplateFrame *)template->frames->data;
+        
+        if (rotate_flag)
+        {
+                lgl_template_frame_get_size (frame, &h, &w);
+        }
+        else
+        {
+                lgl_template_frame_get_size (frame, &w, &h);
+        }
+
+        if (waste_flag)
+        {
+                waste = frame->round.waste;
+        }
+        else
+        {
+                waste = 0.0;
+        }
+
+       cairo_new_path (cr);
+        cairo_arc (cr, w/2, h/2, w/2+waste, 0.0, 2*G_PI);
+       cairo_close_path (cr);
+
+        gl_debug (DEBUG_PATH, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Create cd label path                                                     */
+/*--------------------------------------------------------------------------*/
+static void
+gl_cairo_cd_label_path (cairo_t           *cr,
+                        lglTemplate       *template,
+                        gboolean           rotate_flag,
+                        gboolean           waste_flag)
+{
+        const lglTemplateFrame *frame;
+        gdouble                 w, h;
+        gdouble                 xc, yc;
+        gdouble                 r1, r2;
+       gdouble                 theta1, theta2;
+        gdouble                 waste;
+
+        gl_debug (DEBUG_PATH, "START");
+
+        frame = (lglTemplateFrame *)template->frames->data;
+
+        if (rotate_flag)
+        {
+                lgl_template_frame_get_size (frame, &h, &w);
+        }
+        else
+        {
+                lgl_template_frame_get_size (frame, &w, &h);
+        }
+
+        xc = w/2.0;
+        yc = h/2.0;
+
+        r1 = frame->cd.r1;
+        r2 = frame->cd.r2;
+
+        if (waste_flag)
+        {
+                waste = frame->cd.waste;
+        }
+        else
+        {
+                waste = 0.0;
+        }
+
+       /*
+        * Outer path (may be clipped in the case of a business card type CD)
+        */
+       theta1 = acos (w / (2.0*r1));
+       theta2 = asin (h / (2.0*r1));
+
+       cairo_new_path (cr);
+       cairo_arc (cr, xc, yc, r1+waste, theta1, theta2);
+       cairo_arc (cr, xc, yc, r1+waste, G_PI-theta2, G_PI-theta1);
+       cairo_arc (cr, xc, yc, r1+waste, G_PI+theta1, G_PI+theta2);
+       cairo_arc (cr, xc, yc, r1+waste, 2*G_PI-theta2, 2*G_PI-theta1);
+       cairo_close_path (cr);
+
+
+        /*
+         * Inner path (hole)
+         */
+       cairo_new_sub_path (cr);
+        cairo_arc (cr, xc, yc, r2-waste, 0.0, 2*G_PI);
+       cairo_close_path (cr);
+
+        gl_debug (DEBUG_PATH, "END");
+}
+
diff --git a/src/cairo-label-path.h b/src/cairo-label-path.h
new file mode 100644 (file)
index 0000000..ad0495f
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  cairo_label_path.h:  Cairo label path module header file
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __CAIRO_LABEL_PATH_H__
+#define __CAIRO_LABEL_PATH_H__
+
+#include <cairo.h>
+#include <libglabels/template.h>
+
+G_BEGIN_DECLS
+
+void gl_cairo_label_path (cairo_t                *cr,
+                          lglTemplate            *template,
+                          gboolean                rotate_flag,
+                          gboolean                waste_flag);
+
+G_END_DECLS
+
+#endif
diff --git a/src/cairo-markup-path.c b/src/cairo-markup-path.c
new file mode 100644 (file)
index 0000000..04a2a68
--- /dev/null
@@ -0,0 +1,315 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  cairo_markup_path.c:  Cairo markup path module
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "cairo-markup-path.h"
+
+#include <math.h>
+#include <glib.h>
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void       gl_cairo_markup_margin_path         (cairo_t                 *cr,
+                                                       const lglTemplateMarkup *markup,
+                                                       glLabel                 *label);
+
+static void       gl_cairo_markup_margin_rect_path    (cairo_t                 *cr,
+                                                       const lglTemplateMarkup *markup,
+                                                       glLabel                 *label);
+
+static void       gl_cairo_markup_margin_round_path   (cairo_t                 *cr,
+                                                       const lglTemplateMarkup *markup,
+                                                       glLabel                 *label);
+
+static void       gl_cairo_markup_margin_cd_path      (cairo_t                 *cr,
+                                                       const lglTemplateMarkup *markup,
+                                                       glLabel                 *label);
+
+static void       gl_cairo_markup_line_path           (cairo_t                 *cr,
+                                                       const lglTemplateMarkup *markup);
+
+static void       gl_cairo_markup_circle_path         (cairo_t                 *cr,
+                                                       const lglTemplateMarkup *markup);
+
+static void       gl_cairo_markup_rect_path           (cairo_t                 *cr,
+                                                       const lglTemplateMarkup *markup);
+
+\f
+/*--------------------------------------------------------------------------*/
+/* Create markup path                                                       */
+/*--------------------------------------------------------------------------*/
+void
+gl_cairo_markup_path (cairo_t                 *cr,
+                      const lglTemplateMarkup *markup,
+                      glLabel                 *label)
+{
+        gl_debug (DEBUG_PATH, "START");
+
+        switch (markup->type) {
+        case LGL_TEMPLATE_MARKUP_MARGIN:
+                gl_cairo_markup_margin_path (cr, markup, label);
+                break;
+        case LGL_TEMPLATE_MARKUP_LINE:
+                gl_cairo_markup_line_path (cr, markup);
+                break;
+        case LGL_TEMPLATE_MARKUP_CIRCLE:
+                gl_cairo_markup_circle_path (cr, markup);
+                break;
+        case LGL_TEMPLATE_MARKUP_RECT:
+                gl_cairo_markup_rect_path (cr, markup);
+                break;
+        default:
+                g_message ("Unknown template markup type");
+                break;
+        }
+
+        gl_debug (DEBUG_PATH, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw margin markup.                                             */
+/*---------------------------------------------------------------------------*/
+static void
+gl_cairo_markup_margin_path (cairo_t                *cr,
+                             const lglTemplateMarkup *markup,
+                             glLabel                *label)
+{
+       const lglTemplateFrame *frame;
+
+        gl_debug (DEBUG_PATH, "START");
+
+        frame = (lglTemplateFrame *)label->template->frames->data;
+
+        switch (frame->shape) {
+
+        case LGL_TEMPLATE_FRAME_SHAPE_RECT:
+                gl_cairo_markup_margin_rect_path (cr, markup, label);
+                break;
+
+        case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
+                gl_cairo_markup_margin_round_path (cr, markup, label);
+                break;
+
+        case LGL_TEMPLATE_FRAME_SHAPE_CD:
+                gl_cairo_markup_margin_cd_path (cr, markup, label);
+                break;
+
+        default:
+                g_message ("Unknown template label style");
+                break;
+        }
+
+        gl_debug (DEBUG_PATH, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw simple recangular margin.                                  */
+/*---------------------------------------------------------------------------*/
+static void
+gl_cairo_markup_margin_rect_path (cairo_t                 *cr,
+                                  const lglTemplateMarkup *markup,
+                                  glLabel                 *label)
+{
+        const lglTemplateFrame *frame;
+        gdouble                 w, h, r, m;
+
+        gl_debug (DEBUG_PATH, "START");
+
+        frame = (lglTemplateFrame *)label->template->frames->data;
+
+        m = markup->margin.size;
+
+        lgl_template_frame_get_size (frame, &w, &h);
+       w = w - 2*m;
+       h = h - 2*m;
+        r = MAX (frame->rect.r - m, 0.0);
+
+        if ( r == 0.0 )
+        {
+                cairo_rectangle (cr, m, m, w, h);
+        }
+        else
+        {
+                cairo_new_path (cr);
+                cairo_arc_negative (cr, m+r,   m+r,   r, 3*G_PI/2, G_PI);
+                cairo_arc_negative (cr, m+r,   m+h-r, r, G_PI,     G_PI/2);
+                cairo_arc_negative (cr, m+w-r, m+h-r, r, G_PI/2,   0.);
+                cairo_arc_negative (cr, m+w-r, m+r,   r, 2*G_PI,   3*G_PI/2);
+                cairo_close_path (cr);
+        }
+
+        gl_debug (DEBUG_PATH, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw round margin.                                              */
+/*---------------------------------------------------------------------------*/
+static void
+gl_cairo_markup_margin_round_path (cairo_t                 *cr,
+                                   const lglTemplateMarkup *markup,
+                                   glLabel                 *label)
+{
+       const lglTemplateFrame *frame;
+       gdouble                 r, m;
+
+       gl_debug (DEBUG_PATH, "START");
+
+        frame = (lglTemplateFrame *)label->template->frames->data;
+
+       r = frame->round.r;
+       m = markup->margin.size;
+
+        cairo_arc (cr, r, r, r-m, 0, 2*G_PI);
+        cairo_close_path (cr);
+
+       gl_debug (DEBUG_PATH, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw CD margins.                                                */
+/*---------------------------------------------------------------------------*/
+static void
+gl_cairo_markup_margin_cd_path (cairo_t                 *cr,
+                                const lglTemplateMarkup *markup,
+                                glLabel                 *label)
+{
+       const lglTemplateFrame *frame;
+       gdouble                 m, r1, r2;
+       gdouble                 theta1, theta2;
+       gdouble                 xc, yc;
+       gdouble                 w, h;
+
+       gl_debug (DEBUG_PATH, "START");
+
+        frame = (lglTemplateFrame *)label->template->frames->data;
+
+        lgl_template_frame_get_size (frame, &w, &h);
+        xc = w/2.0;
+        yc = h/2.0;
+
+       m  = markup->margin.size;
+        r1 = frame->cd.r1 - m;
+        r2 = frame->cd.r2 + m;
+
+
+        /*
+         * Outer path (may be clipped)
+         */
+        theta1 = acos ((w-2*m) / (2.0*r1));
+        theta2 = asin ((h-2*m) / (2.0*r1));
+
+        cairo_new_path (cr);
+        cairo_arc (cr, xc, yc, r1, theta1, theta2);
+        cairo_arc (cr, xc, yc, r1, G_PI-theta2, G_PI-theta1);
+        cairo_arc (cr, xc, yc, r1, G_PI+theta1, G_PI+theta2);
+        cairo_arc (cr, xc, yc, r1, 2*G_PI-theta2, 2*G_PI-theta1);
+        cairo_close_path (cr);
+
+
+        /* Inner path (hole) */
+        cairo_new_sub_path (cr);
+        cairo_arc (cr, xc, yc, r2, 0.0, 2*G_PI);
+        cairo_close_path (cr);
+
+       gl_debug (DEBUG_PATH, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw line markup.                                               */
+/*---------------------------------------------------------------------------*/
+static void
+gl_cairo_markup_line_path (cairo_t                 *cr,
+                           const lglTemplateMarkup *markup)
+{
+       gl_debug (DEBUG_PATH, "START");
+
+        cairo_move_to (cr, markup->line.x1, markup->line.y1);
+        cairo_line_to (cr, markup->line.x2, markup->line.y2);
+
+       gl_debug (DEBUG_PATH, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw circle markup.                                             */
+/*---------------------------------------------------------------------------*/
+static void
+gl_cairo_markup_circle_path (cairo_t                 *cr,
+                             const lglTemplateMarkup *markup)
+{
+       gl_debug (DEBUG_PATH, "START");
+
+        cairo_arc (cr,
+                   markup->circle.x0, markup->circle.y0,
+                   markup->circle.r,
+                   0.0, 2*G_PI);
+        cairo_close_path (cr);
+
+       gl_debug (DEBUG_PATH, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw rect markup.                                               */
+/*---------------------------------------------------------------------------*/
+static void
+gl_cairo_markup_rect_path (cairo_t                 *cr,
+                           const lglTemplateMarkup *markup)
+{
+        gdouble x1 = markup->rect.x1;
+        gdouble y1 = markup->rect.y1;
+        gdouble w  = markup->rect.w;
+        gdouble h  = markup->rect.h;
+        gdouble r  = markup->rect.r;
+
+       gl_debug (DEBUG_PATH, "START");
+
+        if ( r == 0.0 )
+        {
+                cairo_rectangle (cr, x1, y1, w, h);
+        }
+        else
+        {
+                cairo_new_path (cr);
+                cairo_arc_negative (cr, x1+r,   y1+r,   r, 3*G_PI/2, G_PI);
+                cairo_arc_negative (cr, x1+r,   y1+h-r, r, G_PI,     G_PI/2);
+                cairo_arc_negative (cr, x1+w-r, y1+h-r, r, G_PI/2,   0.);
+                cairo_arc_negative (cr, x1+w-r, y1+r,   r, 2*G_PI,   3*G_PI/2);
+                cairo_close_path (cr);
+        }
+
+       gl_debug (DEBUG_PATH, "END");
+}
+
diff --git a/src/cairo-markup-path.h b/src/cairo-markup-path.h
new file mode 100644 (file)
index 0000000..9dfab55
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  cairo_markup_path.h:  Cairo markup path module header file
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __CAIRO_MARKUP_PATH_H__
+#define __CAIRO_MARKUP_PATH_H__
+
+#include <cairo.h>
+#include <libglabels/template.h>
+#include "label.h"
+
+G_BEGIN_DECLS
+
+void gl_cairo_markup_path (cairo_t                 *cr,
+                           const lglTemplateMarkup *markup,
+                           glLabel                 *label);
+
+G_END_DECLS
+
+#endif
diff --git a/src/color.c b/src/color.c
new file mode 100644 (file)
index 0000000..e4bf3bd
--- /dev/null
@@ -0,0 +1,249 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  color.c:  various small utilities for dealing with canvas colors
+ *
+ *  Copyright (C) 2002-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "color.h"
+
+#include <string.h>
+
+/*****************************************************************************/
+/* Apply given opacity to given color.                                       */
+/*****************************************************************************/
+guint
+gl_color_set_opacity (guint   color,
+                      gdouble opacity)
+{
+        guint new_color;
+
+        new_color = (color & 0xFFFFFF00) | (((guint)(255.0*opacity)) & 0xFF);
+
+        return new_color;
+}
+
+/*****************************************************************************/
+/* Resolve actual shadow color by adjusting opacity.                         */
+/*****************************************************************************/
+guint
+gl_color_shadow (guint   base_color,
+                 gdouble opacity,
+                 guint   object_color)
+{
+        guint color;
+
+        color = gl_color_set_opacity (base_color,
+                                      opacity * GL_COLOR_F_ALPHA (object_color));
+
+        return color;
+}
+
+/*****************************************************************************/
+/* Convert gLabels color into a GdkColor                                     */
+/*****************************************************************************/
+GdkColor *
+gl_color_to_gdk_color (guint color)
+{
+        GdkColor *gdk_color = NULL;
+
+        if ( GL_COLOR_F_ALPHA (color) )
+        {
+                gdk_color = g_new0 (GdkColor, 1);
+
+                gdk_color->red   = GL_COLOR_F_RED   (color) * 65535;
+                gdk_color->green = GL_COLOR_F_GREEN (color) * 65535;
+                gdk_color->blue  = GL_COLOR_F_BLUE  (color) * 65535;
+        }
+
+        return gdk_color;
+}
+
+/*****************************************************************************/
+/* Convert GdkColor into a gLabels color                                     */
+/*****************************************************************************/
+guint
+gl_color_from_gdk_color (GdkColor *gdk_color)
+{
+        guint color = GL_COLOR_NONE;
+
+        if ( gdk_color )
+        {
+                color = GL_COLOR ((gdk_color->red   >>8),
+                                  (gdk_color->green >>8),
+                                  (gdk_color->blue  >>8));
+        }
+
+        return color;
+}
+
+/****************************************************************************/
+/* Create a single color node with default color.                           */
+/****************************************************************************/
+glColorNode *
+gl_color_node_new_default (void)
+{
+        glColorNode* color_node;
+        
+        color_node = g_new0(glColorNode,1);
+        
+        color_node->field_flag = FALSE;
+        color_node->color = GL_COLOR_NONE;
+        color_node->key = NULL;
+
+        return color_node;
+}
+
+/****************************************************************************/
+/* Copy a single color node.                                                 */
+/****************************************************************************/
+glColorNode *
+gl_color_node_dup (glColorNode *src)
+{
+        glColorNode *dst;
+
+        if ( src == NULL ) return NULL;
+
+        dst = g_new0 (glColorNode, 1);
+
+        dst->field_flag = src->field_flag;
+        if (src->key != NULL)
+        {
+                dst->key = g_strdup (src->key);
+        }
+        else
+        {
+                dst->key = NULL;
+        }
+        dst->color = src->color;
+
+        return dst;
+}
+
+/****************************************************************************/
+/* Compare 2 color nodes for equality.                                       */
+/****************************************************************************/
+gboolean
+gl_color_node_equal (glColorNode     *color_node1,
+                     glColorNode     *color_node2)
+{
+        /* First take care of the case of either or both being NULL. */
+        if ( color_node1 == NULL )
+        {
+                return ( color_node2 == NULL );
+        }
+        else
+        {
+                if ( color_node2 == NULL )
+                {
+                        return FALSE;
+                }
+        }
+
+        /* Bail if field flags differ. */
+        if ( color_node1->field_flag != color_node2->field_flag )
+        {
+                return FALSE;
+        }
+
+        /* Now take care of the case of either or both color fields being different. */
+        if ( color_node1->color != color_node2->color )
+        {
+                return FALSE;
+        }
+        
+        /* Then take care of the case of either or both key fields being NULL. */
+        if ( color_node1->key == NULL )
+        {
+                return ( color_node2->key == NULL );
+        }
+        else
+        {
+                if ( color_node2->key == NULL )
+                {
+                        return FALSE;
+                }
+        }
+
+        /* Field flags are identical, so now compare the keys. */
+        return (strcmp (color_node1->key, color_node2->key) == 0);
+}
+
+/****************************************************************************/
+/* Expand single node into representative color.                            */
+/****************************************************************************/
+guint
+gl_color_node_expand (glColorNode    *color_node,
+                      glMergeRecord  *record)
+{
+        gchar    *text;
+        GdkColor *gdk_color;
+        guint     color;
+
+        if (color_node->field_flag)
+        {
+                if (record == NULL)
+                {
+                        return GL_COLOR_NONE;
+                }
+                else
+                {
+                        text = gl_merge_eval_key (record, color_node->key);
+                        if (text != NULL)
+                        {
+                                gdk_color = g_new0 (GdkColor, 1);
+                                if (gdk_color_parse (text, gdk_color))
+                                {
+                                        color = gl_color_from_gdk_color (gdk_color);
+                                        g_free (gdk_color);
+                                        return color;
+                                }
+                                else
+                                {
+                                        g_free (gdk_color);
+                                        return GL_COLOR_NONE;
+                                }
+                        }
+                        else
+                        {
+                                return GL_COLOR_NONE;
+                        }
+                }
+        }
+        else
+        {
+                return color_node->color;
+        }
+}
+
+/****************************************************************************/
+/* Free a single color node.                                                */
+/****************************************************************************/
+void
+gl_color_node_free (glColorNode **color_node)
+{
+        if ( *color_node == NULL ) return;
+
+        g_free ((*color_node)->key);
+        (*color_node)->key = NULL;
+        g_free (*color_node);
+        *color_node = NULL;
+}
diff --git a/src/color.h b/src/color.h
new file mode 100644 (file)
index 0000000..c4403ad
--- /dev/null
@@ -0,0 +1,119 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  color.h:  various small utilities for dealing with canvas colors
+ *
+ *  Copyright (C) 2002-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __COLOR_H__
+#define __COLOR_H__
+
+#include "merge.h"
+#include <gdk/gdkcolor.h>
+
+G_BEGIN_DECLS
+
+/*
+ * gLabels stores colors as a 32-bit unsigned integer in RGBA format (MSByte = Red)
+ */
+#define GL_COLOR(r,g,b)     (  (((unsigned int) (r) & 0xff) << 24) \
+                             | (((unsigned int) (g) & 0xff) << 16) \
+                             | (((unsigned int) (b) & 0xff) << 8)  \
+                             | 0xff )
+
+#define GL_COLOR_A(r,g,b,a) (  (((unsigned int) (r) & 0xff) << 24) \
+                             | (((unsigned int) (g) & 0xff) << 16) \
+                             | (((unsigned int) (b) & 0xff) << 8)  \
+                             | ( (unsigned int) (a) & 0xff ) )
+
+
+#define GL_COLOR_NONE                  GL_COLOR_A(0,0,0,0)
+#define GL_COLOR_FILL_MERGE_DEFAULT    GL_COLOR_A(255,255,255,128)
+#define GL_COLOR_MERGE_DEFAULT         GL_COLOR_A(0,0,0,128)
+#define GL_COLOR_SHADOW_DEFAULT        GL_COLOR(0,0,0)
+#define GL_COLOR_SHADOW_MERGE_DEFAULT  GL_COLOR_A(0,0,0,255)
+
+
+/*
+ * Extract components as floating point (0.0 .. 1.0)
+ */
+#define GL_COLOR_F_RED(x)   ( (((x)>>24) & 0xff) / 255.0 )
+#define GL_COLOR_F_GREEN(x) ( (((x)>>16) & 0xff) / 255.0 )
+#define GL_COLOR_F_BLUE(x)  ( (((x)>>8)  & 0xff) / 255.0 )
+#define GL_COLOR_F_ALPHA(x) ( ( (x)      & 0xff) / 255.0 )
+
+/*
+ * Extract arguments for cairo_set_source_rgb()
+ */
+#define GL_COLOR_RGB_ARGS(x)  \
+        GL_COLOR_F_RED(x),    \
+        GL_COLOR_F_GREEN(x),  \
+        GL_COLOR_F_BLUE(x)
+
+/*
+ * Extract arguments for cairo_set_source_rgba()
+ */
+#define GL_COLOR_RGBA_ARGS(x) \
+        GL_COLOR_F_RED(x),    \
+        GL_COLOR_F_GREEN(x),  \
+        GL_COLOR_F_BLUE(x),   \
+        GL_COLOR_F_ALPHA(x)
+
+                
+
+
+guint     gl_color_set_opacity            (guint            color,
+                                          gdouble          opacity);
+
+guint     gl_color_shadow                 (guint            base_color,
+                                          gdouble          opacity,
+                                          guint            object_color);
+
+/*
+ * Routines to convert to/from GdkColor.
+ */
+GdkColor *gl_color_to_gdk_color           (guint            color);
+
+guint     gl_color_from_gdk_color         (GdkColor        *gdk_color);
+
+
+
+/*
+ * Color nodes
+ */
+typedef struct {
+        gboolean field_flag;
+        guint color;
+        gchar *key;
+} glColorNode;
+
+glColorNode *gl_color_node_new_default    (void);
+
+glColorNode *gl_color_node_dup            (glColorNode     *color_node);
+gboolean     gl_color_node_equal          (glColorNode     *color_node1,
+                                           glColorNode     *color_node2);
+guint        gl_color_node_expand         (glColorNode     *color_node,
+                                           glMergeRecord   *record);
+void         gl_color_node_free           (glColorNode    **color_node);
+
+
+G_END_DECLS
+
+#endif /* __COLOR_H__ */
diff --git a/src/critical-error-handler.c b/src/critical-error-handler.c
new file mode 100644 (file)
index 0000000..69a8866
--- /dev/null
@@ -0,0 +1,83 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  critical-error-handler.c:  critical error handler
+ *
+ *  Copyright (C) 2005  Jim Evins <evins@snaught.com>.
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include <config.h>
+
+#include "critical-error-handler.h"
+
+#include <glib/gmessages.h>
+#include <glib/gi18n.h>
+#include <gtk/gtkmessagedialog.h>
+#include <gtk/gtkstock.h>
+#include <stdlib.h>
+
+static void critical_error_handler (const gchar    *log_domain,
+                                    GLogLevelFlags  log_level,
+                                    const gchar    *message,
+                                    gpointer        user_data);
+
+\f
+/***************************************************************************/
+/* Initialize error handler.                                               */
+/***************************************************************************/
+void
+gl_critical_error_handler_init (void)
+{
+        g_log_set_handler ("LibGlabels",
+                           G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
+                           critical_error_handler,
+                           "libglabels");
+
+        g_log_set_handler (G_LOG_DOMAIN,
+                           G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
+                           critical_error_handler,
+                           "glabels");
+}
+
+/*-------------------------------------------------------------------------*/
+/* PRIVATE.  Actual error handler.                                         */
+/*-------------------------------------------------------------------------*/
+static void
+critical_error_handler (const gchar    *log_domain,
+                        GLogLevelFlags  log_level,
+                        const gchar    *message,
+                        gpointer        user_data)
+{
+        GtkWidget *dialog;
+
+        dialog = gtk_message_dialog_new (NULL,
+                                         GTK_DIALOG_MODAL,
+                                         GTK_MESSAGE_ERROR,
+                                         GTK_BUTTONS_NONE,
+                                         _("gLabels Fatal Error!"));
+        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+                                                  "%s", message);
+        gtk_dialog_add_button (GTK_DIALOG (dialog),
+                               GTK_STOCK_QUIT, 0);
+
+        gtk_dialog_run (GTK_DIALOG (dialog));
+
+        abort ();
+}
+
diff --git a/src/critical-error-handler.h b/src/critical-error-handler.h
new file mode 100644 (file)
index 0000000..890db9b
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  critical-error-handler.h:  critical error handler header file
+ *
+ *  Copyright (C) 2005  Jim Evins <evins@snaught.com>.
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef __CRITICAL_ERROR_HANDLER_H__
+#define __CRITICAL_ERROR_HANDLER_H__
+
+#include <glib/gmacros.h>
+
+G_BEGIN_DECLS
+
+void gl_critical_error_handler_init (void);
+
+G_END_DECLS
+
+#endif
diff --git a/src/debug.c b/src/debug.c
new file mode 100644 (file)
index 0000000..eea3fe5
--- /dev/null
@@ -0,0 +1,129 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  debug.c:  GLabels debug module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+/*
+ * This file is based on gedit-debug.c from gedit2:
+ *
+ * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
+ * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi 
+ *
+ */
+
+#include "debug.h"
+
+#include <glib/gutils.h>
+#include <glib/gmessages.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmem.h>
+
+glDebugSection debug_flags = GLABELS_DEBUG_NONE;
+
+/****************************************************************************/
+/* Initialize debug flags, based on environmental variables.                */
+/****************************************************************************/
+void
+gl_debug_init (void)
+{
+       if (g_getenv ("GLABELS_DEBUG") != NULL)
+       {
+               /* enable all debugging */
+               debug_flags = ~GLABELS_DEBUG_NONE;
+               return;
+       }
+
+       if (g_getenv ("GLABELS_DEBUG_VIEW") != NULL)
+               debug_flags |= GLABELS_DEBUG_VIEW;
+       if (g_getenv ("GLABELS_DEBUG_ITEM") != NULL)
+               debug_flags |= GLABELS_DEBUG_ITEM;
+       if (g_getenv ("GLABELS_DEBUG_PRINT") != NULL)
+               debug_flags |= GLABELS_DEBUG_PRINT;
+       if (g_getenv ("GLABELS_DEBUG_PREFS") != NULL)
+               debug_flags |= GLABELS_DEBUG_PREFS;
+       if (g_getenv ("GLABELS_DEBUG_FILE") != NULL)
+               debug_flags |= GLABELS_DEBUG_FILE;
+       if (g_getenv ("GLABELS_DEBUG_LABEL") != NULL)
+               debug_flags |= GLABELS_DEBUG_LABEL;
+       if (g_getenv ("GLABELS_DEBUG_TEMPLATE") != NULL)
+               debug_flags |= GLABELS_DEBUG_TEMPLATE;
+       if (g_getenv ("GLABELS_DEBUG_PAPER") != NULL)
+               debug_flags |= GLABELS_DEBUG_PAPER;
+       if (g_getenv ("GLABELS_DEBUG_XML") != NULL)
+               debug_flags |= GLABELS_DEBUG_XML;
+       if (g_getenv ("GLABELS_DEBUG_MERGE") != NULL)
+               debug_flags |= GLABELS_DEBUG_MERGE;
+       if (g_getenv ("GLABELS_DEBUG_UNDO") != NULL)
+               debug_flags |= GLABELS_DEBUG_UNDO;
+       if (g_getenv ("GLABELS_DEBUG_RECENT") != NULL)
+               debug_flags |= GLABELS_DEBUG_RECENT;
+       if (g_getenv ("GLABELS_DEBUG_COMMANDS") != NULL)
+               debug_flags |= GLABELS_DEBUG_COMMANDS;
+       if (g_getenv ("GLABELS_DEBUG_WINDOW") != NULL)
+               debug_flags |= GLABELS_DEBUG_WINDOW;
+       if (g_getenv ("GLABELS_DEBUG_UI") != NULL)
+               debug_flags |= GLABELS_DEBUG_UI;
+       if (g_getenv ("GLABELS_DEBUG_PROPERTY_BAR") != NULL)
+               debug_flags |= GLABELS_DEBUG_PROPERTY_BAR;
+       if (g_getenv ("GLABELS_DEBUG_MEDIA_SELECT") != NULL)
+               debug_flags |= GLABELS_DEBUG_MEDIA_SELECT;
+       if (g_getenv ("GLABELS_DEBUG_MINI_PREVIEW") != NULL)
+               debug_flags |= GLABELS_DEBUG_MINI_PREVIEW;
+       if (g_getenv ("GLABELS_DEBUG_PIXBUF_CACHE") != NULL)
+               debug_flags |= GLABELS_DEBUG_PIXBUF_CACHE;
+       if (g_getenv ("GLABELS_DEBUG_EDITOR") != NULL)
+               debug_flags |= GLABELS_DEBUG_EDITOR;
+       if (g_getenv ("GLABELS_DEBUG_WDGT") != NULL)
+               debug_flags |= GLABELS_DEBUG_WDGT;
+       if (g_getenv ("GLABELS_DEBUG_PATH") != NULL)
+               debug_flags |= GLABELS_DEBUG_PATH;
+}
+
+
+/****************************************************************************/
+/* Print debugging information.                                             */
+/****************************************************************************/
+void
+gl_debug (glDebugSection  section,
+         const gchar    *file,
+         gint            line,
+         const gchar    *function,
+         const gchar    *format,
+         ...)
+{
+       if  (debug_flags & section)
+       {
+               va_list  args;
+               gchar   *msg;
+
+               g_return_if_fail (format != NULL);
+
+               va_start (args, format);
+               msg = g_strdup_vprintf (format, args);
+               va_end (args);
+
+               g_print ("%s:%d (%s) %s\n", file, line, function, msg);
+
+               g_free (msg);
+       }
+       
+}
diff --git a/src/debug.h b/src/debug.h
new file mode 100644 (file)
index 0000000..5840487
--- /dev/null
@@ -0,0 +1,110 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  debug.h:  GLabels debug module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+/*
+ * This file is based on gedit-debug.h from gedit2:
+ *
+ * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
+ * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi 
+ *
+ */
+#ifndef __DEBUG_H__
+#define __DEBUG_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+/*
+ * Set an environmental var of the same name to turn on
+ * debugging output. Setting GLABELS_DEBUG will turn on all
+ * sections.
+ */
+
+typedef enum {
+       GLABELS_DEBUG_NONE         = 0,
+       GLABELS_DEBUG_VIEW         = 1 << 0,
+       GLABELS_DEBUG_ITEM         = 1 << 1,
+       GLABELS_DEBUG_PRINT        = 1 << 2,
+       GLABELS_DEBUG_PREFS        = 1 << 3,
+       GLABELS_DEBUG_FILE         = 1 << 4,
+       GLABELS_DEBUG_LABEL        = 1 << 5,
+       GLABELS_DEBUG_TEMPLATE     = 1 << 6,
+       GLABELS_DEBUG_PAPER        = 1 << 7,
+       GLABELS_DEBUG_XML          = 1 << 8,
+       GLABELS_DEBUG_MERGE        = 1 << 9,
+       GLABELS_DEBUG_UNDO         = 1 << 10,
+       GLABELS_DEBUG_RECENT       = 1 << 11,
+       GLABELS_DEBUG_COMMANDS     = 1 << 12,
+       GLABELS_DEBUG_WINDOW       = 1 << 13,
+       GLABELS_DEBUG_UI           = 1 << 14,
+       GLABELS_DEBUG_PROPERTY_BAR = 1 << 15,
+       GLABELS_DEBUG_MEDIA_SELECT = 1 << 16,
+       GLABELS_DEBUG_MINI_PREVIEW = 1 << 17,
+       GLABELS_DEBUG_PIXBUF_CACHE = 1 << 18,
+       GLABELS_DEBUG_EDITOR       = 1 << 19,
+       GLABELS_DEBUG_WDGT         = 1 << 20,
+        GLABELS_DEBUG_PATH         = 1 << 21,
+} glDebugSection;
+
+
+#ifndef __GNUC__
+#define __FUNCTION__   ""
+#endif
+
+#define        DEBUG_VIEW      GLABELS_DEBUG_VIEW,    __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_ITEM      GLABELS_DEBUG_ITEM,    __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_PRINT     GLABELS_DEBUG_PRINT,   __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_PREFS     GLABELS_DEBUG_PREFS,   __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_FILE      GLABELS_DEBUG_FILE,    __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_LABEL     GLABELS_DEBUG_LABEL,   __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_TEMPLATE  GLABELS_DEBUG_TEMPLATE,__FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_PAPER     GLABELS_DEBUG_PAPER,   __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_XML       GLABELS_DEBUG_XML,     __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_MERGE     GLABELS_DEBUG_MERGE,   __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_UNDO      GLABELS_DEBUG_UNDO,    __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_RECENT    GLABELS_DEBUG_RECENT,  __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_COMMANDS  GLABELS_DEBUG_COMMANDS,__FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_WINDOW    GLABELS_DEBUG_WINDOW,  __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_UI        GLABELS_DEBUG_UI,      __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_PROPERTY_BAR      GLABELS_DEBUG_PROPERTY_BAR,     __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_MEDIA_SELECT      GLABELS_DEBUG_MEDIA_SELECT,     __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_MINI_PREVIEW      GLABELS_DEBUG_MINI_PREVIEW,     __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_PIXBUF_CACHE      GLABELS_DEBUG_PIXBUF_CACHE,     __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_EDITOR    GLABELS_DEBUG_EDITOR, __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_WDGT      GLABELS_DEBUG_WDGT,   __FILE__, __LINE__, __FUNCTION__
+#define        DEBUG_PATH      GLABELS_DEBUG_PATH,   __FILE__, __LINE__, __FUNCTION__
+
+void gl_debug_init (void);
+
+void gl_debug      (glDebugSection  section,
+                   const gchar    *file,
+                   gint            line,
+                   const gchar    *function,
+                   const gchar    *format,
+                   ...);
+
+G_END_DECLS
+
+#endif /* __DEBUG_H__ */
diff --git a/src/file.c b/src/file.c
new file mode 100644 (file)
index 0000000..86073e7
--- /dev/null
@@ -0,0 +1,844 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  file.c:  FILE menu dialog module
+ *
+ *  Copyright (C) 2001  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "file.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkdialog.h>
+#include <gtk/gtkmessagedialog.h>
+#include <gtk/gtkfilechooserdialog.h>
+#include <gtk/gtkstock.h>
+#include <string.h>
+
+#include "xml-label.h"
+#include "recent.h"
+#include "util.h"
+#include "window.h"
+#include "new-label-dialog.h"
+#include "libglabels/libglabels.h"
+#include "debug.h"
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/* Saved state for new dialog */
+static gchar   *page_size   = NULL;
+static gchar   *category    = NULL;
+static gchar   *sheet_name  = NULL;
+static gboolean rotate_flag = FALSE;
+
+/* Saved state of file selectors */
+static gchar *open_path = NULL;
+static gchar *save_path = NULL;
+
+/*===========================================*/
+/* Local function prototypes.                */
+/*===========================================*/
+static void new_response                     (GtkDialog         *dialog,
+                                             gint               response,
+                                             gpointer           user_data);
+
+static void properties_response              (GtkDialog         *dialog,
+                                             gint               response,
+                                             gpointer           user_data);
+
+static void open_response                    (GtkDialog         *chooser,
+                                             gint               response,
+                                             glWindow          *window);
+static void save_as_response                 (GtkDialog         *chooser,
+                                             gint               response,
+                                             glLabel           *label);
+
+\f
+/*****************************************************************************/
+/* "New" menu callback.                                                      */
+/*****************************************************************************/
+void
+gl_file_new (glWindow  *window)
+{
+       GtkWidget    *dialog;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       g_return_if_fail (window && GTK_IS_WINDOW (window));
+
+       dialog = gl_new_label_dialog_new (GTK_WINDOW (window));
+       gtk_window_set_title (GTK_WINDOW (dialog), _("New Label or Card"));
+
+       g_object_set_data (G_OBJECT (dialog), "parent_window", window);
+
+       g_signal_connect (G_OBJECT(dialog), "response",
+                         G_CALLBACK (new_response), dialog);
+
+       if (page_size != NULL) {
+               gl_new_label_dialog_set_filter_parameters (GL_NEW_LABEL_DIALOG (dialog),
+                                                           page_size,
+                                                           category);
+       }
+       if (sheet_name != NULL) {
+               gl_new_label_dialog_set_template_name (GL_NEW_LABEL_DIALOG (dialog),
+                                         sheet_name);
+       }
+       gl_new_label_dialog_set_rotate_state (GL_NEW_LABEL_DIALOG (dialog), rotate_flag);
+
+        gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+       gtk_widget_show_all (GTK_WIDGET (dialog));
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  New "ok" button callback.                                       */
+/*---------------------------------------------------------------------------*/
+static void
+new_response (GtkDialog *dialog,
+             gint       response,
+             gpointer   user_data)
+{
+       lglTemplate *template;
+       glLabel     *label;
+       glWindow    *window;
+       GtkWidget   *new_window;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       switch (response) {
+
+       case GTK_RESPONSE_OK:
+
+               gl_new_label_dialog_get_filter_parameters (GL_NEW_LABEL_DIALOG (dialog),
+                                                           &page_size,
+                                                           &category);
+
+               if (sheet_name != NULL)
+                       g_free (sheet_name);
+               sheet_name =
+                       gl_new_label_dialog_get_template_name (GL_NEW_LABEL_DIALOG (dialog));
+
+               rotate_flag =
+                       gl_new_label_dialog_get_rotate_state (GL_NEW_LABEL_DIALOG (dialog));
+
+               template = lgl_db_lookup_template_from_name (sheet_name);
+
+               label = GL_LABEL(gl_label_new ());
+               gl_label_set_template (label, template);
+               gl_label_set_rotate_flag (label, rotate_flag);
+
+               lgl_template_free (template);
+
+               window =
+                       GL_WINDOW (g_object_get_data (G_OBJECT (dialog),
+                                                     "parent_window"));
+               if ( gl_window_is_empty (window) ) {
+                       gl_window_set_label (window, label);
+               } else {
+                       new_window = gl_window_new_from_label (label);
+                       gtk_widget_show_all (new_window);
+               }
+               
+               break;
+
+       default:
+               break;
+       }
+
+       gtk_widget_destroy (GTK_WIDGET (dialog));
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+/*****************************************************************************/
+/* "Properties" menu callback.                                               */
+/*****************************************************************************/
+void
+gl_file_properties (glLabel   *label,
+                   glWindow  *window)
+{
+       GtkWidget    *dialog;
+        gchar        *name;
+
+       gl_debug (DEBUG_FILE, "START");
+
+        g_return_if_fail (label && GL_IS_LABEL (label));
+       g_return_if_fail (window && GTK_IS_WINDOW (window));
+
+       dialog = gl_new_label_dialog_new (GTK_WINDOW (window));
+       gtk_window_set_title (GTK_WINDOW (dialog), _("Label properties"));
+
+       g_object_set_data (G_OBJECT (dialog), "label", label);
+
+       g_signal_connect (G_OBJECT(dialog), "response",
+                         G_CALLBACK (properties_response), dialog);
+
+        if (label->template->paper_id != NULL) {
+                gl_new_label_dialog_set_filter_parameters (GL_NEW_LABEL_DIALOG (dialog),
+                                                           label->template->paper_id,
+                                                           NULL);
+        }
+        name = lgl_template_get_name (label->template);
+        if (name != NULL) {
+                gl_new_label_dialog_set_template_name (GL_NEW_LABEL_DIALOG (dialog), name);
+        }
+        g_free (name);
+
+        gl_new_label_dialog_set_rotate_state (GL_NEW_LABEL_DIALOG (dialog),
+                                             label->rotate_flag);
+
+        gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+       gtk_widget_show_all (GTK_WIDGET (dialog));
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Properties "ok" button callback.                                */
+/*---------------------------------------------------------------------------*/
+static void
+properties_response (GtkDialog *dialog,
+             gint       response,
+             gpointer   user_data)
+{
+       lglTemplate *template;
+       glLabel     *label;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       switch (response) {
+
+       case GTK_RESPONSE_OK:
+
+               gl_new_label_dialog_get_filter_parameters (GL_NEW_LABEL_DIALOG (dialog),
+                                                           &page_size,
+                                                           &category);
+
+               if (sheet_name != NULL)
+                       g_free (sheet_name);
+               sheet_name =
+                       gl_new_label_dialog_get_template_name (GL_NEW_LABEL_DIALOG (dialog));
+
+               rotate_flag =
+                       gl_new_label_dialog_get_rotate_state (GL_NEW_LABEL_DIALOG (dialog));
+
+               template = lgl_db_lookup_template_from_name (sheet_name);
+
+                label = GL_LABEL(g_object_get_data (G_OBJECT (dialog), "label"));
+                gl_label_set_template (label, template);
+                gl_label_set_rotate_flag (label, rotate_flag);
+
+               break;
+
+       default:
+               break;
+       }
+
+       gtk_widget_destroy (GTK_WIDGET (dialog));
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+/*****************************************************************************/
+/* "Open" menu callback.                                                     */
+/*****************************************************************************/
+void
+gl_file_open (glWindow  *window)
+{
+       GtkWidget     *chooser;
+       GtkFileFilter *filter;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       g_return_if_fail (window != NULL);
+
+       chooser = gtk_file_chooser_dialog_new ("Open label",
+                                              GTK_WINDOW (window),
+                                              GTK_FILE_CHOOSER_ACTION_OPEN,
+                                              GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                              GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                                              NULL);
+
+       /* Recover state of open dialog */
+       if (open_path != NULL) {
+               gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(chooser),
+                                                    open_path);
+       }
+
+       filter = gtk_file_filter_new ();
+       gtk_file_filter_add_pattern (filter, "*");
+       gtk_file_filter_set_name (filter, _("All files"));
+       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+       filter = gtk_file_filter_new ();
+       gtk_file_filter_add_pattern (filter, "*.glabels");
+       gtk_file_filter_set_name (filter, _("gLabels documents"));
+       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+       gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+       g_signal_connect (G_OBJECT (chooser), "response",
+                         G_CALLBACK (open_response), window);
+
+       /* show the dialog */
+       gtk_widget_show (GTK_WIDGET (chooser));
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Open "response" callback.                                       */
+/*---------------------------------------------------------------------------*/
+static void
+open_response (GtkDialog     *chooser,
+              gint           response,
+              glWindow      *window)
+{
+       gchar            *raw_filename;
+       gchar            *filename;
+       GtkWidget        *dialog;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       g_return_if_fail (chooser && GTK_IS_FILE_CHOOSER (chooser));
+       g_return_if_fail (window && GTK_IS_WINDOW (window));
+
+       switch (response) {
+
+       case GTK_RESPONSE_ACCEPT:
+               /* get the filename */
+               raw_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(chooser));
+               filename = g_filename_to_utf8 (raw_filename, -1, NULL, NULL, NULL);
+
+               if (!raw_filename || 
+                   !filename || 
+                   g_file_test (raw_filename, G_FILE_TEST_IS_DIR)) {
+
+                       dialog = gtk_message_dialog_new (GTK_WINDOW(chooser),
+                                                     GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                     GTK_MESSAGE_WARNING,
+                                                     GTK_BUTTONS_CLOSE,
+                                                     _("Empty file name selection"));
+                       gtk_message_dialog_format_secondary_text (
+                               GTK_MESSAGE_DIALOG (dialog),
+                               _("Please select a file or supply a valid file name"));
+
+                       gtk_dialog_run (GTK_DIALOG (dialog));
+                       gtk_widget_destroy (dialog);
+
+               } else {
+
+                       if (!g_file_test (raw_filename, G_FILE_TEST_IS_REGULAR)) {
+
+                               dialog = gtk_message_dialog_new (GTK_WINDOW(chooser),
+                                                             GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                             GTK_MESSAGE_WARNING,
+                                                             GTK_BUTTONS_CLOSE,
+                                                             _("File does not exist"));
+                               gtk_message_dialog_format_secondary_text (
+                                       GTK_MESSAGE_DIALOG (dialog),
+                                       _("Please select a file or supply a valid file name"));
+
+                               gtk_dialog_run (GTK_DIALOG (dialog));
+                               gtk_widget_destroy (dialog);
+
+
+                       } else {
+               
+                               if ( gl_file_open_real (filename, window) ) {
+                                       gtk_widget_destroy (GTK_WIDGET (chooser));
+                               }
+
+                       }
+
+               }
+
+               g_free (filename);
+               g_free (raw_filename);
+               break;
+
+       default:
+               gtk_widget_destroy (GTK_WIDGET (chooser));
+               break;
+
+       }
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+
+/*****************************************************************************/
+/* "Open recent" menu callback.                                              */
+/*****************************************************************************/
+void
+gl_file_open_recent (const gchar     *filename,
+                    glWindow        *window)
+{
+       gl_debug (DEBUG_FILE, "");
+
+       if (filename) {
+               gl_debug (DEBUG_FILE, "open recent: %s", filename);
+
+               gl_file_open_real (filename, window);
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Open a file.                                                    */
+/*---------------------------------------------------------------------------*/
+gboolean
+gl_file_open_real (const gchar     *filename,
+                  glWindow        *window)
+{
+       gchar            *abs_filename;
+       glLabel          *label;
+       glXMLLabelStatus  status;
+       GtkWidget        *new_window;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       abs_filename = gl_util_make_absolute (filename);
+       label = gl_xml_label_open (abs_filename, &status);
+       if (!label) {
+               GtkWidget *dialog;
+
+               gl_debug (DEBUG_FILE, "couldn't open file");
+
+               dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                             GTK_DIALOG_DESTROY_WITH_PARENT,
+                                             GTK_MESSAGE_ERROR,
+                                             GTK_BUTTONS_CLOSE,
+                                             _("Could not open file \"%s\""),
+                                             filename);
+               gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+                                                         _("Not a supported file format"));
+
+               gtk_dialog_run (GTK_DIALOG (dialog));
+               gtk_widget_destroy (dialog);
+
+               g_free (abs_filename);
+
+               gl_debug (DEBUG_FILE, "END false");
+
+               return FALSE;
+
+       } else {
+
+               if ( gl_window_is_empty (GL_WINDOW(window)) ) {
+                       gl_window_set_label (GL_WINDOW(window), label);
+               } else {
+                       new_window = gl_window_new_from_label (label);
+                       gtk_widget_show_all (new_window);
+               }
+
+               gl_recent_add_utf8_filename (abs_filename);
+
+               if (open_path != NULL)
+                       g_free (open_path);
+               open_path = g_path_get_dirname (abs_filename);
+               g_free (abs_filename);
+
+               gl_debug (DEBUG_FILE, "END true");
+
+               return TRUE;
+
+       }
+}
+
+/*****************************************************************************/
+/* "Save" menu callback.                                                     */
+/*****************************************************************************/
+gboolean
+gl_file_save (glLabel   *label,
+             glWindow  *window)
+{
+       glXMLLabelStatus  status;
+       gchar            *filename = NULL;
+
+       gl_debug (DEBUG_FILE, "");
+
+       g_return_val_if_fail (label != NULL, FALSE);
+       
+       if (gl_label_is_untitled (label))
+       {
+               gl_debug (DEBUG_FILE, "Untitled");
+
+               return gl_file_save_as (label, window);
+       }
+
+       if (!gl_label_is_modified (label))      
+       {
+               gl_debug (DEBUG_FILE, "Not modified");
+
+               return TRUE;
+       }
+       
+       filename = gl_label_get_filename (label);
+       g_return_val_if_fail (filename != NULL, FALSE);
+       
+       gl_xml_label_save (label, filename, &status);
+
+       if (status != XML_LABEL_OK)
+       {
+               GtkWidget *dialog;
+
+               gl_debug (DEBUG_FILE, "FAILED");
+
+               dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                             GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                             GTK_MESSAGE_ERROR,
+                                             GTK_BUTTONS_CLOSE,
+                                             _("Could not save file \"%s\""),
+                                             filename);
+               gtk_message_dialog_format_secondary_text (
+                       GTK_MESSAGE_DIALOG (dialog),
+                       _("Error encountered during save.  The file is still not saved."));
+
+               gtk_dialog_run (GTK_DIALOG (dialog));
+               gtk_widget_destroy (dialog);
+
+               g_free (filename);
+
+               return FALSE;
+       }       
+       else
+       {
+               gl_debug (DEBUG_FILE, "OK");
+
+               gl_recent_add_utf8_filename (filename);
+
+               g_free (filename);
+
+               return TRUE;
+       }
+}
+
+/*****************************************************************************/
+/* "Save As" menu callback.                                                  */
+/*****************************************************************************/
+gboolean
+gl_file_save_as (glLabel   *label,
+                glWindow  *window)
+{
+       GtkWidget        *chooser;
+       GtkFileFilter    *filter;
+       gboolean          saved_flag = FALSE;
+       gchar            *name, *title;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       g_return_val_if_fail (label && GL_IS_LABEL(label), FALSE);
+       g_return_val_if_fail (window && GL_IS_WINDOW(window), FALSE);
+
+       name = gl_label_get_short_name (label);
+       title = g_strdup_printf (_("Save \"%s\" as"), name);
+       g_free (name);
+
+       chooser = gtk_file_chooser_dialog_new (title,
+                                              GTK_WINDOW (window),
+                                              GTK_FILE_CHOOSER_ACTION_SAVE,
+                                              GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                              GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+                                              NULL);
+
+       gtk_window_set_modal (GTK_WINDOW (chooser), TRUE);
+
+       g_free (title);
+
+       /* Recover proper state of save-as dialog */
+       if (save_path != NULL) {
+               gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(chooser),
+                                                    save_path);
+       }
+
+       filter = gtk_file_filter_new ();
+       gtk_file_filter_add_pattern (filter, "*");
+       gtk_file_filter_set_name (filter, _("All files"));
+       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+       filter = gtk_file_filter_new ();
+       gtk_file_filter_add_pattern (filter, "*.glabels");
+       gtk_file_filter_set_name (filter, _("gLabels documents"));
+       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+       gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+       g_signal_connect (G_OBJECT (chooser), "response",
+                         G_CALLBACK (save_as_response), label);
+
+       g_object_set_data (G_OBJECT (chooser), "saved_flag", &saved_flag);
+
+       /* show the dialog */
+       gtk_widget_show (GTK_WIDGET (chooser));
+
+       /* Hold here and process events until we are done with this dialog. */
+       /* This is so we can return a boolean result of our save attempt.   */
+       gtk_main ();
+
+       gl_debug (DEBUG_FILE, "END");
+
+       /* Return flag as set by one of the above callbacks, TRUE = saved */
+       return saved_flag;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  "Save As" ok button callback.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+save_as_response (GtkDialog     *chooser,
+                 gint           response,
+                 glLabel       *label)
+{
+       gchar            *raw_filename, *filename, *full_filename;
+       GtkWidget        *dialog;
+       glXMLLabelStatus  status;
+       gboolean         *saved_flag;
+       gboolean          cancel_flag = FALSE;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
+
+       saved_flag = g_object_get_data (G_OBJECT(chooser), "saved_flag");
+
+       switch (response) {
+
+       case GTK_RESPONSE_ACCEPT:
+               /* get the filename */
+               raw_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(chooser));
+
+               gl_debug (DEBUG_FILE, "raw_filename = \"%s\"", raw_filename);
+
+               if (!raw_filename || g_file_test (raw_filename, G_FILE_TEST_IS_DIR)) {
+
+                       dialog = gtk_message_dialog_new (GTK_WINDOW(chooser),
+                                                     GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                     GTK_MESSAGE_WARNING,
+                                                     GTK_BUTTONS_CLOSE,
+                                                     _("Empty file name selection"));
+                       gtk_message_dialog_format_secondary_text (
+                               GTK_MESSAGE_DIALOG (dialog),
+                               _("Please supply a valid file name"));
+
+                       gtk_dialog_run (GTK_DIALOG (dialog));
+                       gtk_widget_destroy (dialog);
+
+               } else {
+
+                       full_filename = gl_util_add_extension (raw_filename);
+
+                       filename = g_filename_to_utf8 (full_filename, -1,
+                                                      NULL, NULL, NULL);
+
+                       gl_debug (DEBUG_FILE, "filename = \"%s\"", filename);
+
+                       if (g_file_test (full_filename, G_FILE_TEST_IS_REGULAR)) {
+                               gint ret;
+
+                               dialog = gtk_message_dialog_new (GTK_WINDOW(chooser),
+                                                             GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                             GTK_MESSAGE_QUESTION,
+                                                             GTK_BUTTONS_YES_NO,
+                                                             _("Overwrite file \"%s\"?"),
+                                                              filename);
+                               gtk_message_dialog_format_secondary_text (
+                                       GTK_MESSAGE_DIALOG (dialog),
+                                       _("File already exists."));
+
+                               ret = gtk_dialog_run (GTK_DIALOG (dialog));
+                               if ( ret == GTK_RESPONSE_NO ) {
+                                       cancel_flag = TRUE;
+                               }
+                               gtk_widget_destroy (dialog);
+                       }
+
+                       if (!cancel_flag) {
+
+                               gl_xml_label_save (label, filename, &status);
+
+                               gl_debug (DEBUG_FILE, "status of save = %d", status);
+
+                               if ( status != XML_LABEL_OK ) {
+
+                                       dialog = gtk_message_dialog_new (
+                                               GTK_WINDOW(chooser),
+                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                               GTK_MESSAGE_ERROR,
+                                               GTK_BUTTONS_CLOSE,
+                                               _("Could not save file \"%s\""),
+                                               filename);
+                                       gtk_message_dialog_format_secondary_text (
+                                               GTK_MESSAGE_DIALOG (dialog),
+                                               _("Error encountered during save.  The file is still not saved."));
+
+                                       gtk_dialog_run (GTK_DIALOG (dialog));
+                                       gtk_widget_destroy (dialog);
+
+                               } else {
+
+                                       *saved_flag = TRUE;
+
+                                       gl_recent_add_utf8_filename (filename);
+
+                                       if (save_path != NULL)
+                                               g_free (save_path);
+                                       save_path = g_path_get_dirname (filename);
+
+                                       gtk_widget_destroy (GTK_WIDGET (chooser));
+                                       gtk_main_quit ();
+                               }
+
+                       }
+
+                       g_free (filename);
+                       g_free (full_filename);
+               }
+
+               g_free (raw_filename);
+               break;
+
+       default:
+               *saved_flag = FALSE;
+               gtk_widget_destroy (GTK_WIDGET (chooser));
+               gtk_main_quit ();
+               break;
+
+       }
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+
+/*****************************************************************************/
+/* "Close" menu callback.                                                    */
+/*****************************************************************************/
+gboolean
+gl_file_close (glWindow *window)
+{
+       glView  *view;
+       glLabel *label;
+       gboolean close = TRUE;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       g_return_val_if_fail (window && GL_IS_WINDOW(window), TRUE);
+
+       if ( !gl_window_is_empty (window) ) {
+
+               view = GL_VIEW(window->view);
+               label = view->label;
+
+               if (gl_label_is_modified (label))       {
+                       GtkWidget *dialog;
+                       gchar *fname = NULL;
+                       gint ret;
+
+                       fname = gl_label_get_short_name (label);
+                       
+                       dialog = gtk_message_dialog_new (GTK_WINDOW(window),
+                                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                        GTK_MESSAGE_WARNING,
+                                                        GTK_BUTTONS_NONE,
+                                                        _("Save changes to document \"%s\" before closing?"),
+                                                        fname);
+                       gtk_message_dialog_format_secondary_text (
+                               GTK_MESSAGE_DIALOG (dialog),
+                               _("Your changes will be lost if you don't save them."));
+
+                       gtk_dialog_add_button (GTK_DIALOG (dialog),
+                                              _("Close without saving"),
+                                              GTK_RESPONSE_NO);
+
+                       gtk_dialog_add_button (GTK_DIALOG (dialog),
+                                              GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+
+                       gtk_dialog_add_button (GTK_DIALOG (dialog),
+                                              GTK_STOCK_SAVE, GTK_RESPONSE_YES);
+
+                       gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+
+                       gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+
+                       ret = gtk_dialog_run (GTK_DIALOG (dialog));
+               
+                       gtk_widget_destroy (dialog);
+
+                       g_free (fname);
+               
+                       switch (ret)
+                       {
+                       case GTK_RESPONSE_YES:
+                               close = gl_file_save (label, window);
+                               break;
+                       case GTK_RESPONSE_NO:
+                               close = TRUE;
+                               break;
+                       default:
+                               close = FALSE;
+                       }
+
+                       gl_debug (DEBUG_FILE, "CLOSE: %s", close ? "TRUE" : "FALSE");
+               }
+
+       }
+
+       if (close) {
+               gtk_widget_destroy (GTK_WIDGET(window));
+
+               if ( gl_window_get_window_list () == NULL ) {
+                       
+                       gl_debug (DEBUG_FILE, "All windows closed.");
+       
+                       gtk_main_quit ();
+               }
+
+       }
+
+       gl_debug (DEBUG_FILE, "END");
+
+       return close;
+}
+
+/*****************************************************************************/
+/* "Exit" menu callback.                                                     */
+/*****************************************************************************/
+void
+gl_file_exit (void)
+{
+       const GList *window_list;
+       GList       *p, *p_next;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       window_list = gl_window_get_window_list ();
+
+       for (p=(GList *)window_list; p != NULL; p=p_next) {
+               p_next = p->next;
+
+               gl_file_close (GL_WINDOW(p->data));
+       }
+
+       gl_debug (DEBUG_FILE, "END");
+}
diff --git a/src/file.h b/src/file.h
new file mode 100644 (file)
index 0000000..ba82607
--- /dev/null
@@ -0,0 +1,65 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  file.h:  FILE menu dialog module header file
+ *
+ *  Copyright (C) 2000  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __FILE_H__
+#define __FILE_H__
+
+#include <gtk/gtkwindow.h>
+
+#include "label.h"
+#include "window.h"
+
+G_BEGIN_DECLS
+
+void     gl_file_new         (glWindow        *window);
+
+
+void     gl_file_properties  (glLabel         *label,
+                             glWindow        *window);
+
+
+void     gl_file_open        (glWindow        *window);
+
+
+void     gl_file_open_recent (const gchar     *filename,
+                             glWindow        *window);
+
+gboolean gl_file_open_real   (const gchar     *filename,
+                             glWindow        *window);
+
+
+gboolean gl_file_save        (glLabel         *label,
+                             glWindow        *window);
+
+gboolean gl_file_save_as     (glLabel         *label,
+                             glWindow        *window);
+
+
+gboolean gl_file_close       (glWindow        *window);
+
+void     gl_file_exit        (void);
+
+G_END_DECLS
+
+#endif /* __FILE_H__ */
diff --git a/src/glabels-batch.c b/src/glabels-batch.c
new file mode 100644 (file)
index 0000000..41ebf9d
--- /dev/null
@@ -0,0 +1,173 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  glabels.c: main program module
+ *
+ *  Copyright (C) 2001  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <libgnome/libgnome.h>
+
+#include "merge-init.h"
+#include "xml-label.h"
+#include "print.h"
+#include "print-op.h"
+#include <libglabels/db.h>
+#include "util.h"
+#include "prefs.h"
+#include "debug.h"
+
+/*============================================*/
+/* Private globals                            */
+/*============================================*/
+static gchar    *output          = "output.pdf";
+static gint     n_copies         = 1;
+static gint     n_sheets         = 1;
+static gint     first            = 1;
+static gboolean outline_flag     = FALSE;
+static gboolean reverse_flag     = FALSE;
+static gboolean crop_marks_flag  = FALSE;
+static gchar    *input           = NULL;
+static gchar    **remaining_args = NULL;
+
+static GOptionEntry option_entries[] = {
+        {"output", 'o', 0, G_OPTION_ARG_STRING, &output,
+         N_("set output filename (default=\"output.pdf\")"), N_("filename")},
+        {"sheets", 's', 0, G_OPTION_ARG_INT, &n_sheets,
+         N_("number of sheets (default=1)"), N_("sheets")},
+        {"copies", 'c', 0, G_OPTION_ARG_INT, &n_copies,
+         N_("number of copies (default=1)"), N_("copies")},
+        {"first", 'f', 0, G_OPTION_ARG_INT, &first,
+         N_("first label on first sheet (default=1)"), N_("first")},
+        {"outline", 'l', 0, G_OPTION_ARG_NONE, &outline_flag,
+         N_("print outlines (to test printer alignment)"), NULL},
+        {"reverse", 'r', 0, G_OPTION_ARG_NONE, &reverse_flag,
+         N_("print in reverse (i.e. a mirror image)"), NULL},
+        {"cropmarks", 'C', 0, G_OPTION_ARG_NONE, &crop_marks_flag,
+         N_("print crop marks"), NULL},
+        {"input", 'i', 0, G_OPTION_ARG_STRING, &input,
+         N_("input file for merging"), N_("filename")},
+        { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY,
+          &remaining_args, NULL, N_("[FILE...]") },
+        { NULL }
+};
+
+
+\f
+/*****************************************************************************/
+/* Main                                                                      */
+/*****************************************************************************/
+int
+main (int argc, char **argv)
+{
+       GOptionContext    *option_context;
+        GnomeProgram      *program;
+        GList             *p, *file_list = NULL;
+        gchar             *abs_fn;
+        glLabel           *label = NULL;
+        glMerge           *merge = NULL;
+        glXMLLabelStatus   status;
+        glPrintOp         *print_op;
+       gchar             *utf8_filename;
+
+        bindtextdomain (GETTEXT_PACKAGE, GLABELS_LOCALEDIR);
+       bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+        textdomain (GETTEXT_PACKAGE);
+
+       option_context = g_option_context_new (_("- batch process gLabels label files"));
+       g_option_context_add_main_entries (option_context, option_entries, GETTEXT_PACKAGE);
+
+
+        /* Initialize minimal gnome program */
+        program = gnome_program_init ("glabels-batch", VERSION,
+                                      LIBGNOME_MODULE, argc, argv,
+                                     GNOME_PARAM_GOPTION_CONTEXT, option_context,
+                                      GNOME_PROGRAM_STANDARD_PROPERTIES,
+                                      NULL);
+
+        /* create file list */
+       if (remaining_args != NULL) {
+               gint i, num_args;
+
+               num_args = g_strv_length (remaining_args);
+               for (i = 0; i < num_args; ++i) {
+                       utf8_filename = g_filename_to_utf8 (remaining_args[i], -1, NULL, NULL, NULL);
+                       if (utf8_filename)
+                               file_list = g_list_append (file_list, utf8_filename);
+               }
+               g_strfreev (remaining_args);
+               remaining_args = NULL;
+       }
+
+        /* initialize components */
+        gl_debug_init ();
+        gl_merge_init ();
+        lgl_db_init ();
+       gl_prefs_init ();
+
+        /* now print the files */
+        for (p = file_list; p; p = p->next) {
+                g_print ("LABEL FILE = %s\n", (gchar *) p->data);
+                label = gl_xml_label_open (p->data, &status);
+
+
+                if ( status == XML_LABEL_OK ) {
+
+                        if (input != NULL) {
+                                merge = gl_label_get_merge (label);
+                                if (merge != NULL) {
+                                        gl_merge_set_src(merge, input);
+                                        gl_label_set_merge(label, merge);
+                                } else {
+                                        fprintf ( stderr,
+                                                  _("cannot perform document merge with glabels file %s\n"),
+                                                  (char *)p->data );
+                                }
+                        }
+                        abs_fn = gl_util_make_absolute ( output );
+                        print_op = gl_print_op_new_batch (label,
+                                                          abs_fn,
+                                                          n_sheets,
+                                                          n_copies,
+                                                          first,
+                                                          outline_flag,
+                                                          reverse_flag,
+                                                          crop_marks_flag);
+
+                        gtk_print_operation_run (GTK_PRINT_OPERATION (print_op),
+                                                 GTK_PRINT_OPERATION_ACTION_EXPORT,
+                                                 NULL,
+                                                 NULL);
+
+                        g_object_unref (label);
+                }
+                else {
+                        fprintf ( stderr, _("cannot open glabels file %s\n"),
+                                  (char *)p->data );
+                }
+        }
+
+        g_list_free (file_list);
+
+        return 0;
+}
+
diff --git a/src/glabels.c b/src/glabels.c
new file mode 100644 (file)
index 0000000..832b082
--- /dev/null
@@ -0,0 +1,218 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/**
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  glabels.c:  GLabels main module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <libgnome/libgnome.h>
+#include <libgnomeui/libgnomeui.h>
+#include <libgnomeui/gnome-window-icon.h>
+
+#include "warning-handler.h"
+#include "critical-error-handler.h"
+#include "stock.h"
+#include "merge-init.h"
+#include "recent.h"
+#include <libglabels/db.h>
+#include "mini-preview-pixbuf-cache.h"
+#include "prefs.h"
+#include "debug.h"
+#include "window.h"
+#include "file.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+/*========================================================*/
+/* Private globals                                        */
+/*========================================================*/
+
+/*========================================================*/
+/* Local function prototypes                              */
+/*========================================================*/
+gboolean save_session_cb (GnomeClient        *client,
+                         gint                phase,
+                         GnomeRestartStyle   save_style,
+                         gint                shutdown,
+                         GnomeInteractStyle  interact_style,
+                         gint                fast,
+                         gpointer            client_data);
+
+void client_die_cb       (GnomeClient        *client,
+                         gpointer            client_data);
+
+/****************************************************************************/
+/* main program                                                             */
+/****************************************************************************/
+int
+main (int argc, char **argv)
+{
+       gchar **remaining_args = NULL;
+       GOptionEntry option_entries[] = {
+               { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY,
+                 &remaining_args, NULL, N_("[FILE...]") },
+               { NULL }
+       };
+
+       GOptionContext *option_context;
+       GnomeProgram   *program;
+       gchar          *icon_file;
+       GnomeClient    *client;
+       GList          *file_list = NULL, *p;
+       GtkWidget      *win;
+       gchar          *utf8_filename;
+
+       bindtextdomain (GETTEXT_PACKAGE, GLABELS_LOCALEDIR);
+       bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+       textdomain (GETTEXT_PACKAGE);
+
+       option_context = g_option_context_new (_("- gLabels label designer"));
+       g_option_context_add_main_entries (option_context, option_entries, GETTEXT_PACKAGE);
+
+
+       /* Initialize gnome program */
+       program = gnome_program_init ("glabels", VERSION,
+                                     LIBGNOMEUI_MODULE, argc, argv,
+                                     GNOME_PARAM_GOPTION_CONTEXT, option_context,
+                                     GNOME_PROGRAM_STANDARD_PROPERTIES,
+                                     NULL);
+
+       /* Install GUI handlers for critical error and warning messages */
+       gl_critical_error_handler_init();
+       gl_warning_handler_init();
+
+       /* Set default icon */
+       icon_file = GLABELS_ICON_DIR "glabels.png";
+       if (!g_file_test (icon_file, G_FILE_TEST_EXISTS))
+       {
+               g_message ("Could not find %s", icon_file);
+       }
+       else
+       {
+               gnome_window_icon_set_default_from_file (icon_file);
+       }
+
+       
+       /* Initialize subsystems */
+       gl_debug_init ();
+       gl_stock_init ();
+       lgl_db_init ();
+       gl_prefs_init ();
+       gl_mini_preview_pixbuf_cache_init ();
+       gl_merge_init ();
+       gl_recent_init ();
+       
+
+       client = gnome_master_client();
+
+       g_signal_connect (G_OBJECT (client), "save_yourself",
+                         G_CALLBACK (save_session_cb),
+                         (gpointer)argv[0]);
+
+       g_signal_connect (G_OBJECT (client), "die",
+                         G_CALLBACK (client_die_cb), NULL);
+
+
+       /* Parse args and build the list of files to be loaded at startup */
+       if (remaining_args != NULL) {
+               gint i, num_args;
+
+               num_args = g_strv_length (remaining_args);
+               for (i = 0; i < num_args; ++i) {
+                       utf8_filename = g_filename_to_utf8 (remaining_args[i], -1, NULL, NULL, NULL);
+                       if (utf8_filename)
+                               file_list = g_list_append (file_list, utf8_filename);
+               }
+               g_strfreev (remaining_args);
+               remaining_args = NULL;
+       }
+
+
+       /* Open files or create empty top-level window. */
+       for (p = file_list; p; p = p->next) {
+               win = gl_window_new_from_file (p->data);
+               gtk_widget_show_all (win);
+               g_free (p->data);
+       }
+       if ( gl_window_get_window_list() == NULL ) {
+               win = gl_window_new ();
+               gtk_widget_show_all (win);
+       }
+       g_list_free (file_list);
+
+       
+       /* Begin main loop */
+       gtk_main();
+
+       g_object_unref (G_OBJECT (program));
+
+       return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  "Save session" callback.                                        */
+/*---------------------------------------------------------------------------*/
+gboolean save_session_cb (GnomeClient        *client,
+                         gint                phase,
+                         GnomeRestartStyle   save_style,
+                         gint                shutdown,
+                         GnomeInteractStyle  interact_style,
+                         gint                fast,
+                         gpointer            client_data)
+{
+       gchar       *argv[128];
+       gint         argc;
+       const GList *window_list;
+       GList       *p;
+       glWindow    *window;
+       glLabel     *label;
+
+       argv[0] = (gchar *)client_data;
+       argc = 1;
+
+       window_list = gl_window_get_window_list();
+       for ( p=(GList *)window_list; p != NULL; p=p->next ) {
+               window = GL_WINDOW(p->data);
+               if ( !gl_window_is_empty (window) ) {
+                       label = GL_VIEW(window->view)->label;
+                       argv[argc++] = gl_label_get_filename (label);
+               }
+       }
+       gnome_client_set_clone_command(client, argc, argv);
+       gnome_client_set_restart_command(client, argc, argv);
+       
+       return TRUE;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  "Die" callback.                                                 */
+/*---------------------------------------------------------------------------*/
+void client_die_cb (GnomeClient *client,
+                   gpointer     client_data)
+{
+       gl_file_exit ();
+}
+
+
diff --git a/src/hig.h b/src/hig.h
new file mode 100644 (file)
index 0000000..6b4c249
--- /dev/null
+++ b/src/hig.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  hig.h:  HIG inspired dialogs and layout tools
+ *
+ *  Copyright (C) 2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __HIG_H__
+#define __HIG_H__
+
+G_BEGIN_DECLS
+
+#define GL_HIG_PAD1   6
+#define GL_HIG_PAD2  12
+
+G_END_DECLS
+
+#endif /* __HIG_H__ */
diff --git a/src/label-barcode.c b/src/label-barcode.c
new file mode 100644 (file)
index 0000000..1f008ed
--- /dev/null
@@ -0,0 +1,483 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_barcode.c:  GLabels label text object
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include "label-barcode.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+#include <cairo.h>
+#include <pango/pangocairo.h>
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+#define FONT_SCALE (72.0/96.0)
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glLabelBarcodePrivate {
+       glTextNode     *text_node;
+       gchar          *id;
+       glColorNode    *color_node;
+       gboolean        text_flag;
+       gboolean        checksum_flag;
+       guint           format_digits;
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void  gl_label_barcode_finalize      (GObject             *object);
+
+static void  copy                           (glLabelObject       *dst_object,
+                                            glLabelObject       *src_object);
+
+static void  get_size                       (glLabelObject       *object,
+                                            gdouble             *w,
+                                            gdouble             *h);
+
+static void  set_line_color                 (glLabelObject       *object,
+                                            glColorNode         *line_color);
+
+static glColorNode *get_line_color          (glLabelObject       *object);
+
+static void    draw_object                (glLabelObject     *object,
+                                           cairo_t           *cr,
+                                           gboolean           screen_flag,
+                                           glMergeRecord     *record);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glLabelBarcode, gl_label_barcode, GL_TYPE_LABEL_OBJECT);
+
+static void
+gl_label_barcode_class_init (glLabelBarcodeClass *class)
+{
+       GObjectClass       *object_class       = G_OBJECT_CLASS (class);
+       glLabelObjectClass *label_object_class = GL_LABEL_OBJECT_CLASS (class);
+
+       gl_label_barcode_parent_class = g_type_class_peek_parent (class);
+
+       label_object_class->copy           = copy;
+       label_object_class->get_size       = get_size;
+       label_object_class->set_line_color = set_line_color;
+       label_object_class->get_line_color = get_line_color;
+        label_object_class->draw_object    = draw_object;
+        label_object_class->draw_shadow    = NULL;
+
+       object_class->finalize = gl_label_barcode_finalize;
+}
+
+static void
+gl_label_barcode_init (glLabelBarcode *lbc)
+{
+       lbc->priv = g_new0 (glLabelBarcodePrivate, 1);
+       lbc->priv->color_node = gl_color_node_new_default ();
+       lbc->priv->text_node  = gl_text_node_new_from_text ("");
+}
+
+static void
+gl_label_barcode_finalize (GObject *object)
+{
+       glLabelBarcode *lbc = GL_LABEL_BARCODE (object);
+
+       g_return_if_fail (object && GL_IS_LABEL_BARCODE (object));
+
+       gl_text_node_free (&lbc->priv->text_node);
+       g_free (lbc->priv->id);
+       gl_color_node_free (&(lbc->priv->color_node));
+       g_free (lbc->priv);
+
+       G_OBJECT_CLASS (gl_label_barcode_parent_class)->finalize (object);
+}
+
+/*****************************************************************************/
+/* NEW label "barcode" object.                                               */
+/*****************************************************************************/
+GObject *
+gl_label_barcode_new (glLabel *label)
+{
+       glLabelBarcode *lbc;
+
+       lbc = g_object_new (gl_label_barcode_get_type(), NULL);
+
+       gl_label_object_set_parent (GL_LABEL_OBJECT(lbc), label);
+
+       return G_OBJECT (lbc);
+}
+
+/*****************************************************************************/
+/* Copy object contents.                                                     */
+/*****************************************************************************/
+static void
+copy (glLabelObject *dst_object,
+      glLabelObject *src_object)
+{
+       glLabelBarcode      *lbc     = (glLabelBarcode *)src_object;
+       glLabelBarcode      *new_lbc = (glLabelBarcode *)dst_object;
+       glTextNode          *text_node;
+       gchar               *id;
+       gboolean             text_flag;
+       gboolean             checksum_flag;
+       glColorNode         *color_node;
+       guint                format_digits;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (lbc && GL_IS_LABEL_BARCODE (lbc));
+       g_return_if_fail (new_lbc && GL_IS_LABEL_BARCODE (new_lbc));
+
+       text_node = gl_label_barcode_get_data (lbc);
+       gl_label_barcode_get_props (lbc, &id, &text_flag, &checksum_flag, &format_digits);
+       color_node = get_line_color (src_object);
+
+       gl_label_barcode_set_data (new_lbc, text_node);
+       gl_label_barcode_set_props (new_lbc, id, text_flag, checksum_flag, format_digits);
+       set_line_color (dst_object, color_node);
+
+       gl_color_node_free (&color_node);
+       gl_text_node_free (&text_node);
+       g_free (id);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
+/*****************************************************************************/
+/* Set object params.                                                        */
+/*****************************************************************************/
+void
+gl_label_barcode_set_data (glLabelBarcode *lbc,
+                          glTextNode     *text_node)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (lbc && GL_IS_LABEL_BARCODE (lbc));
+
+       if (!gl_text_node_equal (lbc->priv->text_node, text_node)) {
+
+               gl_text_node_free (&lbc->priv->text_node);
+               lbc->priv->text_node = gl_text_node_dup (text_node);
+
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lbc));
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+void
+gl_label_barcode_set_props (glLabelBarcode *lbc,
+                           gchar          *id,
+                           gboolean        text_flag,
+                           gboolean        checksum_flag,
+                           guint           format_digits)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (lbc && GL_IS_LABEL_BARCODE (lbc));
+
+       if ( ((lbc->priv->id == NULL) && (id != NULL))
+            || (g_strcasecmp (lbc->priv->id, id) != 0)
+            || (lbc->priv->text_flag != text_flag)
+            || (lbc->priv->checksum_flag != checksum_flag)
+            || (lbc->priv->format_digits != format_digits)) {
+
+               lbc->priv->id               = g_strdup (id);
+               lbc->priv->text_flag        = text_flag;
+               lbc->priv->checksum_flag    = checksum_flag;
+               lbc->priv->format_digits    = format_digits;
+
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lbc));
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
+/*****************************************************************************/
+/* Get object params.                                                        */
+/*****************************************************************************/
+glTextNode *
+gl_label_barcode_get_data (glLabelBarcode *lbc)
+{
+       g_return_val_if_fail (lbc && GL_IS_LABEL_BARCODE (lbc), NULL);
+
+       return gl_text_node_dup (lbc->priv->text_node);
+}
+
+void
+gl_label_barcode_get_props (glLabelBarcode *lbc,
+                           gchar          **id,
+                           gboolean       *text_flag,
+                           gboolean       *checksum_flag,
+                           guint          *format_digits)
+{
+       g_return_if_fail (lbc && GL_IS_LABEL_BARCODE (lbc));
+
+       *id               = g_strdup (lbc->priv->id);
+       *text_flag        = lbc->priv->text_flag;
+       *checksum_flag    = lbc->priv->checksum_flag;
+       *format_digits    = lbc->priv->format_digits;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get object size method.                                         */
+/*---------------------------------------------------------------------------*/
+static void
+get_size (glLabelObject *object,
+         gdouble       *w,
+         gdouble       *h)
+{
+       glLabelBarcode      *lbc = (glLabelBarcode *)object;
+       gchar               *data;
+       gdouble              w_parent, h_parent;
+       glBarcode           *gbc;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (lbc && GL_IS_LABEL_BARCODE (lbc));
+
+       gl_label_object_get_raw_size (object, &w_parent, &h_parent);
+
+       if (lbc->priv->text_node->field_flag) {
+               data = gl_barcode_default_digits (lbc->priv->id,
+                                                 lbc->priv->format_digits);
+       } else {
+               data = gl_text_node_expand (lbc->priv->text_node, NULL);
+       }
+
+       gbc = gl_barcode_new (lbc->priv->id,
+                             lbc->priv->text_flag,
+                             lbc->priv->checksum_flag,
+                             w_parent,
+                             h_parent,
+                             data);
+       g_free (data);
+
+       if ( gbc == NULL ) {
+               /* Try again with default digits. */
+               data = gl_barcode_default_digits (lbc->priv->id,
+                                                 lbc->priv->format_digits);
+               gbc = gl_barcode_new (lbc->priv->id,
+                                     lbc->priv->text_flag,
+                                     lbc->priv->checksum_flag,
+                                     w_parent,
+                                     h_parent,
+                                     data);
+                g_free (data);
+       }
+
+        if ( gbc != NULL )
+        {
+                *w = gbc->width;
+                *h = gbc->height;
+        }
+        else
+        {
+                /* If we still can't render, just set a default size. */
+                *w = 144;
+                *h = 72;
+        }
+
+       gl_barcode_free (&gbc);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set line color method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_line_color (glLabelObject *object,
+               glColorNode   *line_color_node)
+{
+       glLabelBarcode *lbarcode = (glLabelBarcode *)object;
+
+       g_return_if_fail (lbarcode && GL_IS_LABEL_BARCODE (lbarcode));
+
+       if ( !gl_color_node_equal(lbarcode->priv->color_node, line_color_node) ) {
+               
+               gl_color_node_free (&(lbarcode->priv->color_node));
+               lbarcode->priv->color_node = gl_color_node_dup (line_color_node);
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lbarcode));
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get line color method.                                          */
+/*---------------------------------------------------------------------------*/
+static glColorNode*
+get_line_color (glLabelObject *object)
+{
+       glLabelBarcode *lbarcode = (glLabelBarcode *)object;
+
+       g_return_val_if_fail (lbarcode && GL_IS_LABEL_BARCODE (lbarcode), NULL);
+
+       return gl_color_node_dup (lbarcode->priv->color_node);
+}
+
+/*****************************************************************************/
+/* Draw object method.                                                       */
+/*****************************************************************************/
+static void
+draw_object (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble             x0, y0;
+        cairo_matrix_t      matrix;
+       glBarcode          *gbc;
+       glBarcodeLine      *line;
+       glBarcodeChar      *bchar;
+       GList              *li;
+       gdouble             y_offset;
+        PangoLayout        *layout;
+        PangoFontDescription *desc;
+       gchar              *text, *cstring;
+       glTextNode         *text_node;
+       gchar              *id;
+       gboolean            text_flag;
+       gboolean            checksum_flag;
+       guint               color;
+       glColorNode        *color_node;
+       guint               format_digits;
+       gdouble             w, h;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+        gl_label_object_get_position (object, &x0, &y0);
+        gl_label_object_get_matrix (object, &matrix);
+
+       text_node = gl_label_barcode_get_data (GL_LABEL_BARCODE (object));
+       gl_label_barcode_get_props (GL_LABEL_BARCODE (object),
+                                   &id, &text_flag, &checksum_flag, &format_digits);
+                                       
+       color_node = gl_label_object_get_line_color (object);
+       color = gl_color_node_expand (color_node, record);
+        if (color_node->field_flag && screen_flag)
+        {
+                color = GL_COLOR_MERGE_DEFAULT;
+        }
+       gl_color_node_free (&color_node);
+       
+       gl_label_object_get_size (object, &w, &h);
+
+       text_node = gl_label_barcode_get_data(GL_LABEL_BARCODE(object));
+        text = gl_text_node_expand (text_node, record);
+       if (text_node->field_flag && screen_flag) {
+               text = gl_barcode_default_digits (id, format_digits);
+       }
+
+       gbc = gl_barcode_new (id, text_flag, checksum_flag, w, h, text);
+
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (color));
+
+       if (gbc == NULL) {
+
+                layout = pango_cairo_create_layout (cr);
+
+                desc = pango_font_description_new ();
+                pango_font_description_set_family (desc, GL_BARCODE_FONT_FAMILY);
+                pango_font_description_set_size   (desc, 12 * PANGO_SCALE * FONT_SCALE);
+                pango_layout_set_font_description (layout, desc);
+                pango_font_description_free       (desc);
+
+                if (text == NULL || *text == '\0')
+                {
+                        pango_layout_set_text (layout, _("Barcode data empty"), -1);
+                }
+                else
+                {
+                        pango_layout_set_text (layout, _("Invalid barcode data"), -1);
+                }
+
+                cairo_move_to (cr, 0, 0);
+                pango_cairo_show_layout (cr, layout);
+
+                g_object_unref (layout);
+
+       } else {
+
+               for (li = gbc->lines; li != NULL; li = li->next) {
+                       line = (glBarcodeLine *) li->data;
+
+                       cairo_move_to (cr, line->x, line->y);
+                       cairo_line_to (cr, line->x, line->y + line->length);
+                       cairo_set_line_width (cr, line->width);
+                       cairo_stroke (cr);
+               }
+
+               for (li = gbc->chars; li != NULL; li = li->next) {
+                       bchar = (glBarcodeChar *) li->data;
+
+                        layout = pango_cairo_create_layout (cr);
+
+                        desc = pango_font_description_new ();
+                        pango_font_description_set_family (desc, GL_BARCODE_FONT_FAMILY);
+                        pango_font_description_set_size   (desc, bchar->fsize * PANGO_SCALE * FONT_SCALE);
+                        pango_layout_set_font_description (layout, desc);
+                        pango_font_description_free       (desc);
+
+                       cstring = g_strdup_printf ("%c", bchar->c);
+                        pango_layout_set_text (layout, cstring, -1);
+                       g_free (cstring);
+
+                        y_offset = 0.2 * bchar->fsize;
+
+                       cairo_move_to (cr, bchar->x, bchar->y-y_offset);
+                        pango_cairo_show_layout (cr, layout);
+
+                        g_object_unref (layout);
+
+               }
+
+               gl_barcode_free (&gbc);
+
+       }
+
+       g_free (text);
+       gl_text_node_free (&text_node);
+       g_free (id);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
diff --git a/src/label-barcode.h b/src/label-barcode.h
new file mode 100644 (file)
index 0000000..4eda31d
--- /dev/null
@@ -0,0 +1,78 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_barcode.h:  GLabels label barcode object
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __LABEL_BARCODE_H__
+#define __LABEL_BARCODE_H__
+
+#include "bc.h"
+#include "text-node.h"
+#include "label-object.h"
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_LABEL_BARCODE            (gl_label_barcode_get_type ())
+#define GL_LABEL_BARCODE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_LABEL_BARCODE, glLabelBarcode))
+#define GL_LABEL_BARCODE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_LABEL_BARCODE, glLabelBarcodeClass))
+#define GL_IS_LABEL_BARCODE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_LABEL_BARCODE))
+#define GL_IS_LABEL_BARCODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_LABEL_BARCODE))
+
+typedef struct _glLabelBarcode          glLabelBarcode;
+typedef struct _glLabelBarcodeClass     glLabelBarcodeClass;
+
+typedef struct _glLabelBarcodePrivate   glLabelBarcodePrivate;
+
+struct _glLabelBarcode {
+       glLabelObject            object;
+
+       glLabelBarcodePrivate   *priv;
+};
+
+struct _glLabelBarcodeClass {
+       glLabelObjectClass       parent_class;
+};
+
+
+GType           gl_label_barcode_get_type  (void) G_GNUC_CONST;
+
+GObject        *gl_label_barcode_new       (glLabel        *label);
+
+void            gl_label_barcode_set_data  (glLabelBarcode *lbc,
+                                           glTextNode     *text_node);
+void            gl_label_barcode_set_props (glLabelBarcode *lbc,
+                                           gchar          *id,
+                                           gboolean        text_flag,
+                                           gboolean        checksum_flag,
+                                           guint           format_digits);
+
+glTextNode     *gl_label_barcode_get_data  (glLabelBarcode *lbc);
+void            gl_label_barcode_get_props (glLabelBarcode *lbc,
+                                           gchar         **id,
+                                           gboolean       *text_flag,
+                                           gboolean       *checksum_flag,
+                                           guint          *format_digits);
+
+G_END_DECLS
+
+#endif /* __LABEL_BARCODE_H__ */
diff --git a/src/label-box.c b/src/label-box.c
new file mode 100644 (file)
index 0000000..a42ad75
--- /dev/null
@@ -0,0 +1,402 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_box.c:  GLabels label box object
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include "label-box.h"
+
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glLabelBoxPrivate {
+       gdouble          line_width;
+       glColorNode      *line_color_node;
+       glColorNode      *fill_color_node;
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void    gl_label_box_finalize      (GObject         *object);
+
+static void    copy                       (glLabelObject   *dst_object,
+                                          glLabelObject   *src_object);
+
+static void    set_fill_color             (glLabelObject   *object,
+                                          glColorNode     *fill_color_node);
+
+static void    set_line_color             (glLabelObject   *object,
+                                          glColorNode     *line_color_node);
+
+static void    set_line_width             (glLabelObject   *object,
+                                          gdouble          line_width);
+
+static glColorNode*   get_fill_color      (glLabelObject   *object);
+
+static glColorNode*   get_line_color      (glLabelObject   *object);
+
+static gdouble get_line_width             (glLabelObject   *object);
+
+static void    draw_object                (glLabelObject     *object,
+                                           cairo_t           *cr,
+                                           gboolean           screen_flag,
+                                           glMergeRecord     *record);
+
+static void    draw_shadow                (glLabelObject     *object,
+                                           cairo_t           *cr,
+                                           gboolean           screen_flag,
+                                           glMergeRecord     *record);
+
+
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glLabelBox, gl_label_box, GL_TYPE_LABEL_OBJECT);
+
+static void
+gl_label_box_class_init (glLabelBoxClass *class)
+{
+       GObjectClass       *object_class       = G_OBJECT_CLASS (class);
+       glLabelObjectClass *label_object_class = GL_LABEL_OBJECT_CLASS (class);
+
+       gl_label_box_parent_class = g_type_class_peek_parent (class);
+
+       label_object_class->copy           = copy;
+       label_object_class->set_fill_color = set_fill_color;
+       label_object_class->set_line_color = set_line_color;
+       label_object_class->set_line_width = set_line_width;
+       label_object_class->get_fill_color = get_fill_color;
+       label_object_class->get_line_color = get_line_color;
+       label_object_class->get_line_width = get_line_width;
+        label_object_class->draw_object    = draw_object;
+        label_object_class->draw_shadow    = draw_shadow;
+
+       object_class->finalize = gl_label_box_finalize;
+}
+
+static void
+gl_label_box_init (glLabelBox *lbox)
+{
+       lbox->priv = g_new0 (glLabelBoxPrivate, 1);
+       lbox->priv->line_color_node = gl_color_node_new_default ();
+       lbox->priv->fill_color_node = gl_color_node_new_default ();
+}
+
+static void
+gl_label_box_finalize (GObject *object)
+{
+       glLabelBox *lbox = GL_LABEL_BOX (object);
+
+       g_return_if_fail (object && GL_IS_LABEL_BOX (object));
+
+       gl_color_node_free (&(lbox->priv->fill_color_node));
+       gl_color_node_free (&(lbox->priv->line_color_node));
+       g_free (lbox->priv);
+
+       G_OBJECT_CLASS (gl_label_box_parent_class)->finalize (object);
+}
+
+/*****************************************************************************/
+/* NEW label "box" object.                                                   */
+/*****************************************************************************/
+GObject *
+gl_label_box_new (glLabel *label)
+{
+       glLabelBox *lbox;
+
+       lbox = g_object_new (gl_label_box_get_type(), NULL);
+
+       gl_label_object_set_parent (GL_LABEL_OBJECT(lbox), label);
+
+       return G_OBJECT (lbox);
+}
+
+/*****************************************************************************/
+/* Copy object contents.                                                     */
+/*****************************************************************************/
+static void
+copy (glLabelObject *dst_object,
+      glLabelObject *src_object)
+{
+       glLabelBox  *lbox     = (glLabelBox *)src_object;
+       glLabelBox  *new_lbox = (glLabelBox *)dst_object;
+       gdouble      line_width;
+       glColorNode *line_color_node;
+       glColorNode *fill_color_node;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (lbox && GL_IS_LABEL_BOX (lbox));
+       g_return_if_fail (new_lbox && GL_IS_LABEL_BOX (new_lbox));
+
+       line_width = get_line_width (src_object);
+       line_color_node = get_line_color (src_object);
+       fill_color_node = get_fill_color (src_object);
+
+       set_line_width (dst_object, line_width);
+       set_line_color (dst_object, line_color_node);
+       set_fill_color (dst_object, fill_color_node);
+       
+       gl_color_node_free (&line_color_node);
+       gl_color_node_free (&fill_color_node);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set fill color method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_fill_color (glLabelObject *object,
+               glColorNode   *fill_color_node)
+{
+       glLabelBox *lbox = (glLabelBox *)object;
+       
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (lbox && GL_IS_LABEL_BOX (lbox));
+
+       if (!gl_color_node_equal (lbox->priv->fill_color_node, fill_color_node)) {
+
+               gl_color_node_free (&(lbox->priv->fill_color_node));
+               lbox->priv->fill_color_node = gl_color_node_dup (fill_color_node);
+
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lbox));
+       }
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set line color method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_line_color (glLabelObject *object,
+               glColorNode   *line_color_node)
+{
+       glLabelBox *lbox = (glLabelBox *)object;
+
+       g_return_if_fail (lbox && GL_IS_LABEL_BOX (lbox));
+
+       if ( !gl_color_node_equal (lbox->priv->line_color_node, line_color_node )) {
+               gl_color_node_free (&(lbox->priv->line_color_node));
+               lbox->priv->line_color_node = gl_color_node_dup (line_color_node);
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lbox));
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set line width method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_line_width (glLabelObject *object,
+               gdouble        line_width)
+{
+       glLabelBox *lbox = (glLabelBox *)object;
+
+       g_return_if_fail (lbox && GL_IS_LABEL_BOX (lbox));
+
+       if ( lbox->priv->line_width != line_width ) {
+               lbox->priv->line_width = line_width;
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lbox));
+       }
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get fill color method.                                          */
+/*---------------------------------------------------------------------------*/
+static gdouble
+get_line_width (glLabelObject *object)
+{
+       glLabelBox *lbox = (glLabelBox *)object;
+
+       g_return_val_if_fail (lbox && GL_IS_LABEL_BOX (lbox), 0.0);
+
+       return lbox->priv->line_width;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get line color method.                                          */
+/*---------------------------------------------------------------------------*/
+static glColorNode*
+get_line_color (glLabelObject *object)
+{
+       glLabelBox *lbox = (glLabelBox *)object;
+
+       g_return_val_if_fail (lbox && GL_IS_LABEL_BOX (lbox), 0);
+
+       return gl_color_node_dup (lbox->priv->line_color_node);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get line width method.                                          */
+/*---------------------------------------------------------------------------*/
+static glColorNode*
+get_fill_color (glLabelObject *object)
+{
+       glLabelBox *lbox = (glLabelBox *)object;
+
+       g_return_val_if_fail (lbox && GL_IS_LABEL_BOX (lbox), 0);
+
+       return gl_color_node_dup (lbox->priv->fill_color_node);
+}
+
+/*****************************************************************************/
+/* Draw object method.                                                       */
+/*****************************************************************************/
+static void
+draw_object (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble        w, h;
+       gdouble        line_width;
+       glColorNode   *line_color_node;
+       glColorNode   *fill_color_node;
+        guint          line_color;
+        guint          fill_color;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+        gl_label_object_get_size (object, &w, &h);
+
+       line_width = gl_label_object_get_line_width (object);
+       
+       line_color_node = gl_label_object_get_line_color (object);
+       fill_color_node = gl_label_object_get_fill_color (object);
+        line_color = gl_color_node_expand (line_color_node, record);
+        fill_color = gl_color_node_expand (fill_color_node, record);
+        if (line_color_node->field_flag && screen_flag)
+        {
+                line_color = GL_COLOR_MERGE_DEFAULT;
+        }
+        if (fill_color_node->field_flag && screen_flag)
+        {
+                fill_color = GL_COLOR_FILL_MERGE_DEFAULT;
+        }
+
+
+        cairo_rectangle (cr, 0.0, 0.0, w, h);
+
+       /* Paint fill color */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (fill_color));
+       cairo_fill_preserve (cr);
+
+       /* Draw outline */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (line_color));
+        cairo_set_line_width (cr, line_width);
+        cairo_stroke (cr);
+
+       gl_color_node_free (&line_color_node);
+       gl_color_node_free (&fill_color_node);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Draw shadow method.                                                       */
+/*****************************************************************************/
+static void
+draw_shadow (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble        w, h;
+       gdouble        line_width;
+       glColorNode   *line_color_node;
+       glColorNode   *fill_color_node;
+        guint          line_color;
+        guint          fill_color;
+       glColorNode   *shadow_color_node;
+        guint          shadow_color;
+       gdouble        shadow_opacity;
+       guint          shadow_line_color;
+       guint          shadow_fill_color;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+        gl_label_object_get_size (object, &w, &h);
+
+       line_width = gl_label_object_get_line_width (object);
+       
+       line_color_node = gl_label_object_get_line_color (object);
+       fill_color_node = gl_label_object_get_fill_color (object);
+        line_color = gl_color_node_expand (line_color_node, record);
+        fill_color = gl_color_node_expand (fill_color_node, record);
+        if (line_color_node->field_flag && screen_flag)
+        {
+                line_color = GL_COLOR_MERGE_DEFAULT;
+        }
+        if (fill_color_node->field_flag && screen_flag)
+        {
+                fill_color = GL_COLOR_FILL_MERGE_DEFAULT;
+        }
+
+       shadow_color_node = gl_label_object_get_shadow_color (object);
+        shadow_color = gl_color_node_expand (shadow_color_node, record);
+       if (shadow_color_node->field_flag && screen_flag)
+       {
+               shadow_color = GL_COLOR_SHADOW_MERGE_DEFAULT;
+       }
+       shadow_opacity = gl_label_object_get_shadow_opacity (object);
+       shadow_line_color = gl_color_shadow (shadow_color, shadow_opacity, line_color_node->color);
+       shadow_fill_color = gl_color_shadow (shadow_color, shadow_opacity, fill_color_node->color);
+       
+
+        cairo_rectangle (cr, 0.0, 0.0, w, h);
+
+
+        /* Draw fill shadow */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (shadow_fill_color));
+        cairo_fill_preserve (cr);
+
+        /* Draw outline shadow */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (shadow_line_color));
+        cairo_set_line_width (cr, line_width);
+        cairo_stroke (cr);
+
+
+       gl_color_node_free (&line_color_node);
+       gl_color_node_free (&fill_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
diff --git a/src/label-box.h b/src/label-box.h
new file mode 100644 (file)
index 0000000..93b05a6
--- /dev/null
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_box.h:  GLabels label box object
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __LABEL_BOX_H__
+#define __LABEL_BOX_H__
+
+#include "label-object.h"
+
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_LABEL_BOX            (gl_label_box_get_type ())
+#define GL_LABEL_BOX(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_LABEL_BOX, glLabelBox))
+#define GL_LABEL_BOX_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_LABEL_BOX, glLabelBoxClass))
+#define GL_IS_LABEL_BOX(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_LABEL_BOX))
+#define GL_IS_LABEL_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_LABEL_BOX))
+
+typedef struct _glLabelBox          glLabelBox;
+typedef struct _glLabelBoxClass     glLabelBoxClass;
+
+typedef struct _glLabelBoxPrivate   glLabelBoxPrivate;
+
+struct _glLabelBox {
+       glLabelObject         object;
+
+       glLabelBoxPrivate    *priv;
+};
+
+struct _glLabelBoxClass {
+       glLabelObjectClass    parent_class;
+};
+
+GType         gl_label_box_get_type       (void) G_GNUC_CONST;
+
+GObject      *gl_label_box_new            (glLabel    *label);
+
+G_END_DECLS
+
+#endif /* __LABEL_BOX_H__ */
diff --git a/src/label-ellipse.c b/src/label-ellipse.c
new file mode 100644 (file)
index 0000000..fb21cbf
--- /dev/null
@@ -0,0 +1,407 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_ellipse.c:  GLabels label ellipse object
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include "label-ellipse.h"
+
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+#include <math.h>
+
+#include "cairo-ellipse-path.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glLabelEllipsePrivate {
+       gdouble          line_width;
+       glColorNode     *line_color_node;
+       glColorNode     *fill_color_node;
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void    gl_label_ellipse_finalize      (GObject             *object);
+
+static void    copy                           (glLabelObject       *dst_object,
+                                              glLabelObject       *src_object);
+
+static void    set_fill_color                 (glLabelObject       *object,
+                                              glColorNode         *fill_color_node);
+
+static void    set_line_color                 (glLabelObject       *object,
+                                              glColorNode         *line_color_node);
+
+static void    set_line_width                 (glLabelObject       *object,
+                                              gdouble              line_width);
+
+static glColorNode*   get_fill_color          (glLabelObject       *object);
+
+static glColorNode*   get_line_color          (glLabelObject       *object);
+
+static gdouble get_line_width                 (glLabelObject       *object);
+
+static void    draw_object                (glLabelObject     *object,
+                                           cairo_t           *cr,
+                                           gboolean           screen_flag,
+                                           glMergeRecord     *record);
+
+static void    draw_shadow                (glLabelObject     *object,
+                                           cairo_t           *cr,
+                                           gboolean           screen_flag,
+                                           glMergeRecord     *record);
+
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glLabelEllipse, gl_label_ellipse, GL_TYPE_LABEL_OBJECT);
+
+static void
+gl_label_ellipse_class_init (glLabelEllipseClass *class)
+{
+       GObjectClass       *object_class       = G_OBJECT_CLASS (class);
+       glLabelObjectClass *label_object_class = GL_LABEL_OBJECT_CLASS (class);
+
+       gl_label_ellipse_parent_class = g_type_class_peek_parent (class);
+
+       label_object_class->copy           = copy;
+       label_object_class->set_fill_color = set_fill_color;
+       label_object_class->set_line_color = set_line_color;
+       label_object_class->set_line_width = set_line_width;
+       label_object_class->get_fill_color = get_fill_color;
+       label_object_class->get_line_color = get_line_color;
+       label_object_class->get_line_width = get_line_width;
+        label_object_class->draw_object    = draw_object;
+        label_object_class->draw_shadow    = draw_shadow;
+
+       object_class->finalize = gl_label_ellipse_finalize;
+}
+
+static void
+gl_label_ellipse_init (glLabelEllipse *lellipse)
+{
+       lellipse->priv = g_new0 (glLabelEllipsePrivate, 1);
+       lellipse->priv->line_color_node = gl_color_node_new_default ();
+       lellipse->priv->fill_color_node = gl_color_node_new_default ();
+}
+
+static void
+gl_label_ellipse_finalize (GObject *object)
+{
+       glLabelEllipse *lellipse = GL_LABEL_ELLIPSE (object);
+
+       g_return_if_fail (object && GL_IS_LABEL_ELLIPSE (object));
+
+       gl_color_node_free (&(lellipse->priv->line_color_node));
+       gl_color_node_free (&(lellipse->priv->fill_color_node));
+       g_free (lellipse->priv);
+
+       G_OBJECT_CLASS (gl_label_ellipse_parent_class)->finalize (object);
+}
+
+/*****************************************************************************/
+/* NEW label "ellipse" object.                                               */
+/*****************************************************************************/
+GObject *
+gl_label_ellipse_new (glLabel *label)
+{
+       glLabelEllipse *lellipse;
+
+       lellipse = g_object_new (gl_label_ellipse_get_type(), NULL);
+
+       gl_label_object_set_parent (GL_LABEL_OBJECT(lellipse), label);
+
+       return G_OBJECT (lellipse);
+}
+
+/*****************************************************************************/
+/* Copy object contents.                                                     */
+/*****************************************************************************/
+static void
+copy (glLabelObject *dst_object,
+      glLabelObject *src_object)
+{
+       glLabelEllipse *lellipse     = (glLabelEllipse *)src_object;
+       glLabelEllipse *new_lellipse = (glLabelEllipse *)dst_object;
+       gdouble         line_width;
+       glColorNode    *line_color_node;
+       glColorNode    *fill_color_node;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (lellipse && GL_IS_LABEL_ELLIPSE (lellipse));
+       g_return_if_fail (new_lellipse && GL_IS_LABEL_ELLIPSE (new_lellipse));
+
+       line_width = get_line_width (src_object);
+       line_color_node = get_line_color (src_object);
+       fill_color_node = get_fill_color (src_object);
+
+       set_line_width (dst_object, line_width);
+       set_line_color (dst_object, line_color_node);
+       set_fill_color (dst_object, fill_color_node);
+
+       gl_color_node_free (&line_color_node);
+       gl_color_node_free (&fill_color_node);
+       
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set fill color method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_fill_color (glLabelObject *object,
+               glColorNode   *fill_color_node)
+{
+       glLabelEllipse *lellipse = (glLabelEllipse *)object;
+
+       g_return_if_fail (lellipse && GL_IS_LABEL_ELLIPSE (lellipse));
+
+       if (!gl_color_node_equal (lellipse->priv->fill_color_node, fill_color_node)) {
+
+               gl_color_node_free (&(lellipse->priv->fill_color_node));
+               lellipse->priv->fill_color_node = gl_color_node_dup (fill_color_node);
+
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lellipse));
+       }       
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set line color method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_line_color (glLabelObject *object,
+               glColorNode   *line_color_node)
+{
+       glLabelEllipse *lellipse = (glLabelEllipse *)object;
+
+       g_return_if_fail (lellipse && GL_IS_LABEL_ELLIPSE (lellipse));
+
+       if ( !gl_color_node_equal (lellipse->priv->line_color_node, line_color_node) ) {
+               
+               gl_color_node_free (&(lellipse->priv->line_color_node));
+               lellipse->priv->line_color_node = gl_color_node_dup (line_color_node);
+               
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lellipse));
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set line width method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_line_width (glLabelObject *object,
+               gdouble        line_width)
+{
+       glLabelEllipse *lellipse = (glLabelEllipse *)object;
+
+       g_return_if_fail (lellipse && GL_IS_LABEL_ELLIPSE (lellipse));
+
+       if ( lellipse->priv->line_width != line_width ) {
+               lellipse->priv->line_width = line_width;
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lellipse));
+       }
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get fill color method.                                          */
+/*---------------------------------------------------------------------------*/
+static gdouble
+get_line_width (glLabelObject *object)
+{
+       glLabelEllipse *lellipse = (glLabelEllipse *)object;
+
+       g_return_val_if_fail (lellipse && GL_IS_LABEL_ELLIPSE (lellipse), 0.0);
+
+       return lellipse->priv->line_width;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get line color method.                                          */
+/*---------------------------------------------------------------------------*/
+static glColorNode*
+get_line_color (glLabelObject *object)
+{
+       glLabelEllipse *lellipse = (glLabelEllipse *)object;
+
+       g_return_val_if_fail (lellipse && GL_IS_LABEL_ELLIPSE (lellipse), 0);
+
+       return gl_color_node_dup (lellipse->priv->line_color_node);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get line width method.                                          */
+/*---------------------------------------------------------------------------*/
+static glColorNode*
+get_fill_color (glLabelObject *object)
+{
+       glLabelEllipse *lellipse = (glLabelEllipse *)object;
+
+       g_return_val_if_fail (lellipse && GL_IS_LABEL_ELLIPSE (lellipse), 0);
+
+       return gl_color_node_dup (lellipse->priv->fill_color_node);
+}
+
+/*****************************************************************************/
+/* Draw object method.                                                       */
+/*****************************************************************************/
+static void
+draw_object (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble        w, h;
+       gdouble        line_width;
+       glColorNode   *line_color_node;
+       glColorNode   *fill_color_node;
+        guint          line_color;
+        guint          fill_color;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+        gl_label_object_get_size (object, &w, &h);
+
+       line_width = gl_label_object_get_line_width (object);
+       
+       line_color_node = gl_label_object_get_line_color (object);
+       fill_color_node = gl_label_object_get_fill_color (object);
+        line_color = gl_color_node_expand (line_color_node, record);
+        fill_color = gl_color_node_expand (fill_color_node, record);
+        if (line_color_node->field_flag && screen_flag)
+        {
+                line_color = GL_COLOR_MERGE_DEFAULT;
+        }
+        if (fill_color_node->field_flag && screen_flag)
+        {
+                fill_color = GL_COLOR_FILL_MERGE_DEFAULT;
+        }
+
+
+        gl_cairo_ellipse_path (cr, w/2, h/2);
+
+       /* Paint fill color */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (fill_color));
+       cairo_fill_preserve (cr);
+
+       /* Draw outline */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (line_color));
+        cairo_set_line_width (cr, line_width);
+        cairo_stroke (cr);
+
+       gl_color_node_free (&line_color_node);
+       gl_color_node_free (&fill_color_node);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Draw shadow method.                                                       */
+/*****************************************************************************/
+static void
+draw_shadow (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble        w, h;
+       gdouble        line_width;
+       glColorNode   *line_color_node;
+       glColorNode   *fill_color_node;
+        guint          line_color;
+        guint          fill_color;
+       glColorNode   *shadow_color_node;
+        guint          shadow_color;
+       gdouble        shadow_opacity;
+       guint          shadow_line_color;
+       guint          shadow_fill_color;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+        gl_label_object_get_size (object, &w, &h);
+
+       line_width = gl_label_object_get_line_width (object);
+       
+       line_color_node = gl_label_object_get_line_color (object);
+       fill_color_node = gl_label_object_get_fill_color (object);
+        line_color = gl_color_node_expand (line_color_node, record);
+        fill_color = gl_color_node_expand (fill_color_node, record);
+        if (line_color_node->field_flag && screen_flag)
+        {
+                line_color = GL_COLOR_MERGE_DEFAULT;
+        }
+        if (fill_color_node->field_flag && screen_flag)
+        {
+                fill_color = GL_COLOR_FILL_MERGE_DEFAULT;
+        }
+
+       shadow_color_node = gl_label_object_get_shadow_color (object);
+        shadow_color = gl_color_node_expand (shadow_color_node, record);
+       if (shadow_color_node->field_flag && screen_flag)
+       {
+               shadow_color = GL_COLOR_SHADOW_MERGE_DEFAULT;
+       }
+       shadow_opacity = gl_label_object_get_shadow_opacity (object);
+       shadow_line_color = gl_color_shadow (shadow_color_node->color, shadow_opacity, line_color_node->color);
+       shadow_fill_color = gl_color_shadow (shadow_color_node->color, shadow_opacity, fill_color_node->color);
+       
+
+        gl_cairo_ellipse_path (cr, w/2, h/2);
+
+
+        /* Draw fill shadow */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (shadow_fill_color));
+        cairo_fill_preserve (cr);
+
+        /* Draw outline shadow */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (shadow_line_color));
+        cairo_set_line_width (cr, line_width);
+        cairo_stroke (cr);
+
+
+       gl_color_node_free (&line_color_node);
+       gl_color_node_free (&fill_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
diff --git a/src/label-ellipse.h b/src/label-ellipse.h
new file mode 100644 (file)
index 0000000..439ad5f
--- /dev/null
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_ellipse.h:  GLabels label ellipse object
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __LABEL_ELLIPSE_H__
+#define __LABEL_ELLIPSE_H__
+
+#include "label-object.h"
+
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_LABEL_ELLIPSE            (gl_label_ellipse_get_type ())
+#define GL_LABEL_ELLIPSE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_LABEL_ELLIPSE, glLabelEllipse))
+#define GL_LABEL_ELLIPSE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_LABEL_ELLIPSE, glLabelEllipseClass))
+#define GL_IS_LABEL_ELLIPSE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_LABEL_ELLIPSE))
+#define GL_IS_LABEL_ELLIPSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_LABEL_ELLIPSE))
+
+typedef struct _glLabelEllipse          glLabelEllipse;
+typedef struct _glLabelEllipseClass     glLabelEllipseClass;
+
+typedef struct _glLabelEllipsePrivate   glLabelEllipsePrivate;
+
+struct _glLabelEllipse {
+       glLabelObject          object;
+
+       glLabelEllipsePrivate *priv;
+};
+
+struct _glLabelEllipseClass {
+       glLabelObjectClass     parent_class;
+};
+
+GType           gl_label_ellipse_get_type       (void) G_GNUC_CONST;
+
+GObject        *gl_label_ellipse_new            (glLabel        *label);
+
+G_END_DECLS
+
+#endif /* __LABEL_ELLIPSE_H__ */
diff --git a/src/label-image.c b/src/label-image.c
new file mode 100644 (file)
index 0000000..9d0bcaf
--- /dev/null
@@ -0,0 +1,359 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_image.c:  GLabels label image object
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include "label-image.h"
+
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+#include <gdk/gdkcairo.h>
+
+#include "pixmaps/checkerboard.xpm"
+
+#include "debug.h"
+
+
+#define MIN_IMAGE_SIZE 1.0
+
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glLabelImagePrivate {
+       glTextNode       *filename;
+       GdkPixbuf        *pixbuf;
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+static GdkPixbuf *default_pixbuf = NULL;
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void gl_label_image_finalize      (GObject           *object);
+
+static void copy                         (glLabelObject     *dst_object,
+                                         glLabelObject     *src_object);
+
+static void set_size                      (glLabelObject      *object,
+                                          gdouble             w,
+                                          gdouble             h);
+
+static void    draw_object               (glLabelObject     *object,
+                                          cairo_t           *cr,
+                                          gboolean           screen_flag,
+                                          glMergeRecord     *record);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glLabelImage, gl_label_image, GL_TYPE_LABEL_OBJECT);
+
+static void
+gl_label_image_class_init (glLabelImageClass *class)
+{
+       GObjectClass       *object_class       = G_OBJECT_CLASS (class);
+       glLabelObjectClass *label_object_class = GL_LABEL_OBJECT_CLASS (class);
+
+       gl_label_image_parent_class = g_type_class_peek_parent (class);
+
+       label_object_class->copy           = copy;
+       label_object_class->set_size       = set_size;
+        label_object_class->draw_object    = draw_object;
+        label_object_class->draw_shadow    = NULL;
+
+       object_class->finalize = gl_label_image_finalize;
+}
+
+static void
+gl_label_image_init (glLabelImage *limage)
+{
+        GdkPixbuf *pixbuf;
+
+       if ( default_pixbuf == NULL ) {
+               pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)checkerboard_xpm);
+                default_pixbuf =
+                        gdk_pixbuf_scale_simple (pixbuf, 128, 128, GDK_INTERP_NEAREST);
+                g_object_unref (pixbuf);
+       }
+
+       limage->priv = g_new0 (glLabelImagePrivate, 1);
+
+       limage->priv->filename = g_new0 (glTextNode, 1);
+
+       limage->priv->pixbuf = default_pixbuf;
+}
+
+static void
+gl_label_image_finalize (GObject *object)
+{
+       glLabelObject *lobject = GL_LABEL_OBJECT (object);
+       glLabelImage  *limage  = GL_LABEL_IMAGE (object);;
+       GHashTable    *pixbuf_cache;
+
+       g_return_if_fail (object && GL_IS_LABEL_IMAGE (object));
+
+       if (!limage->priv->filename->field_flag) {
+               pixbuf_cache = gl_label_get_pixbuf_cache (lobject->parent);
+               gl_pixbuf_cache_remove_pixbuf (pixbuf_cache,
+                                              limage->priv->filename->data);
+       }
+       gl_text_node_free (&limage->priv->filename);
+       g_free (limage->priv);
+
+       G_OBJECT_CLASS (gl_label_image_parent_class)->finalize (object);
+}
+
+/*****************************************************************************/
+/* NEW label "image" object.                                                 */
+/*****************************************************************************/
+GObject *
+gl_label_image_new (glLabel *label)
+{
+       glLabelImage *limage;
+
+       limage = g_object_new (gl_label_image_get_type(), NULL);
+
+       gl_label_object_set_parent (GL_LABEL_OBJECT(limage), label);
+
+       return G_OBJECT (limage);
+}
+
+/*****************************************************************************/
+/* Copy object contents.                                                     */
+/*****************************************************************************/
+static void
+copy (glLabelObject *dst_object,
+      glLabelObject *src_object)
+{
+       glLabelImage     *limage     = (glLabelImage *)src_object;
+       glLabelImage     *new_limage = (glLabelImage *)dst_object;
+       glTextNode       *filename;
+       GdkPixbuf        *pixbuf;
+       GHashTable       *pixbuf_cache;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (limage && GL_IS_LABEL_IMAGE (limage));
+       g_return_if_fail (new_limage && GL_IS_LABEL_IMAGE (new_limage));
+
+       filename = gl_label_image_get_filename (limage);
+
+       /* Make sure destination label has data suitably cached. */
+       if ( !filename->field_flag && (filename->data != NULL) ) {
+               pixbuf = limage->priv->pixbuf;
+               if ( pixbuf != default_pixbuf ) {
+                       pixbuf_cache = gl_label_get_pixbuf_cache (dst_object->parent);
+                       gl_pixbuf_cache_add_pixbuf (pixbuf_cache, filename->data, pixbuf);
+               }
+       }
+
+       gl_label_image_set_filename (new_limage, filename);
+       gl_text_node_free (&filename);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set size method.                                                */
+/*---------------------------------------------------------------------------*/
+static void
+set_size (glLabelObject *object,
+         gdouble        w,
+         gdouble        h)
+{
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        if (w < MIN_IMAGE_SIZE)
+        {
+                w = MIN_IMAGE_SIZE;
+        }
+
+        if (h < MIN_IMAGE_SIZE)
+        {
+                h = MIN_IMAGE_SIZE;
+        }
+
+       GL_LABEL_OBJECT_CLASS (gl_label_image_parent_class)->set_size (object, w, h);
+}
+
+
+/*****************************************************************************/
+/* Set object params.                                                        */
+/*****************************************************************************/
+void
+gl_label_image_set_filename (glLabelImage *limage,
+                            glTextNode   *filename)
+{
+       glTextNode  *old_filename;
+       GHashTable  *pixbuf_cache;
+       GdkPixbuf   *pixbuf;
+       gdouble      image_w, image_h, aspect_ratio, w, h;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (limage && GL_IS_LABEL_IMAGE (limage));
+       g_return_if_fail (filename != NULL);
+
+       old_filename = limage->priv->filename;
+
+       /* If Unchanged don't do anything */
+       if ( gl_text_node_equal (filename, old_filename ) ) {
+               return;
+       }
+
+       pixbuf_cache = gl_label_get_pixbuf_cache (GL_LABEL_OBJECT(limage)->parent);
+
+       /* Remove reference to previous pixbuf from cache, if needed. */
+       if ( !old_filename->field_flag && (old_filename->data != NULL) ) {
+               gl_pixbuf_cache_remove_pixbuf (pixbuf_cache, old_filename->data);
+       }
+
+       /* Set new filename. */
+       limage->priv->filename = gl_text_node_dup(filename);
+       gl_text_node_free (&old_filename);
+
+       /* Now set the pixbuf. */
+       if ( filename->field_flag || (filename->data == NULL) ) {
+
+               limage->priv->pixbuf = default_pixbuf;
+
+       } else {
+
+               pixbuf = gl_pixbuf_cache_get_pixbuf (pixbuf_cache, filename->data);
+
+               if (pixbuf != NULL) {
+                       limage->priv->pixbuf = pixbuf;
+               } else {
+                       limage->priv->pixbuf = default_pixbuf;
+               }
+       }
+
+       /* Treat current size as a bounding box, scale image to maintain aspect
+        * ratio while fitting it in this bounding box. */
+       image_w = gdk_pixbuf_get_width (limage->priv->pixbuf);
+       image_h = gdk_pixbuf_get_height (limage->priv->pixbuf);
+       aspect_ratio = image_h / image_w;
+       gl_label_object_get_size (GL_LABEL_OBJECT(limage), &w, &h);
+       if ( h > w*aspect_ratio ) {
+               h = w * aspect_ratio;
+       } else {
+               w = h / aspect_ratio;
+       }
+       gl_label_object_set_size (GL_LABEL_OBJECT(limage), w, h);
+
+       gl_label_object_emit_changed (GL_LABEL_OBJECT(limage));
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
+/*****************************************************************************/
+/* Get object params.                                                        */
+/*****************************************************************************/
+glTextNode *
+gl_label_image_get_filename (glLabelImage *limage)
+{
+       g_return_val_if_fail (limage && GL_IS_LABEL_IMAGE (limage), NULL);
+
+       return gl_text_node_dup (limage->priv->filename);
+}
+
+const GdkPixbuf *
+gl_label_image_get_pixbuf (glLabelImage  *limage,
+                          glMergeRecord *record)
+{
+       g_return_val_if_fail (limage && GL_IS_LABEL_IMAGE (limage), NULL);
+
+       if ((record != NULL) && limage->priv->filename->field_flag) {
+
+               GdkPixbuf   *pixbuf = NULL;
+               gchar       *real_filename;
+
+               /* Indirect filename, re-evaluate for given record. */
+
+               real_filename = gl_merge_eval_key (record,
+                                                  limage->priv->filename->data);
+
+               if (real_filename != NULL) {
+                       pixbuf = gdk_pixbuf_new_from_file (real_filename, NULL);
+               }
+               if ( pixbuf != NULL ) {
+                       return pixbuf;
+               } else {
+                       return default_pixbuf;
+               }
+
+       }
+
+       return limage->priv->pixbuf;
+
+}
+
+/*****************************************************************************/
+/* Draw object method.                                                       */
+/*****************************************************************************/
+static void
+draw_object (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble          x0, y0;
+       gdouble          w, h;
+       const GdkPixbuf *pixbuf;
+       gint             image_w, image_h;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       gl_label_object_get_size (object, &w, &h);
+        gl_label_object_get_position (object, &x0, &y0);
+
+       pixbuf = gl_label_image_get_pixbuf (GL_LABEL_IMAGE (object), record);
+       image_w = gdk_pixbuf_get_width (pixbuf);
+       image_h = gdk_pixbuf_get_height (pixbuf);
+
+       cairo_save (cr);
+
+        cairo_rectangle (cr, 0.0, 0.0, w, h);
+
+       cairo_scale (cr, w/image_w, h/image_h);
+        gdk_cairo_set_source_pixbuf (cr, (GdkPixbuf *)pixbuf, 0, 0);
+        cairo_fill (cr);
+
+       cairo_restore (cr);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
+
diff --git a/src/label-image.h b/src/label-image.h
new file mode 100644 (file)
index 0000000..a45f0c7
--- /dev/null
@@ -0,0 +1,71 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_image.h:  GLabels label image object
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __LABEL_IMAGE_H__
+#define __LABEL_IMAGE_H__
+
+#include "label-object.h"
+#include "text-node.h"
+#include "merge.h"
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_LABEL_IMAGE            (gl_label_image_get_type ())
+#define GL_LABEL_IMAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_LABEL_IMAGE, glLabelImage))
+#define GL_LABEL_IMAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_LABEL_IMAGE, glLabelImageClass))
+#define GL_IS_LABEL_IMAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_LABEL_IMAGE))
+#define GL_IS_LABEL_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_LABEL_IMAGE))
+
+typedef struct _glLabelImage          glLabelImage;
+typedef struct _glLabelImageClass     glLabelImageClass;
+
+typedef struct _glLabelImagePrivate   glLabelImagePrivate;
+
+struct _glLabelImage {
+       glLabelObject         object;
+
+       glLabelImagePrivate  *priv;
+};
+
+struct _glLabelImageClass {
+       glLabelObjectClass    parent_class;
+};
+
+GType            gl_label_image_get_type     (void) G_GNUC_CONST;
+
+GObject         *gl_label_image_new          (glLabel       *label);
+
+void             gl_label_image_set_filename (glLabelImage  *limage,
+                                             glTextNode    *filename);
+
+glTextNode      *gl_label_image_get_filename (glLabelImage  *limage);
+
+const GdkPixbuf *gl_label_image_get_pixbuf   (glLabelImage  *limage,
+                                             glMergeRecord *record);
+
+G_END_DECLS
+
+#endif /* __LABEL_IMAGE_H__ */
diff --git a/src/label-line.c b/src/label-line.c
new file mode 100644 (file)
index 0000000..b3eae40
--- /dev/null
@@ -0,0 +1,323 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_line.c:  GLabels label line object
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include "label-line.h"
+
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glLabelLinePrivate {
+       gdouble          line_width;
+       glColorNode     *line_color_node;
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void    gl_label_line_finalize      (GObject          *object);
+
+static void    copy                        (glLabelObject    *dst_object,
+                                           glLabelObject    *src_object);
+
+static void    set_line_color              (glLabelObject    *object,
+                                           glColorNode      *line_color_node);
+
+static void    set_line_width              (glLabelObject    *object,
+                                           gdouble           line_width);
+
+static glColorNode   *get_line_color       (glLabelObject    *object);
+
+static gdouble get_line_width              (glLabelObject    *object);
+
+static void    draw_object                (glLabelObject     *object,
+                                           cairo_t           *cr,
+                                           gboolean           screen_flag,
+                                           glMergeRecord     *record);
+
+static void    draw_shadow                (glLabelObject     *object,
+                                           cairo_t           *cr,
+                                           gboolean           screen_flag,
+                                           glMergeRecord     *record);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glLabelLine, gl_label_line, GL_TYPE_LABEL_OBJECT);
+
+static void
+gl_label_line_class_init (glLabelLineClass *class)
+{
+       GObjectClass       *object_class       = G_OBJECT_CLASS (class);
+       glLabelObjectClass *label_object_class = GL_LABEL_OBJECT_CLASS (class);
+
+       gl_label_line_parent_class = g_type_class_peek_parent (class);
+
+       label_object_class->copy           = copy;
+       label_object_class->set_line_color = set_line_color;
+       label_object_class->set_line_width = set_line_width;
+       label_object_class->get_line_color = get_line_color;
+       label_object_class->get_line_width = get_line_width;
+        label_object_class->draw_object    = draw_object;
+        label_object_class->draw_shadow    = draw_shadow;
+
+       object_class->finalize = gl_label_line_finalize;
+}
+
+static void
+gl_label_line_init (glLabelLine *lline)
+{
+       lline->priv = g_new0 (glLabelLinePrivate, 1);
+       lline->priv->line_color_node = gl_color_node_new_default ();
+}
+
+static void
+gl_label_line_finalize (GObject *object)
+{
+       glLabelLine *lline = GL_LABEL_LINE (object);
+
+       g_return_if_fail (object && GL_IS_LABEL_LINE (object));
+
+       gl_color_node_free (&(lline->priv->line_color_node));
+       g_free (lline->priv);
+
+       G_OBJECT_CLASS (gl_label_line_parent_class)->finalize (object);
+}
+
+/*****************************************************************************/
+/* NEW label "line" object.                                               */
+/*****************************************************************************/
+GObject *
+gl_label_line_new (glLabel *label)
+{
+       glLabelLine *lline;
+
+       lline = g_object_new (gl_label_line_get_type(), NULL);
+
+       gl_label_object_set_parent (GL_LABEL_OBJECT(lline), label);
+
+       return G_OBJECT (lline);
+}
+
+/*****************************************************************************/
+/* Copy object contents.                                                     */
+/*****************************************************************************/
+static void
+copy (glLabelObject *dst_object,
+      glLabelObject *src_object)
+{
+       glLabelLine *lline     = (glLabelLine *)src_object;
+       glLabelLine *new_lline = (glLabelLine *)dst_object;
+       gdouble      line_width;
+       glColorNode *line_color_node;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (lline && GL_IS_LABEL_LINE (lline));
+       g_return_if_fail (new_lline && GL_IS_LABEL_LINE (new_lline));
+
+       line_width = get_line_width (src_object);
+       line_color_node = get_line_color (src_object);
+
+       set_line_width (dst_object, line_width);
+       set_line_color (dst_object, line_color_node);
+
+       gl_color_node_free (&line_color_node);
+       
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set line color method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_line_color (glLabelObject *object,
+               glColorNode   *line_color_node)
+{
+       glLabelLine *lline = (glLabelLine *)object;
+
+       g_return_if_fail (lline && GL_IS_LABEL_LINE (lline));
+
+       if ( !gl_color_node_equal (lline->priv->line_color_node, line_color_node)) {
+               
+               gl_color_node_free (&(lline->priv->line_color_node ));
+               lline->priv->line_color_node = gl_color_node_dup (line_color_node);
+               
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lline));
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set line width method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_line_width (glLabelObject *object,
+               gdouble        line_width)
+{
+       glLabelLine *lline = (glLabelLine *)object;
+
+       g_return_if_fail (lline && GL_IS_LABEL_LINE (lline));
+
+       if ( lline->priv->line_width != line_width ) {
+               lline->priv->line_width = line_width;
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(lline));
+       }
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get line color method.                                          */
+/*---------------------------------------------------------------------------*/
+static gdouble
+get_line_width (glLabelObject *object)
+{
+       glLabelLine *lline = (glLabelLine *)object;
+
+       g_return_val_if_fail (lline && GL_IS_LABEL_LINE (lline), 0.0);
+
+       return lline->priv->line_width;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Get line width method.                                          */
+/*---------------------------------------------------------------------------*/
+static glColorNode*
+get_line_color (glLabelObject *object)
+{
+       glLabelLine *lline = (glLabelLine *)object;
+
+       g_return_val_if_fail (lline && GL_IS_LABEL_LINE (lline), 0);
+
+       return gl_color_node_dup (lline->priv->line_color_node);
+}
+
+/*****************************************************************************/
+/* Draw object method.                                                       */
+/*****************************************************************************/
+static void
+draw_object (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble        w, h;
+       gdouble        line_width;
+       glColorNode   *line_color_node;
+        guint          line_color;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+        gl_label_object_get_size (GL_LABEL_OBJECT(object), &w, &h);
+
+       line_width = gl_label_object_get_line_width (object);
+       
+       line_color_node = gl_label_object_get_line_color (object);
+        line_color = gl_color_node_expand (line_color_node, record);
+        if (line_color_node->field_flag && screen_flag)
+        {
+                line_color = GL_COLOR_MERGE_DEFAULT;
+        }
+
+
+        cairo_move_to (cr, 0.0, 0.0);
+        cairo_line_to (cr, w, h);
+
+
+       /* Draw line */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (line_color));
+        cairo_set_line_width (cr, line_width);
+        cairo_stroke (cr);
+
+       gl_color_node_free (&line_color_node);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Draw shadow method.                                                       */
+/*****************************************************************************/
+static void
+draw_shadow (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble        w, h;
+       gdouble        line_width;
+       glColorNode   *line_color_node;
+       glColorNode   *shadow_color_node;
+       gdouble        shadow_opacity;
+       guint          shadow_line_color;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+        gl_label_object_get_size (GL_LABEL_OBJECT(object), &w, &h);
+
+       line_width = gl_label_object_get_line_width (object);
+       
+       line_color_node = gl_label_object_get_line_color (object);
+        if (line_color_node->field_flag)
+        {
+                line_color_node->color = GL_COLOR_MERGE_DEFAULT;
+        }
+
+       shadow_color_node = gl_label_object_get_shadow_color (object);
+       if (shadow_color_node->field_flag)
+       {
+               shadow_color_node->color = GL_COLOR_SHADOW_MERGE_DEFAULT;
+       }
+       shadow_opacity = gl_label_object_get_shadow_opacity (object);
+       shadow_line_color = gl_color_shadow (shadow_color_node->color, shadow_opacity, line_color_node->color);
+
+
+        cairo_move_to (cr, 0.0, 0.0);
+        cairo_line_to (cr, w, h);
+
+
+        /* Draw outline shadow */
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (shadow_line_color));
+        cairo_set_line_width (cr, line_width);
+        cairo_stroke (cr);
+
+
+       gl_color_node_free (&line_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
diff --git a/src/label-line.h b/src/label-line.h
new file mode 100644 (file)
index 0000000..3b73e42
--- /dev/null
@@ -0,0 +1,62 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_line.h:  GLabels label line object
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __LABEL_LINE_H__
+#define __LABEL_LINE_H__
+
+#include "label-object.h"
+
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_LABEL_LINE            (gl_label_line_get_type ())
+#define GL_LABEL_LINE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_LABEL_LINE, glLabelLine))
+#define GL_LABEL_LINE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_LABEL_LINE, glLabelLineClass))
+#define GL_IS_LABEL_LINE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_LABEL_LINE))
+#define GL_IS_LABEL_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_LABEL_LINE))
+
+typedef struct _glLabelLine          glLabelLine;
+typedef struct _glLabelLineClass     glLabelLineClass;
+
+typedef struct _glLabelLinePrivate   glLabelLinePrivate;
+
+struct _glLabelLine {
+       glLabelObject         object;
+
+       glLabelLinePrivate   *priv;
+};
+
+struct _glLabelLineClass {
+       glLabelObjectClass    parent_class;
+};
+
+GType        gl_label_line_get_type       (void) G_GNUC_CONST;
+
+GObject     *gl_label_line_new            (glLabel     *label);
+
+
+G_END_DECLS
+
+#endif /* __LABEL_LINE_H__ */
diff --git a/src/label-object.c b/src/label-object.c
new file mode 100644 (file)
index 0000000..fd79e28
--- /dev/null
@@ -0,0 +1,1525 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_object.c:  GLabels label object base class
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "label-object.h"
+
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+#include <math.h>
+
+#include "marshal.h"
+
+#include "debug.h"
+
+
+/*========================================================*/
+/* Private defines.                                       */
+/*========================================================*/
+
+#define DEFAULT_SHADOW_X_OFFSET (3.6)
+#define DEFAULT_SHADOW_Y_OFFSET (3.6)
+#define DEFAULT_SHADOW_OPACITY  (0.5)
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glLabelObjectPrivate {
+       gchar             *name;
+       gdouble            x, y;
+       gdouble            w, h;
+        cairo_matrix_t     matrix;
+
+       gdouble            aspect_ratio;
+
+       gboolean           shadow_state;
+       gdouble            shadow_x;
+       gdouble            shadow_y;
+       glColorNode       *shadow_color_node;
+       gdouble            shadow_opacity;
+};
+
+enum {
+       CHANGED,
+       MOVED,
+       FLIP_ROTATE,
+       TOP,
+       BOTTOM,
+        REMOVED,
+       LAST_SIGNAL
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+static guint signals[LAST_SIGNAL] = {0};
+
+static guint instance = 0;
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void gl_label_object_finalize      (GObject            *object);
+
+static void merge_changed_cb              (glLabel            *label,
+                                          glLabelObject      *object);
+
+static void set_size                      (glLabelObject      *object,
+                                          gdouble             w,
+                                          gdouble             h);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glLabelObject, gl_label_object, G_TYPE_OBJECT);
+
+static void
+gl_label_object_class_init (glLabelObjectClass *class)
+{
+       GObjectClass       *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       gl_label_object_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_label_object_finalize;
+
+       class->set_size = set_size;
+
+       signals[CHANGED] =
+               g_signal_new ("changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelObjectClass, changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+
+       signals[MOVED] =
+               g_signal_new ("moved",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelObjectClass, moved),
+                             NULL, NULL,
+                             gl_marshal_VOID__DOUBLE_DOUBLE,
+                             G_TYPE_NONE,
+                             2, G_TYPE_DOUBLE, G_TYPE_DOUBLE);
+       signals[FLIP_ROTATE] =
+               g_signal_new ("flip_rotate",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelObjectClass, flip_rotate),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+       signals[TOP] =
+               g_signal_new ("top",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelObjectClass, top),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+
+       signals[BOTTOM] =
+               g_signal_new ("bottom",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelObjectClass, bottom),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+       signals[REMOVED] =
+               g_signal_new ("removed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelObjectClass, removed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+static void
+gl_label_object_init (glLabelObject *object)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       object->priv = g_new0 (glLabelObjectPrivate, 1);
+
+       object->priv->name = g_strdup_printf ("object%d", instance++);
+
+       cairo_matrix_init_identity (&object->priv->matrix);
+
+       object->priv->shadow_state = FALSE;
+       object->priv->shadow_x = DEFAULT_SHADOW_X_OFFSET;
+       object->priv->shadow_y = DEFAULT_SHADOW_Y_OFFSET;
+       object->priv->shadow_color_node = gl_color_node_new_default ();
+       object->priv->shadow_opacity = DEFAULT_SHADOW_OPACITY;
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+static void
+gl_label_object_finalize (GObject *object)
+{
+        glLabelObject *label_object = GL_LABEL_OBJECT (object);
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       g_free (label_object->priv->name);
+       g_free (label_object->priv);
+
+       G_OBJECT_CLASS (gl_label_object_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* New label object.                                                         */
+/*****************************************************************************/
+GObject *
+gl_label_object_new (glLabel *label)
+{
+       glLabelObject *object;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       object = g_object_new (gl_label_object_get_type(), NULL);
+
+       gl_label_object_set_parent (object, label);
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return G_OBJECT (object);
+}
+
+/*****************************************************************************/
+/* Duplicate object.                                                         */
+/*****************************************************************************/
+glLabelObject *
+gl_label_object_dup (glLabelObject *src_object,
+                    glLabel       *label)
+{
+       glLabelObject    *dst_object;
+       gdouble           x, y, w, h;
+        cairo_matrix_t    matrix;
+       gboolean          shadow_state;
+       gdouble           shadow_x, shadow_y;
+       glColorNode      *shadow_color_node;
+       gdouble           shadow_opacity;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (src_object && GL_IS_LABEL_OBJECT (src_object), NULL);
+
+       dst_object = g_object_new (G_OBJECT_TYPE(src_object), NULL);
+
+       gl_label_object_set_parent (dst_object, label);
+
+       gl_label_object_get_position      (src_object, &x, &y);
+       gl_label_object_get_size          (src_object, &w, &h);
+       gl_label_object_get_matrix        (src_object, &matrix);
+       gl_label_object_get_shadow_offset (src_object, &shadow_x, &shadow_y);
+       shadow_color_node = gl_label_object_get_shadow_color   (src_object);
+       shadow_opacity    = gl_label_object_get_shadow_opacity (src_object);
+       shadow_state      = gl_label_object_get_shadow_state   (src_object);
+
+       gl_label_object_set_position (dst_object, x, y);
+       gl_label_object_set_size     (dst_object, w, h);
+       gl_label_object_set_matrix   (dst_object, &matrix);
+       gl_label_object_set_shadow_offset  (dst_object, shadow_x, shadow_y);
+       gl_label_object_set_shadow_color   (dst_object, shadow_color_node);
+       gl_label_object_set_shadow_opacity (dst_object, shadow_opacity);
+       gl_label_object_set_shadow_state   (dst_object, shadow_state);
+
+       gl_color_node_free (&shadow_color_node);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(src_object)->copy != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(src_object)->copy (dst_object, src_object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return dst_object;
+}
+
+/*****************************************************************************/
+/* Emit "changed" signal (for derived objects).                              */
+/*****************************************************************************/
+void
+gl_label_object_emit_changed (glLabelObject *object)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       g_signal_emit (G_OBJECT(object), signals[CHANGED], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Set parent label of object.                                               */
+/*****************************************************************************/
+void
+gl_label_object_set_parent (glLabelObject *object,
+                           glLabel       *label)
+{
+       glLabel *old_parent;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+       g_return_if_fail (label && GL_IS_LABEL (label));
+
+       old_parent = object->parent;
+       if ( old_parent != NULL ) {
+               g_signal_handlers_disconnect_by_func (old_parent,
+                                                     G_CALLBACK(merge_changed_cb),
+                                                     object);
+               gl_label_remove_object( old_parent, object );
+       }
+       gl_label_add_object( label, object );
+
+       g_signal_connect (G_OBJECT(label), "merge_changed",
+                         G_CALLBACK(merge_changed_cb), object);
+
+       g_signal_emit (G_OBJECT(object), signals[CHANGED], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Get parent label of object.                                               */
+/*****************************************************************************/
+glLabel *
+gl_label_object_get_parent (glLabelObject *object)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), NULL);
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return object->parent;
+}
+
+/*****************************************************************************/
+/* Set remove object from parent.                                            */
+/*****************************************************************************/
+void
+gl_label_object_remove (glLabelObject *object)
+{
+       glLabel *parent;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       parent = object->parent;
+       if ( parent != NULL ) {
+               g_signal_handlers_disconnect_by_func (parent,
+                                                     G_CALLBACK(merge_changed_cb),
+                                                     object);
+               gl_label_remove_object (parent, object);
+
+                g_signal_emit (G_OBJECT(object), signals[REMOVED], 0);
+
+                g_object_unref (G_OBJECT(object));
+       }
+
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Set name of object.                                                       */
+/*****************************************************************************/
+void
+gl_label_object_set_name (glLabelObject *object,
+                         gchar         *name)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       g_free(object->priv->name);
+       object->priv->name = name;
+
+       g_signal_emit (G_OBJECT(object), signals[CHANGED], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Get name of object.                                                       */
+/*****************************************************************************/
+gchar *
+gl_label_object_get_name (glLabelObject *object)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), NULL);
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return g_strdup(object->priv->name);
+}
+
+/*****************************************************************************/
+/* Set position of object.                                                   */
+/*****************************************************************************/
+void
+gl_label_object_set_position (glLabelObject *object,
+                             gdouble        x,
+                             gdouble        y)
+{
+       gdouble dx, dy;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( (x != object->priv->x) || (y != object->priv->y) ) {
+
+               dx = x - object->priv->x;
+               dy = y - object->priv->y;
+
+               object->priv->x = x;
+               object->priv->y = y;
+
+               g_signal_emit (G_OBJECT(object), signals[MOVED], 0, dx, dy);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Set position of object relative to old position.                          */
+/*****************************************************************************/
+void
+gl_label_object_set_position_relative (glLabelObject *object,
+                                      gdouble        dx,
+                                      gdouble        dy)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( (dx != 0.0) || (dy != 0.0) ) {
+
+               object->priv->x += dx;
+               object->priv->y += dy;
+
+               gl_debug (DEBUG_LABEL, "       x = %f, y= %f",
+                         object->priv->x,
+                         object->priv->y);
+
+               g_signal_emit (G_OBJECT(object), signals[MOVED], 0, dx, dy);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Get position of object.                                                   */
+/*****************************************************************************/
+void
+gl_label_object_get_position (glLabelObject *object,
+                             gdouble       *x,
+                             gdouble       *y)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       *x = object->priv->x;
+       *y = object->priv->y;
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Default set size method.                                        */
+/*---------------------------------------------------------------------------*/
+static void
+set_size (glLabelObject *object,
+         gdouble        w,
+         gdouble        h)
+{
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( (object->priv->w != w) || (object->priv->h != h) ) {
+
+               object->priv->w = w;
+               object->priv->h = h;
+
+               g_signal_emit (G_OBJECT(object), signals[CHANGED], 0);
+       }
+}
+
+/*****************************************************************************/
+/* Set size of object.                                                       */
+/*****************************************************************************/
+void
+gl_label_object_set_size (glLabelObject *object,
+                         gdouble        w,
+                         gdouble        h)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_size != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_size (object, w, h);
+
+               object->priv->aspect_ratio = h / w;
+
+       }
+
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Set size of object honoring current aspect ratio.                         */
+/*****************************************************************************/
+void
+gl_label_object_set_size_honor_aspect (glLabelObject *object,
+                                      gdouble        w,
+                                      gdouble        h)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( h > w*object->priv->aspect_ratio ) {
+
+               h = w * object->priv->aspect_ratio;
+
+       } else {
+
+               w = h / object->priv->aspect_ratio;
+
+       }
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_size != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_size (object, w, h);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Get raw size method (don't let object content adjust size).               */
+/*****************************************************************************/
+void
+gl_label_object_get_raw_size (glLabelObject *object,
+                              gdouble       *w,
+                              gdouble       *h)
+{
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       *w = object->priv->w;
+       *h = object->priv->h;
+}
+
+/*****************************************************************************/
+/* Get size of object.                                                       */
+/*****************************************************************************/
+void
+gl_label_object_get_size (glLabelObject *object,
+                         gdouble       *w,
+                         gdouble       *h)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_size != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->get_size (object, w, h);
+
+       } else {
+
+               gl_label_object_get_raw_size (object, w, h);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Get extent of object.                                                     */
+/*****************************************************************************/
+void
+gl_label_object_get_extent (glLabelObject *object,
+                            glLabelRegion *region)
+{
+       gdouble        w, h;
+        gdouble        line_w;
+       gdouble        xa1, ya1, xa2, ya2, xa3, ya3, xa4, ya4;
+        cairo_matrix_t matrix;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       gl_label_object_get_size (object, &w, &h);
+        line_w = gl_label_object_get_line_width (object);
+
+       /* setup untransformed corners of bounding box, account for line width */
+       xa1 =   - line_w/2;
+       ya1 =   - line_w/2;
+       xa2 = w + line_w/2;
+       ya2 =   - line_w/2;
+       xa3 = w + line_w/2;
+       ya3 = h + line_w/2;
+       xa4 =   - line_w/2;
+       ya4 = h + line_w/2;
+
+       /* transform these points */
+       gl_label_object_get_matrix (object, &matrix);
+        cairo_matrix_transform_point (&matrix, &xa1, &ya1);
+        cairo_matrix_transform_point (&matrix, &xa2, &ya2);
+        cairo_matrix_transform_point (&matrix, &xa3, &ya3);
+        cairo_matrix_transform_point (&matrix, &xa4, &ya4);
+
+       /* now find the maximum extent of these points in x and y */
+       region->x1 = MIN (xa1, MIN (xa2, MIN (xa3, xa4))) + object->priv->x;
+       region->y1 = MIN (ya1, MIN (ya2, MIN (ya3, ya4))) + object->priv->y;
+       region->x2 = MAX (xa1, MAX (xa2, MAX (xa3, xa4))) + object->priv->x;
+       region->y2 = MAX (ya1, MAX (ya2, MAX (ya3, ya4))) + object->priv->y;
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Can text properties be set for this object?                               */
+/*****************************************************************************/
+gboolean
+gl_label_object_can_text (glLabelObject     *object)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_family != NULL ) {
+
+               return TRUE;
+
+       } else {
+
+               return FALSE;
+
+       }
+
+}
+
+/*****************************************************************************/
+/* Set font family for all text contained in object.                         */
+/*****************************************************************************/
+void
+gl_label_object_set_font_family (glLabelObject     *object,
+                                const gchar       *font_family)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_family != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_font_family (object, font_family);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Set font size for all text contained in object.                          */
+/****************************************************************************/
+void
+gl_label_object_set_font_size (glLabelObject     *object,
+                              gdouble            font_size)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_size != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_font_size (object, font_size);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Set font weight for all text contained in object.                        */
+/****************************************************************************/
+void
+gl_label_object_set_font_weight (glLabelObject     *object,
+                                PangoWeight        font_weight)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_weight != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_font_weight (object, font_weight);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Set font italic flag for all text contained in object.                   */
+/****************************************************************************/
+void
+gl_label_object_set_font_italic_flag (glLabelObject     *object,
+                                     gboolean           font_italic_flag)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_font_italic_flag != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_font_italic_flag (object,
+                                                                        font_italic_flag);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Set text alignment for all text contained in object.                     */
+/****************************************************************************/
+void
+gl_label_object_set_text_alignment (glLabelObject     *object,
+                                   PangoAlignment     text_alignment)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_text_alignment != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_text_alignment (object,
+                                                                      text_alignment);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Set text line spacing for all text contained in object.                  */
+/****************************************************************************/
+void
+gl_label_object_set_text_line_spacing (glLabelObject     *object,
+                                      gdouble            text_line_spacing)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_text_line_spacing != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_text_line_spacing (object, text_line_spacing);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Set text color for all text contained in object.                         */
+/****************************************************************************/
+void
+gl_label_object_set_text_color (glLabelObject     *object,
+                               glColorNode       *text_color_node)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_text_color != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_text_color (object, text_color_node);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Get font family for all text contained in object.                         */
+/*****************************************************************************/
+gchar *
+gl_label_object_get_font_family (glLabelObject     *object)
+{
+       gchar *ret = NULL;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), NULL);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_font_family != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_font_family (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/****************************************************************************/
+/* Get font size for all text contained in object.                          */
+/****************************************************************************/
+gdouble
+gl_label_object_get_font_size (glLabelObject     *object)
+{
+       gdouble ret = 0.0;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), 0.0);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_font_size != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_font_size (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/****************************************************************************/
+/* Get font weight for all text contained in object.                        */
+/****************************************************************************/
+PangoWeight    
+gl_label_object_get_font_weight (glLabelObject     *object)
+{
+       PangoWeight     ret = PANGO_WEIGHT_NORMAL;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), PANGO_WEIGHT_NORMAL);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_font_weight != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_font_weight (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/****************************************************************************/
+/* Get font italic flag for all text contained in object.                   */
+/****************************************************************************/
+gboolean
+gl_label_object_get_font_italic_flag (glLabelObject     *object)
+{
+       gboolean ret = FALSE;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_font_italic_flag != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_font_italic_flag (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/****************************************************************************/
+/* Get text alignment for all text contained in object.                     */
+/****************************************************************************/
+PangoAlignment
+gl_label_object_get_text_alignment (glLabelObject     *object)
+{
+       PangoAlignment ret = PANGO_ALIGN_LEFT;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), PANGO_ALIGN_LEFT);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_text_alignment != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_text_alignment (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/****************************************************************************/
+/* Get text line spacing for all text contained in object.                  */
+/****************************************************************************/
+gdouble
+gl_label_object_get_text_line_spacing (glLabelObject     *object)
+{
+       gdouble ret = 0.0;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), 0.0);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_text_line_spacing != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_text_line_spacing (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/****************************************************************************/
+/* Get text color for all text contained in object.                         */
+/****************************************************************************/
+glColorNode*
+gl_label_object_get_text_color (glLabelObject     *object)
+{
+       glColorNode *ret = NULL;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), 0);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_text_color != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_text_color (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/*****************************************************************************/
+/* Can fill properties be set for this object?                               */
+/*****************************************************************************/
+gboolean
+gl_label_object_can_fill (glLabelObject     *object)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_fill_color != NULL ) {
+
+               return TRUE;
+
+       } else {
+
+               return FALSE;
+
+       }
+
+}
+
+/****************************************************************************/
+/* Set fill color for object.                                               */
+/****************************************************************************/
+void
+gl_label_object_set_fill_color (glLabelObject     *object,
+                               glColorNode       *fill_color_node)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_fill_color != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_fill_color (object, fill_color_node);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Get fill color for object.                                               */
+/****************************************************************************/
+glColorNode*
+gl_label_object_get_fill_color (glLabelObject     *object)
+{
+       glColorNode *ret = NULL;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), 0);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_fill_color != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_fill_color (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/*****************************************************************************/
+/* Can line color property be set for this object?                           */
+/*****************************************************************************/
+gboolean
+gl_label_object_can_line_color (glLabelObject     *object)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_line_color != NULL ) {
+
+               return TRUE;
+
+       } else {
+
+               return FALSE;
+
+       }
+
+}
+
+/****************************************************************************/
+/* Set line color for object.                                               */
+/****************************************************************************/
+void
+gl_label_object_set_line_color (glLabelObject     *object,
+                               glColorNode       *line_color_node)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_line_color != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_line_color (object, line_color_node);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Get line color for object.                                               */
+/****************************************************************************/
+glColorNode*
+gl_label_object_get_line_color (glLabelObject     *object)
+{
+       glColorNode *ret = NULL;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), 0);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_line_color != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_line_color (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/*****************************************************************************/
+/* Can line width property be set for this object?                           */
+/*****************************************************************************/
+gboolean
+gl_label_object_can_line_width (glLabelObject     *object)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_line_width != NULL ) {
+
+               return TRUE;
+
+       } else {
+
+               return FALSE;
+
+       }
+
+}
+
+/****************************************************************************/
+/* Set line width for object.                                               */
+/****************************************************************************/
+void
+gl_label_object_set_line_width (glLabelObject     *object,
+                               gdouble            line_width)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->set_line_width != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_LABEL_OBJECT_GET_CLASS(object)->set_line_width (object, line_width);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Get line width for object.                                               */
+/****************************************************************************/
+gdouble
+gl_label_object_get_line_width (glLabelObject     *object)
+{
+       gdouble ret = 0.0;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), 0.0);
+
+       if ( GL_LABEL_OBJECT_GET_CLASS(object)->get_line_width != NULL ) {
+
+               /* We have an object specific method, use it */
+               ret = GL_LABEL_OBJECT_GET_CLASS(object)->get_line_width (object);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return ret;
+}
+
+/****************************************************************************/
+/* Set shadow state of object.                                              */
+/****************************************************************************/
+void
+gl_label_object_set_shadow_state (glLabelObject     *object,
+                                 gboolean           state)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if (object->priv->shadow_state != state)
+       {
+               object->priv->shadow_state = state;
+               gl_label_object_emit_changed (object);
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Get shadow state of object.                                              */
+/****************************************************************************/
+gboolean
+gl_label_object_get_shadow_state (glLabelObject     *object)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
+
+       return object->priv->shadow_state;
+}
+
+/****************************************************************************/
+/* Set offset of object's shadow.                                           */
+/****************************************************************************/
+void
+gl_label_object_set_shadow_offset (glLabelObject     *object,
+                                  gdouble            x,
+                                  gdouble            y)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( (x != object->priv->shadow_x) || (y != object->priv->shadow_y) )
+       {
+               object->priv->shadow_x = x;
+               object->priv->shadow_y = y;
+
+               gl_label_object_emit_changed (object);
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Get offset of object's shadow.                                           */
+/****************************************************************************/
+void
+gl_label_object_get_shadow_offset (glLabelObject     *object,
+                                  gdouble           *x,
+                                  gdouble           *y)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       *x = object->priv->shadow_x;
+       *y = object->priv->shadow_y;
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Set color of object's shadow.                                            */
+/****************************************************************************/
+void
+gl_label_object_set_shadow_color (glLabelObject     *object,
+                                 glColorNode       *color_node)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if ( !gl_color_node_equal (object->priv->shadow_color_node, color_node ))
+       {
+               gl_color_node_free (&(object->priv->shadow_color_node));
+               object->priv->shadow_color_node = gl_color_node_dup (color_node);
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(object));
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Get color of object's shadow.                                            */
+/****************************************************************************/
+glColorNode*
+gl_label_object_get_shadow_color (glLabelObject     *object)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), NULL);
+
+       return gl_color_node_dup (object->priv->shadow_color_node);
+}
+
+/****************************************************************************/
+/* Set opacity of object's shadow.                                          */
+/****************************************************************************/
+void
+gl_label_object_set_shadow_opacity (glLabelObject     *object,
+                                   gdouble            alpha)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       if (object->priv->shadow_opacity != alpha)
+       {
+               object->priv->shadow_opacity = alpha;
+               gl_label_object_emit_changed (object);
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Get opacity of object's shadow.                                          */
+/****************************************************************************/
+gdouble
+gl_label_object_get_shadow_opacity (glLabelObject     *object)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
+
+       return object->priv->shadow_opacity;
+}
+
+/****************************************************************************/
+/* Flip object horizontally.                                                */
+/****************************************************************************/
+void
+gl_label_object_flip_horiz (glLabelObject *object)
+{
+        cairo_matrix_t flip_matrix;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        cairo_matrix_init_scale (&flip_matrix, -1.0, 1.0);
+        cairo_matrix_multiply (&object->priv->matrix, &object->priv->matrix, &flip_matrix);
+
+       g_signal_emit (G_OBJECT(object), signals[FLIP_ROTATE], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Flip object vertically.                                                  */
+/****************************************************************************/
+void
+gl_label_object_flip_vert (glLabelObject *object)
+{
+        cairo_matrix_t flip_matrix;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        cairo_matrix_init_scale (&flip_matrix, 1.0, -1.0);
+        cairo_matrix_multiply (&object->priv->matrix, &object->priv->matrix, &flip_matrix);
+
+       g_signal_emit (G_OBJECT(object), signals[FLIP_ROTATE], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Rotate object.                                                           */
+/****************************************************************************/
+void
+gl_label_object_rotate (glLabelObject *object,
+                       gdouble        theta_degs)
+{
+        cairo_matrix_t rotate_matrix;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        cairo_matrix_init_rotate (&rotate_matrix, theta_degs*(G_PI/180.));
+        cairo_matrix_multiply (&object->priv->matrix, &object->priv->matrix, &rotate_matrix);
+
+       g_signal_emit (G_OBJECT(object), signals[FLIP_ROTATE], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Set raw affine                                                           */
+/****************************************************************************/
+void
+gl_label_object_set_matrix (glLabelObject  *object,
+                            cairo_matrix_t *matrix)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        object->priv->matrix = *matrix;
+}
+
+/****************************************************************************/
+/* Get raw affine                                                           */
+/****************************************************************************/
+void
+gl_label_object_get_matrix (glLabelObject  *object,
+                            cairo_matrix_t *matrix)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        *matrix = object->priv->matrix;
+}
+
+/****************************************************************************/
+/* Bring label object to front/top.                                         */
+/****************************************************************************/
+void
+gl_label_object_raise_to_top (glLabelObject *object)
+{
+       glLabel *label;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       label = object->parent;
+
+       gl_label_raise_object_to_top (label, object);
+
+       g_signal_emit (G_OBJECT(object), signals[TOP], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Send label object to rear/bottom.                                        */
+/****************************************************************************/
+void
+gl_label_object_lower_to_bottom (glLabelObject *object)
+{
+       glLabel *label;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       label = object->parent;
+
+       gl_label_lower_object_to_bottom (label, object);
+
+       g_signal_emit (G_OBJECT(object), signals[BOTTOM], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Label's merge data changed callback.                           */
+/*--------------------------------------------------------------------------*/
+static void
+merge_changed_cb (glLabel       *label,
+                 glLabelObject *object)
+{
+       gl_label_object_emit_changed (object);
+}
+
+/*****************************************************************************/
+/* Draw object                                                               */
+/*****************************************************************************/
+void
+gl_label_object_draw (glLabelObject *object,
+                      cairo_t       *cr,
+                      gboolean       screen_flag,
+                      glMergeRecord *record)
+
+{
+        gdouble        x0, y0;
+        cairo_matrix_t matrix;
+       gboolean       shadow_state;
+       gdouble        shadow_x, shadow_y;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        gl_label_object_get_position (object, &x0, &y0);
+        gl_label_object_get_matrix (object, &matrix);
+
+        cairo_save (cr);
+        cairo_translate (cr, x0, y0);
+
+        if ( GL_LABEL_OBJECT_GET_CLASS(object)->draw_shadow != NULL ) {
+
+                shadow_state = gl_label_object_get_shadow_state (object);
+
+                if ( shadow_state )
+                {
+                        gl_label_object_get_shadow_offset (object, &shadow_x, &shadow_y);
+
+                        cairo_save (cr);
+                        cairo_translate (cr, shadow_x, shadow_y);
+                        cairo_transform (cr, &matrix);
+
+                        GL_LABEL_OBJECT_GET_CLASS(object)->draw_shadow (object,
+                                                                        cr,
+                                                                        screen_flag,
+                                                                        record);
+
+                        cairo_restore (cr);
+                }
+        }
+
+        if ( GL_LABEL_OBJECT_GET_CLASS(object)->draw_object != NULL ) {
+
+                cairo_save (cr);
+                cairo_transform (cr, &matrix);
+
+                GL_LABEL_OBJECT_GET_CLASS(object)->draw_object (object,
+                                                                cr,
+                                                                screen_flag,
+                                                                record);
+
+                cairo_restore (cr);
+        }
+
+        cairo_restore (cr);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
diff --git a/src/label-object.h b/src/label-object.h
new file mode 100644 (file)
index 0000000..5ee0f9b
--- /dev/null
@@ -0,0 +1,345 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_object.h:  GLabels label object base class
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __LABEL_OBJECT_H__
+#define __LABEL_OBJECT_H__
+
+#include <glib-object.h>
+#include <pango/pango.h>
+#include <cairo.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+        GL_LABEL_OBJECT_TEXT,
+        GL_LABEL_OBJECT_BOX,
+        GL_LABEL_OBJECT_LINE,
+        GL_LABEL_OBJECT_ELLIPSE,
+        GL_LABEL_OBJECT_IMAGE,
+        GL_LABEL_OBJECT_BARCODE,
+        GL_LABEL_OBJECT_N_TYPES
+} glLabelObjectType;
+
+
+#define GL_TYPE_LABEL_OBJECT              (gl_label_object_get_type ())
+#define GL_LABEL_OBJECT(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_LABEL_OBJECT, glLabelObject))
+#define GL_LABEL_OBJECT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_LABEL_OBJECT, glLabelObjectClass))
+#define GL_IS_LABEL_OBJECT(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_LABEL_OBJECT))
+#define GL_IS_LABEL_OBJECT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_LABEL_OBJECT))
+#define GL_LABEL_OBJECT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GL_TYPE_LABEL_OBJECT, glLabelObjectClass))
+
+
+typedef struct _glLabelObject          glLabelObject;
+typedef struct _glLabelObjectClass     glLabelObjectClass;
+
+typedef struct _glLabelObjectPrivate   glLabelObjectPrivate;
+
+#include "label.h"
+#include "color.h"
+
+struct _glLabelObject {
+        GObject               object;
+
+        glLabel              *parent;
+
+        glLabelObjectPrivate *priv;
+};
+
+struct _glLabelObjectClass {
+        GObjectClass          parent_class;
+
+        /*
+         * Methods
+         */
+
+        void              (*set_size)             (glLabelObject     *object,
+                                                   gdouble            w,
+                                                   gdouble            h);
+
+        void              (*get_size)             (glLabelObject     *object,
+                                                   gdouble           *w,
+                                                   gdouble           *h);
+
+        void              (*set_font_family)      (glLabelObject     *object,
+                                                   const gchar       *font_family);
+
+        void              (*set_font_size)        (glLabelObject     *object,
+                                                   gdouble            font_size);
+
+        void              (*set_font_weight)      (glLabelObject     *object,
+                                                   PangoWeight        font_weight);
+
+        void              (*set_font_italic_flag) (glLabelObject     *object,
+                                                   gboolean           font_italic_flag);
+
+        void              (*set_text_alignment)   (glLabelObject     *object,
+                                                   PangoAlignment     text_alignment);
+
+        void              (*set_text_line_spacing) (glLabelObject    *object,
+                                                    gdouble           text_line_spacing);
+
+        void              (*set_text_color)       (glLabelObject     *object,
+                                                   glColorNode       *text_color_node);
+
+        void              (*set_fill_color)       (glLabelObject     *object,
+                                                   glColorNode       *fill_color_node);
+
+        void              (*set_line_color)       (glLabelObject     *object,
+                                                   glColorNode       *line_color_node);
+
+        void              (*set_line_width)       (glLabelObject     *object,
+                                                   gdouble            line_width);
+
+        gchar            *(*get_font_family)      (glLabelObject     *object);
+
+        gdouble           (*get_font_size)        (glLabelObject     *object);
+
+        PangoWeight       (*get_font_weight)      (glLabelObject     *object);
+
+        gboolean          (*get_font_italic_flag) (glLabelObject     *object);
+
+        PangoAlignment    (*get_text_alignment)   (glLabelObject     *object);
+
+        gdouble           (*get_text_line_spacing) (glLabelObject    *object);
+
+        glColorNode*      (*get_text_color)       (glLabelObject     *object);
+
+        glColorNode*      (*get_fill_color)       (glLabelObject     *object);
+
+        glColorNode*      (*get_line_color)       (glLabelObject     *object);
+
+        gdouble           (*get_line_width)       (glLabelObject     *object);
+
+        void              (*copy)                 (glLabelObject     *dst_object,
+                                                   glLabelObject     *src_object);
+
+        /*
+         * Draw methods
+         */
+        void        (*draw_shadow)      (glLabelObject *object,
+                                         cairo_t       *cr,
+                                         gboolean       screen_flag,
+                                         glMergeRecord *record);
+
+        void        (*draw_object)      (glLabelObject *object,
+                                         cairo_t       *cr,
+                                         gboolean       screen_flag,
+                                         glMergeRecord *record);
+
+
+        /*
+         * Signals
+         */
+        void (*changed)     (glLabelObject     *object,
+                             gpointer            user_data);
+
+        void (*moved)       (glLabelObject     *object,
+                             gdouble            dx,
+                             gdouble            dy,
+                             gpointer           user_data);
+
+        void (*flip_rotate) (glLabelObject     *object,
+                             gpointer           user_data);
+
+        void (*top)         (glLabelObject     *object,
+                             gpointer           user_data);
+
+        void (*bottom)      (glLabelObject     *object,
+                             gpointer           user_data);
+
+        void (*removed)     (glLabelObject     *object,
+                             gpointer            user_data);
+
+};
+
+GType          gl_label_object_get_type              (void) G_GNUC_CONST;
+
+GObject       *gl_label_object_new                   (glLabel           *label);
+
+
+glLabelObject *gl_label_object_dup                   (glLabelObject     *src_object,
+                                                      glLabel           *label);
+
+void           gl_label_object_emit_changed          (glLabelObject     *object);
+
+
+void           gl_label_object_set_parent            (glLabelObject     *object,
+                                                      glLabel           *label);
+
+glLabel       *gl_label_object_get_parent            (glLabelObject     *object);
+
+
+void           gl_label_object_remove                (glLabelObject     *object);
+
+void           gl_label_object_set_name              (glLabelObject     *object,
+                                                      gchar             *name);
+
+gchar         *gl_label_object_get_name              (glLabelObject     *object);
+
+
+void           gl_label_object_set_position          (glLabelObject     *object,
+                                                      gdouble            x,
+                                                      gdouble            y);
+
+void           gl_label_object_set_position_relative (glLabelObject     *object,
+                                                      gdouble            dx,
+                                                      gdouble            dy);
+
+void           gl_label_object_get_position          (glLabelObject     *object,
+                                                      gdouble           *x,
+                                                      gdouble           *y);
+
+void           gl_label_object_set_size              (glLabelObject     *object,
+                                                      gdouble            w,
+                                                      gdouble            h);
+
+void           gl_label_object_set_size_honor_aspect (glLabelObject     *object,
+                                                      gdouble            w,
+                                                      gdouble            h);
+
+void           gl_label_object_get_size              (glLabelObject     *object,
+                                                      gdouble           *w,
+                                                      gdouble           *h);
+
+void           gl_label_object_get_raw_size          (glLabelObject     *object,
+                                                      gdouble           *w,
+                                                      gdouble           *h);
+
+void           gl_label_object_get_extent            (glLabelObject     *object,
+                                                      glLabelRegion     *region);
+
+gboolean       gl_label_object_can_text              (glLabelObject     *object);
+
+void           gl_label_object_set_font_family       (glLabelObject     *object,
+                                                      const gchar       *font_family);
+
+void           gl_label_object_set_font_size         (glLabelObject     *object,
+                                                      gdouble            font_size);
+
+void           gl_label_object_set_font_weight       (glLabelObject     *object,
+                                                      PangoWeight        font_weight);
+
+void           gl_label_object_set_font_italic_flag  (glLabelObject     *object,
+                                                      gboolean           font_italic_flag);
+
+void           gl_label_object_set_text_alignment    (glLabelObject     *object,
+                                                      PangoAlignment     text_alignment);
+
+void           gl_label_object_set_text_color        (glLabelObject     *object,
+                                                      glColorNode       *text_color_node);
+
+void           gl_label_object_set_text_line_spacing (glLabelObject     *object,
+                                                      gdouble            text_line_spacing);
+
+
+gchar           *gl_label_object_get_font_family       (glLabelObject     *object);
+
+gdouble          gl_label_object_get_font_size         (glLabelObject     *object);
+
+PangoWeight      gl_label_object_get_font_weight       (glLabelObject     *object);
+
+gboolean         gl_label_object_get_font_italic_flag  (glLabelObject     *object);
+
+PangoAlignment   gl_label_object_get_text_alignment    (glLabelObject     *object);
+
+gdouble          gl_label_object_get_text_line_spacing (glLabelObject     *object);
+
+glColorNode     *gl_label_object_get_text_color        (glLabelObject     *object);
+
+
+gboolean       gl_label_object_can_fill              (glLabelObject     *object);
+
+void           gl_label_object_set_fill_color        (glLabelObject     *object,
+                                                      glColorNode       *fill_color_node);
+
+glColorNode*   gl_label_object_get_fill_color        (glLabelObject     *object);
+
+
+gboolean       gl_label_object_can_line_color        (glLabelObject     *object);
+
+void           gl_label_object_set_line_color        (glLabelObject     *object,
+                                                      glColorNode       *line_color_node);
+
+glColorNode   *gl_label_object_get_line_color        (glLabelObject     *object);
+
+gboolean       gl_label_object_can_line_width        (glLabelObject     *object);
+
+void           gl_label_object_set_line_width        (glLabelObject     *object,
+                                                      gdouble            line_width);
+
+gdouble        gl_label_object_get_line_width        (glLabelObject     *object);
+
+
+void           gl_label_object_raise_to_top          (glLabelObject     *object);
+
+void           gl_label_object_lower_to_bottom       (glLabelObject     *object);
+
+
+void           gl_label_object_flip_horiz            (glLabelObject     *object);
+
+void           gl_label_object_flip_vert             (glLabelObject     *object);
+
+void           gl_label_object_rotate                (glLabelObject     *object,
+                                                      gdouble            theta_degs);
+
+void           gl_label_object_set_matrix            (glLabelObject     *object,
+                                                      cairo_matrix_t    *matrix);
+
+void           gl_label_object_get_matrix            (glLabelObject     *object,
+                                                      cairo_matrix_t    *matrix);
+
+void           gl_label_object_set_shadow_state      (glLabelObject     *object,
+                                                      gboolean           state);
+
+void           gl_label_object_set_shadow_offset     (glLabelObject     *object,
+                                                      gdouble            x,
+                                                      gdouble            y);
+
+void           gl_label_object_set_shadow_color      (glLabelObject     *object,
+                                                      glColorNode       *color_node);
+
+void           gl_label_object_set_shadow_opacity    (glLabelObject     *object,
+                                                      gdouble            alpha);
+
+gboolean       gl_label_object_get_shadow_state      (glLabelObject     *object);
+
+void           gl_label_object_get_shadow_offset     (glLabelObject     *object,
+                                                      gdouble           *x,
+                                                      gdouble           *y);
+
+glColorNode*   gl_label_object_get_shadow_color      (glLabelObject     *object);
+
+gdouble        gl_label_object_get_shadow_opacity    (glLabelObject     *object);
+
+void           gl_label_object_draw                  (glLabelObject     *object,
+                                                      cairo_t           *cr,
+                                                      gboolean           screen_flag,
+                                                      glMergeRecord     *record);
+
+
+
+
+G_END_DECLS
+
+#endif /* __LABEL_OBJECT_H__ */
diff --git a/src/label-text.c b/src/label-text.c
new file mode 100644 (file)
index 0000000..9a4d59a
--- /dev/null
@@ -0,0 +1,1094 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_text.c:  GLabels label text object
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include "label-text.h"
+
+#include <glib/gmem.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gmessages.h>
+#include <pango/pango.h>
+#include <math.h>
+
+#include "util.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+#define DEFAULT_FONT_FAMILY       "Sans"
+#define DEFAULT_FONT_SIZE         14.0
+#define DEFAULT_FONT_WEIGHT       PANGO_WEIGHT_NORMAL
+#define DEFAULT_FONT_ITALIC_FLAG  FALSE
+#define DEFAULT_ALIGN             PANGO_ALIGN_LEFT
+#define DEFAULT_COLOR             GL_COLOR (0,0,0)
+#define DEFAULT_TEXT_LINE_SPACING 1.0
+#define DEFAULT_AUTO_SHRINK       FALSE
+
+#define FONT_SCALE (72.0/96.0)
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glLabelTextPrivate {
+       GtkTextTagTable *tag_table;
+       GtkTextBuffer   *buffer;
+
+       gchar           *font_family;
+       gdouble          font_size;
+       PangoWeight      font_weight;
+       gboolean         font_italic_flag;
+       PangoAlignment   align;
+       glColorNode     *color_node;
+       gdouble          line_spacing;
+       gboolean         auto_shrink;
+
+        gboolean         size_changed;
+        gdouble          w;
+        gdouble          h;
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void gl_label_text_finalize      (GObject          *object);
+
+static void copy                        (glLabelObject    *dst_object,
+                                        glLabelObject    *src_object);
+
+static void buffer_changed_cb           (GtkTextBuffer    *textbuffer,
+                                        glLabelText      *ltext);
+
+static void get_size                    (glLabelObject    *object,
+                                        gdouble          *w,
+                                        gdouble          *h);
+
+static void set_font_family             (glLabelObject    *object,
+                                        const gchar      *font_family);
+
+static void set_font_size               (glLabelObject    *object,
+                                        gdouble           font_size);
+
+static void set_font_weight             (glLabelObject    *object,
+                                        PangoWeight       font_weight);
+
+static void set_font_italic_flag        (glLabelObject    *object,
+                                        gboolean          font_italic_flag);
+
+static void set_text_alignment          (glLabelObject    *object,
+                                        PangoAlignment    text_alignment);
+
+static void set_text_line_spacing       (glLabelObject    *object,
+                                        gdouble           text_line_spacing);
+
+static void set_text_color              (glLabelObject    *object,
+                                        glColorNode      *text_color_node);
+
+static gchar          *get_font_family             (glLabelObject    *object);
+
+static gdouble         get_font_size               (glLabelObject    *object);
+
+static PangoWeight     get_font_weight             (glLabelObject    *object);
+
+static gboolean        get_font_italic_flag        (glLabelObject    *object);
+
+static PangoAlignment  get_text_alignment          (glLabelObject    *object);
+
+static gdouble         get_text_line_spacing       (glLabelObject    *object);
+
+static glColorNode*    get_text_color              (glLabelObject    *object);
+
+static void            draw_object                 (glLabelObject    *object,
+                                                    cairo_t          *cr,
+                                                    gboolean          screen_flag,
+                                                    glMergeRecord    *record);
+
+static void            draw_shadow                 (glLabelObject    *object,
+                                                    cairo_t          *cr,
+                                                    gboolean          screen_flag,
+                                                    glMergeRecord    *record);
+
+static gdouble         auto_shrink_font_size       (cairo_t          *cr,
+                                                    gchar            *family,
+                                                    gdouble           size,
+                                                    PangoWeight       weight,
+                                                    PangoStyle        style,
+                                                    gchar            *text,
+                                                    gdouble           width);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glLabelText, gl_label_text, GL_TYPE_LABEL_OBJECT);
+
+static void
+gl_label_text_class_init (glLabelTextClass *class)
+{
+       GObjectClass       *object_class       = G_OBJECT_CLASS (class);
+       glLabelObjectClass *label_object_class = GL_LABEL_OBJECT_CLASS (class);
+
+       gl_label_text_parent_class = g_type_class_peek_parent (class);
+
+       label_object_class->copy                  = copy;
+
+       label_object_class->get_size              = get_size;
+
+       label_object_class->set_font_family       = set_font_family;
+       label_object_class->set_font_size         = set_font_size;
+       label_object_class->set_font_weight       = set_font_weight;
+       label_object_class->set_font_italic_flag  = set_font_italic_flag;
+       label_object_class->set_text_alignment    = set_text_alignment;
+       label_object_class->set_text_line_spacing = set_text_line_spacing;
+       label_object_class->set_text_color        = set_text_color;
+       label_object_class->get_font_family       = get_font_family;
+       label_object_class->get_font_size         = get_font_size;
+       label_object_class->get_font_weight       = get_font_weight;
+       label_object_class->get_font_italic_flag  = get_font_italic_flag;
+       label_object_class->get_text_alignment    = get_text_alignment;
+       label_object_class->get_text_line_spacing = get_text_line_spacing;
+       label_object_class->get_text_color        = get_text_color;
+        label_object_class->draw_object           = draw_object;
+        label_object_class->draw_shadow           = draw_shadow;
+
+       object_class->finalize = gl_label_text_finalize;
+}
+
+static void
+gl_label_text_init (glLabelText *ltext)
+{
+       ltext->priv = g_new0 (glLabelTextPrivate, 1);
+
+       ltext->priv->tag_table         = gtk_text_tag_table_new ();
+       ltext->priv->buffer            = gtk_text_buffer_new (ltext->priv->tag_table);
+
+       ltext->priv->font_family       = g_strdup(DEFAULT_FONT_FAMILY);
+       ltext->priv->font_size         = DEFAULT_FONT_SIZE;
+       ltext->priv->font_weight       = DEFAULT_FONT_WEIGHT;
+       ltext->priv->font_italic_flag  = DEFAULT_FONT_ITALIC_FLAG;
+       ltext->priv->align             = DEFAULT_ALIGN;
+       ltext->priv->color_node        = gl_color_node_new_default ();
+       ltext->priv->color_node->color = DEFAULT_COLOR;
+       ltext->priv->line_spacing      = DEFAULT_TEXT_LINE_SPACING;
+       ltext->priv->auto_shrink       = DEFAULT_AUTO_SHRINK;
+
+        ltext->priv->size_changed      = TRUE;
+
+       g_signal_connect (G_OBJECT(ltext->priv->buffer), "changed",
+                         G_CALLBACK(buffer_changed_cb), ltext);
+}
+
+static void
+gl_label_text_finalize (GObject *object)
+{
+       glLabelText *ltext = GL_LABEL_TEXT (object);
+
+       g_return_if_fail (object && GL_IS_LABEL_TEXT (object));
+
+       g_object_unref (ltext->priv->tag_table);
+       g_object_unref (ltext->priv->buffer);
+       g_free (ltext->priv->font_family);
+       gl_color_node_free (&(ltext->priv->color_node));
+       g_free (ltext->priv);
+
+       G_OBJECT_CLASS (gl_label_text_parent_class)->finalize (object);
+}
+
+/*****************************************************************************/
+/* NEW label "text" object.                                               */
+/*****************************************************************************/
+GObject *
+gl_label_text_new (glLabel *label)
+{
+       glLabelText *ltext;
+
+       ltext = g_object_new (gl_label_text_get_type(), NULL);
+
+       gl_label_object_set_parent (GL_LABEL_OBJECT(ltext), label);
+
+       return G_OBJECT (ltext);
+}
+
+/*****************************************************************************/
+/* Copy object contents.                                                     */
+/*****************************************************************************/
+static void
+copy (glLabelObject *dst_object,
+      glLabelObject *src_object)
+{
+       glLabelText      *ltext     = (glLabelText *)src_object;
+       glLabelText      *new_ltext = (glLabelText *)dst_object;
+       GList            *lines;
+       glColorNode      *text_color_node;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+       g_return_if_fail (new_ltext && GL_IS_LABEL_TEXT (new_ltext));
+
+       lines = gl_label_text_get_lines (ltext);
+       text_color_node = get_text_color (src_object);
+       gl_label_text_set_lines (new_ltext, lines);
+
+       new_ltext->priv->font_family      = g_strdup (ltext->priv->font_family);
+       new_ltext->priv->font_size        = ltext->priv->font_size;
+       new_ltext->priv->font_weight      = ltext->priv->font_weight;
+       new_ltext->priv->font_italic_flag = ltext->priv->font_italic_flag;
+       set_text_color (dst_object, text_color_node);
+       new_ltext->priv->align            = ltext->priv->align;
+       new_ltext->priv->line_spacing     = ltext->priv->line_spacing;
+       new_ltext->priv->auto_shrink      = ltext->priv->auto_shrink;
+
+        new_ltext->priv->size_changed     = ltext->priv->size_changed;
+        new_ltext->priv->w                = ltext->priv->w;
+        new_ltext->priv->h                = ltext->priv->h;
+
+       gl_color_node_free (&text_color_node);
+       gl_text_node_lines_free (&lines);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+
+/*****************************************************************************/
+/* Set object params.                                                        */
+/*****************************************************************************/
+void
+gl_label_text_set_lines (glLabelText *ltext,
+                        GList       *lines)
+{
+       gchar *text;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+
+       text = gl_text_node_lines_expand (lines, NULL);
+       gtk_text_buffer_set_text (ltext->priv->buffer, text, -1);
+       g_free (text);
+
+        ltext->priv->size_changed = TRUE;
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Get object params.                                                        */
+/*****************************************************************************/
+GtkTextBuffer *
+gl_label_text_get_buffer (glLabelText *ltext)
+{
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), NULL);
+
+       return ltext->priv->buffer;
+}
+
+GList *
+gl_label_text_get_lines (glLabelText *ltext)
+{
+       GtkTextIter  start, end;
+       gchar       *text;
+       GList       *lines;
+
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), NULL);
+
+       gtk_text_buffer_get_bounds (ltext->priv->buffer, &start, &end);
+       text = gtk_text_buffer_get_text (ltext->priv->buffer,
+                                        &start, &end, FALSE);
+       lines = gl_text_node_lines_new_from_text (text);
+       g_free (text);
+
+       return lines;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  text buffer "changed" callback.                                 */
+/*---------------------------------------------------------------------------*/
+void buffer_changed_cb (GtkTextBuffer *textbuffer,
+                       glLabelText   *ltext)
+{
+        ltext->priv->size_changed = TRUE;
+
+       gl_label_object_emit_changed (GL_LABEL_OBJECT(ltext));
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  get object size method.                                         */
+/*---------------------------------------------------------------------------*/
+static void
+get_size (glLabelObject *object,
+         gdouble       *w,
+         gdouble       *h)
+{
+       glLabelText          *ltext = (glLabelText *)object;
+       PangoFontMap         *fontmap;
+       PangoContext         *context;
+       cairo_font_options_t *options;
+        PangoStyle            style;
+        PangoLayout          *layout;
+        PangoFontDescription *desc;
+        gdouble               font_size;
+        gdouble               line_spacing;
+       GtkTextIter           start, end;
+       gchar                *text;
+       gdouble               w_parent, h_parent;
+       gint                  iw, ih;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+
+       gl_label_object_get_raw_size (object, &w_parent, &h_parent);
+
+       if ( (w_parent != 0.0) || (h_parent != 0.0) ) {
+               *w = w_parent;
+               *h = h_parent;
+               return;
+       }
+
+        if (!ltext->priv->size_changed)
+        {
+                *w = ltext->priv->w;
+                *h = ltext->priv->h;
+               return;
+        }
+
+        font_size = GL_LABEL_TEXT (object)->priv->font_size * FONT_SCALE;
+        line_spacing = GL_LABEL_TEXT (object)->priv->line_spacing;
+
+       gtk_text_buffer_get_bounds (ltext->priv->buffer, &start, &end);
+       text = gtk_text_buffer_get_text (ltext->priv->buffer,
+                                        &start, &end, FALSE);
+
+       
+       fontmap = pango_cairo_font_map_new ();
+       context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
+       options = cairo_font_options_create ();
+        cairo_font_options_set_hint_style (options, CAIRO_HINT_STYLE_NONE);
+       pango_cairo_context_set_font_options (context, options);
+       cairo_font_options_destroy (options);
+
+       layout = pango_layout_new (context);
+
+        style = GL_LABEL_TEXT (object)->priv->font_italic_flag ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL;
+
+       desc = pango_font_description_new ();
+       pango_font_description_set_family (desc, GL_LABEL_TEXT (object)->priv->font_family);
+       pango_font_description_set_weight (desc, GL_LABEL_TEXT (object)->priv->font_weight);
+       pango_font_description_set_style  (desc, style);
+       pango_font_description_set_size   (desc, font_size * PANGO_SCALE);
+       pango_layout_set_font_description (layout, desc);
+       pango_font_description_free       (desc);
+
+        pango_layout_set_spacing (layout, font_size * (line_spacing-1) * PANGO_SCALE);
+       pango_layout_set_text (layout, text, -1);
+       pango_layout_get_size (layout, &iw, &ih);
+       *w = ltext->priv->w = iw / PANGO_SCALE + 2*GL_LABEL_TEXT_MARGIN;
+       *h = ltext->priv->h = ih / PANGO_SCALE;
+        ltext->priv->size_changed = FALSE;
+
+       g_object_unref (layout);
+       g_object_unref (context);
+       g_object_unref (fontmap);
+       g_free (text);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  set font family method.                                         */
+/*---------------------------------------------------------------------------*/
+static void
+set_font_family (glLabelObject *object,
+                const gchar   *font_family)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+       GList          *family_names;
+       gchar          *good_font_family;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+       g_return_if_fail (font_family);
+
+       family_names = gl_util_get_font_family_list ();
+       if (g_list_find_custom (family_names, font_family, (GCompareFunc)g_utf8_collate)) {
+               good_font_family = g_strdup (font_family);
+       } else {
+               if (family_names != NULL) {
+                       good_font_family = g_strdup (family_names->data); /* 1st entry */
+               } else {
+                       good_font_family = g_strdup (font_family);
+               }
+       }
+
+       if (ltext->priv->font_family) {
+               if (g_strcasecmp (ltext->priv->font_family, good_font_family) == 0) {
+                       g_free (good_font_family);
+                       gl_debug (DEBUG_LABEL, "END (no change)");
+                       return;
+               }
+               g_free (ltext->priv->font_family);
+       }
+       ltext->priv->font_family = g_strdup (good_font_family);
+       g_free (good_font_family);
+
+       gl_debug (DEBUG_LABEL, "new font family = %s", ltext->priv->font_family);
+
+        ltext->priv->size_changed = TRUE;
+
+       gl_label_object_emit_changed (GL_LABEL_OBJECT(ltext));
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  set font size method.                                           */
+/*---------------------------------------------------------------------------*/
+static void
+set_font_size (glLabelObject *object,
+              gdouble        font_size)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+
+       if (ltext->priv->font_size != font_size) {
+
+                ltext->priv->size_changed = TRUE;
+
+               ltext->priv->font_size = font_size;
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(ltext));
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  set font weight method.                                         */
+/*---------------------------------------------------------------------------*/
+static void
+set_font_weight (glLabelObject   *object,
+                PangoWeight      font_weight)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+
+       if (ltext->priv->font_weight != font_weight) {
+
+                ltext->priv->size_changed = TRUE;
+
+               ltext->priv->font_weight = font_weight;
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(ltext));
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  set font italic flag method.                                    */
+/*---------------------------------------------------------------------------*/
+static void
+set_font_italic_flag (glLabelObject *object,
+                     gboolean       font_italic_flag)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+
+       if (ltext->priv->font_italic_flag != font_italic_flag) {
+
+                ltext->priv->size_changed = TRUE;
+
+               ltext->priv->font_italic_flag = font_italic_flag;
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(ltext));
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  set text alignment method.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+set_text_alignment (glLabelObject    *object,
+                   PangoAlignment    text_alignment)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+
+       if (ltext->priv->align != text_alignment) {
+
+                ltext->priv->size_changed = TRUE;
+
+               ltext->priv->align = text_alignment;
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(ltext));
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  set text line spacing method.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+set_text_line_spacing (glLabelObject *object,
+                      gdouble        line_spacing)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+
+       if (ltext->priv->line_spacing != line_spacing) {
+
+                ltext->priv->size_changed = TRUE;
+
+               ltext->priv->line_spacing = line_spacing;
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(ltext));
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  set text color method.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+set_text_color (glLabelObject *object,
+               glColorNode   *text_color_node)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+
+       if (!gl_color_node_equal (ltext->priv->color_node, text_color_node)) {
+
+               gl_color_node_free (&(ltext->priv->color_node));
+               ltext->priv->color_node = gl_color_node_dup (text_color_node);
+               
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(ltext));
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  get font family method.                                         */
+/*---------------------------------------------------------------------------*/
+static gchar *
+get_font_family (glLabelObject *object)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), NULL);
+
+       return g_strdup (ltext->priv->font_family);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  get font size method.                                           */
+/*---------------------------------------------------------------------------*/
+static gdouble
+get_font_size (glLabelObject *object)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), 0.0);
+
+       return ltext->priv->font_size;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  get font weight method.                                         */
+/*---------------------------------------------------------------------------*/
+static PangoWeight
+get_font_weight (glLabelObject   *object)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), PANGO_WEIGHT_NORMAL);
+
+       return ltext->priv->font_weight;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  get font italic flag method.                                    */
+/*---------------------------------------------------------------------------*/
+static gboolean
+get_font_italic_flag (glLabelObject *object)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), FALSE);
+
+       return ltext->priv->font_italic_flag;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  get text alignment method.                                      */
+/*---------------------------------------------------------------------------*/
+static PangoAlignment
+get_text_alignment (glLabelObject    *object)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), GTK_JUSTIFY_LEFT);
+
+       return ltext->priv->align;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  get text line spacing method.                                   */
+/*---------------------------------------------------------------------------*/
+static gdouble
+get_text_line_spacing (glLabelObject *object)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), 0.0);
+
+       return ltext->priv->line_spacing;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  get text color method.                                          */
+/*---------------------------------------------------------------------------*/
+static glColorNode*
+get_text_color (glLabelObject *object)
+{
+       glLabelText    *ltext = (glLabelText *)object;
+
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), 0);
+
+       return gl_color_node_dup (ltext->priv->color_node);
+}
+
+/*****************************************************************************/
+/* Set auto shrink flag.                                                     */
+/*****************************************************************************/
+void
+gl_label_text_set_auto_shrink (glLabelText      *ltext,
+                              gboolean          auto_shrink)
+{
+       gl_debug (DEBUG_LABEL, "BEGIN");
+
+       g_return_if_fail (ltext && GL_IS_LABEL_TEXT (ltext));
+
+       if (ltext->priv->auto_shrink != auto_shrink) {
+
+               ltext->priv->auto_shrink = auto_shrink;
+               gl_label_object_emit_changed (GL_LABEL_OBJECT(ltext));
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Query auto shrink flag.                                                   */
+/*****************************************************************************/
+gboolean
+gl_label_text_get_auto_shrink (glLabelText      *ltext)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       g_return_val_if_fail (ltext && GL_IS_LABEL_TEXT (ltext), 0);
+
+       return ltext->priv->auto_shrink;
+}
+
+/*****************************************************************************/
+/* Draw object method.                                                       */
+/*****************************************************************************/
+static void
+draw_object (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble          x0, y0;
+        cairo_matrix_t   matrix;
+       gdouble          object_w, object_h;
+       gdouble          raw_w, raw_h;
+       gchar           *text;
+       GList           *lines;
+       gchar           *font_family;
+       gdouble          font_size;
+       PangoWeight      font_weight;
+       gboolean         font_italic_flag;
+       glColorNode     *color_node;
+        gboolean         auto_shrink;
+       guint            color;
+       gdouble          text_line_spacing;
+        PangoAlignment   alignment;
+        PangoStyle       style;
+        PangoLayout     *layout;
+        PangoFontDescription *desc;
+        gdouble          scale_x, scale_y;
+        cairo_font_options_t *font_options;
+        PangoContext         *context;
+
+
+       gl_debug (DEBUG_LABEL, "START");
+
+        gl_label_object_get_position (object, &x0, &y0);
+        gl_label_object_get_matrix (object, &matrix);
+
+       gl_label_object_get_size (object, &object_w, &object_h);
+       gl_label_object_get_raw_size (object, &raw_w, &raw_h);
+       lines = gl_label_text_get_lines (GL_LABEL_TEXT (object));
+       font_family = gl_label_object_get_font_family (object);
+       font_size = gl_label_object_get_font_size (object) * FONT_SCALE;
+       font_weight = gl_label_object_get_font_weight (object);
+       font_italic_flag = gl_label_object_get_font_italic_flag (object);
+
+       color_node = gl_label_object_get_text_color (object);
+       color = gl_color_node_expand (color_node, record);
+        if (color_node->field_flag && screen_flag)
+        {
+                color = GL_COLOR_MERGE_DEFAULT;
+        }
+       gl_color_node_free (&color_node);
+       
+       alignment = gl_label_object_get_text_alignment (object);
+       text_line_spacing =
+               gl_label_object_get_text_line_spacing (object);
+        auto_shrink = gl_label_text_get_auto_shrink (GL_LABEL_TEXT (object));
+
+       text = gl_text_node_lines_expand (lines, record);
+
+        style = font_italic_flag ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL;
+
+
+        if (!screen_flag && record && auto_shrink && (raw_w != 0.0))
+        {
+                font_size = auto_shrink_font_size (cr,
+                                                   font_family,
+                                                   font_size,
+                                                   font_weight,
+                                                   style,
+                                                   text,
+                                                   object_w);
+                g_print ("Autosize new size = %g\n", font_size);
+        }
+
+
+        /*
+         * Workaround for pango Bug#341481.
+         * Render font at device scale and scale font size accordingly.
+         */
+        scale_x = 1.0;
+        scale_y = 1.0;
+        cairo_device_to_user_distance (cr, &scale_x, &scale_y);
+        scale_x = fabs (scale_x);
+        scale_y = fabs (scale_y);
+        cairo_save (cr);
+        cairo_scale (cr, scale_x, scale_y);
+
+        layout = pango_cairo_create_layout (cr);
+
+        font_options = cairo_font_options_create ();
+        cairo_font_options_set_hint_style (font_options, CAIRO_HINT_STYLE_NONE);
+        context = pango_layout_get_context (layout);
+        pango_cairo_context_set_font_options (context, font_options);
+        cairo_font_options_destroy (font_options);
+
+        desc = pango_font_description_new ();
+        pango_font_description_set_family (desc, font_family);
+        pango_font_description_set_weight (desc, font_weight);
+        pango_font_description_set_style  (desc, style);
+        pango_font_description_set_size   (desc, font_size * PANGO_SCALE / scale_x);
+        pango_layout_set_font_description (layout, desc);
+        pango_font_description_free       (desc);
+
+        pango_layout_set_text (layout, text, -1);
+        pango_layout_set_spacing (layout, font_size * (text_line_spacing-1) * PANGO_SCALE / scale_x);
+        if (raw_w == 0.0)
+        {
+                pango_layout_set_width (layout, -1);
+        }
+        else
+        {
+                pango_layout_set_width (layout, object_w * PANGO_SCALE / scale_x);
+        }
+        pango_layout_set_wrap (layout, PANGO_WRAP_CHAR);
+        pango_layout_set_alignment (layout, alignment);
+
+
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (color));
+        cairo_move_to (cr, GL_LABEL_TEXT_MARGIN/scale_x, 0);
+        pango_cairo_show_layout (cr, layout);
+
+        cairo_restore (cr);
+
+        g_object_unref (layout);
+
+
+       gl_text_node_lines_free (&lines);
+       g_free (font_family);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Draw shadow method.                                                       */
+/*****************************************************************************/
+static void
+draw_shadow (glLabelObject *object,
+             cairo_t       *cr,
+             gboolean       screen_flag,
+             glMergeRecord *record)
+{
+        gdouble          x0, y0;
+        cairo_matrix_t   matrix;
+       gdouble          object_w, object_h;
+       gdouble          raw_w, raw_h;
+       gchar           *text;
+       GList           *lines;
+       gchar           *font_family;
+       gdouble          font_size;
+       PangoWeight      font_weight;
+       gboolean         font_italic_flag;
+        gboolean         auto_shrink;
+       guint            color;
+       glColorNode     *color_node;
+       gdouble          text_line_spacing;
+       glColorNode     *shadow_color_node;
+       gdouble          shadow_opacity;
+       guint            shadow_color;
+        PangoAlignment   alignment;
+        PangoStyle       style;
+        PangoLayout     *layout;
+        PangoFontDescription *desc;
+        gdouble          scale_x, scale_y;
+        cairo_font_options_t *font_options;
+        PangoContext         *context;
+
+
+       gl_debug (DEBUG_LABEL, "START");
+
+        gl_label_object_get_position (object, &x0, &y0);
+        gl_label_object_get_matrix (object, &matrix);
+
+       gl_label_object_get_size (object, &object_w, &object_h);
+       gl_label_object_get_raw_size (object, &raw_w, &raw_h);
+       lines = gl_label_text_get_lines (GL_LABEL_TEXT (object));
+       font_family = gl_label_object_get_font_family (object);
+       font_size = gl_label_object_get_font_size (object) * FONT_SCALE;
+       font_weight = gl_label_object_get_font_weight (object);
+       font_italic_flag = gl_label_object_get_font_italic_flag (object);
+
+       color_node = gl_label_object_get_text_color (object);
+       color = gl_color_node_expand (color_node, record);
+       gl_color_node_free (&color_node);
+       
+       alignment = gl_label_object_get_text_alignment (object);
+       text_line_spacing =
+               gl_label_object_get_text_line_spacing (object);
+        auto_shrink = gl_label_text_get_auto_shrink (GL_LABEL_TEXT (object));
+
+       shadow_color_node = gl_label_object_get_shadow_color (object);
+       if (shadow_color_node->field_flag)
+       {
+               shadow_color_node->color = GL_COLOR_SHADOW_MERGE_DEFAULT;
+       }
+       shadow_opacity = gl_label_object_get_shadow_opacity (object);
+       shadow_color = gl_color_shadow (shadow_color_node->color, shadow_opacity, color);
+       gl_color_node_free (&shadow_color_node);
+
+       text = gl_text_node_lines_expand (lines, record);
+
+        style = font_italic_flag ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL;
+
+
+        if (!screen_flag && record && auto_shrink && (raw_w != 0.0))
+        {
+                font_size = auto_shrink_font_size (cr,
+                                                   font_family,
+                                                   font_size,
+                                                   font_weight,
+                                                   style,
+                                                   text,
+                                                   object_w);
+        }
+
+
+        /*
+         * Workaround for pango Bug#341481.
+         * Render font at device scale and scale font size accordingly.
+         */
+        scale_x = 1.0;
+        scale_y = 1.0;
+        cairo_device_to_user_distance (cr, &scale_x, &scale_y);
+        scale_x = fabs (scale_x);
+        scale_y = fabs (scale_y);
+        cairo_save (cr);
+        cairo_scale (cr, scale_x, scale_y);
+
+        layout = pango_cairo_create_layout (cr);
+
+        font_options = cairo_font_options_create ();
+        cairo_font_options_set_hint_style (font_options, CAIRO_HINT_STYLE_NONE);
+        context = pango_layout_get_context (layout);
+        pango_cairo_context_set_font_options (context, font_options);
+        cairo_font_options_destroy (font_options);
+
+        desc = pango_font_description_new ();
+        pango_font_description_set_family (desc, font_family);
+        pango_font_description_set_weight (desc, font_weight);
+        pango_font_description_set_style  (desc, style);
+        pango_font_description_set_size   (desc, font_size * PANGO_SCALE / scale_x);
+        pango_layout_set_font_description (layout, desc);
+        pango_font_description_free       (desc);
+
+        pango_layout_set_text (layout, text, -1);
+        pango_layout_set_spacing (layout, font_size * (text_line_spacing-1) * PANGO_SCALE / scale_x);
+        if (raw_w == 0.0)
+        {
+                pango_layout_set_width (layout, -1);
+        }
+        else
+        {
+                pango_layout_set_width (layout, object_w * PANGO_SCALE / scale_x);
+        }
+        pango_layout_set_wrap (layout, PANGO_WRAP_CHAR);
+        pango_layout_set_alignment (layout, alignment);
+
+        cairo_set_source_rgba (cr, GL_COLOR_RGBA_ARGS (shadow_color));
+        cairo_move_to (cr, GL_LABEL_TEXT_MARGIN/scale_x, 0);
+        pango_cairo_show_layout (cr, layout);
+
+
+        cairo_restore (cr);
+
+        g_object_unref (layout);
+
+       gl_text_node_lines_free (&lines);
+       g_free (font_family);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Automatically shrink text size to fit within horizontal width.            */
+/*****************************************************************************/
+static gdouble
+auto_shrink_font_size (cairo_t     *cr,
+                       gchar       *family,
+                       gdouble      size,
+                       PangoWeight  weight,
+                       PangoStyle   style,
+                       gchar       *text,
+                       gdouble      width)
+{
+        PangoLayout          *layout;
+        PangoFontDescription *desc;
+        gint                  iw, ih;
+        gdouble               layout_width;
+        gdouble               new_size;
+
+        layout = pango_cairo_create_layout (cr);
+
+        desc = pango_font_description_new ();
+        pango_font_description_set_family (desc, family);
+        pango_font_description_set_weight (desc, weight);
+        pango_font_description_set_style  (desc, style);
+        pango_font_description_set_size   (desc, size * PANGO_SCALE);
+        
+        pango_layout_set_font_description (layout, desc);
+        pango_font_description_free       (desc);
+
+        pango_layout_set_text (layout, text, -1);
+        pango_layout_set_width (layout, -1);
+        pango_layout_get_size (layout, &iw, &ih);
+        layout_width = (gdouble)iw / (gdouble)PANGO_SCALE;
+
+        g_object_unref (layout);
+
+        g_print ("Object w = %g, layout w = %g\n", width, layout_width);
+
+        if ( layout_width > width )
+        {
+                /* Scale down. */
+                new_size = size * (width-2*GL_LABEL_TEXT_MARGIN)/layout_width;
+
+                /* Round down to nearest 1/2 point */
+                new_size = (int)(new_size*2.0) / 2.0;
+
+                /* don't get ridiculously small. */
+                if (new_size < 1.0)
+                {
+                        new_size = 1.0;
+                }
+        }
+        else
+        {
+                new_size = size;
+        }
+
+        return new_size;
+}
+
diff --git a/src/label-text.h b/src/label-text.h
new file mode 100644 (file)
index 0000000..95c4623
--- /dev/null
@@ -0,0 +1,74 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label_text.h:  GLabels label text object
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __LABEL_TEXT_H__
+#define __LABEL_TEXT_H__
+
+#include <gtk/gtktextbuffer.h>
+#include "text-node.h"
+#include "label-object.h"
+
+G_BEGIN_DECLS
+
+#define GL_LABEL_TEXT_MARGIN 3.0
+
+
+#define GL_TYPE_LABEL_TEXT            (gl_label_text_get_type ())
+#define GL_LABEL_TEXT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_LABEL_TEXT, glLabelText))
+#define GL_LABEL_TEXT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_LABEL_TEXT, glLabelTextClass))
+#define GL_IS_LABEL_TEXT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_LABEL_TEXT))
+#define GL_IS_LABEL_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_LABEL_TEXT))
+
+typedef struct _glLabelText          glLabelText;
+typedef struct _glLabelTextClass     glLabelTextClass;
+
+typedef struct _glLabelTextPrivate   glLabelTextPrivate;
+
+struct _glLabelText {
+       glLabelObject         object;
+
+       glLabelTextPrivate   *priv;
+};
+
+struct _glLabelTextClass {
+       glLabelObjectClass    parent_class;
+};
+
+GType          gl_label_text_get_type     (void) G_GNUC_CONST;
+
+GObject       *gl_label_text_new          (glLabel          *label);
+
+void           gl_label_text_set_lines    (glLabelText      *ltext,
+                                          GList            *lines);
+GtkTextBuffer *gl_label_text_get_buffer   (glLabelText      *ltext);
+GList         *gl_label_text_get_lines    (glLabelText      *ltext);
+
+void           gl_label_text_set_auto_shrink (glLabelText      *ltext,
+                                             gboolean          auto_shrink);
+gboolean       gl_label_text_get_auto_shrink (glLabelText      *ltext);
+
+
+G_END_DECLS
+
+#endif /* __LABEL_TEXT_H__ */
diff --git a/src/label.c b/src/label.c
new file mode 100644 (file)
index 0000000..c886529
--- /dev/null
@@ -0,0 +1,674 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label.c:  GLabels label module
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "label.h"
+
+#include <glib/gi18n.h>
+
+#include "marshal.h"
+#include "prefs.h"
+#include "util.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glLabelPrivate {
+
+       gchar       *filename;
+       gint         compression;
+       gboolean     modified_flag;
+       gint         untitled_instance;
+
+       glMerge     *merge;
+
+       GHashTable  *pixbuf_cache;
+};
+
+enum {
+       CHANGED,
+       NAME_CHANGED,
+       MODIFIED_CHANGED,
+       MERGE_CHANGED,
+       SIZE_CHANGED,
+        OBJECT_ADDED,
+       LAST_SIGNAL
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+static guint signals[LAST_SIGNAL] = {0};
+
+static guint untitled = 0;
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void gl_label_finalize      (GObject *object);
+
+static void object_changed_cb      (glLabelObject *object,
+                                   glLabel       *label);
+
+static void object_moved_cb        (glLabelObject *object,
+                                   gdouble        x,
+                                   gdouble        y,
+                                   glLabel       *label);
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glLabel, gl_label, G_TYPE_OBJECT);
+
+static void
+gl_label_class_init (glLabelClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       gl_label_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_label_finalize;
+
+       signals[CHANGED] =
+               g_signal_new ("changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelClass, changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+       signals[NAME_CHANGED] =
+               g_signal_new ("name_changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelClass, name_changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+       signals[MODIFIED_CHANGED] =
+               g_signal_new ("modified_changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelClass, modified_changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+       signals[MERGE_CHANGED] =
+               g_signal_new ("merge_changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelClass, merge_changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+       signals[SIZE_CHANGED] =
+               g_signal_new ("size_changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelClass, size_changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+       signals[OBJECT_ADDED] =
+               g_signal_new ("object_added",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glLabelClass, object_added),
+                             NULL, NULL,
+                             gl_marshal_VOID__OBJECT,
+                             G_TYPE_NONE,
+                             1, G_TYPE_OBJECT);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+static void
+gl_label_init (glLabel *label)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       label->template     = NULL;
+       label->rotate_flag  = FALSE;
+        label->objects      = NULL;
+
+       label->priv = g_new0 (glLabelPrivate, 1);
+
+       label->priv->filename     = NULL;
+       label->priv->merge        = NULL;
+       label->priv->pixbuf_cache = gl_pixbuf_cache_new ();
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+static void
+gl_label_finalize (GObject *object)
+{
+       glLabel *label = GL_LABEL (object);
+       GList   *p, *p_next;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (object && GL_IS_LABEL (object));
+
+       for (p = label->objects; p != NULL; p = p_next) {
+               p_next = p->next;       /* NOTE: p will be left dangling */
+               g_object_unref (G_OBJECT(p->data));
+       }
+
+       lgl_template_free (label->template);
+       g_free (label->priv->filename);
+       if (label->priv->merge != NULL) {
+               g_object_unref (G_OBJECT(label->priv->merge));
+       }
+       gl_pixbuf_cache_free (label->priv->pixbuf_cache);
+
+       g_free (label->priv);
+
+       G_OBJECT_CLASS (gl_label_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+GObject *
+gl_label_new (void)
+{
+       glLabel *label;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       label = g_object_new (gl_label_get_type(), NULL);
+
+       label->priv->compression = 9;
+
+       label->priv->modified_flag = FALSE;
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return G_OBJECT (label);
+}
+
+
+/*****************************************************************************/
+/* Add object to label.                                                      */
+/*****************************************************************************/
+void
+gl_label_add_object (glLabel       *label,
+                    glLabelObject *object)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+       object->parent = label;
+       label->objects = g_list_append (label->objects, g_object_ref (object));
+
+       label->priv->modified_flag = TRUE;
+
+       g_signal_emit (G_OBJECT(label), signals[OBJECT_ADDED], 0, object);
+       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
+       g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+
+       g_signal_connect (G_OBJECT(object), "changed",
+                         G_CALLBACK(object_changed_cb), label);
+
+       g_signal_connect (G_OBJECT(object), "moved",
+                         G_CALLBACK(object_moved_cb), label);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*****************************************************************************/
+/* Remove object from label.                                                 */
+/*****************************************************************************/
+void
+gl_label_remove_object (glLabel       *label,
+                       glLabelObject *object)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+       g_return_if_fail (GL_IS_LABEL_OBJECT (object));
+
+       object->parent = NULL;
+       label->objects = g_list_remove (label->objects, object);
+
+       if ( G_OBJECT(label)->ref_count /* not finalized */ ) {
+
+               g_signal_handlers_disconnect_by_func (object,
+                                                     G_CALLBACK(object_changed_cb),
+                                                     label);
+               g_signal_handlers_disconnect_by_func (object,
+                                                     G_CALLBACK(object_moved_cb),
+                                                     label);
+
+               label->priv->modified_flag = TRUE;
+
+               g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
+               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Object changed callback.                                        */
+/*---------------------------------------------------------------------------*/
+static void
+object_changed_cb (glLabelObject *object,
+                  glLabel       *label)
+{
+
+       if ( !label->priv->modified_flag ) {
+
+               label->priv->modified_flag = TRUE;
+
+               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+       }
+
+       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Object moved callback.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+object_moved_cb (glLabelObject *object,
+                gdouble        x,
+                gdouble        y,
+                glLabel       *label)
+{
+
+       if ( !label->priv->modified_flag ) {
+
+               label->priv->modified_flag = TRUE;
+
+               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+       }
+
+       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
+}
+
+/****************************************************************************/
+/* Bring label object to front/top.                                         */
+/****************************************************************************/
+void
+gl_label_raise_object_to_top (glLabel       *label,
+                             glLabelObject *object)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       /* Move to end of list, representing front most object */
+       label->objects = g_list_remove (label->objects, object);
+       label->objects = g_list_append (label->objects, object);
+
+       label->priv->modified_flag = TRUE;
+
+       g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Send label object to rear/bottom.                                        */
+/****************************************************************************/
+void
+gl_label_lower_object_to_bottom (glLabel       *label,
+                                glLabelObject *object)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       /* Move to front of list, representing rear most object */
+       label->objects = g_list_remove (label->objects, object);
+       label->objects = g_list_prepend (label->objects, object);
+
+       label->priv->modified_flag = TRUE;
+
+       g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* set template.                                                            */
+/****************************************************************************/
+extern void
+gl_label_set_template (glLabel     *label,
+                      lglTemplate *template)
+{
+        gchar *name;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+       g_return_if_fail (template);
+
+       if ((label->template == NULL) ||
+            !lgl_template_do_templates_match (template, label->template)) {
+
+               lgl_template_free (label->template);
+               label->template = lgl_template_dup (template);
+
+               label->priv->modified_flag = TRUE;
+
+               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+               g_signal_emit (G_OBJECT(label), signals[SIZE_CHANGED], 0);
+               g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
+
+                name = lgl_template_get_name (template);
+                gl_prefs_add_recent_template (name);
+                g_free (name);
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* set rotate flag.                                                         */
+/****************************************************************************/
+extern void
+gl_label_set_rotate_flag (glLabel *label,
+                         gboolean rotate_flag)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+
+       if (rotate_flag != label->rotate_flag) {
+
+               label->rotate_flag = rotate_flag;
+
+               label->priv->modified_flag = TRUE;
+
+               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+               g_signal_emit (G_OBJECT(label), signals[SIZE_CHANGED], 0);
+               g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
+
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Get label size.                                                          */
+/****************************************************************************/
+void
+gl_label_get_size (glLabel *label,
+                  gdouble *w,
+                  gdouble *h)
+{
+       lglTemplate            *template;
+       const lglTemplateFrame *frame;
+
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+
+       template = label->template;
+       if ( !template ) {
+               gl_debug (DEBUG_LABEL, "END -- template NULL");
+               *w = *h = 0;
+               return;
+       }
+        frame = (lglTemplateFrame *)template->frames->data;
+
+       if (!label->rotate_flag) {
+               lgl_template_frame_get_size (frame, w, h);
+       } else {
+               lgl_template_frame_get_size (frame, h, w);
+       }
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* set merge information structure.                                         */
+/****************************************************************************/
+extern void
+gl_label_set_merge (glLabel *label,
+                   glMerge *merge)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+
+       if ( label->priv->merge != NULL ) {
+               g_object_unref (G_OBJECT(label->priv->merge));
+       }
+       label->priv->merge = gl_merge_dup (merge);
+
+       label->priv->modified_flag = TRUE;
+
+       g_signal_emit (G_OBJECT(label), signals[MERGE_CHANGED], 0);
+       g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+       g_signal_emit (G_OBJECT(label), signals[CHANGED], 0);
+
+       gl_debug (DEBUG_LABEL, "END");
+}
+
+/****************************************************************************/
+/* Get merge information structure.                                         */
+/****************************************************************************/
+glMerge *
+gl_label_get_merge (glLabel *label)
+{
+       gl_debug (DEBUG_LABEL, "START");
+
+       g_return_val_if_fail (label && GL_IS_LABEL (label), NULL);
+
+       gl_debug (DEBUG_LABEL, "END");
+
+       return gl_merge_dup (label->priv->merge);
+}
+
+/****************************************************************************/
+/* return filename.                                                         */
+/****************************************************************************/
+gchar *
+gl_label_get_filename (glLabel *label)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       return g_strdup ( label->priv->filename );
+}
+
+/****************************************************************************/
+/* return short filename.                                                   */
+/****************************************************************************/
+gchar *
+gl_label_get_short_name (glLabel *label)
+{
+       gl_debug (DEBUG_LABEL, "");
+
+       if ( label->priv->filename == NULL ) {
+
+               if ( label->priv->untitled_instance == 0 ) {
+                       label->priv->untitled_instance = ++untitled;
+               }
+
+               return g_strdup_printf ( "%s %d", _("Untitled"),
+                                        label->priv->untitled_instance );
+
+       } else {
+               gchar *temp_name, *short_name;
+
+               temp_name = g_path_get_basename ( label->priv->filename );
+               short_name = gl_util_remove_extension (temp_name);
+               g_free (temp_name);
+
+               return short_name;
+       }
+}
+
+/****************************************************************************/
+/* Get pixbuf cache.                                                        */
+/****************************************************************************/
+GHashTable *
+gl_label_get_pixbuf_cache (glLabel       *label)
+{
+       return label->priv->pixbuf_cache;
+}
+
+/****************************************************************************/
+/* Is label modified?                                                       */
+/****************************************************************************/
+gboolean
+gl_label_is_modified (glLabel *label)
+{
+       gl_debug (DEBUG_LABEL, "return %d", label->priv->modified_flag);
+       return label->priv->modified_flag;
+}
+
+/****************************************************************************/
+/* Is label untitled?                                                       */
+/****************************************************************************/
+gboolean
+gl_label_is_untitled (glLabel *label)
+{
+       gl_debug (DEBUG_LABEL, "return %d",(label->priv->filename == NULL));
+       return (label->priv->filename == NULL);
+}
+
+/****************************************************************************/
+/* Can undo?                                                                */
+/****************************************************************************/
+gboolean
+gl_label_can_undo (glLabel *label)
+{
+       return FALSE;
+}
+
+
+/****************************************************************************/
+/* Can redo?                                                                */
+/****************************************************************************/
+gboolean
+gl_label_can_redo (glLabel *label)
+{
+       return FALSE;
+}
+
+
+/****************************************************************************/
+/* Set filename.                                                            */
+/****************************************************************************/
+void
+gl_label_set_filename (glLabel     *label,
+                      const gchar *filename)
+{
+       label->priv->filename = g_strdup (filename);
+
+       g_signal_emit (G_OBJECT(label), signals[NAME_CHANGED], 0);
+}
+
+/****************************************************************************/
+/* Clear modified flag.                                                     */
+/****************************************************************************/
+void
+gl_label_clear_modified (glLabel *label)
+{
+
+       if ( label->priv->modified_flag ) {
+
+               label->priv->modified_flag = FALSE;
+
+               g_signal_emit (G_OBJECT(label), signals[MODIFIED_CHANGED], 0);
+       }
+
+}
+
+
+/****************************************************************************/
+/* Set compression level.                                                   */
+/****************************************************************************/
+void
+gl_label_set_compression (glLabel  *label,
+                         gint      compression)
+{
+       gl_debug (DEBUG_LABEL, "set %d", compression);
+
+       /* Older versions of libxml2 always return a -1 for documents "read in," so
+        * default to 9.  Also, default to 9 for anything else out of range. */
+       if ((compression < 0) || (compression >9)) {
+               compression = 9;
+       }
+
+       gl_debug (DEBUG_LABEL, "actual set %d", compression);
+       label->priv->compression = compression;
+}
+
+
+/****************************************************************************/
+/* Get compression level.                                                   */
+/****************************************************************************/
+gint
+gl_label_get_compression (glLabel *label)
+{
+       gl_debug (DEBUG_LABEL, "return %d", label->priv->compression);
+       return label->priv->compression;
+}
+
+
+/****************************************************************************/
+/* Draw label.                                                              */
+/****************************************************************************/
+void
+gl_label_draw (glLabel       *label,
+               cairo_t       *cr,
+               gboolean       screen_flag,
+               glMergeRecord *record)
+{
+       GList            *p_obj;
+       glLabelObject    *object;
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+
+       for (p_obj = label->objects; p_obj != NULL; p_obj = p_obj->next)
+        {
+               object = GL_LABEL_OBJECT (p_obj->data);
+
+                gl_label_object_draw (object, cr, screen_flag, record);
+       }
+}
diff --git a/src/label.h b/src/label.h
new file mode 100644 (file)
index 0000000..f6e0c23
--- /dev/null
@@ -0,0 +1,154 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label.h:  GLabels label module header file
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __LABEL_H__
+#define __LABEL_H__
+
+#include <glib-object.h>
+
+#include <libglabels/template.h>
+#include "merge.h"
+#include "pixbuf-cache.h"
+#include <cairo.h>
+
+G_BEGIN_DECLS
+
+typedef struct {
+        gdouble x1;
+        gdouble y1;
+        gdouble x2;
+        gdouble y2;
+} glLabelRegion;
+
+#define GL_TYPE_LABEL            (gl_label_get_type ())
+#define GL_LABEL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_LABEL, glLabel))
+#define GL_LABEL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_LABEL, glLabelClass))
+#define GL_IS_LABEL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_LABEL))
+#define GL_IS_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_LABEL))
+
+typedef struct _glLabel          glLabel;
+typedef struct _glLabelClass     glLabelClass;
+
+typedef struct _glLabelPrivate   glLabelPrivate;
+
+#include "label-object.h"
+struct _glLabel {
+       GObject         object;
+
+        lglTemplate    *template;
+        gboolean        rotate_flag;
+
+       GList          *objects;
+
+       glLabelPrivate *priv;
+};
+
+struct _glLabelClass {
+       GObjectClass         parent_class;
+
+       void (*changed)          (glLabel *label, gpointer user_data);
+
+       void (*name_changed)     (glLabel *label, gpointer user_data);
+
+       void (*modified_changed) (glLabel *label, gpointer user_data);
+
+       void (*merge_changed)    (glLabel *label, gpointer user_data);
+
+       void (*size_changed)     (glLabel *label, gpointer user_data);
+
+       void (*object_added)     (glLabel       *label,
+                                  glLabelObject *object,
+                                  gpointer       user_data);
+
+};
+
+
+GType         gl_label_get_type                (void) G_GNUC_CONST;
+
+GObject      *gl_label_new                     (void);
+
+
+void          gl_label_add_object              (glLabel       *label,
+                                               glLabelObject *object);
+
+void          gl_label_remove_object           (glLabel       *label,
+                                               glLabelObject *object);
+
+void          gl_label_raise_object_to_top     (glLabel       *label,
+                                               glLabelObject *object);
+
+void          gl_label_lower_object_to_bottom  (glLabel       *label,
+                                               glLabelObject *object);
+
+
+void          gl_label_set_template            (glLabel       *label,
+                                               lglTemplate   *template);
+
+void          gl_label_set_rotate_flag         (glLabel       *label,
+                                               gboolean       rotate_flag);
+
+void          gl_label_get_size                (glLabel       *label,
+                                               gdouble       *w,
+                                               gdouble       *h);
+
+
+void          gl_label_set_merge               (glLabel       *label,
+                                               glMerge       *merge);
+
+glMerge      *gl_label_get_merge               (glLabel       *label);
+
+
+gchar        *gl_label_get_filename            (glLabel       *label);
+
+gchar        *gl_label_get_short_name          (glLabel       *label);
+
+GHashTable   *gl_label_get_pixbuf_cache        (glLabel       *label);
+
+gboolean      gl_label_is_modified             (glLabel       *label);
+
+gboolean      gl_label_is_untitled             (glLabel       *label);
+
+gboolean      gl_label_can_undo                (glLabel       *label);
+
+gboolean      gl_label_can_redo                (glLabel       *label);
+
+
+void          gl_label_set_filename            (glLabel       *label,
+                                               const gchar   *filename);
+
+void          gl_label_clear_modified          (glLabel       *label);
+
+void          gl_label_set_compression         (glLabel       *label,
+                                               gint           compression);
+
+gint          gl_label_get_compression         (glLabel       *label);
+
+void          gl_label_draw                    (glLabel       *label,
+                                                cairo_t       *cr,
+                                                gboolean       screen_flag,
+                                                glMergeRecord *record);
+
+G_END_DECLS
+
+
+#endif /* __LABEL_H__ */
diff --git a/src/marshal.c b/src/marshal.c
new file mode 100644 (file)
index 0000000..1c4ed4d
--- /dev/null
@@ -0,0 +1,169 @@
+#include "marshal.h"
+
+#include       <glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* VOID:VOID (marshal.list:1) */
+
+/* VOID:INT (marshal.list:2) */
+
+/* VOID:INT,INT (marshal.list:3) */
+void
+gl_marshal_VOID__INT_INT (GClosure     *closure,
+                          GValue       *return_value G_GNUC_UNUSED,
+                          guint         n_param_values,
+                          const GValue *param_values,
+                          gpointer      invocation_hint G_GNUC_UNUSED,
+                          gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__INT_INT) (gpointer     data1,
+                                              gint         arg_1,
+                                              gint         arg_2,
+                                              gpointer     data2);
+  register GMarshalFunc_VOID__INT_INT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__INT_INT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_int (param_values + 1),
+            g_marshal_value_peek_int (param_values + 2),
+            data2);
+}
+
+/* VOID:INT,UINT (marshal.list:4) */
+void
+gl_marshal_VOID__INT_UINT (GClosure     *closure,
+                           GValue       *return_value G_GNUC_UNUSED,
+                           guint         n_param_values,
+                           const GValue *param_values,
+                           gpointer      invocation_hint G_GNUC_UNUSED,
+                           gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__INT_UINT) (gpointer     data1,
+                                               gint         arg_1,
+                                               guint        arg_2,
+                                               gpointer     data2);
+  register GMarshalFunc_VOID__INT_UINT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__INT_UINT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_int (param_values + 1),
+            g_marshal_value_peek_uint (param_values + 2),
+            data2);
+}
+
+/* VOID:DOUBLE (marshal.list:5) */
+
+/* VOID:DOUBLE,DOUBLE (marshal.list:6) */
+void
+gl_marshal_VOID__DOUBLE_DOUBLE (GClosure     *closure,
+                                GValue       *return_value G_GNUC_UNUSED,
+                                guint         n_param_values,
+                                const GValue *param_values,
+                                gpointer      invocation_hint G_GNUC_UNUSED,
+                                gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__DOUBLE_DOUBLE) (gpointer     data1,
+                                                    gdouble      arg_1,
+                                                    gdouble      arg_2,
+                                                    gpointer     data2);
+  register GMarshalFunc_VOID__DOUBLE_DOUBLE callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__DOUBLE_DOUBLE) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_double (param_values + 1),
+            g_marshal_value_peek_double (param_values + 2),
+            data2);
+}
+
+/* VOID:OBJECT (marshal.list:7) */
+
diff --git a/src/marshal.h b/src/marshal.h
new file mode 100644 (file)
index 0000000..bfc639b
--- /dev/null
@@ -0,0 +1,48 @@
+
+#ifndef __gl_marshal_MARSHAL_H__
+#define __gl_marshal_MARSHAL_H__
+
+#include       <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* VOID:VOID (marshal.list:1) */
+#define gl_marshal_VOID__VOID  g_cclosure_marshal_VOID__VOID
+
+/* VOID:INT (marshal.list:2) */
+#define gl_marshal_VOID__INT   g_cclosure_marshal_VOID__INT
+
+/* VOID:INT,INT (marshal.list:3) */
+extern void gl_marshal_VOID__INT_INT (GClosure     *closure,
+                                      GValue       *return_value,
+                                      guint         n_param_values,
+                                      const GValue *param_values,
+                                      gpointer      invocation_hint,
+                                      gpointer      marshal_data);
+
+/* VOID:INT,UINT (marshal.list:4) */
+extern void gl_marshal_VOID__INT_UINT (GClosure     *closure,
+                                       GValue       *return_value,
+                                       guint         n_param_values,
+                                       const GValue *param_values,
+                                       gpointer      invocation_hint,
+                                       gpointer      marshal_data);
+
+/* VOID:DOUBLE (marshal.list:5) */
+#define gl_marshal_VOID__DOUBLE        g_cclosure_marshal_VOID__DOUBLE
+
+/* VOID:DOUBLE,DOUBLE (marshal.list:6) */
+extern void gl_marshal_VOID__DOUBLE_DOUBLE (GClosure     *closure,
+                                            GValue       *return_value,
+                                            guint         n_param_values,
+                                            const GValue *param_values,
+                                            gpointer      invocation_hint,
+                                            gpointer      marshal_data);
+
+/* VOID:OBJECT (marshal.list:7) */
+#define gl_marshal_VOID__OBJECT        g_cclosure_marshal_VOID__OBJECT
+
+G_END_DECLS
+
+#endif /* __gl_marshal_MARSHAL_H__ */
+
diff --git a/src/marshal.list b/src/marshal.list
new file mode 100644 (file)
index 0000000..ea17eaf
--- /dev/null
@@ -0,0 +1,7 @@
+VOID:VOID
+VOID:INT
+VOID:INT,INT
+VOID:INT,UINT
+VOID:DOUBLE
+VOID:DOUBLE,DOUBLE
+VOID:OBJECT
diff --git a/src/merge-evolution.c b/src/merge-evolution.c
new file mode 100644 (file)
index 0000000..bf99e1b
--- /dev/null
@@ -0,0 +1,546 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge_evolution.c:  evolution merge backend module
+ *
+ *  Copyright (C) 2001  Jim Evins <evins@snaught.com>.
+ *  and
+ *  Copyright (C) 2005  Austin Henry <ahenry@users.sourceforge.net>
+ *  and
+ *  Copyright (C) 2007  Peter Cherriman <glabels-devel2712@bubieyehyeh.me.uk>
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#ifdef HAVE_LIBEBOOK
+
+
+#include "merge-evolution.h"
+
+#include <libebook/e-book.h>
+#include <glib/gi18n.h>
+#include <stdio.h>
+#include <string.h>
+#include <libglabels/str.h>
+
+#include "debug.h"
+
+#define DEFAULT_QUERY "(exists \"full_name\")"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+struct _glMergeEvolutionPrivate {
+        gchar            *query;
+        EBook            *book;
+        GList            *contacts;
+        GList            *fields; /* the fields supported by the addressbook */
+};
+
+enum {
+        LAST_SIGNAL
+};
+
+enum {
+        ARG_0,
+        ARG_QUERY,
+};
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void           gl_merge_evolution_finalize        (GObject          *object);
+
+static void           gl_merge_evolution_set_property    (GObject          *object,
+                                                          guint             param_id,
+                                                          const GValue     *value,
+                                                          GParamSpec       *pspec);
+
+static void           gl_merge_evolution_get_property    (GObject          *object,
+                                                          guint             param_id,
+                                                          GValue           *value,
+                                                          GParamSpec       *pspec);
+
+static GList         *gl_merge_evolution_get_key_list    (glMerge          *merge);
+static gchar         *gl_merge_evolution_get_primary_key (glMerge          *merge);
+static void           gl_merge_evolution_open            (glMerge          *merge);
+static void           gl_merge_evolution_close           (glMerge          *merge);
+static glMergeRecord *gl_merge_evolution_get_record      (glMerge          *merge);
+static void           gl_merge_evolution_copy            (glMerge          *dst_merge,
+                                                          glMerge          *src_merge);
+
+/* utility function prototypes go here */
+static void           free_field_list                    (GList *fields);
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glMergeEvolution, gl_merge_evolution, GL_TYPE_MERGE);
+
+static void
+gl_merge_evolution_class_init (glMergeEvolutionClass *class)
+{
+        GObjectClass *object_class = G_OBJECT_CLASS (class);
+        glMergeClass *merge_class  = GL_MERGE_CLASS (class);
+
+        gl_debug (DEBUG_MERGE, "START");
+
+        gl_merge_evolution_parent_class = g_type_class_peek_parent (class);
+
+        object_class->set_property = gl_merge_evolution_set_property;
+        object_class->get_property = gl_merge_evolution_get_property;
+
+        g_object_class_install_property
+                (object_class,
+                 ARG_QUERY,
+                 g_param_spec_string ("query", NULL, 
+                                      "Query used to select records from the addressbook",
+                                      "(exists \"full_name\")",
+                                      (G_PARAM_READABLE | G_PARAM_WRITABLE)));
+
+        object_class->finalize = gl_merge_evolution_finalize;
+
+        merge_class->get_key_list    = gl_merge_evolution_get_key_list;
+        merge_class->get_primary_key = gl_merge_evolution_get_primary_key;
+        merge_class->open            = gl_merge_evolution_open;
+        merge_class->close           = gl_merge_evolution_close;
+        merge_class->get_record      = gl_merge_evolution_get_record;
+        merge_class->copy            = gl_merge_evolution_copy;
+
+        gl_debug (DEBUG_MERGE, "END");
+}
+
+static void
+gl_merge_evolution_init (glMergeEvolution *merge_evolution)
+{
+        gl_debug (DEBUG_MERGE, "START");
+
+        merge_evolution->priv = g_new0 (glMergeEvolutionPrivate, 1);
+        merge_evolution->priv->query = g_strdup(DEFAULT_QUERY);
+
+        gl_debug (DEBUG_MERGE, "END");
+}
+
+static void
+gl_merge_evolution_finalize (GObject *object)
+{
+        glMergeEvolution *merge_evolution = GL_MERGE_EVOLUTION (object);
+
+        gl_debug (DEBUG_MERGE, "START");
+
+        g_return_if_fail (object && GL_IS_MERGE_EVOLUTION (object));
+
+        free_field_list(merge_evolution->priv->fields);
+        g_free (merge_evolution->priv->query);
+        g_free (merge_evolution->priv);
+
+        G_OBJECT_CLASS (gl_merge_evolution_parent_class)->finalize (object);
+
+        gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Set argument.                                                            */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_evolution_set_property (GObject      *object,
+                                 guint         param_id,
+                                 const GValue *value,
+                                 GParamSpec   *pspec)
+{
+        glMergeEvolution *merge_evolution;
+
+        merge_evolution = GL_MERGE_EVOLUTION (object);
+
+        switch (param_id) {
+
+        case ARG_QUERY:
+                g_free (merge_evolution->priv->query);
+                merge_evolution->priv->query = g_value_dup_string (value);
+                gl_debug (DEBUG_MERGE, "ARG \"query\" = \"%s\"",
+                          merge_evolution->priv->query);
+                break;
+
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+                break;
+
+        }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get argument.                                                            */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_evolution_get_property (GObject     *object,
+                                 guint        param_id,
+                                 GValue      *value,
+                                 GParamSpec  *pspec)
+{
+        glMergeEvolution *merge_evolution;
+
+        merge_evolution = GL_MERGE_EVOLUTION (object);
+
+        switch (param_id) {
+
+        case ARG_QUERY:
+                g_value_set_string (value, merge_evolution->priv->query);
+                break;
+
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+                break;
+
+        }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get key list.                                                            */
+/*--------------------------------------------------------------------------*/
+static GList *
+gl_merge_evolution_get_key_list (glMerge *merge)
+{
+        glMergeEvolution   *merge_evolution;
+        GList              *key_list = NULL;
+        GList              *iter;
+        
+        gl_debug (DEBUG_MERGE, "BEGIN");
+
+        merge_evolution = GL_MERGE_EVOLUTION (merge);
+
+        /* for the previously retrieved supported fileds, go through them and find
+         * their pretty names */
+        for (iter = merge_evolution->priv->fields; 
+                 iter != NULL; 
+                 iter = g_list_next(iter)) 
+        {
+                key_list = g_list_prepend (key_list, 
+                        g_strdup (e_contact_pretty_name (*(EContactField *)iter->data)));
+        }
+
+        key_list = g_list_reverse (key_list);
+
+        gl_debug (DEBUG_MERGE, "END");
+
+        return key_list;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get "primary" key.                                                       */
+/*--------------------------------------------------------------------------*/
+static gchar *
+gl_merge_evolution_get_primary_key (glMerge *merge)
+{
+        return g_strdup (e_contact_pretty_name(E_CONTACT_FILE_AS));
+}
+
+/* Sort compare function for sorting contacts by file-as element
+ * by Peter Cherriman (PJC)
+ * called by GList* g_list_sort(GList *list, sort_contact_by_file_as);
+ */
+static gint sort_contact_by_file_as(gconstpointer *a, gconstpointer *b)
+{
+  /* 
+   * Returns :         negative value if a < b; zero if a = b; positive value if a > b 
+   */
+
+  // Check and cast a and b to EContact
+  EContact *contact_a = E_CONTACT(a);
+  EContact *contact_b = E_CONTACT(b);
+
+  // Extract file_as for each contact and compare...
+  gchar *a_file_as = e_contact_get (contact_a, E_CONTACT_FILE_AS);
+  gchar *b_file_as = e_contact_get (contact_b, E_CONTACT_FILE_AS);
+  gint res = lgl_str_utf8_casecmp(a_file_as, b_file_as);
+
+  gl_debug(DEBUG_MERGE, "Sort comparing contacts '%s' and '%s' = %d", a_file_as, b_file_as, res);
+
+  // free file_as strings created earlier....
+  g_free (a_file_as);
+  g_free (b_file_as);
+
+  return res;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Open merge source.                                                       */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_evolution_open (glMerge *merge)
+{
+        glMergeEvolution *merge_evolution;
+        EBookQuery *query;
+        gboolean status;
+        GList *fields, *iter;
+        EContactField *field_id;
+        GError *error = NULL;
+
+        gl_debug (DEBUG_MERGE, "BEGIN");
+
+        merge_evolution = GL_MERGE_EVOLUTION (merge);
+
+        query = e_book_query_from_string(merge_evolution->priv->query);
+        if (!query) {
+                g_warning (_("Couldn't construct query"));
+                return;
+        }
+
+        merge_evolution->priv->book = e_book_new_system_addressbook(&error);
+        if (!merge_evolution->priv->book) {
+                g_warning (_("Couldn't open addressbook."));
+                if (error)
+                {
+                        g_warning ("e_book_new_system_addressbook: %s", error->message);
+                        g_error_free (error);
+                }
+                e_book_query_unref(query);
+                return;
+        }
+
+        if (!e_book_open(merge_evolution->priv->book, FALSE, &error)) {
+                g_warning (_("Couldn't open addressbook."));
+                if (error)
+                {
+                        g_warning ("e_book_open: %s", error->message);
+                        g_error_free (error);
+                }
+                e_book_query_unref(query);
+                g_object_unref(merge_evolution->priv->book);
+                merge_evolution->priv->book = NULL;
+                return;
+        }
+
+        /* fetch the list of fields supported by this address book */
+        status = e_book_get_supported_fields(merge_evolution->priv->book, &fields, &error);
+        if (status == FALSE) {
+                g_warning (_("Couldn't list available fields."));
+                if (error)
+                {
+                        g_warning ("e_book_get_supported_fields: %s", error->message);
+                        g_error_free (error);
+                }
+                e_book_query_unref(query);
+                g_object_unref(merge_evolution->priv->book);
+                merge_evolution->priv->book = NULL;
+                return;
+        }
+
+        /* generate a list of field_ids, and put that into private->fields */
+        for (iter = fields; iter != NULL; iter = g_list_next(iter)) {
+                field_id = g_new(EContactField, 1);
+                *field_id = e_contact_field_id(iter->data);
+
+                /* above this value, the data aren't strings anymore */
+                if (*field_id >= E_CONTACT_LAST_SIMPLE_STRING) {
+                        g_free (field_id);
+                        continue;
+                }
+
+                merge_evolution->priv->fields = 
+                        g_list_prepend(merge_evolution->priv->fields, field_id);
+        }
+        free_field_list(fields); /* don't need the list of names anymore */
+
+        gl_debug(DEBUG_MERGE, "Field list length: %d", g_list_length(merge_evolution->priv->fields));
+
+        /* finally retrieve the contacts */
+        status = e_book_get_contacts (merge_evolution->priv->book,
+                                      query,
+                                      &merge_evolution->priv->contacts,
+                                      &error);
+        if (status == FALSE) {
+                g_warning (_("Couldn't get contacts."));
+                if (error)
+                {
+                        g_warning ("e_book_get_contacts: %s", error->message);
+                        g_error_free (error);
+                }
+                e_book_query_unref(query);
+                free_field_list(merge_evolution->priv->fields);
+                g_object_unref(merge_evolution->priv->book);
+                merge_evolution->priv->book = NULL;
+
+                return;
+        }
+
+        e_book_query_unref(query);
+
+       /* Sort contacts using file-as element.... 
+         * by Peter Cherriman (PJC)
+         */
+        gl_debug (DEBUG_MERGE, "Starting sort");
+        merge_evolution->priv->contacts = g_list_sort(merge_evolution->priv->contacts, (GCompareFunc)sort_contact_by_file_as);
+        gl_debug (DEBUG_MERGE, "Ended sort");
+
+        gl_debug (DEBUG_MERGE, "END");
+
+        return;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Close merge source.                                                      */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_evolution_close (glMerge *merge)
+{
+        glMergeEvolution *merge_evolution;
+        GList *iter;
+
+        merge_evolution = GL_MERGE_EVOLUTION (merge);
+
+        /* unref all of the objects created in _open */
+        g_object_unref(merge_evolution->priv->book);
+        merge_evolution->priv->book = NULL;
+
+        for (iter = merge_evolution->priv->contacts; 
+             iter != NULL; 
+             iter = g_list_next(iter))
+        {
+                EContact *contact = E_CONTACT (iter->data);
+
+                g_object_unref(contact);
+        }
+        g_list_free(merge_evolution->priv->contacts);
+        merge_evolution->priv->contacts = NULL;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get next record from merge source, NULL if no records left (i.e EOF)     */
+/*--------------------------------------------------------------------------*/
+static glMergeRecord *
+gl_merge_evolution_get_record (glMerge *merge)
+{
+        glMergeEvolution   *merge_evolution;
+        glMergeRecord *record;
+        glMergeField  *field;
+        EContactField field_id;
+
+        GList *head, *iter; 
+        EContact *contact;
+
+        merge_evolution = GL_MERGE_EVOLUTION (merge);
+
+        head = merge_evolution->priv->contacts;
+        if (head == NULL) {
+                return NULL; /* past the last record */
+        }
+        contact = E_CONTACT(head->data);
+
+        record = g_new0 (glMergeRecord, 1);
+        record->select_flag = TRUE;
+
+        /* Take the interesting fields one by one from the contact, and put them
+         * into the glMergeRecord structure. When done, free up the resources for
+         * that contact */
+
+        /* iterate through the supported fields, and add them to the list */
+        for (iter = merge_evolution->priv->fields;
+             iter != NULL;
+             iter = g_list_next(iter))
+        {
+                gchar *value;
+                field_id = *(EContactField *)iter->data;
+                value = g_strdup (e_contact_get_const (contact, field_id));
+
+                if (value) {
+                        field = g_new0 (glMergeField, 1);
+                        field->key = g_strdup (e_contact_pretty_name (field_id));
+                        field->value = value;
+                        record->field_list = g_list_prepend (record->field_list, field);
+                }
+        }
+
+        record->field_list = g_list_reverse (record->field_list);
+
+        /* do a destructive read */
+        g_object_unref (contact);
+        merge_evolution->priv->contacts = 
+                g_list_remove_link (merge_evolution->priv->contacts, head);
+        g_list_free_1 (head);
+
+        return record;
+}
+
+/*---------------------------------------------------------------------------*/
+/* Copy merge_evolution specific fields.                                     */
+/*---------------------------------------------------------------------------*/
+static void
+gl_merge_evolution_copy (glMerge *dst_merge,
+                    glMerge *src_merge)
+{
+        GList *src_iter, *dst_iter;
+
+        gl_debug (DEBUG_MERGE, "BEGIN");
+
+        glMergeEvolution *dst_merge_evolution;
+        glMergeEvolution *src_merge_evolution;
+
+        dst_merge_evolution = GL_MERGE_EVOLUTION (dst_merge);
+        src_merge_evolution = GL_MERGE_EVOLUTION (src_merge);
+
+        dst_merge_evolution->priv->query = g_strdup(src_merge_evolution->priv->query);
+
+        dst_merge_evolution->priv->fields = g_list_copy(src_merge_evolution->priv->fields);
+        for (src_iter = src_merge_evolution->priv->fields,
+                     dst_iter = dst_merge_evolution->priv->fields; 
+             src_iter != NULL && dst_iter != NULL; 
+             src_iter = g_list_next(src_iter), dst_iter = g_list_next(dst_iter))
+        {
+                dst_iter->data = g_new(EContactField, 1);
+                if (src_iter->data) { /* this better not be null, but... */
+                        memcpy(dst_iter->data, src_iter->data, sizeof(EContactField));
+                }
+        }
+
+        /* I don't know that there's a good way to do a deep copy of the various
+         * libebook structures/objects, so I'm just going to leave them out.  They
+         * are all regenerated on gl_merge_evolution_open, anyway */
+
+        gl_debug (DEBUG_MERGE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* Free the list of supported fields                                         */
+/*---------------------------------------------------------------------------*/
+static void
+free_field_list (GList *fields)
+{
+        GList *iter;
+
+        for (iter = fields; iter != NULL; iter = g_list_next(iter)) 
+        {
+                if (iter->data) {
+                        g_free(iter->data);
+                }
+        }
+        g_list_free(fields);
+        fields = NULL;
+}
+
+
+#endif /* HAVE_LIBEBOOK */
diff --git a/src/merge-evolution.h b/src/merge-evolution.h
new file mode 100644 (file)
index 0000000..26468ab
--- /dev/null
@@ -0,0 +1,70 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge_evolution.h:  evolution merge backend module header file
+ *
+ *  Copyright (C) 2002  Jim Evins <evins@snaught.com>.
+ *  and
+ *  Copyright (C) 2005  Austin Henry <ahenry@users.sourceforge.net>
+ *
+ *  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
+ */
+#ifndef __MERGE_EVOLUTION_H__
+#define __MERGE_EVOLUTION_H__
+
+#include "merge.h"
+
+G_BEGIN_DECLS
+
+/* The following object arguments are available:
+ *
+ * name               type             description
+ * ---------------------------------------------------------------------------
+ * query              gchar*           The query used to select records
+ *
+ */
+
+#define GL_TYPE_MERGE_EVOLUTION              (gl_merge_evolution_get_type ())
+#define GL_MERGE_EVOLUTION(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_MERGE_EVOLUTION, glMergeEvolution))
+#define GL_MERGE_EVOLUTION_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_MERGE_EVOLUTION, glMergeEvolutionClass))
+#define GL_IS_MERGE_EVOLUTION(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_MERGE_EVOLUTION))
+#define GL_IS_MERGE_EVOLUTION_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_MERGE_EVOLUTION))
+#define GL_MERGE_EVOLUTION_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GL_TYPE_MERGE_EVOLUTION, glMergeEvolutionClass))
+
+
+typedef struct _glMergeEvolution          glMergeEvolution;
+typedef struct _glMergeEvolutionClass     glMergeEvolutionClass;
+
+typedef struct _glMergeEvolutionPrivate   glMergeEvolutionPrivate;
+
+
+struct _glMergeEvolution {
+       glMerge                   object;
+
+       glMergeEvolutionPrivate  *priv;
+};
+
+struct _glMergeEvolutionClass {
+       glMergeClass              parent_class;
+};
+
+
+GType             gl_merge_evolution_get_type            (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __MERGE_EVOLUTION_H__ */
diff --git a/src/merge-init.c b/src/merge-init.c
new file mode 100644 (file)
index 0000000..b62551b
--- /dev/null
@@ -0,0 +1,94 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge.c:  document merge initialization
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include <glib/gi18n.h>
+
+#include "merge-init.h"
+#include "merge-text.h"
+#ifdef HAVE_LIBEBOOK
+#include "merge-evolution.h"
+#include "merge-vcard.h"
+#endif /* HAVE_LIBEBOOK */
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+\f
+/*****************************************************************************/
+/* Initailize document merge module, by registering all available backends.  */
+/*****************************************************************************/
+void
+gl_merge_init (void)
+{
+
+       gl_merge_register_backend (GL_TYPE_MERGE_TEXT,
+                                  "Text/Comma",
+                                  _("Text file with comma delimeters (CSV)"),
+                                  GL_MERGE_SRC_IS_FILE,
+                                  "delim", ',',
+                                  NULL);
+
+       gl_merge_register_backend (GL_TYPE_MERGE_TEXT,
+                                  "Text/Colon",
+                                  _("Text file with colon delimeters"),
+                                  GL_MERGE_SRC_IS_FILE,
+                                  "delim", ':',
+                                  NULL);
+
+       gl_merge_register_backend (GL_TYPE_MERGE_TEXT,
+                                  "Text/Tab",
+                                  _("Text file with tab delimeters"),
+                                  GL_MERGE_SRC_IS_FILE,
+                                  "delim", '\t',
+                                  NULL);
+
+#ifdef HAVE_LIBEBOOK
+
+       gl_merge_register_backend (GL_TYPE_MERGE_EVOLUTION,
+                                  "ebook/eds",
+                                  _("Data from default Evolution Addressbook"),
+                                  GL_MERGE_SRC_IS_FIXED,
+                                  NULL);
+
+       gl_merge_register_backend (GL_TYPE_MERGE_VCARD,
+                                  "ebook/vcard",
+                                  _("Data from a file containing VCards"),
+                                  GL_MERGE_SRC_IS_FILE,
+                                  NULL);
+
+#endif /* HAVE_LIBEBOOK */
+
+}
diff --git a/src/merge-init.h b/src/merge-init.h
new file mode 100644 (file)
index 0000000..7bd57ee
--- /dev/null
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge-init.h:  document merge initialization header file
+ *
+ *  Copyright (C) 2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __MERGE_INIT_H__
+#define __MERGE_INIT_H__
+
+#include "merge.h"
+
+G_BEGIN_DECLS
+
+void gl_merge_init (void);
+
+G_END_DECLS
+
+#endif
diff --git a/src/merge-properties-dialog.c b/src/merge-properties-dialog.c
new file mode 100644 (file)
index 0000000..d5f3508
--- /dev/null
@@ -0,0 +1,659 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge-properties-dialog.c:  document merge properties dialog module
+ *
+ *  Copyright (C) 2001  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "merge-properties-dialog.h"
+
+#include <glib/gi18n.h>
+#include <glade/glade-xml.h>
+#include <gtk/gtkfilechooserbutton.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtkstock.h>
+#include <gtk/gtktreestore.h>
+#include <gtk/gtktreeselection.h>
+#include <gtk/gtkcellrenderertoggle.h>
+#include <gtk/gtkcellrenderertext.h>
+#include <gtk/gtklabel.h>
+#include <string.h>
+
+#include "label.h"
+#include "merge.h"
+#include "util.h"
+#include "hig.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+struct _glMergePropertiesDialogPrivate {
+
+       glLabel      *label;
+       glMerge      *merge;
+
+       GtkWidget    *type_combo;
+       GtkWidget    *location_vbox;
+       GtkWidget    *src_entry;
+
+       GtkTreeStore *store;
+       GtkWidget    *treeview;
+
+       GtkWidget    *select_all_button;
+       GtkWidget    *unselect_all_button;
+
+       gchar        *saved_src;
+
+};
+
+enum {
+       /* Real columns */
+       SELECT_COLUMN,
+       RECORD_FIELD_COLUMN,
+       VALUE_COLUMN,
+
+       /* Invisible columns */
+       IS_RECORD_COLUMN,
+       DATA_COLUMN, /* points to glMergeRecord */
+
+       N_COLUMNS
+};
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void gl_merge_properties_dialog_finalize   (GObject                      *object);
+static void gl_merge_properties_dialog_construct  (glMergePropertiesDialog      *dialog,
+                                                  glLabel                      *label,
+                                                  GtkWindow                    *window);
+
+static void type_changed_cb                       (GtkWidget                    *widget,
+                                                  glMergePropertiesDialog      *dialog);
+
+static void src_changed_cb                        (GtkWidget                    *widget,
+                                                  glMergePropertiesDialog      *dialog);
+
+static void response_cb                           (glMergePropertiesDialog      *dialog,
+                                                  gint                          response,
+                                                  gpointer                      user_data);
+
+static void load_tree                             (GtkTreeStore                 *store,
+                                                  glMerge                      *merge);
+
+static void record_select_toggled_cb              (GtkCellRendererToggle        *cell,
+                                                  gchar                        *path_str,
+                                                  GtkTreeStore                 *store);
+
+static void select_all_button_clicked_cb          (GtkWidget                    *widget,
+                                                  glMergePropertiesDialog      *dialog);
+
+static void unselect_all_button_clicked_cb        (GtkWidget                    *widget,
+                                                  glMergePropertiesDialog      *dialog);
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glMergePropertiesDialog, gl_merge_properties_dialog, GTK_TYPE_DIALOG);
+
+static void
+gl_merge_properties_dialog_class_init (glMergePropertiesDialogClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_MERGE, "");
+       
+       gl_merge_properties_dialog_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_merge_properties_dialog_finalize;   
+}
+
+static void
+gl_merge_properties_dialog_init (glMergePropertiesDialog *dialog)
+{
+       gl_debug (DEBUG_MERGE, "START");
+
+       dialog->priv = g_new0 (glMergePropertiesDialogPrivate, 1);
+
+       gtk_container_set_border_width (GTK_CONTAINER(dialog), GL_HIG_PAD2);
+
+       gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
+       gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+                               GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                               GTK_STOCK_OK, GTK_RESPONSE_OK,
+                               NULL);
+
+       gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+
+       g_signal_connect(G_OBJECT (dialog), "response",
+                        G_CALLBACK (response_cb), NULL);
+
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+static void 
+gl_merge_properties_dialog_finalize (GObject *object)
+{
+       glMergePropertiesDialog* dialog = GL_MERGE_PROPERTIES_DIALOG (object);
+       
+       gl_debug (DEBUG_MERGE, "START");
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_MERGE_PROPERTIES_DIALOG (dialog));
+       g_return_if_fail (dialog->priv != NULL);
+
+       if (dialog->priv->merge != NULL) {
+               g_object_unref (G_OBJECT (dialog->priv->merge));
+       }
+       g_free (dialog->priv);
+
+       G_OBJECT_CLASS (gl_merge_properties_dialog_parent_class)->finalize (object);
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*****************************************************************************/
+/* NEW merge properties dialog.                                              */
+/*****************************************************************************/
+GtkWidget*
+gl_merge_properties_dialog_new (glLabel   *label,
+                               GtkWindow *window)
+{
+       GtkWidget *dialog;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       dialog = GTK_WIDGET (g_object_new (GL_TYPE_MERGE_PROPERTIES_DIALOG, NULL));
+
+       gl_merge_properties_dialog_construct (GL_MERGE_PROPERTIES_DIALOG (dialog),
+                                             label, window);
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return dialog;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Create merge widgets.                                          */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_properties_dialog_construct (glMergePropertiesDialog *dialog,
+                                     glLabel                 *label,
+                                     GtkWindow               *window)
+{
+       GladeXML          *gui;
+       gchar             *description;
+       glMergeSrcType     src_type;
+       gchar             *src;
+       gchar             *name, *title;
+       GList             *texts;
+       GtkWidget         *vbox;
+       GtkCellRenderer   *renderer;
+       GtkTreeViewColumn *column;
+       GtkTreeSelection  *selection;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       g_return_if_fail (GL_IS_MERGE_PROPERTIES_DIALOG (dialog));
+       g_return_if_fail (dialog->priv != NULL);
+
+       if (window) {
+               gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(window));
+               gtk_window_set_destroy_with_parent (GTK_WINDOW(dialog), TRUE);
+       }
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "merge-properties-dialog.glade",
+                             "merge_properties_vbox", NULL);
+
+       if (!gui) {
+               g_critical ("Could not open merge-properties-dialog.glade. gLabels may not be installed correctly!");
+               return;
+       }
+
+       vbox = glade_xml_get_widget (gui, "merge_properties_vbox");
+       gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox);
+
+       dialog->priv->type_combo    = glade_xml_get_widget (gui, "type_combo");
+       dialog->priv->location_vbox = glade_xml_get_widget (gui, "location_vbox");
+       dialog->priv->treeview      = glade_xml_get_widget (gui, "treeview");
+
+       dialog->priv->select_all_button   = glade_xml_get_widget (gui, "select_all_button");
+       dialog->priv->unselect_all_button = glade_xml_get_widget (gui, "unselect_all_button");
+
+        g_object_unref (gui);
+
+       gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dialog->priv->type_combo));
+
+       dialog->priv->label = label;
+
+       dialog->priv->merge = gl_label_get_merge (dialog->priv->label);
+       description         = gl_merge_get_description (dialog->priv->merge);
+       src_type            = gl_merge_get_src_type (dialog->priv->merge);
+       src                 = gl_merge_get_src (dialog->priv->merge);
+
+       /* --- Window title --- */
+       name = gl_label_get_short_name (label);
+       title = g_strdup_printf ("%s %s", name, _("Merge Properties"));
+       gtk_window_set_title (GTK_WINDOW (dialog), title);
+       g_free (name);
+       g_free (title);
+
+       texts = gl_merge_get_descriptions ();
+       gl_debug (DEBUG_MERGE, "DESCRIPTIONS:");
+       {
+               GList *p;
+
+               for (p=texts; p!=NULL; p=p->next) {
+                       gl_debug (DEBUG_MERGE, "    \"%s\"", p->data);
+               }
+       }
+       gl_util_combo_box_set_strings (GTK_COMBO_BOX (dialog->priv->type_combo),
+                                      texts);
+       gl_merge_free_descriptions (&texts);
+       gl_util_combo_box_set_active_text (GTK_COMBO_BOX (dialog->priv->type_combo),
+                                          description);
+       g_signal_connect (G_OBJECT (dialog->priv->type_combo), "changed",
+                         G_CALLBACK (type_changed_cb), dialog);
+
+       gl_debug (DEBUG_MERGE, "Src_type = %d", src_type);
+       switch (src_type) {
+       case GL_MERGE_SRC_IS_FILE:
+               dialog->priv->src_entry =
+                       gtk_file_chooser_button_new (_("Select merge-database source"),
+                                                    GTK_FILE_CHOOSER_ACTION_OPEN);
+               gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog->priv->src_entry),
+                                              src);
+               g_signal_connect (G_OBJECT (dialog->priv->src_entry),
+                                 "selection-changed",
+                                 G_CALLBACK (src_changed_cb), dialog);
+               break;
+       default:
+               dialog->priv->src_entry = gtk_label_new (_("N/A"));
+               gtk_misc_set_alignment (GTK_MISC (dialog->priv->src_entry), 0.0, 0.5);
+               break;
+       }
+       gtk_box_pack_start (GTK_BOX (dialog->priv->location_vbox),
+                           dialog->priv->src_entry, FALSE, FALSE, 0);
+       gtk_widget_show_all (GTK_WIDGET (dialog->priv->location_vbox));
+
+       dialog->priv->store = gtk_tree_store_new (N_COLUMNS,
+                                         G_TYPE_BOOLEAN, /* Record selector */
+                                         G_TYPE_STRING,  /* Record/Field name */
+                                         G_TYPE_STRING,  /* Field value */
+                                         G_TYPE_BOOLEAN, /* Is Record? */
+                                         G_TYPE_POINTER  /* Pointer to record */);
+       load_tree (dialog->priv->store, dialog->priv->merge);
+
+       gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->priv->treeview),
+                                GTK_TREE_MODEL (dialog->priv->store));
+
+       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (dialog->priv->treeview),
+                                     TRUE);
+       selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->priv->treeview));
+       gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
+       renderer = gtk_cell_renderer_toggle_new ();
+       g_signal_connect (G_OBJECT (renderer), "toggled",
+                         G_CALLBACK (record_select_toggled_cb), dialog->priv->store);
+       column = gtk_tree_view_column_new_with_attributes (_("Select"), renderer,
+                                                          "active", SELECT_COLUMN,
+                                                          "visible", IS_RECORD_COLUMN,
+                                                          NULL);
+       gtk_tree_view_column_set_clickable (column, TRUE);
+       gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->priv->treeview), column);
+       renderer = gtk_cell_renderer_text_new ();
+       gtk_object_set (GTK_OBJECT (renderer), "yalign", 0.0, NULL);
+       column = gtk_tree_view_column_new_with_attributes (_("Record/Field"), renderer,
+                                                          "text", RECORD_FIELD_COLUMN,
+                                                          NULL);
+       gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+       gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->priv->treeview), column);
+       gtk_tree_view_set_expander_column (GTK_TREE_VIEW (dialog->priv->treeview), column);
+       renderer = gtk_cell_renderer_text_new ();
+       gtk_object_set (GTK_OBJECT (renderer), "yalign", 0.0, NULL);
+       column = gtk_tree_view_column_new_with_attributes (_("Data"), renderer,
+                                                          "text", VALUE_COLUMN,
+                                                          NULL);
+       gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+       gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->priv->treeview), column);
+
+       g_signal_connect (G_OBJECT (dialog->priv->select_all_button),
+                         "clicked",
+                         G_CALLBACK (select_all_button_clicked_cb), dialog);
+
+       g_signal_connect (G_OBJECT (dialog->priv->unselect_all_button),
+                         "clicked",
+                         G_CALLBACK (unselect_all_button_clicked_cb), dialog);
+
+
+       g_free (src);
+       g_free (description);
+
+        gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  type "changed" callback.                                       */
+/*--------------------------------------------------------------------------*/
+static void
+type_changed_cb (GtkWidget               *widget,
+                glMergePropertiesDialog *dialog)
+{
+       gchar             *description;
+       gchar             *name;
+       gchar             *src;
+       glMergeSrcType     src_type;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       description = gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->type_combo));
+       name = gl_merge_description_to_name (description);
+
+       src = gl_merge_get_src (dialog->priv->merge); /* keep current src if possible */
+       if ( src != NULL ) {
+               gl_debug (DEBUG_MERGE, "Saving src = \"%s\"", src);
+               g_free (dialog->priv->saved_src);
+               dialog->priv->saved_src = src;
+       }
+
+       if (dialog->priv->merge != NULL) {
+               g_object_unref (G_OBJECT(dialog->priv->merge));
+       }
+       dialog->priv->merge = gl_merge_new (name);
+
+       gtk_widget_destroy (dialog->priv->src_entry);
+       src_type = gl_merge_get_src_type (dialog->priv->merge);
+       switch (src_type) {
+       case GL_MERGE_SRC_IS_FILE:
+               dialog->priv->src_entry =
+                       gtk_file_chooser_button_new (_("Select merge-database source"),
+                                                    GTK_FILE_CHOOSER_ACTION_OPEN);
+               if (dialog->priv->saved_src != NULL) {
+                       gl_debug (DEBUG_MERGE, "Setting src = \"%s\"", dialog->priv->saved_src);
+                       gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog->priv->src_entry),
+                                                      dialog->priv->saved_src);
+                       gl_merge_set_src (dialog->priv->merge, dialog->priv->saved_src);
+               }
+               g_signal_connect (G_OBJECT (dialog->priv->src_entry),
+                                 "selection-changed",
+                                 G_CALLBACK (src_changed_cb), dialog);
+               break;
+       case GL_MERGE_SRC_IS_FIXED:
+               dialog->priv->src_entry = gtk_label_new (_("Fixed"));
+               gtk_misc_set_alignment (GTK_MISC (dialog->priv->src_entry), 0.0, 0.5);
+
+               gl_debug (DEBUG_MERGE, "Setting src = \"%s\"", dialog->priv->saved_src);
+               gl_merge_set_src (dialog->priv->merge, "Fixed");
+               break;
+       default:
+               dialog->priv->src_entry = gtk_label_new (_("N/A"));
+               gtk_misc_set_alignment (GTK_MISC (dialog->priv->src_entry), 0.0, 0.5);
+               break;
+       }
+       gtk_box_pack_start( GTK_BOX (dialog->priv->location_vbox),
+                           dialog->priv->src_entry, FALSE, FALSE, 0);
+       gtk_widget_show_all (dialog->priv->location_vbox);
+
+       load_tree (dialog->priv->store, dialog->priv->merge);
+
+       g_free (description);
+       g_free (name);
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  source "changed" callback.                                     */
+/*--------------------------------------------------------------------------*/
+static void
+src_changed_cb (GtkWidget               *widget,
+               glMergePropertiesDialog *dialog)
+{
+       gchar     *src, *orig_src;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       orig_src = gl_merge_get_src (dialog->priv->merge);
+       src = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog->priv->src_entry));
+
+       gl_debug (DEBUG_MERGE, "orig=\"%s\", new=\"%s\"\n", orig_src, src);
+
+       if (((orig_src == NULL) && (src != NULL)) ||
+           ((orig_src != NULL) && (src == NULL)) ||
+           ((orig_src != NULL) && (src != NULL) && strcmp (src, orig_src)))
+       {
+               gl_merge_set_src (dialog->priv->merge, src);
+               load_tree (dialog->priv->store, dialog->priv->merge);
+       }
+
+       g_free (orig_src);
+       g_free (src);
+
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  response callback.                                             */
+/*--------------------------------------------------------------------------*/
+static void
+response_cb (glMergePropertiesDialog *dialog,
+            gint                     response,
+            gpointer                 user_data)
+{
+       gl_debug (DEBUG_MERGE, "START");
+
+       switch (response) {
+
+       case GTK_RESPONSE_OK:
+               gl_label_set_merge (dialog->priv->label, dialog->priv->merge);
+               gtk_widget_hide (GTK_WIDGET (dialog));
+               break;
+       case GTK_RESPONSE_CANCEL:
+               /* Let the dialog get rebuilt next time to recover state. */
+               gtk_widget_destroy (GTK_WIDGET (dialog));
+               break;
+       case GTK_RESPONSE_DELETE_EVENT:
+               break;
+       default:
+               g_print ("response = %d", response);
+               g_assert_not_reached ();
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Load tree store from merge data.                               */
+/*--------------------------------------------------------------------------*/
+static void
+load_tree (GtkTreeStore           *store,
+          glMerge                *merge)
+{
+       const GList   *record_list;
+       GList         *p_rec, *p_field;
+       glMergeRecord *record;
+       glMergeField  *field;
+       GtkTreeIter    iter1, iter2;
+       gchar         *primary_key;
+       gchar         *primary_value;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       gtk_tree_store_clear (store);
+
+       primary_key = gl_merge_get_primary_key (merge);
+       record_list = gl_merge_get_record_list (merge);
+
+       for ( p_rec=(GList *)record_list; p_rec!=NULL; p_rec=p_rec->next ) {
+               record = (glMergeRecord *)p_rec->data;
+               
+               primary_value = gl_merge_eval_key (record, primary_key);
+
+               gtk_tree_store_append (store, &iter1, NULL);
+               gtk_tree_store_set (store, &iter1,
+                                   SELECT_COLUMN,       record->select_flag,
+                                   RECORD_FIELD_COLUMN, primary_value,
+                                   IS_RECORD_COLUMN,    TRUE,
+                                   DATA_COLUMN,         record,
+                                   -1);
+
+               g_free (primary_value);
+
+               for ( p_field=record->field_list; p_field!=NULL; p_field=p_field->next ) {
+                       field = (glMergeField *)p_field->data;
+
+                       gtk_tree_store_append (store, &iter2, &iter1);
+                       gtk_tree_store_set (store, &iter2,
+                                           RECORD_FIELD_COLUMN, field->key,
+                                           VALUE_COLUMN,        field->value,
+                                           IS_RECORD_COLUMN,    FALSE,
+                                           -1);
+               }
+       }
+
+       g_free (primary_key);
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Record select toggled.                                         */
+/*--------------------------------------------------------------------------*/
+static void
+record_select_toggled_cb (GtkCellRendererToggle *cell,
+                         gchar                 *path_str,
+                         GtkTreeStore          *store)
+{
+       GtkTreePath   *path;
+       GtkTreeIter    iter;
+       glMergeRecord *record;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       /* get toggled iter */
+       path = gtk_tree_path_new_from_string (path_str);
+       gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
+
+       /* get current data */
+       gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+                           DATA_COLUMN,   &record,
+                           -1);
+
+       /* toggle the select flag within the record */
+       record->select_flag ^= 1;
+
+       /* set new value in store */
+       gtk_tree_store_set (store, &iter,
+                           SELECT_COLUMN, record->select_flag,
+                           -1);
+
+       /* clean up */
+       gtk_tree_path_free (path);
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  "Select All" button callback.                                  */
+/*--------------------------------------------------------------------------*/
+static void
+select_all_button_clicked_cb (GtkWidget                    *widget,
+                             glMergePropertiesDialog      *dialog)
+{
+       GtkTreeModel  *store = GTK_TREE_MODEL (dialog->priv->store);
+       GtkTreeIter    iter;
+       glMergeRecord *record;
+       gboolean       good;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       for ( good = gtk_tree_model_get_iter_first (store, &iter);
+             good;
+             good = gtk_tree_model_iter_next (store, &iter) )
+       {
+               
+               /* get current data */
+               gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+                                   DATA_COLUMN,   &record,
+                                   -1);
+
+               
+               /* Set select flag within the record */
+               record->select_flag = TRUE;
+
+               /* set new value in store */
+               gtk_tree_store_set (GTK_TREE_STORE (store), &iter,
+                                   SELECT_COLUMN, record->select_flag,
+                                   -1);
+
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  "Unselect All" button callback.                                */
+/*--------------------------------------------------------------------------*/
+static void
+unselect_all_button_clicked_cb (GtkWidget                    *widget,
+                               glMergePropertiesDialog      *dialog)
+{
+       GtkTreeModel  *store = GTK_TREE_MODEL (dialog->priv->store);
+       GtkTreeIter    iter;
+       glMergeRecord *record;
+       gboolean       good;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       for ( good = gtk_tree_model_get_iter_first (store, &iter);
+             good;
+             good = gtk_tree_model_iter_next (store, &iter) )
+       {
+               
+               /* get current data */
+               gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+                                   DATA_COLUMN,   &record,
+                                   -1);
+
+               
+               /* Set select flag within the record */
+               record->select_flag = FALSE;
+
+               /* set new value in store */
+               gtk_tree_store_set (GTK_TREE_STORE (store), &iter,
+                                   SELECT_COLUMN, record->select_flag,
+                                   -1);
+
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+}
diff --git a/src/merge-properties-dialog.h b/src/merge-properties-dialog.h
new file mode 100644 (file)
index 0000000..f98ea7b
--- /dev/null
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge-properties-dialog.h:  document merge properties dialog module header file
+ *
+ *  Copyright (C) 2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __MERGE_PROPERTIES_DIALOG_H__
+#define __MERGE_PROPERTIES_DIALOG_H__
+
+#include <gtk/gtkdialog.h>
+#include <gtk/gtkwindow.h>
+#include "label.h"
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_MERGE_PROPERTIES_DIALOG            (gl_merge_properties_dialog_get_type ())
+#define GL_MERGE_PROPERTIES_DIALOG(obj)            (GTK_CHECK_CAST ((obj), GL_TYPE_MERGE_PROPERTIES_DIALOG, glMergePropertiesDialog))
+#define GL_MERGE_PROPERTIES_DIALOG_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_MERGE_PROPERTIES_DIALOG, glMergePropertiesDialogClass))
+#define GL_IS_MERGE_PROPERTIES_DIALOG(obj)         (GTK_CHECK_TYPE ((obj), GL_TYPE_MERGE_PROPERTIES_DIALOG))
+#define GL_IS_MERGE_PROPERTIES_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_MERGE_PROPERTIES_DIALOG))
+#define GL_MERGE_PROPERTIES_DIALOG_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), GL_TYPE_MERGE_PROPERTIES_DIALOG, glMergePropertiesDialogClass))
+
+
+typedef struct _glMergePropertiesDialog         glMergePropertiesDialog;
+typedef struct _glMergePropertiesDialogClass    glMergePropertiesDialogClass;
+
+typedef struct _glMergePropertiesDialogPrivate  glMergePropertiesDialogPrivate;
+
+struct _glMergePropertiesDialog
+{
+       GtkDialog                       parent_instance;
+
+       glMergePropertiesDialogPrivate *priv;
+
+};
+
+struct  _glMergePropertiesDialogClass
+{
+       GtkDialogClass                  parent_class;
+};
+
+GType      gl_merge_properties_dialog_get_type    (void) G_GNUC_CONST;
+
+GtkWidget *gl_merge_properties_dialog_new         (glLabel   *label,
+                                                  GtkWindow *window);
+
+G_END_DECLS
+
+#endif
diff --git a/src/merge-text.c b/src/merge-text.c
new file mode 100644 (file)
index 0000000..674e81d
--- /dev/null
@@ -0,0 +1,694 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge_text.c:  text-file merge backend module
+ *
+ *  Copyright (C) 2001  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "merge-text.h"
+
+#include <stdio.h>
+
+#include "debug.h"
+
+#define LINE_BUF_LEN 1024
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+struct _glMergeTextPrivate {
+       gchar             delim;
+       FILE             *fp;
+};
+
+enum {
+       LAST_SIGNAL
+};
+
+enum {
+       ARG_0,
+       ARG_DELIM,
+};
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void           gl_merge_text_finalize        (GObject          *object);
+
+static void           gl_merge_text_set_property    (GObject          *object,
+                                                    guint             param_id,
+                                                    const GValue     *value,
+                                                    GParamSpec       *pspec);
+
+static void           gl_merge_text_get_property    (GObject          *object,
+                                                    guint             param_id,
+                                                    GValue           *value,
+                                                    GParamSpec       *pspec);
+
+static GList         *gl_merge_text_get_key_list    (glMerge          *merge);
+static gchar         *gl_merge_text_get_primary_key (glMerge          *merge);
+static void           gl_merge_text_open            (glMerge          *merge);
+static void           gl_merge_text_close           (glMerge          *merge);
+static glMergeRecord *gl_merge_text_get_record      (glMerge          *merge);
+static void           gl_merge_text_copy            (glMerge          *dst_merge,
+                                                    glMerge          *src_merge);
+
+static GList         *parse_line                    (FILE             *fp,
+                                                    gchar             delim);
+static gchar         *parse_field                   (gchar            *raw_field);
+static void           free_fields                   (GList           **fields);
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glMergeText, gl_merge_text, GL_TYPE_MERGE);
+
+static void
+gl_merge_text_class_init (glMergeTextClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+       glMergeClass *merge_class  = GL_MERGE_CLASS (class);
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       gl_merge_text_parent_class = g_type_class_peek_parent (class);
+
+       object_class->set_property = gl_merge_text_set_property;
+       object_class->get_property = gl_merge_text_get_property;
+
+       g_object_class_install_property
+                (object_class,
+                 ARG_DELIM,
+                 g_param_spec_char ("delim", NULL, NULL,
+                                   0, 0x7F, ',',
+                                   (G_PARAM_READABLE | G_PARAM_WRITABLE)));
+
+       object_class->finalize = gl_merge_text_finalize;
+
+       merge_class->get_key_list    = gl_merge_text_get_key_list;
+       merge_class->get_primary_key = gl_merge_text_get_primary_key;
+       merge_class->open            = gl_merge_text_open;
+       merge_class->close           = gl_merge_text_close;
+       merge_class->get_record      = gl_merge_text_get_record;
+       merge_class->copy            = gl_merge_text_copy;
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+static void
+gl_merge_text_init (glMergeText *merge_text)
+{
+       gl_debug (DEBUG_MERGE, "START");
+
+       merge_text->priv = g_new0 (glMergeTextPrivate, 1);
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+static void
+gl_merge_text_finalize (GObject *object)
+{
+       glMergeText *merge_text = GL_MERGE_TEXT (object);
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       g_return_if_fail (object && GL_IS_MERGE_TEXT (object));
+
+       g_free (merge_text->priv);
+
+       G_OBJECT_CLASS (gl_merge_text_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Set argument.                                                            */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_text_set_property (GObject      *object,
+                           guint         param_id,
+                           const GValue *value,
+                           GParamSpec   *pspec)
+{
+       glMergeText *merge_text;
+
+       merge_text = GL_MERGE_TEXT (object);
+
+       switch (param_id) {
+
+       case ARG_DELIM:
+               merge_text->priv->delim = g_value_get_char (value);
+               gl_debug (DEBUG_MERGE, "ARG \"delim\" = \"%c\"",
+                         merge_text->priv->delim);
+               break;
+
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+                break;
+
+        }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get argument.                                                            */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_text_get_property (GObject     *object,
+                           guint        param_id,
+                           GValue      *value,
+                           GParamSpec  *pspec)
+{
+       glMergeText *merge_text;
+
+       merge_text = GL_MERGE_TEXT (object);
+
+       switch (param_id) {
+
+       case ARG_DELIM:
+               g_value_set_char (value, merge_text->priv->delim);
+               break;
+
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+                break;
+
+        }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get key list.                                                            */
+/*--------------------------------------------------------------------------*/
+static GList *
+gl_merge_text_get_key_list (glMerge *merge)
+{
+       glMergeText   *merge_text;
+       GList         *record_list, *p_rec;
+       glMergeRecord *record;
+       GList         *p_field;
+       gint           i_field, n_fields, n_fields_max = 0;
+       GList         *key_list;
+       
+       /* Field keys are simply column numbers. */
+
+       gl_debug (DEBUG_MERGE, "BEGIN");
+
+       merge_text = GL_MERGE_TEXT (merge);
+
+       record_list = (GList *)gl_merge_get_record_list (merge);
+
+       for ( p_rec=record_list; p_rec!=NULL; p_rec=p_rec->next ) {
+               record = (glMergeRecord *)p_rec->data;
+
+               n_fields = 0;
+               for ( p_field=record->field_list; p_field!=NULL; p_field=p_field->next ) {
+                       n_fields++;
+               }
+               if ( n_fields > n_fields_max ) n_fields_max = n_fields;
+       }
+
+       key_list = NULL;
+       for (i_field=1; i_field <= n_fields_max; i_field++) {
+               key_list = g_list_append (key_list, g_strdup_printf ("%d", i_field));
+       }
+
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return key_list;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get "primary" key.                                                       */
+/*--------------------------------------------------------------------------*/
+static gchar *
+gl_merge_text_get_primary_key (glMerge *merge)
+{
+       /* For now, let's always assume the first column is the primary key. */
+       return g_strdup ("1");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Open merge source.                                                       */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_text_open (glMerge *merge)
+{
+       glMergeText *merge_text;
+       gchar       *src;
+
+       merge_text = GL_MERGE_TEXT (merge);
+
+       src = gl_merge_get_src (merge);
+
+       if (src != NULL) {
+               merge_text->priv->fp = fopen (src, "r");
+       }
+
+       g_free (src);
+}
+
+/*--------------------------------------------------------------------------*/
+/* Close merge source.                                                      */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_text_close (glMerge *merge)
+{
+       glMergeText *merge_text;
+
+       merge_text = GL_MERGE_TEXT (merge);
+
+       if (merge_text->priv->fp != NULL) {
+
+               fclose (merge_text->priv->fp);
+               merge_text->priv->fp = NULL;
+
+       }
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get next record from merge source, NULL if no records left (i.e EOF)     */
+/*--------------------------------------------------------------------------*/
+static glMergeRecord *
+gl_merge_text_get_record (glMerge *merge)
+{
+       glMergeText   *merge_text;
+       gchar          delim;
+       FILE          *fp;
+       glMergeRecord *record;
+       GList         *fields, *p;
+       gint           i_field;
+       glMergeField  *field;
+
+       merge_text = GL_MERGE_TEXT (merge);
+
+       delim = merge_text->priv->delim;
+       fp    = merge_text->priv->fp;
+
+       if (fp == NULL) {
+               return NULL;
+       }
+              
+       fields = parse_line (fp, delim);
+       if ( fields == NULL ) {
+               return NULL;
+       }
+
+       record = g_new0 (glMergeRecord, 1);
+       record->select_flag = TRUE;
+       i_field = 1;
+       for (p=fields; p != NULL; p=p->next) {
+
+               field = g_new0 (glMergeField, 1);
+               field->key = g_strdup_printf ("%d", i_field++);
+#ifndef CSV_ALWAYS_UTF8
+               field->value = g_locale_to_utf8 (p->data, -1, NULL, NULL, NULL);
+#else
+               field->value = g_strdup (p->data);
+#endif
+
+               record->field_list = g_list_append (record->field_list, field);
+       }
+       free_fields (&fields);
+
+       return record;
+}
+
+/*---------------------------------------------------------------------------*/
+/* Copy merge_text specific fields.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+gl_merge_text_copy (glMerge *dst_merge,
+                   glMerge *src_merge)
+{
+       glMergeText *dst_merge_text;
+       glMergeText *src_merge_text;
+
+       dst_merge_text = GL_MERGE_TEXT (dst_merge);
+       src_merge_text = GL_MERGE_TEXT (src_merge);
+
+       dst_merge_text->priv->delim = src_merge_text->priv->delim;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Parse line.                                                     */
+/*                                                                           */
+/* Attempt to be a robust parser of various CSV (and similar) formats.       */
+/*                                                                           */
+/* Split into fields, accounting for:                                        */
+/*   - delimeters may be embedded in quoted text (")                         */
+/*   - delimeters may be "escaped" by a leading backslash (\)                */
+/*   - quotes may be embedded in quoted text as two adjacent quotes ("")     */
+/*   - quotes may be "escaped" either within or outside of quoted text.      */
+/*   - newlines may be embedded in quoted text, allowing a field to span     */
+/*     more than one line.                                                   */
+/*                                                                           */
+/* This function does not do any parsing of the individual fields, other     */
+/* than to correctly interpet delimeters.  Actual parsing of the individual  */
+/* fields is done in parse_field().                                          */
+/*                                                                           */
+/* Returns a list of fields.  A blank line is considered a line with one     */
+/* empty field.  Returns empty (NULL) when done.                             */
+/*---------------------------------------------------------------------------*/
+static GList *
+parse_line (FILE  *fp,
+           gchar  delim )
+{
+       GList *list = NULL;
+       GString *string;
+       gint c;
+       enum { BEGIN, NORMAL, QUOTED, QUOTED_QUOTE1,
+               NORMAL_ESCAPED, QUOTED_ESCAPED, DONE } state;
+
+       state = BEGIN;
+       string = g_string_new( "" );
+       while ( state != DONE ) {
+               c=getc (fp);
+
+               switch (state) {
+
+               case BEGIN:
+                        if ( c == delim )
+                        {
+                                /* first field is empty. */
+                                list = g_list_append (list, g_strdup (""));
+                               state = NORMAL;
+                                break;
+                        }
+                       switch (c) {
+                       case '"':
+                                string = g_string_append_c (string, c);
+                               state = QUOTED;
+                               break;
+                       case '\\':
+                                string = g_string_append_c (string, c);
+                               state = NORMAL_ESCAPED;
+                               break;
+                       case '\n':
+                               /* treat as one empty field. */
+                               list = g_list_append (list, g_strdup (""));
+                               state = DONE;
+                               break;
+                       case EOF:
+                                /* end of file, no more lines. */
+                               state = DONE;
+                               break;
+                       default:
+                                string = g_string_append_c (string, c);
+                               state = NORMAL;
+                               break;
+                       }
+                       break;
+
+               case NORMAL:
+                        if ( c == delim )
+                        {
+                                list = g_list_append (list, parse_field (string->str));
+                                string = g_string_assign( string, "" );
+                                state = NORMAL;
+                                break;
+                        }
+                       switch (c) {
+                       case '"':
+                                string = g_string_append_c (string, c);
+                               state = QUOTED;
+                               break;
+                       case '\\':
+                                string = g_string_append_c (string, c);
+                               state = NORMAL_ESCAPED;
+                               break;
+                       case '\n':
+                       case EOF:
+                               list = g_list_append (list, parse_field (string->str));
+                               state = DONE;
+                               break;
+                       default:
+                                string = g_string_append_c (string, c);
+                                state = NORMAL;
+                               break;
+                       }
+                       break;
+
+               case QUOTED:
+                       switch (c) {
+                       case '"':
+                                string = g_string_append_c (string, c);
+                               state = QUOTED_QUOTE1;
+                               break;
+                       case '\\':
+                                string = g_string_append_c (string, c);
+                               state = QUOTED_ESCAPED;
+                               break;
+                       case EOF:
+                               /* File ended mid way through quoted item */
+                               list = g_list_append (list, parse_field (string->str));
+                               state = DONE;
+                               break;
+                       default:
+                               string = g_string_append_c (string, c);
+                               break;
+                       }
+                       break;
+
+               case QUOTED_QUOTE1:
+                        if ( c == delim )
+                        {
+                                list = g_list_append (list, parse_field (string->str));
+                                string = g_string_assign( string, "" );
+                                state = NORMAL;
+                                break;
+                        }
+                       switch (c) {
+                       case '"':
+                               /* insert quotes in string, stay quoted. */
+                               string = g_string_append_c (string, c);
+                               state = QUOTED;
+                               break;
+                       case '\n':
+                       case EOF:
+                               /* line or file ended after quoted item */
+                               list = g_list_append (list, parse_field (string->str));
+                               state = DONE;
+                               break;
+                       default:
+                                string = g_string_append_c (string, c);
+                               state = NORMAL;
+                               break;
+                       }
+                       break;
+
+               case NORMAL_ESCAPED:
+                       switch (c) {
+                       case EOF:
+                               /* File ended mid way through quoted item */
+                               list = g_list_append (list, parse_field (string->str));
+                               state = DONE;
+                               break;
+                       default:
+                               string = g_string_append_c (string, c);
+                               state = NORMAL;
+                               break;
+                       }
+                       break;
+
+               case QUOTED_ESCAPED:
+                       switch (c) {
+                       case EOF:
+                               /* File ended mid way through quoted item */
+                               list = g_list_append (list, parse_field (string->str));
+                               state = DONE;
+                               break;
+                       default:
+                               string = g_string_append_c (string, c);
+                               state = QUOTED;
+                               break;
+                       }
+                       break;
+
+               default:
+                       g_assert_not_reached();
+                       break;
+               }
+
+       }
+       g_string_free( string, TRUE );
+
+       return list;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Parse field.                                                    */
+/*                                                                           */
+/*  - Strip leading and trailing white space, unless quoted.                 */
+/*  - Strip CR, unless escaped.                                              */
+/*  - Expand '\n' and '\t' into newline and tab characters.                  */
+/*  - Remove quotes, unless escaped (\" anywhere or "" within quotes)        */
+/*---------------------------------------------------------------------------*/
+static gchar *
+parse_field (gchar  *raw_field)
+{
+       GString *string;
+        gchar   *pass1_field, *c, *field;
+       enum { NORMAL, NORMAL_ESCAPED, QUOTED, QUOTED_ESCAPED, QUOTED_QUOTE1} state;
+
+
+        /*
+         * Pass 1: remove leading and trailing spaces.
+         */
+        pass1_field = g_strdup (raw_field);
+        g_strstrip (pass1_field);
+
+        /*
+         * Pass 2: resolve quoting and escaping.
+         */
+       state = NORMAL;
+       string = g_string_new( "" );
+        for ( c=pass1_field; *c != 0; c++ )
+        {
+               switch (state) {
+
+               case NORMAL:
+                       switch (*c) {
+                       case '\\':
+                               state = NORMAL_ESCAPED;
+                               break;
+                       case '"':
+                               state = QUOTED;
+                               break;
+                       case '\r':
+                               /* Strip CR. */
+                               break;
+                       default:
+                                string = g_string_append_c (string, *c);
+                               break;
+                       }
+                       break;
+
+               case NORMAL_ESCAPED:
+                       switch (*c) {
+                       case 'n':
+                               string = g_string_append_c (string, '\n');
+                               state = NORMAL;
+                               break;
+                       case 't':
+                               string = g_string_append_c (string, '\t');
+                               state = NORMAL;
+                               break;
+                       default:
+                               string = g_string_append_c (string, *c);
+                               state = NORMAL;
+                               break;
+                       }
+                       break;
+
+               case QUOTED:
+                       switch (*c) {
+                       case '\\':
+                               state = QUOTED_ESCAPED;
+                               break;
+                       case '"':
+                               state = QUOTED_QUOTE1;
+                               break;
+                       case '\r':
+                               /* Strip CR. */
+                               break;
+                       default:
+                               string = g_string_append_c (string, *c);
+                               break;
+                       }
+                       break;
+
+               case QUOTED_ESCAPED:
+                       switch (*c) {
+                       case 'n':
+                               string = g_string_append_c (string, '\n');
+                               state = QUOTED;
+                               break;
+                       case 't':
+                               string = g_string_append_c (string, '\t');
+                               state = QUOTED;
+                               break;
+                       default:
+                               string = g_string_append_c (string, *c);
+                               state = QUOTED;
+                               break;
+                       }
+                       break;
+
+               case QUOTED_QUOTE1:
+                       switch (*c) {
+                       case '"':
+                               /* insert quotes in string, stay quoted. */
+                               string = g_string_append_c (string, *c);
+                               state = QUOTED;
+                               break;
+                       case '\r':
+                               /* Strip CR, return to QUOTED. */
+                               state = QUOTED;
+                               break;
+                       default:
+                                string = g_string_append_c (string, *c);
+                               state = NORMAL;
+                               break;
+                       }
+                       break;
+
+               default:
+                       g_assert_not_reached();
+                       break;
+               }
+
+       }
+
+        field = g_strdup (string->str);
+       g_string_free( string, TRUE );
+        g_free (pass1_field);
+
+       return field;
+}
+
+/*---------------------------------------------------------------------------*/
+/* Free list of fields.                                                      */
+/*---------------------------------------------------------------------------*/
+void
+free_fields (GList ** list)
+{
+       GList *p;
+
+       for (p = *list; p != NULL; p = p->next) {
+               g_free (p->data);
+               p->data = NULL;
+       }
+
+       g_list_free (*list);
+       *list = NULL;
+}
+
diff --git a/src/merge-text.h b/src/merge-text.h
new file mode 100644 (file)
index 0000000..65bad54
--- /dev/null
@@ -0,0 +1,68 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge_text.h:  text-file merge backend module header file
+ *
+ *  Copyright (C) 2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __MERGE_TEXT_H__
+#define __MERGE_TEXT_H__
+
+#include "merge.h"
+
+G_BEGIN_DECLS
+
+/* The following object arguments are available:
+ *
+ * name               type             description
+ * ---------------------------------------------------------------------------
+ * delim              gchar            Field delimiter.
+ *
+ */
+
+#define GL_TYPE_MERGE_TEXT              (gl_merge_text_get_type ())
+#define GL_MERGE_TEXT(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_MERGE_TEXT, glMergeText))
+#define GL_MERGE_TEXT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_MERGE_TEXT, glMergeTextClass))
+#define GL_IS_MERGE_TEXT(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_MERGE_TEXT))
+#define GL_IS_MERGE_TEXT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_MERGE_TEXT))
+#define GL_MERGE_TEXT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GL_TYPE_MERGE_TEXT, glMergeTextClass))
+
+
+typedef struct _glMergeText          glMergeText;
+typedef struct _glMergeTextClass     glMergeTextClass;
+
+typedef struct _glMergeTextPrivate   glMergeTextPrivate;
+
+
+struct _glMergeText {
+       glMerge              object;
+
+       glMergeTextPrivate  *priv;
+};
+
+struct _glMergeTextClass {
+       glMergeClass         parent_class;
+};
+
+
+GType             gl_merge_text_get_type            (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif
diff --git a/src/merge-vcard.c b/src/merge-vcard.c
new file mode 100644 (file)
index 0000000..c0eb144
--- /dev/null
@@ -0,0 +1,383 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge_vcard.c:  vcard merge backend module
+ *
+ *  Copyright (C) 2001  Jim Evins <evins@snaught.com>.
+ *  and
+ *  Copyright (C) 2005  Austin Henry <ahenry@users.sourceforge.net>
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#ifdef HAVE_LIBEBOOK
+
+
+#include "merge-vcard.h"
+#include <libebook/e-contact.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+struct _glMergeVCardPrivate {
+        FILE        *fp;
+};
+
+enum {
+        LAST_SIGNAL
+};
+
+enum {
+        ARG_0,
+};
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void           gl_merge_vcard_finalize        (GObject          *object);
+
+static void           gl_merge_vcard_set_property    (GObject          *object,
+                                                      guint             param_id,
+                                                      const GValue     *value,
+                                                      GParamSpec       *pspec);
+
+static void           gl_merge_vcard_get_property    (GObject          *object,
+                                                      guint             param_id,
+                                                      GValue           *value,
+                                                      GParamSpec       *pspec);
+
+static GList         *gl_merge_vcard_get_key_list    (glMerge          *merge);
+static gchar         *gl_merge_vcard_get_primary_key (glMerge          *merge);
+static void           gl_merge_vcard_open            (glMerge          *merge);
+static void           gl_merge_vcard_close           (glMerge          *merge);
+static glMergeRecord *gl_merge_vcard_get_record      (glMerge          *merge);
+static void           gl_merge_vcard_copy            (glMerge          *dst_merge,
+                                                      glMerge          *src_merge);
+static char *         parse_next_vcard               (FILE             *fp);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glMergeVCard, gl_merge_vcard, GL_TYPE_MERGE);
+
+static void
+gl_merge_vcard_class_init (glMergeVCardClass *class)
+{
+        GObjectClass *object_class = G_OBJECT_CLASS (class);
+        glMergeClass *merge_class  = GL_MERGE_CLASS (class);
+
+        gl_debug (DEBUG_MERGE, "START");
+
+        gl_merge_vcard_parent_class = g_type_class_peek_parent (class);
+
+        object_class->set_property = gl_merge_vcard_set_property;
+        object_class->get_property = gl_merge_vcard_get_property;
+
+        object_class->finalize = gl_merge_vcard_finalize;
+
+        merge_class->get_key_list    = gl_merge_vcard_get_key_list;
+        merge_class->get_primary_key = gl_merge_vcard_get_primary_key;
+        merge_class->open            = gl_merge_vcard_open;
+        merge_class->close           = gl_merge_vcard_close;
+        merge_class->get_record      = gl_merge_vcard_get_record;
+        merge_class->copy            = gl_merge_vcard_copy;
+
+        gl_debug (DEBUG_MERGE, "END");
+}
+
+static void
+gl_merge_vcard_init (glMergeVCard *merge_vcard)
+{
+        gl_debug (DEBUG_MERGE, "START");
+
+        merge_vcard->priv = g_new0 (glMergeVCardPrivate, 1);
+
+        gl_debug (DEBUG_MERGE, "END");
+}
+
+static void
+gl_merge_vcard_finalize (GObject *object)
+{
+        glMergeVCard *merge_vcard = GL_MERGE_VCARD (object);
+
+        gl_debug (DEBUG_MERGE, "START");
+
+        g_return_if_fail (object && GL_IS_MERGE_VCARD (object));
+
+        g_free (merge_vcard->priv);
+
+        G_OBJECT_CLASS (gl_merge_vcard_parent_class)->finalize (object);
+
+        gl_debug (DEBUG_MERGE, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Set argument.                                                            */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_vcard_set_property (GObject      *object,
+                             guint         param_id,
+                             const GValue *value,
+                             GParamSpec   *pspec)
+{
+        glMergeVCard *merge_vcard;
+
+        merge_vcard = GL_MERGE_VCARD (object);
+
+        switch (param_id) {
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+                break;
+        }
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get argument.                                                            */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_vcard_get_property (GObject     *object,
+                             guint        param_id,
+                             GValue      *value,
+                             GParamSpec  *pspec)
+{
+        glMergeVCard *merge_vcard;
+
+        merge_vcard = GL_MERGE_VCARD (object);
+
+        switch (param_id) {
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+                break;
+        }
+
+}
+
+/* TODO */
+/*--------------------------------------------------------------------------*/
+/* Get key list.                                                            */
+/*--------------------------------------------------------------------------*/
+static GList *
+gl_merge_vcard_get_key_list (glMerge *merge)
+{
+        glMergeVCard   *merge_vcard;
+        GList          *key_list;
+        
+        gl_debug (DEBUG_MERGE, "BEGIN");
+
+        merge_vcard = GL_MERGE_VCARD (merge);
+
+        /* extremely simple approach until I can list the available keys from the
+         * server, and return them. */
+        key_list = NULL;
+        key_list = g_list_append (key_list, g_strdup ("full_name"));
+        key_list = g_list_append (key_list, g_strdup ("home_address"));
+        key_list = g_list_append (key_list, g_strdup ("work_address"));
+
+        gl_debug (DEBUG_MERGE, "END");
+
+        return key_list;
+}
+
+/* TODO? */
+/*--------------------------------------------------------------------------*/
+/* Get "primary" key.                                                       */
+/*--------------------------------------------------------------------------*/
+static gchar *
+gl_merge_vcard_get_primary_key (glMerge *merge)
+{
+        /* For now, let's always assume the full name is the primary key. */
+        return g_strdup ("full_name");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Open merge source.                                                       */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_vcard_open (glMerge *merge)
+{
+        glMergeVCard *merge_vcard;
+        gchar        *src;
+
+        merge_vcard = GL_MERGE_VCARD (merge);
+
+        src = gl_merge_get_src (merge);
+
+        if (src != NULL) {
+                merge_vcard->priv->fp = fopen (src, "r");
+        }
+
+        g_free (src);
+
+        return;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Close merge source.                                                      */
+/*--------------------------------------------------------------------------*/
+static void
+gl_merge_vcard_close (glMerge *merge)
+{
+        glMergeVCard *merge_vcard;
+
+        merge_vcard = GL_MERGE_VCARD (merge);
+
+        if (merge_vcard->priv->fp != NULL) {
+                fclose (merge_vcard->priv->fp);
+                merge_vcard->priv->fp = NULL;
+        }
+}
+
+/*--------------------------------------------------------------------------*/
+/* Get next record from merge source, NULL if no records left (i.e EOF)     */
+/*--------------------------------------------------------------------------*/
+static glMergeRecord *
+gl_merge_vcard_get_record (glMerge *merge)
+{
+        glMergeVCard  *merge_vcard;
+        glMergeRecord *record;
+        glMergeField  *field;
+
+        char *vcard;
+        EContact *contact;
+
+        merge_vcard = GL_MERGE_VCARD (merge);
+
+        vcard = parse_next_vcard(merge_vcard->priv->fp);
+        if (vcard == NULL || vcard[0] == '\0') {
+                return NULL; /* EOF */
+        }
+        contact = e_contact_new_from_vcard(vcard);
+        if (contact == NULL) {
+                return NULL; /* invalid vcard */
+        }
+
+        record = g_new0 (glMergeRecord, 1);
+        record->select_flag = TRUE;
+
+        /* Take the interesting fields one by one from the contact, and put them
+         * into the glMergeRecord structure. When done, free up the resources for
+         * that contact */
+
+        /* get the full name */
+        field = g_new0 (glMergeField, 1);
+        field->key = g_strdup ("full_name");
+        field->value = g_strdup (e_contact_get_const(contact, E_CONTACT_FULL_NAME));
+
+        record->field_list = g_list_append (record->field_list, field);
+
+        /* get the home address */
+        field = g_new0 (glMergeField, 1);
+        field->key = g_strdup ("home_address");
+        field->value = g_strdup (e_contact_get_const(contact, E_CONTACT_ADDRESS_LABEL_HOME));
+
+        record->field_list = g_list_append (record->field_list, field);
+
+        /* get the work address */
+        field = g_new0 (glMergeField, 1);
+        field->key = g_strdup ("work_address");
+        field->value = g_strdup (e_contact_get_const(contact, E_CONTACT_ADDRESS_LABEL_WORK));
+
+        record->field_list = g_list_append (record->field_list, field);
+
+        /* free the contact */
+        g_object_unref (contact);
+        g_free(vcard);
+
+        return record;
+}
+
+/*---------------------------------------------------------------------------*/
+/* Copy merge_vcard specific fields.                                         */
+/*---------------------------------------------------------------------------*/
+static void
+gl_merge_vcard_copy (glMerge *dst_merge,
+                     glMerge *src_merge)
+{
+        glMergeVCard *dst_merge_vcard;
+        glMergeVCard *src_merge_vcard;
+
+        dst_merge_vcard = GL_MERGE_VCARD (dst_merge);
+        src_merge_vcard = GL_MERGE_VCARD (src_merge);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE: pull out a full VCard from the open file                         */
+/* Arguments:                                                                */
+/*  fp - an open stream to parse in put from                                 */
+/* Returns:                                                                  */
+/*  a pointer to the buffer containing the vcard, the empty string on        */
+/*  end-of-file or error, this buffer needs to be free by the caller         */
+/*---------------------------------------------------------------------------*/
+static char * 
+parse_next_vcard (FILE *fp)
+{
+        gboolean  found_begin = FALSE;
+        gboolean  found_end = FALSE;
+        char     *vcard;
+        char      line[512];
+        int       size = 2048;
+        int       cursize = 0;
+
+        /* if no source has been set up, don't try to read from the file */
+        if (!fp) {
+                return NULL;
+        }
+
+        vcard = g_malloc0(size);
+
+        while (fgets(line, sizeof(line), fp) && found_end == FALSE) {
+                if (found_begin == TRUE) {
+                        if (g_str_has_prefix(line, "END:VCARD")) { found_end = TRUE; }
+                } else {
+                        if (g_str_has_prefix(line, "BEGIN:VCARD")) { found_begin = TRUE; } 
+                        else { continue; }/* skip lines not in a vcard */
+                }
+
+                /* if the buffer passed us isn't big enough, reallocate it */
+                cursize += strlen(line);
+                if (cursize >= size) {
+                        size *= 2;
+                        vcard = (char *)g_realloc(vcard, size); /* aborts program on error */
+                }
+
+                /* add the line (or portion thereof) to the vcard */
+                strncat(vcard, line, size);
+        }
+
+        return vcard;
+}
+
+
+
+#endif /* HAVE_LIBEBOOK */
diff --git a/src/merge-vcard.h b/src/merge-vcard.h
new file mode 100644 (file)
index 0000000..7ede444
--- /dev/null
@@ -0,0 +1,70 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge_vcard.h:  vcard merge backend module header file
+ *
+ *  Copyright (C) 2002  Jim Evins <evins@snaught.com>.
+ *  and
+ *  Copyright (C) 2005  Austin Henry <ahenry@users.sourceforge.net>
+ *
+ *  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
+ */
+#ifndef __MERGE_VCARD_H__
+#define __MERGE_VCARD_H__
+
+#include "merge.h"
+
+G_BEGIN_DECLS
+
+/* The following object arguments are available:
+ *
+ * name               type             description
+ * ---------------------------------------------------------------------------
+ *
+ */
+
+#define GL_TYPE_MERGE_VCARD              (gl_merge_vcard_get_type ())
+#define GL_MERGE_VCARD(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_MERGE_VCARD, glMergeVCard))
+#define GL_MERGE_VCARD_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_MERGE_VCARD, glMergeVCardClass))
+#define GL_IS_MERGE_VCARD(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_MERGE_VCARD))
+#define GL_IS_MERGE_VCARD_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_MERGE_VCARD))
+#define GL_MERGE_VCARD_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GL_TYPE_MERGE_VCARD, glMergeVCardClass))
+
+
+typedef struct _glMergeVCard          glMergeVCard;
+typedef struct _glMergeVCardClass     glMergeVCardClass;
+
+typedef struct _glMergeVCardPrivate   glMergeVCardPrivate;
+
+
+struct _glMergeVCard {
+       glMerge              object;
+
+       glMergeVCardPrivate *priv;
+};
+
+struct _glMergeVCardClass {
+       glMergeClass         parent_class;
+};
+
+
+GType             gl_merge_vcard_get_type            (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+
+#endif /* __MERGE_VCARD_H__ */
diff --git a/src/merge.c b/src/merge.c
new file mode 100644 (file)
index 0000000..4eecac3
--- /dev/null
@@ -0,0 +1,791 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge.c:  document merge module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "merge.h"
+
+#include <glib/gi18n.h>
+#include <gobject/gvaluecollector.h>
+#include <string.h>
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glMergePrivate {
+       gchar             *name;
+       gchar             *description;
+       gchar             *src;
+       glMergeSrcType     src_type;
+
+       GList             *record_list;
+};
+
+enum {
+       LAST_SIGNAL
+};
+
+typedef struct {
+
+       GType              type;
+       gchar             *name;
+       gchar             *description;
+       glMergeSrcType     src_type;
+
+       guint              n_params;
+       GParameter        *params;
+
+} Backend;
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+static GList *backends = NULL;
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void           gl_merge_finalize      (GObject        *object);
+
+static void           merge_open             (glMerge        *merge);
+
+static void           merge_close            (glMerge        *merge);
+
+static glMergeRecord *merge_get_record       (glMerge        *merge);
+
+static void           merge_free_record      (glMergeRecord **record);
+
+static glMergeRecord *merge_dup_record       (glMergeRecord  *record);
+
+static void           merge_free_record_list (GList         **record_list);
+
+static GList         *merge_dup_record_list  (GList          *record_list);
+
+
+
+\f
+/*****************************************************************************/
+/* Register a new merge backend.                                             */
+/*****************************************************************************/
+void
+gl_merge_register_backend (GType              type,
+                          gchar             *name,
+                          gchar             *description,
+                          glMergeSrcType     src_type,
+                          const gchar       *first_arg_name,
+                          ...)
+{
+       Backend      *backend;
+       va_list       args;
+       const gchar  *pname;
+       GObjectClass *class;
+       GParamSpec   *pspec;
+       GParameter   *params;
+       guint         n_params = 0, n_alloced_params = 16;
+
+       backend = g_new0 (Backend, 1);
+
+       backend->type        = type;
+       backend->name        = g_strdup (name);
+       backend->description = g_strdup (description);
+       backend->src_type    = src_type;
+
+       params = g_new (GParameter, n_alloced_params);
+       va_start (args, first_arg_name);
+       for ( pname=first_arg_name; pname != NULL; pname=va_arg (args,gchar *) ) {
+               gchar *error = NULL;
+
+               class = g_type_class_ref (type);
+               if (class == NULL) {
+                       g_message ("%s: unknown object type %d",
+                                  G_STRLOC, (int)type);
+                       break;
+               }
+               pspec = g_object_class_find_property (class, pname);
+               if (pspec == NULL) {
+                       g_message ("%s: object class `%s' has no property named `%s'",
+                                  G_STRLOC, g_type_name (type), pname);
+                       break;
+               }
+               if (n_params >= n_alloced_params) {
+                       n_alloced_params += 16;
+                       params = g_renew (GParameter, params, n_alloced_params);
+               }
+               params[n_params].name = pname;
+               params[n_params].value.g_type = 0;
+               g_value_init (&params[n_params].value, pspec->value_type);
+               G_VALUE_COLLECT (&params[n_params].value, args, 0, &error);
+               if (error) {
+                       g_message ("%s: %s", G_STRLOC, error);
+                       g_free (error);
+                       break;
+               }
+
+               n_params++;
+       }
+       va_end (args);
+
+       backend->n_params = n_params;
+       backend->params   = params;
+
+       backends = g_list_append (backends, backend);
+
+}
+
+/*****************************************************************************/
+/* Get list of registered backend descriptions.                              */
+/*****************************************************************************/
+GList *
+gl_merge_get_descriptions (void)
+{
+       GList   *descriptions = NULL;
+       GList   *p;
+       Backend *backend;
+
+       descriptions = g_list_append (descriptions, g_strdup(_("None")));
+
+       for ( p=backends; p!=NULL; p=p->next) {
+               backend = (Backend *)p->data;
+               descriptions = g_list_append (descriptions,
+                                             g_strdup(backend->description));
+       }
+
+       return descriptions;
+}
+
+/*****************************************************************************/
+/* Free list of descriptions.                                                */
+/*****************************************************************************/
+void
+gl_merge_free_descriptions (GList **descriptions)
+{
+       GList *p;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       for (p = *descriptions; p != NULL; p = p->next) {
+               g_free (p->data);
+               p->data = NULL;
+       }
+
+       g_list_free (*descriptions);
+       *descriptions = NULL;
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*****************************************************************************/
+/* Lookup name of backend from description.                                  */
+/*****************************************************************************/
+gchar *
+gl_merge_description_to_name (gchar *description)
+{
+       GList   *p;
+       Backend *backend;
+
+       if (g_strcasecmp(description, _("None")) == 0) {
+               return g_strdup("None");
+       }
+
+       for ( p=backends; p!=NULL; p=p->next) {
+               backend = (Backend *)p->data;
+               if (g_strcasecmp(description, backend->description) == 0) {
+                       return g_strdup(backend->name);
+               }
+       }
+
+       return g_strdup("None");
+}
+
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glMerge, gl_merge, G_TYPE_OBJECT);
+
+static void
+gl_merge_class_init (glMergeClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       gl_merge_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_merge_finalize;
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+static void
+gl_merge_init (glMerge *merge)
+{
+       gl_debug (DEBUG_MERGE, "START");
+
+       merge->priv = g_new0 (glMergePrivate, 1);
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+static void
+gl_merge_finalize (GObject *object)
+{
+       glMerge *merge = GL_MERGE (object);
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       g_return_if_fail (object && GL_IS_MERGE (object));
+
+       merge_free_record_list (&merge->priv->record_list);
+       g_free (merge->priv->name);
+       g_free (merge->priv->description);
+       g_free (merge->priv->src);
+       g_free (merge->priv);
+
+       G_OBJECT_CLASS (gl_merge_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*****************************************************************************/
+/* New merge object.                                                         */
+/*****************************************************************************/
+glMerge *
+gl_merge_new (gchar *name)
+{
+       glMerge *merge = NULL;
+       GList   *p;
+       Backend *backend;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       for (p=backends; p!=NULL; p=p->next) {
+               backend = (Backend *)p->data;
+
+               if (g_strcasecmp(name, backend->name) == 0) {
+
+                       merge = GL_MERGE (g_object_newv (backend->type,
+                                                        backend->n_params,
+                                                        backend->params));
+
+                       merge->priv->name        = g_strdup (name);
+                       merge->priv->description = g_strdup (backend->description);
+                       merge->priv->src_type    = backend->src_type;
+
+                       break;
+               }
+       }
+
+       if ( (merge == NULL) && (g_strcasecmp (name, "None") != 0)) {
+               g_message ("Unknown merge backend \"%s\"", name);
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return merge;
+}
+
+/*****************************************************************************/
+/* Duplicate merge.                                                         */
+/*****************************************************************************/
+glMerge *
+gl_merge_dup (glMerge *src_merge)
+{
+       glMerge    *dst_merge;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       if (src_merge == NULL) {
+               gl_debug (DEBUG_MERGE, "END (NULL)");
+               return NULL;
+       }
+
+       g_return_val_if_fail (GL_IS_MERGE (src_merge), NULL);
+
+       dst_merge = g_object_new (G_OBJECT_TYPE(src_merge), NULL);
+       dst_merge->priv->name        = g_strdup (src_merge->priv->name);
+       dst_merge->priv->description = g_strdup (src_merge->priv->description);
+       dst_merge->priv->src         = g_strdup (src_merge->priv->src);
+       dst_merge->priv->src_type    = src_merge->priv->src_type;
+       dst_merge->priv->record_list 
+               = merge_dup_record_list (src_merge->priv->record_list);
+
+       if ( GL_MERGE_GET_CLASS(src_merge)->copy != NULL ) {
+
+               /* We have an object specific method, use it */
+               GL_MERGE_GET_CLASS(src_merge)->copy (dst_merge, src_merge);
+
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return dst_merge;
+}
+
+/*****************************************************************************/
+/* Get name of merge.                                                        */
+/*****************************************************************************/
+gchar *
+gl_merge_get_name (glMerge *merge)
+{
+       gl_debug (DEBUG_MERGE, "");
+
+       if (merge == NULL) {
+               return g_strdup("None");
+       }
+
+       g_return_val_if_fail (GL_IS_MERGE (merge), g_strdup("None"));
+
+       return g_strdup(merge->priv->name);
+}
+
+/*****************************************************************************/
+/* Get description of merge.                                                 */
+/*****************************************************************************/
+gchar *
+gl_merge_get_description (glMerge *merge)
+{
+       gl_debug (DEBUG_MERGE, "");
+
+       if (merge == NULL) {
+               return g_strdup(_("None"));
+       }
+
+       g_return_val_if_fail (GL_IS_MERGE (merge), g_strdup(_("None")));
+
+       return g_strdup(merge->priv->description);
+}
+
+/*****************************************************************************/
+/* Get source type of merge.                                                 */
+/*****************************************************************************/
+glMergeSrcType
+gl_merge_get_src_type (glMerge *merge)
+{
+       gl_debug (DEBUG_MERGE, "");
+
+       if (merge == NULL) {
+               return GL_MERGE_SRC_IS_FIXED;
+       }
+
+       g_return_val_if_fail (GL_IS_MERGE (merge), GL_MERGE_SRC_IS_FIXED);
+
+       return merge->priv->src_type;
+}
+
+/*****************************************************************************/
+/* Set src of merge.                                                         */
+/*****************************************************************************/
+void
+gl_merge_set_src (glMerge *merge,
+                 gchar   *src)
+{
+       GList         *record_list = NULL;
+       glMergeRecord *record;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       if (merge == NULL)
+       {
+               gl_debug (DEBUG_MERGE, "END (NULL)");
+               return;
+       }
+
+       g_return_if_fail (GL_IS_MERGE (merge));
+
+       if ( src == NULL)
+       {
+
+               if ( merge->priv->src != NULL )
+               {
+                       g_free (merge->priv->src);
+               }
+               merge->priv->src = NULL;
+               merge_free_record_list (&merge->priv->record_list);
+
+       }
+       else
+       {
+
+               if ( merge->priv->src != NULL )
+               {
+                       g_free(merge->priv->src);
+               }
+               merge->priv->src = g_strdup (src);
+
+               merge_free_record_list (&merge->priv->record_list);
+                       
+               merge_open (merge);
+               while ( (record = merge_get_record (merge)) != NULL )
+               {
+                       record_list = g_list_append( record_list, record );
+               }
+               merge_close (merge);
+               merge->priv->record_list = record_list;
+
+       }
+                    
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*****************************************************************************/
+/* Get src of merge.                                                         */
+/*****************************************************************************/
+gchar *
+gl_merge_get_src (glMerge *merge)
+{
+       gl_debug (DEBUG_MERGE, "");
+
+       if (merge == NULL) {
+               return NULL;
+       }
+
+       g_return_val_if_fail (GL_IS_MERGE (merge), NULL);
+
+       return g_strdup(merge->priv->src);
+}
+
+/*****************************************************************************/
+/* Get Key List.                                                             */
+/*****************************************************************************/
+GList *
+gl_merge_get_key_list (glMerge *merge)
+{
+       GList *key_list = NULL;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       if (merge == NULL) {
+               return NULL;
+       }
+
+       g_return_val_if_fail (GL_IS_MERGE (merge), NULL);
+
+       if ( GL_MERGE_GET_CLASS(merge)->get_key_list != NULL ) {
+
+               key_list = GL_MERGE_GET_CLASS(merge)->get_key_list (merge);
+
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return key_list;
+}
+
+/*****************************************************************************/
+/* Free a list of keys.                                                      */
+/*****************************************************************************/
+void
+gl_merge_free_key_list (GList **key_list)
+{
+       GList *p;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       for (p = *key_list; p != NULL; p = p->next) {
+               g_free (p->data);
+               p->data = NULL;
+       }
+
+       g_list_free (*key_list);
+       *key_list = NULL;
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*****************************************************************************/
+/* Get Key List.                                                             */
+/*****************************************************************************/
+gchar *
+gl_merge_get_primary_key (glMerge *merge)
+{
+       gchar *key = NULL;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       if (merge == NULL) {
+               return NULL;
+       }
+
+       g_return_val_if_fail (GL_IS_MERGE (merge), NULL);
+
+       if ( GL_MERGE_GET_CLASS(merge)->get_primary_key != NULL ) {
+
+               key = GL_MERGE_GET_CLASS(merge)->get_primary_key (merge);
+
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return key;
+}
+
+/*---------------------------------------------------------------------------*/
+/* Open merge source.                                                        */
+/*---------------------------------------------------------------------------*/
+static void
+merge_open (glMerge *merge)
+{
+       gl_debug (DEBUG_MERGE, "START");
+
+       g_return_if_fail (merge && GL_IS_MERGE (merge));
+
+       if ( GL_MERGE_GET_CLASS(merge)->open != NULL ) {
+
+               GL_MERGE_GET_CLASS(merge)->open (merge);
+
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* Close merge source.                                                       */
+/*---------------------------------------------------------------------------*/
+static void
+merge_close (glMerge *merge)
+{
+       gl_debug (DEBUG_MERGE, "START");
+
+       g_return_if_fail (merge && GL_IS_MERGE (merge));
+
+       if ( GL_MERGE_GET_CLASS(merge)->close != NULL ) {
+
+               GL_MERGE_GET_CLASS(merge)->close (merge);
+
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* Get next record (list of fields) from opened merge source.                */
+/*---------------------------------------------------------------------------*/
+static glMergeRecord *
+merge_get_record (glMerge *merge)
+{
+       glMergeRecord *record = NULL;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       g_return_val_if_fail (merge && GL_IS_MERGE (merge), NULL);
+
+       if ( GL_MERGE_GET_CLASS(merge)->get_record != NULL ) {
+
+               record = GL_MERGE_GET_CLASS(merge)->get_record (merge);
+
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return record;
+}
+
+/*---------------------------------------------------------------------------*/
+/* Free a merge record (list of fields)                                      */
+/*---------------------------------------------------------------------------*/
+static void
+merge_free_record (glMergeRecord **record)
+{
+       GList *p;
+       glMergeField *field;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       for (p = (*record)->field_list; p != NULL; p = p->next) {
+               field = (glMergeField *) p->data;
+
+               g_free (field->key);
+               field->key = NULL;
+               g_free (field->value);
+               field->value = NULL;
+
+               g_free (p->data);
+               p->data = NULL;
+
+       }
+       g_list_free ((*record)->field_list);
+       (*record)->field_list = NULL;
+
+       g_free (*record);
+       *record = NULL;
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* Duplicate a merge record (list of fields)                                 */
+/*---------------------------------------------------------------------------*/
+static glMergeRecord *
+merge_dup_record (glMergeRecord *record)
+{
+       glMergeRecord *dest_record;
+       GList         *p;
+       glMergeField  *dest_field, *field;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       dest_record = g_new0 (glMergeRecord, 1);
+       dest_record->select_flag = record->select_flag;
+
+       for (p = record->field_list; p != NULL; p = p->next) {
+               field = (glMergeField *) p->data;
+
+               dest_field = g_new0 (glMergeField, 1);
+
+               dest_field->key   = g_strdup (field->key);
+               dest_field->value = g_strdup (field->value);
+
+               dest_record->field_list =
+                       g_list_append (dest_record->field_list, dest_field);
+
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return dest_record;
+}
+
+/*****************************************************************************/
+/* Find key in given record and evaluate.                                    */
+/*****************************************************************************/
+gchar *
+gl_merge_eval_key (glMergeRecord *record,
+                  gchar         *key)
+                  
+{
+       GList        *p;
+       glMergeField *field;
+       gchar        *val = NULL;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       if ( (record != NULL) && (key != NULL) ) {
+               for (p = record->field_list; p != NULL; p = p->next) {
+                       field = (glMergeField *) p->data;
+
+                       if (strcmp (key, field->key) == 0) {
+                               val = g_strdup (field->value);
+                       }
+
+               }
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return val;
+}
+
+/*****************************************************************************/
+/* Read all records from merge source.                                       */
+/*****************************************************************************/
+const GList *
+gl_merge_get_record_list (glMerge *merge)
+{
+       gl_debug (DEBUG_MERGE, "");
+             
+       if ( merge != NULL ) {
+               return merge->priv->record_list;
+       } else {
+               return NULL;
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/* Free a list of records.                                                   */
+/*---------------------------------------------------------------------------*/
+static void
+merge_free_record_list (GList **record_list)
+{
+       GList *p;
+       glMergeRecord *record;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       for (p = *record_list; p != NULL; p = p->next) {
+               record = (glMergeRecord *) p->data;
+
+               merge_free_record( &record );
+
+       }
+
+       g_list_free (*record_list);
+       *record_list = NULL;
+
+       gl_debug (DEBUG_MERGE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* Duplicate a list of records.                                              */
+/*---------------------------------------------------------------------------*/
+static GList *
+merge_dup_record_list (GList *record_list)
+{
+       GList         *dest_list = NULL, *p;
+       glMergeRecord *dest_record, *record;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       for (p = record_list; p != NULL; p = p->next) {
+               record = (glMergeRecord *) p->data;
+
+               dest_record = merge_dup_record( record );
+               dest_list = g_list_append (dest_list, dest_record);
+       }
+
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return dest_list;
+}
+
+/*****************************************************************************/
+/* Count selected records.                                                   */
+/*****************************************************************************/
+gint
+gl_merge_get_record_count (glMerge *merge)
+{
+       GList *p;
+       glMergeRecord *record;
+       gint count;
+
+       gl_debug (DEBUG_MERGE, "START");
+
+       count = 0;
+       for ( p=merge->priv->record_list; p!=NULL; p=p->next ) {
+               record = (glMergeRecord *)p->data;
+
+               if ( record->select_flag ) count ++;
+       }
+
+       gl_debug (DEBUG_MERGE, "END");
+
+       return count;
+}
+
+
diff --git a/src/merge.h b/src/merge.h
new file mode 100644 (file)
index 0000000..819ca25
--- /dev/null
@@ -0,0 +1,130 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  merge.h:  document merge module header file
+ *
+ *  Copyright (C) 2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __MERGE_H__
+#define __MERGE_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+       GL_MERGE_SRC_IS_FIXED,
+       GL_MERGE_SRC_IS_FILE,
+} glMergeSrcType;
+
+typedef struct {
+       gchar *key;
+       gchar *value;
+} glMergeField;
+
+typedef struct {
+       gboolean select_flag;
+       GList    *field_list;  /* List of glMergeFields */
+} glMergeRecord;
+
+
+#define GL_TYPE_MERGE              (gl_merge_get_type ())
+#define GL_MERGE(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_MERGE, glMerge))
+#define GL_MERGE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_MERGE, glMergeClass))
+#define GL_IS_MERGE(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_MERGE))
+#define GL_IS_MERGE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_MERGE))
+#define GL_MERGE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GL_TYPE_MERGE, glMergeClass))
+
+
+typedef struct _glMerge          glMerge;
+typedef struct _glMergeClass     glMergeClass;
+
+typedef struct _glMergePrivate   glMergePrivate;
+
+
+struct _glMerge {
+       GObject          object;
+
+       glMergePrivate  *priv;
+};
+
+struct _glMergeClass {
+       GObjectClass     parent_class;
+
+        GList         *(*get_key_list)    (glMerge *merge);
+
+        gchar         *(*get_primary_key) (glMerge *merge);
+
+       void           (*open)            (glMerge *merge);
+
+       void           (*close)           (glMerge *merge);
+
+       glMergeRecord *(*get_record)      (glMerge *merge);
+
+       void           (*copy)            (glMerge *dst_merge,
+                                          glMerge *src_merge);
+};
+
+
+void              gl_merge_register_backend    (GType              type,
+                                               gchar             *name,
+                                               gchar             *description,
+                                               glMergeSrcType     src_type,
+                                               const gchar       *first_arg_name,
+                                               ...);
+
+GList            *gl_merge_get_descriptions    (void);
+
+void              gl_merge_free_descriptions   (GList **descriptions);
+
+gchar            *gl_merge_description_to_name (gchar *description);
+
+GType             gl_merge_get_type            (void) G_GNUC_CONST;
+
+glMerge          *gl_merge_new                 (gchar             *name);
+
+glMerge          *gl_merge_dup                 (glMerge           *orig);
+
+gchar            *gl_merge_get_name            (glMerge           *merge);
+
+gchar            *gl_merge_get_description     (glMerge           *merge);
+
+glMergeSrcType    gl_merge_get_src_type        (glMerge           *merge);
+
+void              gl_merge_set_src             (glMerge           *merge,
+                                               gchar             *src);
+
+gchar            *gl_merge_get_src             (glMerge           *merge);
+
+GList            *gl_merge_get_key_list        (glMerge           *merge);
+
+void              gl_merge_free_key_list       (GList            **keys);
+
+gchar            *gl_merge_get_primary_key     (glMerge           *merge);
+
+gchar            *gl_merge_eval_key            (glMergeRecord     *record,
+                                               gchar             *key);
+
+const GList      *gl_merge_get_record_list     (glMerge           *merge);
+
+gint              gl_merge_get_record_count    (glMerge           *merge);
+
+G_END_DECLS
+
+#endif
diff --git a/src/mini-preview-pixbuf-cache.c b/src/mini-preview-pixbuf-cache.c
new file mode 100644 (file)
index 0000000..c7d3afa
--- /dev/null
@@ -0,0 +1,149 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  mini-preview-pixbuf-cache.c:  GLabels mini-preview pixbuf cache module
+ *
+ *  Copyright (C) 2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "mini-preview-pixbuf-cache.h"
+#include "mini-preview-pixbuf.h"
+
+#include "libglabels/db.h"
+
+#include <glib/gmem.h>
+#include <glib/ghash.h>
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+static GHashTable *mini_preview_pixbuf_cache = NULL;
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+\f
+/*****************************************************************************/
+/* Create a new hash table to keep track of cached mini preview pixbufs.     */
+/*****************************************************************************/
+void
+gl_mini_preview_pixbuf_cache_init (void)
+{
+        GList       *names = NULL;
+        GList       *p;
+        lglTemplate *template;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+       mini_preview_pixbuf_cache = g_hash_table_new (g_str_hash, g_str_equal);
+
+        names = lgl_db_get_template_name_list_unique (NULL, NULL, NULL);
+        for ( p=names; p != NULL; p=p->next )
+        {
+                gl_debug (DEBUG_PIXBUF_CACHE, "name = \"%s\"", p->data);
+
+                template = lgl_db_lookup_template_from_name (p->data);
+                gl_mini_preview_pixbuf_cache_add_by_template (template);
+                lgl_template_free (template);
+        }
+        lgl_db_free_template_name_list (names);
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END pixbuf_cache=%p", mini_preview_pixbuf_cache);
+}
+
+/*****************************************************************************/
+/* Add pixbuf to cache by template.                                          */
+/*****************************************************************************/
+void
+gl_mini_preview_pixbuf_cache_add_by_template (lglTemplate *template)
+{
+        GdkPixbuf        *pixbuf;
+        GList            *p;
+        lglTemplateAlias *alias;
+        gchar            *name;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+        pixbuf = gl_mini_preview_pixbuf_new (template, 72, 72);
+
+        for ( p=template->aliases; p != NULL; p=p->next )
+        {
+                alias = (lglTemplateAlias *)p->data;
+
+                name = g_strdup_printf ("%s %s", alias->brand, alias->part);
+                g_hash_table_insert (mini_preview_pixbuf_cache, name, g_object_ref (pixbuf));
+        }
+
+        g_object_unref (pixbuf);
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+}
+
+/*****************************************************************************/
+/* Add pixbuf to cache by name.                                              */
+/*****************************************************************************/
+void
+gl_mini_preview_pixbuf_cache_add_by_name (gchar      *name)
+{
+        lglTemplate *template;
+        GdkPixbuf   *pixbuf;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+        template = lgl_db_lookup_template_from_name (name);
+        pixbuf = gl_mini_preview_pixbuf_new (template, 72, 72);
+        lgl_template_free (template);
+
+        g_hash_table_insert (mini_preview_pixbuf_cache, g_strdup (name), pixbuf);
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+}
+
+/*****************************************************************************/
+/* Get pixbuf.                                                               */
+/*****************************************************************************/
+GdkPixbuf *
+gl_mini_preview_pixbuf_cache_get_pixbuf (gchar      *name)
+{
+       GdkPixbuf   *pixbuf;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START pixbuf_cache=%p", mini_preview_pixbuf_cache);
+
+       pixbuf = g_hash_table_lookup (mini_preview_pixbuf_cache, name);
+
+        if (!pixbuf)
+        {
+                gl_mini_preview_pixbuf_cache_add_by_name (name);
+                pixbuf = g_hash_table_lookup (mini_preview_pixbuf_cache, name);
+        }
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+
+       return g_object_ref (pixbuf);
+}
+
diff --git a/src/mini-preview-pixbuf-cache.h b/src/mini-preview-pixbuf-cache.h
new file mode 100644 (file)
index 0000000..092d569
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  mini-preview-pixbuf-cache.h:  GLabels mini-preview pixbuf cache module
+ *
+ *  Copyright (C) 2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __MINI_PREVIEW_PIXBUF_CACHE_H__
+#define __MINI_PREVIEW_PIXBUF_CACHE_H__
+
+#include <libglabels/template.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+G_BEGIN_DECLS
+
+void        gl_mini_preview_pixbuf_cache_init            (void);
+
+void        gl_mini_preview_pixbuf_cache_add_by_name     (gchar      *name);
+void        gl_mini_preview_pixbuf_cache_add_by_template (lglTemplate *template);
+
+GdkPixbuf  *gl_mini_preview_pixbuf_cache_get_pixbuf      (gchar      *name);
+
+
+G_END_DECLS
+
+#endif /*__MINI_PREVIEW_PIXBUF_CACHE_H__ */
diff --git a/src/mini-preview-pixbuf.c b/src/mini-preview-pixbuf.c
new file mode 100644 (file)
index 0000000..a464252
--- /dev/null
@@ -0,0 +1,225 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  mini-preview-pixbuf.c:  mini preview pixbuf module
+ *
+ *  Copyright (C) 2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "mini-preview-pixbuf.h"
+#include "cairo-label-path.h"
+
+#include <cairo.h>
+#include <math.h>
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros and constants.             */
+/*===========================================*/
+
+#define PAPER_RGB_ARGS          0.95,  0.95,  0.95
+#define PAPER_OUTLINE_RGB_ARGS  0.0,   0.0,   0.0
+#define LABEL_RGB_ARGS          1.0,   1.0,   1.0
+#define LABEL_OUTLINE_RGB_ARGS  0.25,  0.25,  0.25
+
+#define PAPER_OUTLINE_WIDTH_PIXELS  1.0
+#define LABEL_OUTLINE_WIDTH_PIXELS  1.0
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void draw_paper                (cairo_t           *cr,
+                                      lglTemplate       *template,
+                                      gdouble            scale);
+
+static void draw_label_outlines       (cairo_t           *cr,
+                                      lglTemplate       *template,
+                                      gdouble            scale);
+
+static void draw_label_outline        (cairo_t           *cr,
+                                      lglTemplate       *template,
+                                      gdouble            x0,
+                                      gdouble            y0);
+
+
+
+\f
+/****************************************************************************/
+/* Create new pixbuf with mini preview of template                          */
+/****************************************************************************/
+GdkPixbuf *
+gl_mini_preview_pixbuf_new (lglTemplate *template,
+                           gint         width,
+                           gint         height)
+{
+       cairo_surface_t   *surface;
+       cairo_t           *cr;
+       GdkPixbuf         *pixbuf;
+       gdouble            scale;
+       gdouble            w, h;
+       gdouble            offset_x, offset_y;
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       /* Create pixbuf and cairo context. */
+       pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height);
+       surface = cairo_image_surface_create_for_data (gdk_pixbuf_get_pixels (pixbuf),
+                                                      CAIRO_FORMAT_RGB24,
+                                                      gdk_pixbuf_get_width (pixbuf),
+                                                      gdk_pixbuf_get_height (pixbuf),
+                                                      gdk_pixbuf_get_rowstride (pixbuf));
+
+       cr = cairo_create (surface);
+       cairo_surface_destroy (surface);
+
+       /* Clear pixbuf */
+       cairo_save (cr);
+        cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+        cairo_paint (cr);
+       cairo_restore (cr);
+
+       cairo_set_antialias (cr, CAIRO_ANTIALIAS_GRAY);
+
+       /* Set scale and offset */
+       w = width - 1;
+       h = height - 1;
+       if ( (w/template->page_width) > (h/template->page_height) ) {
+               scale = h / template->page_height;
+       } else {
+               scale = w / template->page_width;
+       }
+       offset_x = (width/scale - template->page_width) / 2.0;
+       offset_y = (height/scale - template->page_height) / 2.0;
+       cairo_identity_matrix (cr);
+        cairo_scale (cr, scale, scale);
+       cairo_translate (cr, offset_x, offset_y);
+
+       /* Draw paper and label outlines */
+       draw_paper (cr, template, scale);
+       draw_label_outlines (cr, template, scale);
+
+       /* Cleanup */
+       cairo_destroy (cr);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+
+       return pixbuf;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Draw paper and paper outline.                                  */
+/*--------------------------------------------------------------------------*/
+static void
+draw_paper (cairo_t           *cr,
+           lglTemplate       *template,
+           gdouble            scale)
+{
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       cairo_save (cr);
+       cairo_rectangle (cr, 0.0, 0.0, template->page_width, template->page_height);
+       cairo_set_source_rgb (cr, PAPER_RGB_ARGS);
+       cairo_fill_preserve (cr);
+       cairo_set_line_width (cr, PAPER_OUTLINE_WIDTH_PIXELS/scale);
+       cairo_set_source_rgb (cr, PAPER_OUTLINE_RGB_ARGS);
+       cairo_stroke (cr);
+       cairo_restore (cr);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Draw label outlines.                                           */
+/*--------------------------------------------------------------------------*/
+static void
+draw_label_outlines (cairo_t           *cr,
+                    lglTemplate       *template,
+                    gdouble            scale)
+{
+       const lglTemplateFrame *frame;
+       gint                    i, n_labels;
+       lglTemplateOrigin      *origins;
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       cairo_save (cr);
+
+       cairo_set_line_width (cr, LABEL_OUTLINE_WIDTH_PIXELS/scale);
+
+        frame = (lglTemplateFrame *)template->frames->data;
+
+       n_labels = lgl_template_frame_get_n_labels (frame);
+       origins  = lgl_template_frame_get_origins (frame);
+
+       for ( i=0; i < n_labels; i++ ) {
+
+               draw_label_outline(cr, template, origins[i].x, origins[i].y);
+
+       }
+
+       g_free (origins);
+
+       cairo_restore (cr);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Draw label outline.                                            */
+/*--------------------------------------------------------------------------*/
+static void
+draw_label_outline (cairo_t           *cr,
+                   lglTemplate       *template,
+                   gdouble            x0,
+                   gdouble            y0)
+{
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       cairo_save (cr);
+
+        cairo_translate (cr, x0, y0);
+
+        gl_cairo_label_path (cr, template, FALSE, FALSE);
+
+       cairo_set_source_rgb (cr, LABEL_RGB_ARGS);
+        cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
+        cairo_fill_preserve (cr);
+
+       cairo_set_source_rgb (cr, LABEL_OUTLINE_RGB_ARGS);
+       cairo_stroke (cr);
+
+       cairo_restore (cr);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
diff --git a/src/mini-preview-pixbuf.h b/src/mini-preview-pixbuf.h
new file mode 100644 (file)
index 0000000..ddad146
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  mini-preview-pixbuf.h:  mini-preview pixbuf module header file
+ *
+ *  Copyright (C) 2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __MINI_PREVIEW_PIXBUF_H__
+#define __MINI_PREVIEW_PIXBUF_H__
+
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <libglabels/template.h>
+
+G_BEGIN_DECLS
+
+GdkPixbuf *gl_mini_preview_pixbuf_new (lglTemplate *template,
+                                      gint         width,
+                                      gint         height);
+
+G_END_DECLS
+
+#endif
diff --git a/src/mygal/Makefile.am b/src/mygal/Makefile.am
new file mode 100644 (file)
index 0000000..054cbe7
--- /dev/null
@@ -0,0 +1,44 @@
+INCLUDES = \
+       $(MYGAL_CFLAGS)
+
+
+libmygal_la_LDFLAGS=\
+        $(MYGAL_LIBS)
+
+noinst_LTLIBRARIES = libmygal.la
+
+libmygal_la_SOURCES =                  \
+       widget-color-combo.c            \
+       widget-color-combo.h            \
+       e-util.h                        \
+       e-colors.c                      \
+       e-colors.h                      \
+       mygal-combo-box.c               \
+       mygal-combo-box.h               \
+       color-palette.c                 \
+       color-palette.h                 \
+       color-group.c                   \
+       color-group.h                   \
+       e-marshal.c                     \
+       e-marshal.h
+
+marshal_sources = \
+       e-marshal.c \
+       e-marshal.h
+
+$(libmygal_la_OBJECTS) : $(marshal_sources)
+
+e-marshal.h: e-marshal.list $(GLIB_GENMARSHAL)
+       $(GLIB_GENMARSHAL) $< --header --prefix=e_marshal > $@
+e-marshal.c: e-marshal.list $(GLIB_GENMARSHAL)
+       $(GLIB_GENMARSHAL) $< --body --prefix=e_marshal > $@
+
+EXTRA_DIST = e-marshal.list
+CLEANFILES = $(marshal_sources)
+
+DONT_DIST_SOURCE = $(marshal_sources)
+
+dist-hook:
+       for file in $(DONT_DIST_SOURCE) ; do \
+           rm -f $(distdir)/$$file ; \
+       done
diff --git a/src/mygal/Makefile.in b/src/mygal/Makefile.in
new file mode 100644 (file)
index 0000000..06ea019
--- /dev/null
@@ -0,0 +1,571 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/mygal
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmygal_la_LIBADD =
+am_libmygal_la_OBJECTS = widget-color-combo.lo e-colors.lo \
+       mygal-combo-box.lo color-palette.lo color-group.lo \
+       e-marshal.lo
+libmygal_la_OBJECTS = $(am_libmygal_la_OBJECTS)
+libmygal_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libmygal_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libmygal_la_SOURCES)
+DIST_SOURCES = $(libmygal_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       $(MYGAL_CFLAGS)
+
+libmygal_la_LDFLAGS = \
+        $(MYGAL_LIBS)
+
+noinst_LTLIBRARIES = libmygal.la
+libmygal_la_SOURCES = \
+       widget-color-combo.c            \
+       widget-color-combo.h            \
+       e-util.h                        \
+       e-colors.c                      \
+       e-colors.h                      \
+       mygal-combo-box.c               \
+       mygal-combo-box.h               \
+       color-palette.c                 \
+       color-palette.h                 \
+       color-group.c                   \
+       color-group.h                   \
+       e-marshal.c                     \
+       e-marshal.h
+
+marshal_sources = \
+       e-marshal.c \
+       e-marshal.h
+
+EXTRA_DIST = e-marshal.list
+CLEANFILES = $(marshal_sources)
+DONT_DIST_SOURCE = $(marshal_sources)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/mygal/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu src/mygal/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libmygal.la: $(libmygal_la_OBJECTS) $(libmygal_la_DEPENDENCIES) 
+       $(libmygal_la_LINK)  $(libmygal_la_OBJECTS) $(libmygal_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color-group.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color-palette.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-colors.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mygal-combo-box.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/widget-color-combo.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+
+$(libmygal_la_OBJECTS) : $(marshal_sources)
+
+e-marshal.h: e-marshal.list $(GLIB_GENMARSHAL)
+       $(GLIB_GENMARSHAL) $< --header --prefix=e_marshal > $@
+e-marshal.c: e-marshal.list $(GLIB_GENMARSHAL)
+       $(GLIB_GENMARSHAL) $< --body --prefix=e_marshal > $@
+
+dist-hook:
+       for file in $(DONT_DIST_SOURCE) ; do \
+           rm -f $(distdir)/$$file ; \
+       done
+
+# 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/src/mygal/color-group.c b/src/mygal/color-group.c
new file mode 100644 (file)
index 0000000..3f35257
--- /dev/null
@@ -0,0 +1,333 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * color-group.c - Utility to keep a shered memory of custom colors
+ *                 between arbitrary widgets.
+ * Copyright 2000, Michael Levy
+ * Copyright 2001, Almer S. Tigelaar
+ *
+ * Authors:
+ *     Michael Levy (mlevy@genoscope.cns.fr)
+ * Revised and polished by:
+ *   Almer S. Tigelaar <almer@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include "color-group.h"
+#include <glib-object.h>
+#include <gdk/gdkcolor.h>
+#include "e-util.h"
+#include <string.h>
+
+#define PARENT_TYPE    G_TYPE_OBJECT
+
+enum {
+        CUSTOM_COLOR_ADD,
+        LAST_SIGNAL
+};
+
+static GObjectClass *parent_class;
+
+static GQuark color_group_signals [LAST_SIGNAL] = { 0 };
+
+static void color_group_finalize (GObject *obj);
+
+static void
+color_group_class_init (ColorGroupClass *klass)
+{
+       GObjectClass *object_class;
+
+       object_class = (GObjectClass*) klass;
+       
+       object_class->finalize = &color_group_finalize;
+       parent_class = g_type_class_peek (PARENT_TYPE);
+
+       color_group_signals [CUSTOM_COLOR_ADD] =
+               g_signal_new ("custom_color_add",
+                       COLOR_GROUP_TYPE,
+                       G_SIGNAL_RUN_LAST,
+                       G_STRUCT_OFFSET (ColorGroupClass, custom_color_add),
+                       (GSignalAccumulator) NULL, NULL,
+                       g_cclosure_marshal_VOID__POINTER,
+                       G_TYPE_NONE,
+                       1, G_TYPE_POINTER);
+}
+
+static void
+color_group_init (ColorGroup *cg)
+{
+       cg->name = NULL;
+       cg->history = NULL;
+       cg->history_size = 0;
+}
+
+E_MAKE_TYPE(color_group,
+           "ColorGroup",
+           ColorGroup,
+           color_group_class_init,
+           color_group_init,
+           PARENT_TYPE)
+
+
+/* Hash table used to ensure unicity in newly created names*/
+static GHashTable *group_names = NULL;
+
+static guint
+cg_hash (gconstpointer key)
+{
+       /* Do NOT use smart type checking it will not work for the tmp_key */
+       return g_str_hash (((ColorGroup *)key)->name);
+}
+
+static gint
+cg_cmp (gconstpointer a, gconstpointer b)
+{
+       /* Do NOT use smart type checking it will not work for the tmp_key */
+       ColorGroup const *cg_a = (ColorGroup *)a;
+       ColorGroup const *cg_b = (ColorGroup *)b;
+       if (cg_a == cg_b)
+               return TRUE;
+       if (cg_a->context != cg_b->context)
+               return FALSE;
+       return g_str_equal (cg_a->name, cg_b->name);
+}
+
+static void
+initialize_group_names (void)
+{
+       g_assert (group_names == NULL);
+       group_names = g_hash_table_new (cg_hash, cg_cmp);
+}
+
+/**
+ * color_group_get :
+ * @name :
+ * @context : 
+ *
+ * Look up the name/context specific color-group.  Return NULL if it is not found.
+ * No reference is added if it is found.
+ */
+ColorGroup *
+color_group_get (const gchar * name, gpointer context)
+{
+       ColorGroup tmp_key;
+       gpointer res;
+
+       g_assert(group_names);
+
+       g_return_val_if_fail(name != NULL, NULL);
+
+       tmp_key.name = (char *)name;
+       tmp_key.context = context;
+       res = g_hash_table_lookup (group_names, &tmp_key);
+
+       if (res != NULL)
+               return COLOR_GROUP (res);
+       else
+               return NULL;
+}
+
+static gchar *
+create_unique_name (gpointer context)
+{
+       const gchar *prefix = "__cg_autogen_name__";
+       static gint latest_suff = 0;
+       gchar *new_name;
+
+       for(;;latest_suff++) {
+               new_name = g_strdup_printf("%s%i", prefix, latest_suff);
+               if (color_group_get (new_name, context) == NULL)
+                       return new_name;
+               else
+                       g_free(new_name);
+       }
+       g_assert_not_reached();
+}
+
+static void
+color_group_finalize (GObject *obj)
+{
+       ColorGroup *cg;
+
+       g_return_if_fail(obj != NULL);
+       g_return_if_fail(IS_COLOR_GROUP(obj));
+       g_assert(group_names != NULL);
+
+       cg = COLOR_GROUP (obj);
+
+       /* make this name available */
+       if (cg->name) {
+               g_hash_table_remove (group_names, cg);
+               g_free (cg->name);
+               cg->name = NULL;
+       }
+
+       if (cg->history) {
+               /* Free the whole colour history */
+               while ((int) cg->history->len > 0)
+                       gdk_color_free ((GdkColor *)
+                                       g_ptr_array_remove_index (cg->history, 0));
+               g_ptr_array_free (cg->history, TRUE);
+               cg->history = NULL;
+       }
+       
+       if (parent_class->finalize)
+               (parent_class->finalize) (obj);
+}
+
+/*
+ * color_group_get_history_size:
+ * Get the size of the custom color history
+ */
+gint
+color_group_get_history_size (ColorGroup *cg)
+{
+       g_return_val_if_fail (cg != NULL, 0);
+       
+       return cg->history_size;
+}
+
+/*
+ * Change the size of the custom color history.
+ */
+void
+color_group_set_history_size (ColorGroup *cg, gint size)
+{
+       g_return_if_fail(cg != NULL);
+       g_return_if_fail(size >= 0);
+
+       /* Remove excess elements (begin with kicking out the oldest) */
+       while ((int) cg->history->len > size)
+               gdk_color_free ((GdkColor *) g_ptr_array_remove_index (cg->history, 0));
+}
+
+/*
+ * color_group_fetch :
+ * @name :
+ * @context :
+ *
+ * if name is NULL or a name not currently in use by another group
+ * then a new group is created and returned. If name was NULL
+ * then the new group is given a unique name prefixed by "__cg_autogen_name__"
+ * (thereby insuring namespace separation).
+ * If name was already used by a group then the reference count is
+ * incremented and a pointer to the group is returned.
+ */
+ColorGroup *
+color_group_fetch (const gchar *name, gpointer context)
+{
+       ColorGroup *cg;
+       gchar *new_name;
+
+       if (group_names == NULL)
+               initialize_group_names();
+
+       if (name == NULL)
+               new_name = create_unique_name (context);
+       else
+               new_name = g_strdup (name);
+
+       cg = color_group_get (new_name, context);
+       if (cg != NULL) {
+               g_free (new_name);
+               g_object_ref (G_OBJECT (cg));
+               return cg;
+       }
+
+       /* Take care of creating the new object */
+       cg = g_object_new (color_group_get_type (), NULL);
+       g_return_val_if_fail(cg != NULL, NULL);
+
+       cg->name = new_name;
+       cg->context = context;
+
+       /* Create history */
+       cg->history = g_ptr_array_new ();
+
+       /* FIXME: Why not 8? We never use more then 8 on the palette,
+        * maybe we can't free colors while they are still on the palette and
+        * need to be sure they are not on it when we free them and thus we
+        * make the upper limit twice the size of the number of displayed items
+        * (2 * 8) ?
+        */
+       cg->history_size = 16; 
+
+       /* lastly register this name */
+       g_hash_table_insert (group_names, cg, cg);
+
+       return cg;
+}
+
+/*
+ * color_group_get_custom_colors:
+ * Retrieve all custom colors currently in the history using a callback
+ * mechanism. The custom colors will be passed from the oldest to the newest.
+ */
+void
+color_group_get_custom_colors (ColorGroup *cg, CbCustomColors callback, gpointer user_data)
+{
+       int i;
+
+       g_return_if_fail (cg != NULL);
+
+       /* Invoke the callback for our full history */
+       for (i = 0; i < (int) cg->history->len; i++) {
+               GdkColor const * const color = g_ptr_array_index (cg->history, i);
+
+               callback (color, user_data);
+       }
+}
+
+/*
+ * color_group_add_color:
+ * Changes the colors. The color to be set should always be a custom
+ * color! It has no use adding a color which is already in the default
+ * palette.
+ */
+void
+color_group_add_color (ColorGroup *cg, GdkColor const * const color)
+{
+       int i;
+       
+       g_return_if_fail(cg != NULL);
+       g_return_if_fail(color != NULL); /* Can't be NULL */
+
+       /* Let's be smart and see if it's already in our history, no need to add it again*/
+       for (i = 0; i < (int) cg->history->len; i++) {
+               GdkColor *current = g_ptr_array_index (cg->history, i);
+               
+               if (gdk_color_equal (color, current))
+                       return;
+       }
+
+       /*
+        * We make our own private copy of the color passed and put
+        * it in the history, this is freed later.
+        */
+       if (cg->history_size > 0)
+               g_ptr_array_add (cg->history, gdk_color_copy (color));
+
+       /* Shift out the oldest item if we grow beyond our set size */
+       if ((int) cg->history->len > cg->history_size)
+               gdk_color_free ((GdkColor *) g_ptr_array_remove_index (cg->history, 0));
+
+       /* Tell color-palette's that use this group that
+        * a new custom color was added.
+        */
+       g_signal_emit (G_OBJECT(cg),
+               color_group_signals [CUSTOM_COLOR_ADD],
+               0,
+               color);
+}
diff --git a/src/mygal/color-group.h b/src/mygal/color-group.h
new file mode 100644 (file)
index 0000000..b35ad61
--- /dev/null
@@ -0,0 +1,77 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* 
+ * color-group.h - Utility to keep a shered memory of custom colors
+ * between arbitrary widgets.
+ * Copyright 2000, Michael Levy
+ * Copyright 2001, Almer S. Tigelaar
+ *
+ * Authors:
+ *   Michael Levy (mlevy@genoscope.cns.fr)
+ * Revised and polished by:
+ *   Almer S. Tigelaar <almer@gnome.org>
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef GNOME_APP_LIB__COLOR_GROUP_H
+#define GNOME_APP_LIB__COLOR_GROUP_H
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gdk/gdktypes.h>
+
+G_BEGIN_DECLS
+
+typedef gboolean (* CbCustomColors) (GdkColor const * const color, gpointer data);
+
+typedef struct _ColorGroup {
+       GObject  parent;
+
+        gchar     *name;
+       gpointer   context;
+
+        GPtrArray *history;         /* The custom color history */
+       gint       history_size;    /* length of color_history */
+} ColorGroup;
+
+typedef struct {
+       GObjectClass parent_class;
+       
+       /* Signals emited by this object */
+       void (*custom_color_add) (ColorGroup *color_group, GdkColor const * const color);
+} ColorGroupClass;
+
+#define COLOR_GROUP_TYPE     (color_group_get_type ())
+#define COLOR_GROUP(obj)     (G_TYPE_CHECK_INSTANCE_CAST ((obj), COLOR_GROUP_TYPE, ColorGroup))
+#define COLOR_GROUP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST (k), COLOR_GROUP_TYPE)
+#define IS_COLOR_GROUP(obj)  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), COLOR_GROUP_TYPE))
+
+GType           color_group_get_type (void);
+ColorGroup     *color_group_fetch (const gchar *name, gpointer context);
+ColorGroup     *color_group_get   (const gchar *name, gpointer context);
+
+void            color_group_set_history_size (ColorGroup *cg, gint size);
+gint            color_group_get_history_size (ColorGroup *cg);
+
+void            color_group_get_custom_colors (ColorGroup *cg, CbCustomColors callback,
+                                              gpointer user_data);
+void            color_group_add_color        (ColorGroup *cg, GdkColor const * const color);
+
+G_END_DECLS
+
+#endif /* GNOME_APP_LIB__COLOR_GROUP_H */
diff --git a/src/mygal/color-palette.c b/src/mygal/color-palette.c
new file mode 100644 (file)
index 0000000..49d4779
--- /dev/null
@@ -0,0 +1,661 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * color-palette.c - A color selector palette
+ * Copyright 2000, 2001, Ximian, Inc.
+ *
+ * Authors:
+ * This code was extracted from widget-color-combo.c
+ *   written by Miguel de Icaza (miguel@kernel.org) and
+ *   Dom Lachowicz (dominicl@seas.upenn.edu). The extracted
+ *   code was re-packaged into a separate object by
+ *   Michael Levy (mlevy@genoscope.cns.fr)
+ *   And later revised and polished by
+ *   Almer S. Tigelaar (almer@gnome.org)
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <gnome.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtktable.h>
+#include <libgnomecanvas/gnome-canvas.h>
+#include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
+#include <gdk/gdkcolor.h>
+#include "e-util.h"
+#include "color-group.h"
+#include "color-palette.h"
+#include "e-colors.h"
+
+#define COLOR_PREVIEW_WIDTH 15
+#define COLOR_PREVIEW_HEIGHT 15
+
+enum {
+       COLOR_CHANGED,
+       LAST_SIGNAL
+};
+
+struct _ColorNamePair {
+       char *color;    /* rgb color or otherwise - eg. "#FFFFFF" */
+       char *name;     /* english name - eg. "white" */
+};
+
+static guint color_palette_signals [LAST_SIGNAL] = { 0, };
+
+#define PARENT_TYPE GTK_TYPE_VBOX
+static GObjectClass *color_palette_parent_class;
+
+#define make_color(P,COL) (((COL) != NULL) ? (COL) : ((P) ? ((P)->default_color) : NULL))
+
+static void
+color_palette_destroy (GtkObject *object)
+{
+       ColorPalette *P = COLOR_PALETTE (object);
+       GtkObjectClass *klass = (GtkObjectClass *)color_palette_parent_class;
+
+       if (P->tool_tip) {
+               g_object_unref (P->tool_tip);
+               P->tool_tip = NULL;
+       }
+
+       if (P->current_color) {
+               gdk_color_free (P->current_color);
+               P->current_color = NULL;
+       }
+       
+       color_palette_set_group (P, NULL);
+
+       memset (P->items, 0, P->total * sizeof (GnomeCanvasItem *));
+
+       if (klass->destroy)
+                klass->destroy (object);
+}
+
+static void
+color_palette_finalize (GObject *object)
+{
+       ColorPalette *P = COLOR_PALETTE (object);
+
+       g_free (P->items);
+
+       (*color_palette_parent_class->finalize) (object);
+}
+
+static void
+color_palette_class_init (GObjectClass *object_class)
+{
+       object_class->finalize = color_palette_finalize;
+       ((GtkObjectClass *)object_class)->destroy = color_palette_destroy;
+
+       color_palette_parent_class = g_type_class_peek_parent (object_class);
+
+       color_palette_signals [COLOR_CHANGED] =
+               g_signal_new ("color_changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (ColorPaletteClass, color_changed),
+                             NULL, NULL,
+                             e_marshal_NONE__POINTER_BOOLEAN_BOOLEAN_BOOLEAN,
+                             G_TYPE_NONE, 4, G_TYPE_POINTER,
+                             G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
+}
+
+E_MAKE_TYPE (color_palette,
+            "ColorPalette",
+            ColorPalette,
+            color_palette_class_init,
+            NULL,
+            PARENT_TYPE)
+
+static void
+emit_color_changed (ColorPalette *P, GdkColor *color,
+                   gboolean custom, gboolean by_user, gboolean is_default)
+{
+       GdkColor *new = make_color (P, color);
+
+       if (new != NULL)
+               new = gdk_color_copy (new);
+       if (P->current_color)
+               gdk_color_free (P->current_color);
+       P->current_color = new;
+       P->current_is_default = is_default;
+
+       /* Only add custom colors to the group */
+       if (custom && color)
+               color_group_add_color (P->color_group, color);
+       
+       g_signal_emit (P, color_palette_signals [COLOR_CHANGED], 0,
+                      color, custom, by_user, is_default);
+}
+
+
+/*
+ * Add the new custom color as the first custom color in the custom color rows
+ * and shift all of the others 'one step down'
+ *
+ * Also take care of setting up the GtkColorButton 'display'
+ */
+static void
+color_palette_change_custom_color (ColorPalette *P, GdkColor const * const new)
+{
+       int index;
+       GnomeCanvasItem *item;
+       GnomeCanvasItem *next_item;
+
+       g_return_if_fail (P != NULL);
+       g_return_if_fail (new != NULL);
+       g_return_if_fail (P->picker);
+
+       /* make sure there is room */
+       if (P->custom_color_pos == -1)
+               return;
+
+       for (index = P->custom_color_pos; index < P->total - 1; index++) {
+               GdkColor *color;
+               GdkColor *outline;
+               item = P->items[index];
+               next_item = P->items[index + 1];
+
+               g_object_get (G_OBJECT (next_item),
+                       "fill_color_gdk",       &color,
+                       "outline_color_gdk",    &outline,
+                       NULL);
+               gnome_canvas_item_set (item,
+                       "fill_color_gdk",       color,
+                       "outline_color_gdk",    outline,
+                       NULL);
+               gdk_color_free (color);
+               gdk_color_free (outline);
+       }
+       item = P->items[index];
+       gnome_canvas_item_set (item,
+                              "fill_color_gdk", new,
+                              "outline_color_gdk", new,
+                              NULL);
+       gtk_color_button_set_color (P->picker, new);
+}
+
+/*
+ * The custom color box was clicked. Find out its value and emit it
+ * And add it to the custom color row
+ */
+static void
+cust_color_set (GtkWidget  *color_picker, ColorPalette *P)
+{
+       GdkColor c_color;
+
+       gtk_color_button_get_color (GTK_COLOR_BUTTON (color_picker), &c_color);
+
+       e_color_alloc_gdk (NULL, &c_color);
+       emit_color_changed (P, &c_color, TRUE, TRUE, FALSE);
+}
+
+static void
+cb_default_clicked (GtkWidget *button, ColorPalette *P)
+{
+       emit_color_changed (P, P->default_color, FALSE, TRUE, TRUE);
+}
+
+/*
+ * Something in our table was clicked. Find out what and emit it
+ */
+static void
+color_clicked (GtkWidget *button, ColorPalette *P)
+{
+       int              index;
+       GnomeCanvasItem *item;
+       GdkColor        *gdk_color;
+
+       index = GPOINTER_TO_INT (gtk_object_get_user_data (GTK_OBJECT (button)));
+       item  = P->items[index];
+
+       g_object_get (item,
+                     "fill_color_gdk", &gdk_color,
+                     NULL);
+
+       emit_color_changed (P, gdk_color, FALSE, TRUE, FALSE);
+
+       gdk_color_free (gdk_color);
+}
+
+/*
+ * The color group sent the 'custom_color_add' signal
+ */
+static void
+cb_group_custom_color_add (GtkObject *cg, GdkColor *color, ColorPalette *P)
+{
+       GdkColor *new;
+       
+       new = make_color (P, color);
+       color_palette_change_custom_color (P, new);
+}
+
+/*
+ * Find out if a color is in the default palette (not in the custom colors!)
+ *
+ * Utility function
+ */
+static gboolean
+color_in_palette (ColorNamePair *set, GdkColor *color)
+{
+       int i;
+
+       g_return_val_if_fail (set != NULL, FALSE);
+       
+       if (color == NULL)
+               return TRUE;
+               
+       /* Iterator over all the colors and try to find
+        * if we can find @color
+        */
+       for (i = 0; set[i].color != NULL; i++) {
+               GdkColor current;
+               
+               gdk_color_parse (set[i].color, &current);
+               
+               if (gdk_color_equal (color, &current))
+                       return TRUE;
+       }
+
+       return FALSE;
+}
+
+/*
+ * Create the individual color buttons
+ *
+ * Utility function
+ */
+static GnomeCanvasItem *
+color_palette_button_new(ColorPalette *P, GtkTable* table,
+                        GtkTooltips *tool_tip, ColorNamePair* color_name,
+                        gint col, gint row, int data)
+{
+        GtkWidget *button;
+       GtkWidget *canvas;
+       GnomeCanvasItem *item;
+
+       button = gtk_button_new ();
+       gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
+
+       canvas = gnome_canvas_new ();
+
+       gtk_widget_set_usize (canvas, COLOR_PREVIEW_WIDTH, COLOR_PREVIEW_HEIGHT);
+       gtk_container_add (GTK_CONTAINER (button), canvas);
+
+       item  = gnome_canvas_item_new (GNOME_CANVAS_GROUP (gnome_canvas_root
+                                                          (GNOME_CANVAS (canvas))),
+                                      gnome_canvas_rect_get_type (),
+                                      "x1", 0.0,
+                                      "y1", 0.0,
+                                      "x2", (double) COLOR_PREVIEW_WIDTH,
+                                      "y2", (double) COLOR_PREVIEW_HEIGHT,
+                                      "fill_color", color_name->color,
+                                      NULL);
+
+       gtk_tooltips_set_tip (tool_tip, button, _(color_name->name),
+                             "Private+Unused");
+
+       gtk_table_attach (table, button,
+                         col, col+1, row, row+1, GTK_FILL, GTK_FILL, 1, 1);
+
+       g_signal_connect (button, "clicked",
+                         G_CALLBACK (color_clicked), P);
+       gtk_object_set_user_data (GTK_OBJECT (button),
+                                 GINT_TO_POINTER (data));
+       return item;
+}
+
+static void
+cb_custom_colors (GdkColor const * const color, gpointer data)
+{
+       ColorPalette *P = data;
+       
+       if (color)
+               color_palette_change_custom_color (P, color);
+}
+
+/*
+ * gets history information from the group
+ */
+static void
+custom_color_history_setup(ColorPalette *P)
+{
+       g_return_if_fail (P != NULL);
+       g_return_if_fail (P->color_group != NULL);
+
+       /* Sync our own palette with all the custom colors in the group */
+       color_group_get_custom_colors (P->color_group, (CbCustomColors) cb_custom_colors, P);
+}
+
+/*
+ * Creates the color table
+ */
+static GtkWidget *
+color_palette_setup (ColorPalette *P,
+                    char const * const no_color_label,
+                    int ncols, int nrows,
+                    ColorNamePair *color_names)
+{
+       GtkWidget *default_button;
+       GtkWidget *cust_label;
+       GtkWidget *table;
+       GtkTooltips *tool_tip;
+       int total, row, col;
+
+       table = gtk_table_new (ncols, nrows, FALSE);
+
+       if (no_color_label != NULL) {
+               default_button = gtk_button_new_with_label (no_color_label);
+
+               gtk_table_attach (GTK_TABLE (table), default_button,
+                                 0, ncols, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0);
+               g_signal_connect (default_button, "clicked",
+                                 G_CALLBACK (cb_default_clicked), P);
+       }
+
+       P->tool_tip = tool_tip = gtk_tooltips_new ();
+       g_object_ref (P->tool_tip);
+       gtk_object_sink (GTK_OBJECT (P->tool_tip));
+
+       P->custom_color_pos = -1;
+       total = 0;
+
+       for (row = 0; row < nrows; row++) {
+               for (col = 0; col < ncols; col++) {
+                       int pos;
+
+                       pos = row * ncols + col;
+                       /*
+                        * If we are done with all of the colors in color_names
+                        */
+                       if (color_names [pos].color == NULL) {
+                               /* This is the default custom color */
+                               ColorNamePair color_name  = {"#000", N_("custom")};
+                               row++;
+                               if (col == 0 || row < nrows) {
+                                       /* Add a full row for custom colors */
+                                       for (col = 0; col < ncols; col++) {
+                                               /* Have we set custom pos yet ? */
+                                               if (P->custom_color_pos == -1) {
+                                                       P->custom_color_pos = total;
+                                               }
+                                               P->items[total] =
+                                                       color_palette_button_new(
+                                                               P,
+                                                               GTK_TABLE (table),
+                                                               GTK_TOOLTIPS (tool_tip),
+                                                               &(color_name),
+                                                               col,
+                                                               row + 1,
+                                                               total);
+                                               total++;
+                                       }
+                               }
+                               /* Break out of two for-loops.  */
+                               row = nrows;
+                               break;
+                       }
+
+                       P->items[total] =
+                               color_palette_button_new (
+                                       P,
+                                       GTK_TABLE (table),
+                                       GTK_TOOLTIPS (tool_tip),
+                                       &(color_names [pos]),
+                                       col,
+                                       row + 1,
+                                       total);
+                       total++;
+               }
+       }
+       P->total = total;
+
+
+       /* "Custom" color - we'll pop up a GtkColorButton */
+       cust_label = gtk_label_new (_("Custom Color:"));
+       gtk_table_attach (GTK_TABLE (table), cust_label, 0, ncols - 3 ,
+                         row + 1, row + 2, GTK_FILL | GTK_EXPAND, 0, 0, 0);
+       /*
+         Keep a pointer to the picker so that we can update it's color
+         to keep it in synch with that of other members of the group
+       */
+       P->picker = GTK_COLOR_BUTTON (gtk_color_button_new ());
+       gtk_color_button_set_title (P->picker, _("Choose Custom Color"));
+       gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (P->picker), ncols - 3, ncols,
+                         row + 1, row + 2, GTK_FILL | GTK_EXPAND, 0, 0, 0);
+       g_signal_connect (P->picker, "color-set",
+                         G_CALLBACK (cust_color_set), P);
+       return table;
+}
+
+void
+color_palette_set_color_to_default (ColorPalette *P)
+{
+       g_return_if_fail (P != NULL);
+       g_return_if_fail (IS_COLOR_GROUP (P->color_group));
+
+       emit_color_changed (P, P->default_color, FALSE, TRUE, TRUE);
+}
+
+void
+color_palette_set_current_color (ColorPalette *P, GdkColor *color)
+{
+       g_return_if_fail (P != NULL);
+       g_return_if_fail (IS_COLOR_GROUP (P->color_group));
+
+       if (color)
+               emit_color_changed
+                       (P, color, color_in_palette (P->default_set, color),
+                        FALSE, FALSE);
+       else
+               color_palette_set_color_to_default (P);
+}
+
+GdkColor *
+color_palette_get_current_color (ColorPalette *P, gboolean *is_default)
+{
+       g_return_val_if_fail (P != NULL, NULL);
+       g_return_val_if_fail (IS_COLOR_GROUP (P->color_group), NULL);
+
+       if (is_default != NULL)
+               *is_default = P->current_is_default;
+
+       return P->current_color ? gdk_color_copy (P->current_color) : NULL;
+}
+
+GtkWidget *
+color_palette_get_color_picker (ColorPalette *P)
+{
+       g_return_val_if_fail (IS_COLOR_PALETTE (P), NULL);
+
+       return GTK_WIDGET (P->picker);
+}
+
+
+/*
+ * Where the actual construction goes on
+ */
+static void
+color_palette_construct (ColorPalette *P,
+                        char const * const no_color_label,
+                        int ncols, int nrows)
+{
+       GtkWidget * table;
+       g_return_if_fail (P != NULL);
+       g_return_if_fail (IS_COLOR_PALETTE (P));
+
+       P->items = g_malloc (sizeof (GnomeCanvasItem *) * ncols * nrows);
+
+       /*
+        * Our table selector
+        */
+       table = color_palette_setup (P, no_color_label, ncols,
+                                    nrows, P->default_set);
+       gtk_container_add (GTK_CONTAINER(P), table);
+}
+
+/*
+ * More verbose constructor. Allows for specifying the rows, columns, and
+ * Colors this palette will contain
+ *
+ * Note that if after placing all of the color_names there remains an entire
+ * row available then a row of custum colors (initialized to black) is added
+ *
+ */
+static GtkWidget*
+color_palette_new_with_vals (char const * const no_color_label,
+                            int ncols, int nrows, ColorNamePair *color_names,
+                            GdkColor *default_color,
+                            ColorGroup *cg)
+{
+       ColorPalette *P;
+
+       g_return_val_if_fail (color_names != NULL, NULL);
+
+       P = g_object_new (COLOR_PALETTE_TYPE, NULL);
+
+       P->default_set   = color_names;
+       P->default_color = default_color;
+       P->current_color = default_color ? gdk_color_copy (default_color) : NULL;
+       P->current_is_default = TRUE;
+       color_palette_set_group (P, cg);
+
+       color_palette_construct (P, no_color_label, ncols, nrows);
+       custom_color_history_setup(P);
+
+       return GTK_WIDGET (P);
+}
+
+/**
+ * color_palette_set_group : absorbs the reference to the group
+ */
+void
+color_palette_set_group (ColorPalette *P, ColorGroup *cg)
+{
+       if (P->color_group == cg)
+               return;
+
+       if (P->color_group) {
+               g_signal_handlers_disconnect_by_func (
+                       G_OBJECT (P->color_group),
+                       G_CALLBACK (cb_group_custom_color_add),
+                       P);
+               g_object_unref (G_OBJECT (P->color_group));
+               P->color_group = NULL;
+       }
+       if (cg != NULL) {
+               P->color_group = COLOR_GROUP (cg);
+               g_signal_connect (G_OBJECT (cg), "custom_color_add",
+                       G_CALLBACK (cb_group_custom_color_add),
+                       P);
+
+       }
+}
+
+static ColorNamePair default_color_set [] = {
+       {"#000000", N_("black")},
+       {"#993300", N_("light brown")},
+       {"#333300", N_("brown gold")},
+       {"#003300", N_("dark green #2")},
+       {"#003366", N_("navy")},
+       {"#000080", N_("dark blue")},
+       {"#333399", N_("purple #2")},
+       {"#333333", N_("very dark gray")},
+
+
+       {"#800000", N_("dark red")},
+       {"#FF6600", N_("red-orange")},
+       {"#808000", N_("gold")},
+       {"#008000", N_("dark green")},
+       {"#008080", N_("dull blue")},
+       {"#0000FF", N_("blue")},
+       {"#666699", N_("dull purple")},
+       {"#808080", N_("dark grey")},
+
+
+       {"#FF0000", N_("red")},
+       {"#FF9900", N_("orange")},
+       {"#99CC00", N_("lime")},
+       {"#339966", N_("dull green")},
+       {"#33CCCC",N_("dull blue #2")},
+       {"#3366FF", N_("sky blue #2")},
+       {"#800080", N_("purple")},
+       {"#969696", N_("gray")},
+
+
+       {"#FF00FF", N_("magenta")},
+       {"#FFCC00", N_("bright orange")},
+       {"#FFFF00", N_("yellow")},
+       {"#00FF00", N_("green")},
+       {"#00FFFF", N_("cyan")},
+       {"#00CCFF", N_("bright blue")},
+       {"#993366", N_("red purple")},
+       {"#C0C0C0", N_("light grey")},
+
+
+       {"#FF99CC", N_("pink")},
+       {"#FFCC99", N_("light orange")},
+       {"#FFFF99", N_("light yellow")},
+       {"#CCFFCC", N_("light green")},
+       {"#CCFFFF", N_("light cyan")},
+       {"#99CCFF", N_("light blue")},
+       {"#CC99FF", N_("light purple")},
+       {"#FFFFFF", N_("white")},
+
+       /* Disable these for now, they are mostly repeats */
+       {NULL, NULL},
+
+       {"#9999FF", N_("purplish blue")},
+       {"#993366", N_("red purple")},
+       {"#FFFFCC", N_("light yellow")},
+       {"#CCFFFF", N_("light blue")},
+       {"#660066", N_("dark purple")},
+       {"#FF8080", N_("pink")},
+       {"#0066CC", N_("sky blue")},
+       {"#CCCCFF", N_("light purple")},
+
+       {"#000080", N_("dark blue")},
+       {"#FF00FF", N_("magenta")},
+       {"#FFFF00", N_("yellow")},
+       {"#00FFFF", N_("cyan")},
+       {"#800080", N_("purple")},
+       {"#800000", N_("dark red")},
+       {"#008080", N_("dull blue")},
+       {"#0000FF", N_("blue")},
+
+       {NULL, NULL}
+};
+
+
+
+/*
+ * Default constructor. Pass an optional label for
+ * the no/auto color button.
+ *
+ */
+GtkWidget*
+color_palette_new (const char *no_color_label,
+                  GdkColor *default_color, ColorGroup *color_group)
+{
+       /* specify 6 rows to allow for a row of custom colors */
+       return color_palette_new_with_vals (no_color_label,
+                                           8, 6,
+                                           default_color_set, default_color,
+                                           color_group);
+}
diff --git a/src/mygal/color-palette.h b/src/mygal/color-palette.h
new file mode 100644 (file)
index 0000000..b2b281c
--- /dev/null
@@ -0,0 +1,113 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* 
+ * color-palette.h - A color selector palette
+ * Copyright 2000, 2001, Ximian, Inc.
+ *
+ * Authors:
+ * This code was extracted from widget-color-combo.c
+ *   written by Miguel de Icaza (miguel@kernel.org) and
+ *   Dom Lachowicz (dominicl@seas.upenn.edu). The extracted
+ *   code was re-packaged into a separate object by
+ *   Michael Levy (mlevy@genoscope.cns.fr)
+ *   And later revised and polished by
+ *   Almer S. Tigelaar (almer@gnome.org)
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef GNUMERIC_COLOR_PALETTE_H
+#define GNUMERIC_COLOR_PALETTE_H
+
+#include <gtk/gtktooltips.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkcolorbutton.h>
+#include <libgnomecanvas/gnome-canvas.h>
+#include "color-group.h"
+
+G_BEGIN_DECLS
+
+typedef struct _ColorNamePair ColorNamePair;
+
+typedef struct _ColorPalette {
+       GtkVBox          vbox;
+       GtkTooltips      *tool_tip;
+       GtkColorButton   *picker;
+       /*
+        * Array of colors
+        */
+       GnomeCanvasItem **items;
+       /* The (potentially NULL) default color */
+        GdkColor *default_color;
+
+       /* The current color */
+       GdkColor *current_color;
+       gboolean  current_is_default;
+       
+        /*
+        * Position of the last possible position
+        * for custom colors in **items
+        * (i.e. custom colors go from items[custom_color_pos]
+        *  to items[total - 1])
+        *
+        * If custom_color_pos == -1, there is no room for custom colors
+        */
+        int custom_color_pos;
+        /*
+        * Number of default colors in **items
+        */
+       int total;
+
+       /* The table with our default color names */
+       ColorNamePair *default_set;
+       
+       /* The color group to which we belong */
+       ColorGroup *color_group;
+} ColorPalette;
+
+typedef struct {
+       GtkVBoxClass parent_class;
+       
+       /* Signals emited by this widget */
+       void (* color_changed) (ColorPalette *color_palette, GdkColor *color,
+                               gboolean custom, gboolean by_user, gboolean is_default);
+} ColorPaletteClass;
+
+#define COLOR_PALETTE_TYPE     (color_palette_get_type ())
+#define COLOR_PALETTE(obj)     (G_TYPE_CHECK_INSTANCE_CAST((obj), COLOR_PALETTE_TYPE, ColorPalette))
+#define COLOR_PALETTE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST(k), COLOR_PALETTE_TYPE)
+#define IS_COLOR_PALETTE(obj)  (G_TYPE_CHECK_INSTANCE_TYPE((obj), COLOR_PALETTE_TYPE))
+
+GtkType         color_palette_get_type (void);
+
+GtkWidget       *color_palette_new (const char *no_color_label,
+                                   GdkColor *default_color,
+                                   ColorGroup *color_group);
+void            color_palette_set_group (ColorPalette *P,
+                                         ColorGroup *cg);
+
+void             color_palette_set_current_color (ColorPalette *P, GdkColor *color);
+void             color_palette_set_color_to_default (ColorPalette *P);
+GdkColor        *color_palette_get_current_color (ColorPalette *P, gboolean *is_default);
+GtkWidget       *color_palette_get_color_picker  (ColorPalette *P);
+
+G_END_DECLS
+
+#endif /* GNUMERIC_PALETTE_H */
+
+
diff --git a/src/mygal/e-colors.c b/src/mygal/e-colors.c
new file mode 100644 (file)
index 0000000..fc4bf48
--- /dev/null
@@ -0,0 +1,106 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * e-colors.c - General color allocation utilities
+ * Copyright 2000, 2001, Ximian, Inc.
+ *
+ * Authors:
+ *  Miguel de Icaza (miguel@kernel.org)
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+/* We keep our own color context, as the color allocation might take
+ * place before things are realized.
+ */
+
+#include <config.h>
+#include <gtk/gtkwidget.h>
+#include "e-colors.h"
+
+GdkColor e_white, e_dark_gray, e_black;
+
+gulong
+e_color_alloc (gushort red, gushort green, gushort blue)
+{
+       e_color_init ();
+
+       red >>= 8;
+       green >>= 8;
+       blue >>= 8;
+       return gdk_rgb_xpixel_from_rgb (
+               ((red & 0xff) << 16) | ((green & 0xff) << 8) |
+               (blue & 0xff));
+}
+
+void
+e_color_alloc_gdk (GtkWidget *widget, GdkColor *c)
+{
+       GdkColormap *map;
+
+       e_color_init ();
+
+       if (widget)
+               map = gtk_widget_get_colormap (widget);
+       else /* FIXME: multi depth broken ? */
+               map = gtk_widget_get_default_colormap ();
+
+       gdk_rgb_find_color (map, c);
+}
+
+void
+e_color_alloc_name (GtkWidget *widget, const char *name, GdkColor *c)
+{
+       GdkColormap *map;
+
+       e_color_init ();
+
+       gdk_color_parse (name, c);
+
+       if (widget)
+               map = gtk_widget_get_colormap (widget);
+       else /* FIXME: multi depth broken ? */
+               map = gtk_widget_get_default_colormap ();
+
+       gdk_rgb_find_color (map, c);
+}
+
+void
+e_color_init (void)
+{
+       static gboolean e_color_inited = FALSE;
+
+       /* It's surprisingly easy to end up calling this twice.  Survive.  */
+       if (e_color_inited)
+               return;
+
+       e_color_inited = TRUE;
+
+       /* Allocate the default colors */
+       e_white.red   = 65535;
+       e_white.green = 65535;
+       e_white.blue  = 65535;
+       e_color_alloc_gdk (NULL, &e_white);
+
+       e_black.red   = 0;
+       e_black.green = 0;
+       e_black.blue  = 0;
+       e_color_alloc_gdk (NULL, &e_black);
+
+       e_color_alloc_name (NULL, "gray20",  &e_dark_gray);
+}
+
diff --git a/src/mygal/e-colors.h b/src/mygal/e-colors.h
new file mode 100644 (file)
index 0000000..1366504
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* 
+ * e-colors.h
+ * Copyright 2000, 2001, Ximian, Inc.
+ *
+ * Authors:
+ *   Miguel de Icaza (miguel@kernel.org)
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef GNOME_APP_LIBS_COLOR_H
+#define GNOME_APP_LIBS_COLOR_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtkwidget.h>
+
+G_BEGIN_DECLS
+
+void     e_color_init       (void);
+
+/* Return the pixel value for the given red, green and blue */
+gulong   e_color_alloc      (gushort red, gushort green, gushort blue);
+void     e_color_alloc_name (GtkWidget *widget, const char *name, GdkColor *color);
+void     e_color_alloc_gdk  (GtkWidget *widget, GdkColor *color);
+
+extern GdkColor e_white, e_dark_gray, e_black;
+
+G_END_DECLS
+
+#endif /* GNOME_APP_LIBS_COLOR_H */
diff --git a/src/mygal/e-marshal.list b/src/mygal/e-marshal.list
new file mode 100644 (file)
index 0000000..92496db
--- /dev/null
@@ -0,0 +1,51 @@
+BOOLEAN:INT,INT,OBJECT,INT,INT,UINT
+BOOLEAN:INT,POINTER,INT,OBJECT,INT,INT,UINT
+BOOLEAN:NONE
+BOOLEAN:OBJECT
+BOOLEAN:OBJECT,DOUBLE,DOUBLE,BOOLEAN
+BOOLEAN:POINTER,POINTER,INT,INT,INT
+BOOLEAN:POINTER,POINTER,POINTER,INT,INT,INT
+BOOLEAN:STRING,INT
+DOUBLE:OBJECT,DOUBLE,DOUBLE,BOOLEAN
+INT:BOXED
+INT:INT
+INT:INT,INT,BOXED
+INT:INT,POINTER,INT,BOXED
+INT:OBJECT,BOXED
+INT:POINTER
+NONE:BOXED
+NONE:BOXED,INT
+NONE:BOXED,INT,INT
+NONE:DOUBLE
+NONE:INT
+NONE:INT,INT
+NONE:INT,INT,BOXED
+NONE:INT,INT,OBJECT
+NONE:INT,INT,OBJECT,BOXED,UINT,UINT
+NONE:INT,INT,OBJECT,INT,INT,BOXED,UINT,UINT
+NONE:INT,INT,OBJECT,POINTER,UINT,UINT
+NONE:INT,INT,OBJECT,UINT
+NONE:INT,INT,STRING,STRING
+NONE:INT,INT,STRING,STRING,POINTER
+NONE:INT,POINTER
+NONE:INT,POINTER,INT,BOXED
+NONE:INT,POINTER,INT,OBJECT
+NONE:INT,POINTER,INT,OBJECT,BOXED,UINT,UINT
+NONE:INT,POINTER,INT,OBJECT,INT,INT,BOXED,UINT,UINT
+NONE:INT,POINTER,INT,OBJECT,UINT
+NONE:INT,STRING
+NONE:NONE
+NONE:OBJECT
+NONE:OBJECT,OBJECT
+NONE:OBJECT,DOUBLE,DOUBLE,BOOLEAN
+NONE:POINTER
+NONE:POINTER,BOOLEAN
+NONE:POINTER,BOOLEAN,BOOLEAN,BOOLEAN
+NONE:POINTER,INT
+NONE:POINTER,INT,INT
+NONE:POINTER,INT,INT,INT
+NONE:POINTER,INT,OBJECT
+NONE:POINTER,POINTER
+NONE:POINTER,POINTER,INT
+OBJECT:OBJECT,DOUBLE,DOUBLE,BOOLEAN
+POINTER:NONE
diff --git a/src/mygal/e-util.h b/src/mygal/e-util.h
new file mode 100644 (file)
index 0000000..7bc3978
--- /dev/null
@@ -0,0 +1,234 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* 
+ * e-util.h
+ * Copyright 2000, 2001, Ximian, Inc.
+ *
+ * Authors:
+ *   Chris Lahey <clahey@ximian.com>
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef _E_UTIL_H_
+#define _E_UTIL_H_
+
+#include <sys/types.h>
+#include <glib-object.h>
+#include <limits.h>
+
+#ifdef __cplusplus
+extern "C" {
+#pragma }
+#endif /* __cplusplus */
+
+#include "e-marshal.h"
+
+#define E_MAKE_TYPE(l,str,t,ci,i,parent) \
+GType l##_get_type(void)\
+{\
+       static GType type = 0;                          \
+       if (!type){                                     \
+               static GTypeInfo const object_info = {  \
+                       sizeof (t##Class),              \
+                                                       \
+                       (GBaseInitFunc) NULL,           \
+                       (GBaseFinalizeFunc) NULL,       \
+                                                       \
+                       (GClassInitFunc) ci,            \
+                       (GClassFinalizeFunc) NULL,      \
+                       NULL,   /* class_data */        \
+                                                       \
+                       sizeof (t),                     \
+                       0,      /* n_preallocs */       \
+                       (GInstanceInitFunc) i,          \
+               };                                      \
+               type = g_type_register_static (parent, str, &object_info, 0);   \
+       }                                               \
+       return type;                                    \
+}
+
+
+#define E_MAKE_X_TYPE(l,str,t,ci,i,parent,poa_init,offset)     \
+GtkType l##_get_type(void)                                     \
+{                                                              \
+       static GtkType type = 0;                                \
+       if (!type){                                             \
+               GTypeInfo info = {                              \
+                       sizeof (t##Class),                      \
+                                                               \
+                       (GBaseInitFunc) NULL,                   \
+                       (GBaseFinalizeFunc) NULL,               \
+                                                               \
+                       (GClassInitFunc) ci,                    \
+                       (GClassFinalizeFunc) NULL,              \
+                                                               \
+                        NULL,  /* class_data */                \
+                                                               \
+                       sizeof (t),                             \
+                       0,      /* n_preallocs */               \
+                       (GInstanceInitFunc) i,                  \
+               };                                              \
+                type = bonobo_x_type_unique (                  \
+                       parent, poa_init, NULL,                 \
+                       offset, &info, str);                    \
+       }                                                       \
+       return type;                                            \
+}
+
+#define GET_STRING_ARRAY_FROM_ELLIPSIS(labels, first_string) \
+        { \
+               va_list args; \
+               int i; \
+               char *s; \
+ \
+               va_start (args, (first_string)); \
+ \
+               i = 0; \
+               for (s = (first_string); s; s = va_arg (args, char *)) \
+                       i++; \
+               va_end (args); \
+ \
+               (labels) = g_new (char *, i + 1); \
+ \
+               va_start (args, (first_string)); \
+               i = 0; \
+               for (s = (first_string); s; s = va_arg (args, char *)) \
+                       (labels)[i++] = s; \
+ \
+               va_end (args); \
+               (labels)[i] = NULL; \
+       }
+
+
+#define GET_DUPLICATED_STRING_ARRAY_FROM_ELLIPSIS(labels, first_string) \
+        { \
+                int i; \
+                GET_STRING_ARRAY_FROM_ELLIPSIS ((labels), (first_string)); \
+                for (i = 0; labels[i]; i++) \
+                       labels[i] = g_strdup (labels[i]); \
+        }
+
+
+#if 0
+#  define E_OBJECT_CLASS_ADD_SIGNALS(oc,sigs,last) \
+       gtk_object_class_add_signals (oc, sigs, last)
+#  define E_OBJECT_CLASS_TYPE(oc) (oc)->type
+#else
+#  define E_OBJECT_CLASS_ADD_SIGNALS(oc,sigs,last)
+#  define E_OBJECT_CLASS_TYPE(oc) G_TYPE_FROM_CLASS (oc)
+#endif
+
+
+typedef enum {
+       E_FOCUS_NONE,
+       E_FOCUS_CURRENT,
+       E_FOCUS_START,
+       E_FOCUS_END
+} EFocus;
+int       g_str_compare                                                    (const void        *x,
+                                                                           const void        *y);
+int       g_collate_compare                                                (const void        *x,
+                                                                           const void        *y);
+int       g_int_compare                                                    (const void        *x,
+                                                                           const void        *y);
+char     *e_strdup_strip                                                   (const char        *string);
+void      e_free_object_list                                               (GList             *list);
+void      e_free_object_slist                                              (GSList            *list);
+void      e_free_string_list                                               (GList             *list);
+void      e_free_string_slist                                              (GSList            *list);
+char     *e_read_file                                                      (const char        *filename);
+int       e_write_file                                                     (const char        *filename,
+                                                                           const char        *data,
+                                                                           int                flags);
+int       e_write_file_mkstemp                                             (char              *filename,
+                                                                           const char        *data);
+int       e_mkdir_hier                                                     (const char        *path,
+                                                                           mode_t             mode);
+
+gchar   **e_strsplit                                                      (const gchar      *string,
+                                                                           const gchar      *delimiter,
+                                                                           gint              max_tokens);
+gchar    *e_strstrcase                                                     (const gchar       *haystack,
+                                                                           const gchar       *needle);
+/* This only makes a filename safe for usage as a filename.  It still may have shell meta-characters in it. */
+void      e_filename_make_safe                                             (gchar             *string);
+gchar    *e_format_number                                                  (gint               number);
+gchar    *e_format_number_float                                            (gfloat             number);
+gboolean  e_create_directory                                               (gchar             *directory);
+gchar   **e_strdupv                                                        (const gchar      **str_array);
+
+
+typedef int (*ESortCompareFunc) (const void *first,
+                                const void *second,
+                                gpointer    closure);
+void     e_sort                (void             *base,
+                               size_t            nmemb,
+                               size_t            size,
+                               ESortCompareFunc  compare,
+                               gpointer          closure);
+void     e_bsearch             (const void       *key,
+                               const void       *base,
+                               size_t            nmemb,
+                               size_t            size,
+                               ESortCompareFunc  compare,
+                               gpointer          closure,
+                               size_t           *start,
+                               size_t           *end);
+size_t   e_strftime_fix_am_pm  (char             *s,
+                               size_t            max,
+                               const char       *fmt,
+                               const struct tm  *tm);
+
+size_t   e_strftime            (char              *s,
+                                size_t             max,
+                                const char        *fmt,
+                                const struct tm   *tm);
+
+size_t   e_utf8_strftime_fix_am_pm  (char             *s,
+                                    size_t            max,
+                                    const char       *fmt,
+                                    const struct tm  *tm);
+
+size_t   e_utf8_strftime       (char              *s,
+                                size_t             max,
+                                const char        *fmt,
+                                const struct tm   *tm);
+
+/* String to/from double conversion functions */
+gdouble   e_flexible_strtod     (const gchar       *nptr,
+                                gchar            **endptr);
+
+/* 29 bytes should enough for all possible values that
+ * g_ascii_dtostr can produce with the %.17g format.
+ * Then add 10 for good measure */
+#define E_ASCII_DTOSTR_BUF_SIZE (DBL_DIG + 12 + 10)
+gchar    *e_ascii_dtostr                                                   (gchar             *buffer,
+                                                                           gint               buf_len,
+                                                                           const gchar       *format,
+                                                                           gdouble            d);
+
+/* Alternating char * and int arguments with a NULL char * to end.
+   Less than 0 for the int means copy the whole string. */
+gchar    *e_strdup_append_strings                                          (gchar             *first_string,
+                                                                           ...);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _E_UTIL_H_ */
diff --git a/src/mygal/mygal-combo-box.c b/src/mygal/mygal-combo-box.c
new file mode 100644 (file)
index 0000000..adf1c64
--- /dev/null
@@ -0,0 +1,837 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * mygal-combo-box.c - a customizable combobox
+ * Copyright 2000, 2001, Ximian, Inc.
+ *
+ * Authors:
+ *   Miguel de Icaza (miguel@gnu.org)
+ *   Adrian E Feiguin (feiguin@ifir.edu.ar)
+ *   Paolo Molnaro (lupus@debian.org).
+ *   Jon K Hellan (hellan@acm.org)
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkarrow.h>
+#include <gtk/gtkeventbox.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkframe.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtktearoffmenuitem.h>
+#include <gdk/gdkkeysyms.h>
+#include "mygal-combo-box.h"
+#include "e-util.h"
+
+#define PARENT_TYPE GTK_TYPE_HBOX
+static GObjectClass *mygal_combo_box_parent_class;
+
+static int mygal_combo_toggle_pressed (GtkToggleButton *tbutton,
+                                    MygalComboBox *combo_box);
+static void mygal_combo_popup_tear_off (MygalComboBox *combo,
+                                     gboolean set_position);
+static void mygal_combo_set_tearoff_state (MygalComboBox *combo,
+                                        gboolean torn_off);
+static void mygal_combo_popup_reparent (GtkWidget *popup, GtkWidget *new_parent, 
+                                     gboolean unrealize);
+static gboolean cb_popup_delete (GtkWidget *w, GdkEventAny *event,
+                            MygalComboBox *combo);
+static void mygal_combo_tearoff_bg_copy (MygalComboBox *combo);
+
+enum {
+       POP_DOWN_WIDGET,
+       POP_DOWN_DONE,
+       PRE_POP_DOWN,
+       POST_POP_HIDE,
+       LAST_SIGNAL
+};
+
+static guint mygal_combo_box_signals [LAST_SIGNAL] = { 0, };
+
+struct _MygalComboBoxPrivate {
+       GtkWidget *pop_down_widget;
+       GtkWidget *display_widget;
+
+       /*
+        * Internal widgets used to implement the ComboBox
+        */
+       GtkWidget *frame;
+       GtkWidget *arrow_button;
+
+       GtkWidget *toplevel;    /* Popup's toplevel when not torn off */
+       GtkWidget *tearoff_window; /* Popup's toplevel when torn off */
+       guint torn_off;
+       
+       GtkWidget *tearable;    /* The tearoff "button" */
+       GtkWidget *popup;       /* Popup */
+
+       /*
+        * Closure for invoking the callbacks above
+        */
+       void *closure;
+};
+
+static void
+mygal_combo_box_finalize (GObject *object)
+{
+       MygalComboBox *combo_box = MYGAL_COMBO_BOX (object);
+
+       g_free (combo_box->priv);
+
+       mygal_combo_box_parent_class->finalize (object);
+}
+
+static void
+mygal_combo_box_destroy (GtkObject *object)
+{
+       GtkObjectClass *klass = (GtkObjectClass *)mygal_combo_box_parent_class;
+       MygalComboBox *combo_box = MYGAL_COMBO_BOX (object);
+
+       if (combo_box->priv->toplevel) {
+               gtk_object_destroy (GTK_OBJECT (combo_box->priv->toplevel));
+               combo_box->priv->toplevel = NULL;
+       }
+
+       if (combo_box->priv->tearoff_window) {
+               gtk_object_destroy (GTK_OBJECT (combo_box->priv->tearoff_window));
+               combo_box->priv->tearoff_window = NULL;
+       }
+
+       if (klass->destroy)
+                klass->destroy (object);
+}
+
+static gboolean
+mygal_combo_box_mnemonic_activate (GtkWidget *w, gboolean group_cycling)
+{
+       MygalComboBox *combo_box = MYGAL_COMBO_BOX (w);
+       gtk_toggle_button_set_active (
+               GTK_TOGGLE_BUTTON (combo_box->priv->arrow_button), TRUE);
+       return TRUE;
+}
+
+static void
+mygal_combo_box_class_init (GObjectClass *object_class)
+{
+       GtkWidgetClass *widget_class = (GtkWidgetClass *)object_class;
+       mygal_combo_box_parent_class = g_type_class_peek_parent (object_class);
+
+       object_class->finalize = mygal_combo_box_finalize;
+       widget_class->mnemonic_activate = mygal_combo_box_mnemonic_activate;
+       ((GtkObjectClass *)object_class)->destroy = mygal_combo_box_destroy;
+
+       mygal_combo_box_signals [POP_DOWN_WIDGET] = g_signal_new (
+               "pop_down_widget",
+               G_OBJECT_CLASS_TYPE (object_class),
+               G_SIGNAL_RUN_LAST,
+               G_STRUCT_OFFSET (MygalComboBoxClass, pop_down_widget),
+               NULL, NULL,
+               e_marshal_POINTER__NONE,
+               G_TYPE_POINTER, 0, G_TYPE_NONE);
+
+       mygal_combo_box_signals [POP_DOWN_DONE] = g_signal_new (
+               "pop_down_done",
+               G_OBJECT_CLASS_TYPE (object_class),
+               G_SIGNAL_RUN_LAST,
+               G_STRUCT_OFFSET (MygalComboBoxClass, pop_down_done),
+               NULL, NULL,
+               e_marshal_BOOLEAN__OBJECT,
+               G_TYPE_BOOLEAN, 1, G_TYPE_OBJECT);
+
+       mygal_combo_box_signals [PRE_POP_DOWN] = g_signal_new (
+               "pre_pop_down",
+               G_OBJECT_CLASS_TYPE (object_class),
+               G_SIGNAL_RUN_LAST,
+               G_STRUCT_OFFSET (MygalComboBoxClass, pre_pop_down),
+               NULL, NULL,
+               e_marshal_NONE__NONE,
+               G_TYPE_NONE, 0);
+
+       mygal_combo_box_signals [POST_POP_HIDE] = g_signal_new (
+               "post_pop_hide",
+               G_OBJECT_CLASS_TYPE (object_class),
+               G_SIGNAL_RUN_LAST,
+               G_STRUCT_OFFSET (MygalComboBoxClass, post_pop_hide),
+               NULL, NULL,
+               e_marshal_NONE__NONE,
+               G_TYPE_NONE, 0);
+}
+
+static void
+deactivate_arrow (MygalComboBox *combo_box)
+{
+       GtkToggleButton *arrow;
+
+       arrow = GTK_TOGGLE_BUTTON (combo_box->priv->arrow_button);
+       g_signal_handlers_block_matched (arrow,
+                                        G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
+                                        0, 0, NULL,
+                                        mygal_combo_toggle_pressed, combo_box);
+
+       gtk_toggle_button_set_active (arrow, FALSE);
+       
+               g_signal_handlers_unblock_matched (arrow,
+                                          G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
+                                          0, 0, NULL,
+                                          mygal_combo_toggle_pressed, combo_box);
+}
+
+/**
+ * mygal_combo_box_popup_hide_unconditional
+ * @combo_box:  Combo box
+ *
+ * Hide popup, whether or not it is torn off.
+ */
+static void
+mygal_combo_box_popup_hide_unconditional (MygalComboBox *combo_box)
+{
+       gboolean popup_info_destroyed = FALSE;
+
+       g_return_if_fail (combo_box != NULL);
+       g_return_if_fail (MYGAL_IS_COMBO_BOX (combo_box));
+
+       gtk_widget_hide (combo_box->priv->toplevel);
+       gtk_widget_hide (combo_box->priv->popup);
+       if (combo_box->priv->torn_off) {
+               GTK_TEAROFF_MENU_ITEM (combo_box->priv->tearable)->torn_off
+                       = FALSE;
+               mygal_combo_set_tearoff_state (combo_box, FALSE);
+       }
+       
+       gtk_grab_remove (combo_box->priv->toplevel);
+       gdk_pointer_ungrab (GDK_CURRENT_TIME);
+               
+       g_object_ref (combo_box->priv->pop_down_widget);
+       g_signal_emit (combo_box,
+                      mygal_combo_box_signals [POP_DOWN_DONE], 0,
+                      combo_box->priv->pop_down_widget, &popup_info_destroyed);
+
+       if (popup_info_destroyed){
+               gtk_container_remove (
+                       GTK_CONTAINER (combo_box->priv->frame),
+                       combo_box->priv->pop_down_widget);
+               combo_box->priv->pop_down_widget = NULL;
+       }
+       g_object_unref (combo_box->priv->pop_down_widget);
+       deactivate_arrow (combo_box);
+
+       g_signal_emit (combo_box, mygal_combo_box_signals [POST_POP_HIDE], 0);
+}
+
+/**
+ * mygal_combo_box_popup_hide:
+ * @combo_box:  Combo box
+ *
+ * Hide popup, but not when it is torn off.
+ * This is the external interface - for subclasses and apps which expect a
+ * regular combo which doesn't do tearoffs.
+ */
+void
+mygal_combo_box_popup_hide (MygalComboBox *combo_box)
+{
+       if (!combo_box->priv->torn_off)
+               mygal_combo_box_popup_hide_unconditional (combo_box);
+       else if (GTK_WIDGET_VISIBLE (combo_box->priv->toplevel)) {
+               /* Both popup and tearoff window present. Get rid of just
+                   the popup shell. */
+               mygal_combo_popup_tear_off (combo_box, FALSE);
+               deactivate_arrow (combo_box);
+       }                
+}
+
+/*
+ * Find best location for displaying
+ */
+void
+mygal_combo_box_get_pos (MygalComboBox *combo_box, int *x, int *y)
+{
+       GtkWidget *wcombo = GTK_WIDGET (combo_box);
+       int ph, pw;
+
+       gdk_window_get_origin (wcombo->window, x, y);
+       *y += wcombo->allocation.height + wcombo->allocation.y;
+       *x += wcombo->allocation.x;
+
+       ph = combo_box->priv->popup->allocation.height;
+       pw = combo_box->priv->popup->allocation.width;
+
+       if ((*y + ph) > gdk_screen_height ())
+               *y = gdk_screen_height () - ph;
+
+       if ((*x + pw) > gdk_screen_width ())
+               *x = gdk_screen_width () - pw;
+}
+
+static void
+mygal_combo_box_popup_display (MygalComboBox *combo_box)
+{
+       int x, y;
+
+       g_return_if_fail (combo_box != NULL);
+       g_return_if_fail (MYGAL_IS_COMBO_BOX (combo_box));
+       
+       /*
+        * If we have no widget to display on the popdown,
+        * create it
+        */
+       if (!combo_box->priv->pop_down_widget){
+               GtkWidget *pw = NULL;
+
+               g_signal_emit (combo_box,
+                              mygal_combo_box_signals [POP_DOWN_WIDGET], 0, &pw);
+               g_assert (pw != NULL);
+               combo_box->priv->pop_down_widget = pw;
+               gtk_container_add (GTK_CONTAINER (combo_box->priv->frame), pw);
+       }
+
+       g_signal_emit (combo_box, mygal_combo_box_signals [PRE_POP_DOWN], 0);
+       
+       if (combo_box->priv->torn_off) {
+               /* To give the illusion that tearoff still displays the
+                * popup, we copy the image in the popup window to the
+                * background. Thus, it won't be blank after reparenting */
+               mygal_combo_tearoff_bg_copy (combo_box);
+
+               /* We force an unrealize here so that we don't trigger
+                * redrawing/ clearing code - we just want to reveal our
+                * backing pixmap.
+                */
+               mygal_combo_popup_reparent (combo_box->priv->popup,
+                                         combo_box->priv->toplevel, TRUE);
+       }
+
+       mygal_combo_box_get_pos (combo_box, &x, &y);
+       
+       gtk_widget_set_uposition (combo_box->priv->toplevel, x, y);
+       gtk_widget_realize (combo_box->priv->popup);
+       gtk_widget_show (combo_box->priv->popup);
+       gtk_widget_realize (combo_box->priv->toplevel);
+       gtk_widget_show (combo_box->priv->toplevel);
+       
+       gtk_grab_add (combo_box->priv->toplevel);
+       gdk_pointer_grab (combo_box->priv->toplevel->window, TRUE,
+                         GDK_BUTTON_PRESS_MASK |
+                         GDK_BUTTON_RELEASE_MASK |
+                         GDK_POINTER_MOTION_MASK,
+                         NULL, NULL, GDK_CURRENT_TIME);
+}
+
+static int
+mygal_combo_toggle_pressed (GtkToggleButton *tbutton, MygalComboBox *combo_box)
+{
+       if (tbutton->active)
+               mygal_combo_box_popup_display (combo_box);
+       else
+               mygal_combo_box_popup_hide_unconditional (combo_box);
+
+       return TRUE;
+}
+
+static  gint
+mygal_combo_box_button_press (GtkWidget *widget, GdkEventButton *event, MygalComboBox *combo_box)
+{
+       GtkWidget *child;
+
+       child = gtk_get_event_widget ((GdkEvent *) event);
+       if (child != widget){
+               while (child){
+                       if (child == widget)
+                               return FALSE;
+                       child = child->parent;
+               }
+       }
+
+       mygal_combo_box_popup_hide (combo_box);
+       return TRUE;
+}
+
+/**
+ * mygal_combo_box_key_press
+ * @widget:     Widget
+ * @event:      Event
+ * @combo_box:  Combo box
+ *
+ * Key press handler which dismisses popup on escape.
+ * Popup is dismissed whether or not popup is torn off.
+ */
+static  gint
+mygal_combo_box_key_press (GtkWidget *widget, GdkEventKey *event,
+                        MygalComboBox *combo_box)
+{
+       if (event->keyval == GDK_Escape) {
+               mygal_combo_box_popup_hide_unconditional (combo_box);
+               return TRUE;
+       } else
+               return FALSE;
+}
+
+static void
+cb_state_change (GtkWidget *widget, GtkStateType old_state, MygalComboBox *combo_box)
+{
+       GtkStateType const new_state = GTK_WIDGET_STATE(widget);
+       gtk_widget_set_state (combo_box->priv->display_widget, new_state);
+}
+
+static void
+mygal_combo_box_init (MygalComboBox *combo_box)
+{
+       GtkWidget *arrow;
+       GdkCursor *cursor;
+
+       combo_box->priv = g_new0 (MygalComboBoxPrivate, 1);
+
+       /*
+        * Create the arrow
+        */
+       combo_box->priv->arrow_button = gtk_toggle_button_new ();
+       gtk_button_set_relief (GTK_BUTTON (combo_box->priv->arrow_button), GTK_RELIEF_NONE);
+       GTK_WIDGET_UNSET_FLAGS (combo_box->priv->arrow_button, GTK_CAN_FOCUS);
+
+       arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_IN);
+       gtk_container_add (GTK_CONTAINER (combo_box->priv->arrow_button), arrow);
+       gtk_box_pack_end (GTK_BOX (combo_box), combo_box->priv->arrow_button, FALSE, FALSE, 0);
+       g_signal_connect (combo_box->priv->arrow_button, "toggled",
+                         G_CALLBACK (mygal_combo_toggle_pressed), combo_box);
+       gtk_widget_show_all (combo_box->priv->arrow_button);
+
+       /*
+        * prelight the display widget when mousing over the arrow.
+        */
+       g_signal_connect (combo_box->priv->arrow_button, "state-changed",
+                         G_CALLBACK (cb_state_change), combo_box);
+
+       /*
+        * The pop-down container
+        */
+
+       combo_box->priv->toplevel = gtk_window_new (GTK_WINDOW_POPUP);
+       gtk_widget_ref (combo_box->priv->toplevel);
+       gtk_object_sink (GTK_OBJECT (combo_box->priv->toplevel));
+       gtk_window_set_policy (GTK_WINDOW (combo_box->priv->toplevel),
+                              FALSE, TRUE, FALSE);
+
+       combo_box->priv->popup = gtk_event_box_new ();
+       gtk_container_add (GTK_CONTAINER (combo_box->priv->toplevel),
+                          combo_box->priv->popup);
+       gtk_widget_show (combo_box->priv->popup);
+
+       gtk_widget_realize (combo_box->priv->popup);
+       cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW);
+       gdk_window_set_cursor (combo_box->priv->popup->window, cursor);
+       gdk_cursor_unref (cursor);
+
+       combo_box->priv->torn_off = FALSE;
+       combo_box->priv->tearoff_window = NULL;
+       
+       combo_box->priv->frame = gtk_frame_new (NULL);
+       gtk_container_add (GTK_CONTAINER (combo_box->priv->popup),
+                          combo_box->priv->frame);
+       gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->frame), GTK_SHADOW_OUT);
+
+       g_signal_connect (combo_box->priv->toplevel, "button_press_event",
+                         G_CALLBACK (mygal_combo_box_button_press), combo_box);
+       g_signal_connect (combo_box->priv->toplevel, "key_press_event",
+                         G_CALLBACK (mygal_combo_box_key_press), combo_box);
+}
+
+E_MAKE_TYPE (mygal_combo_box,
+            "MygalComboBox",
+            MygalComboBox,
+            mygal_combo_box_class_init,
+            mygal_combo_box_init,
+            PARENT_TYPE)
+
+/**
+ * mygal_combo_box_set_display:
+ * @combo_box: the Combo Box to modify
+ * @display_widget: The widget to be displayed
+
+ * Sets the displayed widget for the @combo_box to be @display_widget
+ */
+void
+mygal_combo_box_set_display (MygalComboBox *combo_box, GtkWidget *display_widget)
+{
+       g_return_if_fail (combo_box != NULL);
+       g_return_if_fail (MYGAL_IS_COMBO_BOX (combo_box));
+       g_return_if_fail (display_widget != NULL);
+       g_return_if_fail (GTK_IS_WIDGET (display_widget));
+
+       if (combo_box->priv->display_widget &&
+           combo_box->priv->display_widget != display_widget)
+               gtk_container_remove (GTK_CONTAINER (combo_box),
+                                     combo_box->priv->display_widget);
+
+       combo_box->priv->display_widget = display_widget;
+
+       gtk_box_pack_start (GTK_BOX (combo_box), display_widget, TRUE, TRUE, 0);
+}
+
+static gboolean
+cb_tearable_enter_leave (GtkWidget *w, GdkEventCrossing *event, gpointer data)
+{
+       gboolean const flag = GPOINTER_TO_INT(data);
+       gtk_widget_set_state (w, flag ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL);
+       return FALSE;
+}
+
+/**
+ * mygal_combo_popup_tear_off
+ * @combo:         Combo box
+ * @set_position:  Set to position of popup shell if true
+ *
+ * Tear off the popup
+ *
+ * FIXME:
+ * Gtk popup menus are toplevel windows, not dialogs. I think this is wrong,
+ * and make the popups dialogs. But may be there should be a way to make
+ * them toplevel. We can do this after creating:
+ * GTK_WINDOW (tearoff)->type = GTK_WINDOW_TOPLEVEL;
+ */
+static void
+mygal_combo_popup_tear_off (MygalComboBox *combo, gboolean set_position)
+{
+       int x, y;
+       
+       if (!combo->priv->tearoff_window) {
+               GtkWidget *tearoff;
+               gchar *title;
+               
+               /* FIXME: made this a toplevel, not a dialog ! */
+               tearoff = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+               gtk_widget_ref (tearoff);
+               gtk_object_sink (GTK_OBJECT (tearoff));
+               combo->priv->tearoff_window = tearoff;
+               gtk_widget_set_app_paintable (tearoff, TRUE);
+               g_signal_connect (tearoff, "key_press_event",
+                                 G_CALLBACK (mygal_combo_box_key_press),
+                                 combo);
+               gtk_widget_realize (tearoff);
+               title = g_object_get_data (G_OBJECT (combo),
+                                          "gtk-combo-title");
+               if (title)
+                       gdk_window_set_title (tearoff->window, title);
+               gtk_window_set_policy (GTK_WINDOW (tearoff),
+                                      FALSE, TRUE, FALSE);
+               gtk_window_set_transient_for 
+                       (GTK_WINDOW (tearoff),
+                        GTK_WINDOW (gtk_widget_get_toplevel
+                                    GTK_WIDGET (combo)));
+       }
+
+       if (GTK_WIDGET_VISIBLE (combo->priv->popup)) {
+               gtk_widget_hide (combo->priv->toplevel);
+               
+               gtk_grab_remove (combo->priv->toplevel);
+               gdk_pointer_ungrab (GDK_CURRENT_TIME);
+       }
+
+       mygal_combo_popup_reparent (combo->priv->popup,
+                                 combo->priv->tearoff_window, FALSE);
+
+       /* It may have got confused about size */
+       gtk_widget_queue_resize (GTK_WIDGET (combo->priv->popup));
+
+       if (set_position) {
+               mygal_combo_box_get_pos (combo, &x, &y);
+               gtk_widget_set_uposition (combo->priv->tearoff_window, x, y);
+       }
+       gtk_widget_show (GTK_WIDGET (combo->priv->popup));
+       gtk_widget_show (combo->priv->tearoff_window);
+               
+}
+
+/**
+ * mygal_combo_set_tearoff_state
+ * @combo_box:  Combo box
+ * @torn_off:   TRUE: Tear off. FALSE: Pop down and reattach
+ *
+ * Set the tearoff state of the popup
+ *
+ * Compare with gtk_menu_set_tearoff_state in gtk/gtkmenu.c
+ */
+static void       
+mygal_combo_set_tearoff_state (MygalComboBox *combo,
+                            gboolean  torn_off)
+{
+       g_return_if_fail (combo != NULL);
+       g_return_if_fail (MYGAL_IS_COMBO_BOX (combo));
+       
+       if (combo->priv->torn_off != torn_off) {
+               combo->priv->torn_off = torn_off;
+               
+               if (combo->priv->torn_off) {
+                       mygal_combo_popup_tear_off (combo, TRUE);
+                       deactivate_arrow (combo);
+               } else {
+                       gtk_widget_hide (combo->priv->tearoff_window);
+                       mygal_combo_popup_reparent (combo->priv->popup,
+                                                 combo->priv->toplevel,
+                                                 FALSE);
+               }
+       }
+}
+
+/**
+ * mygal_combo_tearoff_bg_copy
+ * @combo_box:  Combo box
+ *
+ * Copy popup window image to the tearoff window.
+ */
+static void
+mygal_combo_tearoff_bg_copy (MygalComboBox *combo)
+{
+       GdkPixmap *pixmap;
+       GdkGC *gc;
+       GdkGCValues gc_values;
+
+       GtkWidget *widget = combo->priv->popup;
+
+       if (combo->priv->torn_off) {
+               gc_values.subwindow_mode = GDK_INCLUDE_INFERIORS;
+               gc = gdk_gc_new_with_values (widget->window,
+                                            &gc_values, GDK_GC_SUBWINDOW);
+      
+               pixmap = gdk_pixmap_new (widget->window,
+                                        widget->allocation.width,
+                                        widget->allocation.height,
+                                        -1);
+
+               gdk_draw_drawable (pixmap, gc,
+                                widget->window,
+                                0, 0, 0, 0, -1, -1);
+               gdk_gc_unref (gc);
+      
+               gtk_widget_set_usize (combo->priv->tearoff_window,
+                                     widget->allocation.width,
+                                     widget->allocation.height);
+      
+               gdk_window_set_back_pixmap
+                       (combo->priv->tearoff_window->window, pixmap, FALSE);
+               gdk_drawable_unref (pixmap);
+       }
+}
+
+/**
+ * mygal_combo_popup_reparent
+ * @popup:       Popup
+ * @new_parent:  New parent
+ * @unrealize:   Unrealize popup if TRUE.
+ *
+ * Reparent the popup, taking care of the refcounting
+ *
+ * Compare with gtk_menu_reparent in gtk/gtkmenu.c
+ */
+static void 
+mygal_combo_popup_reparent (GtkWidget *popup, 
+                         GtkWidget *new_parent, 
+                         gboolean unrealize)
+{
+       GtkObject *object = GTK_OBJECT (popup);
+       gboolean was_floating = GTK_OBJECT_FLOATING (object);
+
+       g_object_ref (object);
+       gtk_object_sink (object);
+
+       if (unrealize) {
+               g_object_ref (object);
+               gtk_container_remove (GTK_CONTAINER (popup->parent), popup);
+               gtk_container_add (GTK_CONTAINER (new_parent), popup);
+               g_object_unref (object);
+       }
+       else
+               gtk_widget_reparent (GTK_WIDGET (popup), new_parent);
+       gtk_widget_set_usize (new_parent, -1, -1);
+  
+       if (was_floating)
+               GTK_OBJECT_SET_FLAGS (object, GTK_FLOATING);
+       else
+               g_object_unref (object);
+}
+
+/**
+ * cb_tearable_button_release
+ * @w:      Widget
+ * @event:  Event
+ * @combo:  Combo box
+ *
+ * Toggle tearoff state.
+ */
+static gboolean
+cb_tearable_button_release (GtkWidget *w, GdkEventButton *event,
+                           MygalComboBox *combo)
+{
+       GtkTearoffMenuItem *tearable;
+       
+       g_return_val_if_fail (w != NULL, FALSE);
+       g_return_val_if_fail (GTK_IS_TEAROFF_MENU_ITEM (w), FALSE);
+
+       tearable = GTK_TEAROFF_MENU_ITEM (w);
+       tearable->torn_off = !tearable->torn_off;
+
+       if (!combo->priv->torn_off) {
+               gboolean need_connect;
+                       
+               need_connect = (!combo->priv->tearoff_window);
+               mygal_combo_set_tearoff_state (combo, TRUE);
+               if (need_connect)
+                       g_signal_connect (combo->priv->tearoff_window,  
+                                         "delete_event",
+                                         G_CALLBACK (cb_popup_delete),
+                                         combo);
+       } else
+               mygal_combo_box_popup_hide_unconditional (combo);
+       
+       return TRUE;
+}
+
+static gboolean
+cb_popup_delete (GtkWidget *w, GdkEventAny *event, MygalComboBox *combo)
+{
+       mygal_combo_box_popup_hide_unconditional (combo);
+       return TRUE;
+}
+
+void
+mygal_combo_box_construct (MygalComboBox *combo_box, GtkWidget *display_widget, GtkWidget *pop_down_widget)
+{
+       GtkWidget *tearable;
+       GtkWidget *vbox;
+
+       g_return_if_fail (combo_box != NULL);
+       g_return_if_fail (MYGAL_IS_COMBO_BOX (combo_box));
+       g_return_if_fail (display_widget  != NULL);
+       g_return_if_fail (GTK_IS_WIDGET (display_widget));
+
+       GTK_BOX (combo_box)->spacing = 0;
+       GTK_BOX (combo_box)->homogeneous = FALSE;
+
+       combo_box->priv->pop_down_widget = pop_down_widget;
+       combo_box->priv->display_widget = NULL;
+
+       vbox = gtk_vbox_new (FALSE, 5);
+       tearable = gtk_tearoff_menu_item_new ();
+       g_signal_connect (tearable, "enter-notify-event",
+                         G_CALLBACK (cb_tearable_enter_leave),
+                         GINT_TO_POINTER (TRUE));
+       g_signal_connect (tearable, "leave-notify-event",
+                         G_CALLBACK (cb_tearable_enter_leave),
+                         GINT_TO_POINTER (FALSE));
+       g_signal_connect (tearable, "button-release-event",
+                         G_CALLBACK (cb_tearable_button_release),
+                         (gpointer) combo_box);
+       gtk_box_pack_start (GTK_BOX (vbox), tearable, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (vbox), pop_down_widget, TRUE, TRUE, 0);
+       combo_box->priv->tearable = tearable;
+
+       /*
+        * Finish setup
+        */
+       mygal_combo_box_set_display (combo_box, display_widget);
+
+       gtk_container_add (GTK_CONTAINER (combo_box->priv->frame), vbox);
+       gtk_widget_show_all (combo_box->priv->frame);
+}
+
+GtkWidget *
+mygal_combo_box_new (GtkWidget *display_widget, GtkWidget *optional_popdown)
+{
+       MygalComboBox *combo_box;
+
+       g_return_val_if_fail (display_widget  != NULL, NULL);
+       g_return_val_if_fail (GTK_IS_WIDGET (display_widget), NULL);
+
+       combo_box = g_object_new (MYGAL_COMBO_BOX_TYPE, NULL);
+       mygal_combo_box_construct (combo_box, display_widget, optional_popdown);
+       return GTK_WIDGET (combo_box);
+}
+
+void
+mygal_combo_box_set_arrow_relief (MygalComboBox *cc, GtkReliefStyle relief)
+{
+       g_return_if_fail (cc != NULL);
+       g_return_if_fail (MYGAL_IS_COMBO_BOX (cc));
+
+       gtk_button_set_relief (GTK_BUTTON (cc->priv->arrow_button), relief);
+}
+
+/**
+ * mygal_combo_box_set_title
+ * @combo: Combo box
+ * @title: Title
+ *
+ * Set a title to display over the tearoff window.
+ *
+ * FIXME:
+ *
+ * This should really change the title even when the popup is already torn off.
+ * I guess the tearoff window could attach a listener to title change or
+ * something. But I don't think we need the functionality, so I didn't bother
+ * to investigate.
+ */
+void       
+mygal_combo_box_set_title (MygalComboBox *combo,
+                        const gchar *title)
+{
+       g_return_if_fail (combo != NULL);
+       g_return_if_fail (MYGAL_IS_COMBO_BOX (combo));
+       
+       g_object_set_data_full (G_OBJECT (combo), "gtk-combo-title",
+                               g_strdup (title), (GDestroyNotify) g_free);
+}
+
+/**
+ * mygal_combo_box_set_arrow_sensitive
+ * @combo:  Combo box
+ * @sensitive:  Sensitivity value
+ *
+ * Toggle the sensitivity of the arrow button
+ */
+
+void
+mygal_combo_box_set_arrow_sensitive (MygalComboBox *combo,
+                                  gboolean sensitive)
+{
+       g_return_if_fail (combo != NULL);
+
+       gtk_widget_set_sensitive (combo->priv->arrow_button, sensitive);
+}
+
+/**
+ * mygal_combo_box_set_tearable:
+ * @combo: Combo box
+ * @tearable: whether to allow the @combo to be tearable
+ *
+ * controls whether the combo box's pop up widget can be torn off.
+ */
+void
+mygal_combo_box_set_tearable (MygalComboBox *combo, gboolean tearable)
+{
+       g_return_if_fail (combo != NULL);
+       g_return_if_fail (MYGAL_IS_COMBO_BOX (combo));
+
+       if (tearable){
+               gtk_widget_show (combo->priv->tearable);
+       } else {
+               mygal_combo_set_tearoff_state (combo, FALSE);
+               gtk_widget_hide (combo->priv->tearable);
+       }
+}
diff --git a/src/mygal/mygal-combo-box.h b/src/mygal/mygal-combo-box.h
new file mode 100644 (file)
index 0000000..e1785f2
--- /dev/null
@@ -0,0 +1,94 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * mygal-combo-box.h - a customizable combobox
+ * Copyright 2000, 2001, Ximian, Inc.
+ *
+ * Authors:
+ *   Miguel de Icaza <miguel@ximian.com>
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef _MYGAL_COMBO_BOX_H_
+#define _MYGAL_COMBO_BOX_H_
+
+#include <gtk/gtkhbox.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define MYGAL_COMBO_BOX_TYPE          (mygal_combo_box_get_type())
+#define MYGAL_COMBO_BOX(obj)         G_TYPE_CHECK_INSTANCE_CAST (obj, mygal_combo_box_get_type (), MygalComboBox)
+#define MYGAL_COMBO_BOX_CLASS(klass)  G_TYPE_CHECK_CLASS_CAST (klass, mygal_combo_box_get_type (), MygalComboBoxClass)
+#define MYGAL_IS_COMBO_BOX(obj)       G_TYPE_CHECK_INSTANCE_TYPE (obj, mygal_combo_box_get_type ())
+
+typedef struct _MygalComboBox       MygalComboBox;
+typedef struct _MygalComboBoxPrivate MygalComboBoxPrivate;
+typedef struct _MygalComboBoxClass   MygalComboBoxClass;
+
+struct _MygalComboBox {
+       GtkHBox hbox;
+       MygalComboBoxPrivate *priv;
+};
+
+struct _MygalComboBoxClass {
+       GtkHBoxClass parent_class;
+
+       GtkWidget *(*pop_down_widget) (MygalComboBox *cbox);
+
+       /*
+        * invoked when the popup has been hidden, if the signal
+        * returns TRUE, it means it should be killed from the
+        */ 
+       gboolean  *(*pop_down_done)   (MygalComboBox *cbox, GtkWidget *);
+
+       /*
+        * Notification signals.
+        */
+       void      (*pre_pop_down)     (MygalComboBox *cbox);
+       void      (*post_pop_hide)    (MygalComboBox *cbox);
+};
+
+GtkType    mygal_combo_box_get_type    (void);
+void       mygal_combo_box_construct   (MygalComboBox *combo_box,
+                                       GtkWidget   *display_widget,
+                                       GtkWidget   *optional_pop_down_widget);
+void       mygal_combo_box_get_pos     (MygalComboBox *combo_box, int *x, int *y);
+
+GtkWidget *mygal_combo_box_new         (GtkWidget *display_widget,
+                                       GtkWidget *optional_pop_down_widget);
+void       mygal_combo_box_popup_hide  (MygalComboBox *combo_box);
+
+void       mygal_combo_box_set_display (MygalComboBox *combo_box,
+                                       GtkWidget *display_widget);
+
+void       mygal_combo_box_set_title   (MygalComboBox *combo,
+                                       const gchar *title);
+
+void       mygal_combo_box_set_tearable        (MygalComboBox *combo,
+                                               gboolean tearable);
+void       mygal_combo_box_set_arrow_sensitive (MygalComboBox *combo,
+                                               gboolean sensitive);
+void       mygal_combo_box_set_arrow_relief    (MygalComboBox *cc,
+                                               GtkReliefStyle relief);
+#ifdef __cplusplus
+};
+#endif /* __cplusplus */
+
+#endif /* _MYGAL_COMBO_BOX_H_ */
diff --git a/src/mygal/widget-color-combo.c b/src/mygal/widget-color-combo.c
new file mode 100644 (file)
index 0000000..8f36545
--- /dev/null
@@ -0,0 +1,338 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * widget-color-combo.c - A color selector combo box
+ * Copyright 2000, 2001, Ximian, Inc.
+ *
+ * Authors:
+ *   Miguel de Icaza (miguel@kernel.org)
+ *   Dom Lachowicz (dominicl@seas.upenn.edu)
+ *
+ * Reworked and split up into a separate ColorPalette object:
+ *   Michael Levy (mlevy@genoscope.cns.fr)
+ *
+ * And later revised and polished by:
+ *   Almer S. Tigelaar (almer@gnome.org)
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include <config.h>
+
+#include <gtk/gtkentry.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkimage.h>
+#include "e-util.h"
+#include "e-colors.h"
+#include "widget-color-combo.h"
+
+enum {
+       CHANGED,
+       LAST_SIGNAL
+};
+
+static guint color_combo_signals [LAST_SIGNAL] = { 0, };
+
+#define PARENT_TYPE MYGAL_COMBO_BOX_TYPE
+static GObjectClass *color_combo_parent_class;
+
+#define make_color(CC,COL) (((COL) != NULL) ? (COL) : ((CC) ? ((CC)->default_color) : NULL))
+#define RGBA_TO_UINT(r,g,b,a)  ((((guint)(r))<<24)|(((guint)(g))<<16)|(((guint)(b))<<8)|(guint)(a))
+#define GDK_TO_UINT(c) RGBA_TO_UINT(((c).red>>8), ((c).green>>8), ((c).blue>>8), 0xff)
+
+#define PREVIEW_SIZE 20
+
+static void
+color_combo_set_color_internal (ColorCombo *cc, GdkColor *color)
+{
+       guint color_y, color_height;
+       guint height, width;
+       GdkPixbuf *pixbuf;
+       GdkPixbuf *color_pixbuf;
+       GdkColor *new_color;
+       GdkColor *outline_color;
+
+       new_color = make_color (cc,color);
+       /* If the new and the default are NULL draw an outline */
+       outline_color = (new_color) ? new_color : &e_dark_gray;
+
+       pixbuf = gtk_image_get_pixbuf (GTK_IMAGE (cc->preview_image));
+
+       if (!pixbuf)
+               return;
+
+       width = gdk_pixbuf_get_width (pixbuf);
+       height = gdk_pixbuf_get_height (pixbuf);
+
+       if (cc->preview_is_icon) {
+               color_y = height - 4;
+               color_height = 4;
+       }
+       else {
+               color_y = 0;
+               color_height = height;
+       }
+
+       color_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+                                      TRUE, 8,
+                                      width,
+                                      color_height);
+       gdk_pixbuf_fill (color_pixbuf, GDK_TO_UINT (*outline_color));
+       gdk_pixbuf_copy_area (color_pixbuf, 0, 0, width, color_height,
+                             pixbuf, 0, color_y);
+
+       if (new_color != NULL)
+               gdk_pixbuf_fill (color_pixbuf, GDK_TO_UINT (*new_color));
+       else
+               gdk_pixbuf_fill (color_pixbuf, 0xffffff00);
+       gdk_pixbuf_copy_area (color_pixbuf, 0, 0, width - 2, color_height -2,
+                             pixbuf, 1, color_y + 1);
+
+       g_object_unref (color_pixbuf);
+
+       gtk_widget_queue_draw (GTK_WIDGET (cc));
+}
+
+static void
+color_combo_class_init (GObjectClass *object_class)
+{
+       color_combo_parent_class = g_type_class_ref (PARENT_TYPE);
+
+       color_combo_signals [CHANGED] =
+               g_signal_new ("color_changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (ColorComboClass, color_changed),
+                             NULL, NULL,
+                             e_marshal_NONE__POINTER_BOOLEAN_BOOLEAN_BOOLEAN,
+                             G_TYPE_NONE, 4, G_TYPE_POINTER,
+                             G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
+}
+
+E_MAKE_TYPE (color_combo,
+            "ColorCombo",
+            ColorCombo,
+            color_combo_class_init,
+            NULL,
+            PARENT_TYPE)
+
+/*
+ * Fires signal "color_changed" with the current color as its param
+ */
+static void
+emit_color_changed (ColorCombo *cc, GdkColor *color,
+                   gboolean is_custom, gboolean by_user, gboolean is_default)
+{
+       g_signal_emit (cc,
+                      color_combo_signals [CHANGED], 0,
+                      color, is_custom, by_user, is_default);
+       mygal_combo_box_popup_hide (MYGAL_COMBO_BOX (cc));
+}
+
+static void
+cb_palette_color_changed (ColorPalette *P, GdkColor *color,
+                gboolean custom, gboolean by_user, gboolean is_default,
+                ColorCombo *cc)
+{
+       color_combo_set_color_internal (cc, color);
+       emit_color_changed (cc, color, custom, by_user, is_default);
+}
+
+static void
+preview_clicked (GtkWidget *button, ColorCombo *cc)
+{
+       gboolean is_default;
+       GdkColor *color = color_palette_get_current_color (cc->palette, &is_default);
+       emit_color_changed (cc, color, FALSE, TRUE, is_default);
+       if (color)
+               gdk_color_free (color);
+}
+
+static void
+cb_cust_color_clicked (GtkWidget *widget, ColorCombo *cc)
+{
+       mygal_combo_box_popup_hide (MYGAL_COMBO_BOX (cc));
+}
+
+/*
+ * Creates the color table
+ */
+static void
+color_table_setup (ColorCombo *cc,
+                  char const *no_color_label, ColorGroup *color_group)
+{
+       g_return_if_fail (cc != NULL);
+
+       /* Tell the palette that we will be changing it's custom colors */
+       cc->palette =
+               COLOR_PALETTE (color_palette_new (no_color_label,
+                                                 cc->default_color,
+                                                 color_group));
+
+       {
+               GtkWidget *picker = color_palette_get_color_picker (cc->palette);
+               g_signal_connect (picker, "clicked",
+                                 G_CALLBACK (cb_cust_color_clicked), cc);
+       }
+
+       g_signal_connect (cc->palette, "color_changed",
+                         G_CALLBACK (cb_palette_color_changed), cc);
+
+       gtk_widget_show_all (GTK_WIDGET (cc->palette));
+
+       return;
+}
+
+void
+color_combo_box_set_preview_relief (ColorCombo *cc, GtkReliefStyle relief)
+{
+       g_return_if_fail (cc != NULL);
+       g_return_if_fail (IS_COLOR_COMBO (cc));
+
+       gtk_button_set_relief (GTK_BUTTON (cc->preview_button), relief);
+}
+
+/*
+ * Where the actual construction goes on
+ */
+static void
+color_combo_construct (ColorCombo *cc, GdkPixbuf *icon,
+                      char const *no_color_label,
+                      ColorGroup *color_group)
+{
+       GdkColor *color;
+       GdkPixbuf *pixbuf = NULL;
+
+       g_return_if_fail (cc != NULL);
+       g_return_if_fail (IS_COLOR_COMBO (cc));
+
+       /*
+        * Our button with the gtk_image preview
+        */
+       cc->preview_button = gtk_button_new ();
+       cc->preview_is_icon = FALSE;
+       
+       if (icon)
+               /* use icon only if size > 4*4 */
+               if ((gdk_pixbuf_get_width (icon) > 4) && 
+                   (gdk_pixbuf_get_height (icon) > 4))
+               {
+                       cc->preview_is_icon = TRUE;
+                       pixbuf = gdk_pixbuf_copy (icon);
+               }
+       
+       if (pixbuf == NULL)
+               pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+                                        TRUE, 8, 
+                                        PREVIEW_SIZE, 
+                                        PREVIEW_SIZE);
+
+       cc->preview_image = gtk_image_new_from_pixbuf (pixbuf);
+       g_object_unref (pixbuf);
+
+       gtk_button_set_relief (GTK_BUTTON (cc->preview_button), GTK_RELIEF_NONE);
+       gtk_widget_show (cc->preview_image);
+       
+       gtk_container_add (GTK_CONTAINER (cc->preview_button), cc->preview_image);
+       g_signal_connect (cc->preview_button, "clicked",
+                         G_CALLBACK (preview_clicked), cc);
+
+       color_table_setup (cc, no_color_label, color_group);
+
+       gtk_widget_show_all (cc->preview_button);
+
+       mygal_combo_box_construct (MYGAL_COMBO_BOX (cc),
+                                  cc->preview_button,
+                                  GTK_WIDGET (cc->palette));
+
+       mygal_combo_box_set_tearable (MYGAL_COMBO_BOX (cc), FALSE);
+
+       color = color_palette_get_current_color (cc->palette, NULL);
+       color_combo_set_color_internal (cc, color);
+       if (color) gdk_color_free (color);
+}
+
+/* color_combo_get_color:
+ *
+ * Return current color, result must be freed with gdk_color_free !
+ */
+GdkColor *
+color_combo_get_color (ColorCombo *cc, gboolean *is_default)
+{
+       return color_palette_get_current_color (cc->palette, is_default);
+}
+
+/**
+ * color_combo_set_color
+ * @cc     The combo
+ * @color  The color
+ *
+ * Set the color of the combo to the given color. Causes the color_changed
+ * signal to be emitted.
+ */
+void
+color_combo_set_color (ColorCombo *cc, GdkColor *color)
+{
+       /* This will change the color on the palette than it will invoke
+        * cb_palette_color_changed which will call emit_color_changed and
+        * set_color_internal which will change the color on our preview and
+        * will let the users of the combo know that the current color has
+        * changed
+        */
+       if (color != NULL)
+               gdk_rgb_find_color (gtk_widget_get_colormap (GTK_WIDGET (cc)), color);
+       color_palette_set_current_color (cc->palette, color);
+}
+
+/**
+ * color_combo_set_color_to_default
+ * @cc  The combo
+ *
+ * Set the color of the combo to the default color. Causes the color_changed
+ * signal to be emitted.
+ */
+void
+color_combo_set_color_to_default (ColorCombo *cc)
+{
+       color_palette_set_color_to_default (cc->palette);
+}
+
+/**
+ * color_combo_new :
+ * icon : optionally NULL.
+ * , const char *no_color_label,
+ * Default constructor. Pass an optional icon and an optional label for the
+ * no/auto color button.
+ */
+GtkWidget *
+color_combo_new (GdkPixbuf *icon, char const *no_color_label,
+                GdkColor *default_color,
+                ColorGroup *color_group)
+{
+       ColorCombo *cc;
+
+       cc = g_object_new (COLOR_COMBO_TYPE, NULL);
+
+       if ( default_color )
+       {
+               cc->default_color = gdk_color_copy (default_color);
+       }
+
+       color_combo_construct (cc, icon, no_color_label, color_group);
+
+       return GTK_WIDGET (cc);
+}
diff --git a/src/mygal/widget-color-combo.h b/src/mygal/widget-color-combo.h
new file mode 100644 (file)
index 0000000..3fb283c
--- /dev/null
@@ -0,0 +1,86 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* 
+ * widget-color-combo.h - A color selector combo box
+ * Copyright 2000, 2001, Ximian, Inc.
+ *
+ * Authors:
+ *   Miguel de Icaza (miguel@kernel.org)
+ *   Dom Lachowicz (dominicl@seas.upenn.edu)
+ *
+ * Reworked and split up into a separate ColorPalette object:
+ *   Michael Levy (mlevy@genoscope.cns.fr)
+ *
+ * And later revised and polished by:
+ *   Almer S. Tigelaar (almer@gnome.org)
+ *
+ * Modified for gLabels by:
+ *   Jim Evins <evins@snaught.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License, version 2, as published by the Free Software Foundation.
+ *
+ * This 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef GNUMERIC_WIDGET_COLOR_COMBO_H
+#define GNUMERIC_WIDGET_COLOR_COMBO_H
+
+#include <gtk/gtkwidget.h>
+#include "mygal-combo-box.h"
+#include "color-palette.h"
+
+G_BEGIN_DECLS
+
+typedef struct _ColorCombo {
+       MygalComboBox     combo_box;
+
+       /*
+        * GtkImage where we display
+        */
+       GtkWidget       *preview_button;
+       GtkWidget       *preview_image;
+       gboolean        preview_is_icon;
+
+       ColorPalette    *palette;
+
+        GdkColor *default_color;
+       gboolean  trigger;
+} ColorCombo;
+
+typedef struct {
+       MygalComboBoxClass parent_class;
+
+       /* Signals emited by this widget */
+       void (* color_changed) (ColorCombo *color_combo, GdkColor *color,
+                               gboolean custom, gboolean by_user, gboolean is_default);
+} ColorComboClass;
+
+#define COLOR_COMBO_TYPE     (color_combo_get_type ())
+#define COLOR_COMBO(obj)     (G_TYPE_CHECK_INSTANCE_CAST((obj), COLOR_COMBO_TYPE, ColorCombo))
+#define COLOR_COMBO_CLASS(k) (G_TYPE_CHECK_CLASS_CAST(k), COLOR_COMBO_TYPE)
+#define IS_COLOR_COMBO(obj)  (G_TYPE_CHECK_INSTANCE_TYPE((obj), COLOR_COMBO_TYPE))
+
+GtkType    color_combo_get_type   (void);
+GtkWidget *color_combo_new        (GdkPixbuf   *icon,
+                                  char  const *no_color_label,
+                                  GdkColor    *default_color,
+                                  ColorGroup  *color_group);
+void       color_combo_set_color  (ColorCombo  *cc,
+                                  GdkColor    *color);
+void       color_combo_set_color_to_default (ColorCombo *cc);
+GdkColor  *color_combo_get_color  (ColorCombo  *cc, gboolean *is_default);
+
+void       color_combo_box_set_preview_relief (ColorCombo *cc, GtkReliefStyle relief);
+
+G_END_DECLS
+
+#endif /* GNUMERIC_WIDGET_COLOR_COMBO_H */
diff --git a/src/new-label-dialog.c b/src/new-label-dialog.c
new file mode 100644 (file)
index 0000000..b09de7f
--- /dev/null
@@ -0,0 +1,289 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  new-label-dialog.c:  New label dialog module
+ *
+ *  Copyright (C) 2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "new-label-dialog.h"
+
+#include <glib/gi18n.h>
+#include <glade/glade-xml.h>
+#include <gtk/gtkdialog.h>
+#include <gtk/gtkstock.h>
+
+#include "hig.h"
+#include "wdgt-media-select.h"
+#include "wdgt-rotate-label.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+struct _glNewLabelDialogPrivate {
+
+       GtkWidget *media_select;
+       GtkWidget *rotate_label;
+
+};
+
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void       gl_new_label_dialog_finalize        (GObject               *object);
+
+static void       gl_new_label_dialog_construct       (glNewLabelDialog      *dialog,
+                                                      GtkWindow             *win);
+
+static void       template_changed_cb                 (glWdgtMediaSelect     *select,
+                                                      gpointer               data);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glNewLabelDialog, gl_new_label_dialog, GTK_TYPE_DIALOG);
+
+static void
+gl_new_label_dialog_class_init (glNewLabelDialogClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_FILE, "");
+       
+       gl_new_label_dialog_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_new_label_dialog_finalize;          
+}
+
+static void
+gl_new_label_dialog_init (glNewLabelDialog *dialog)
+{
+       gl_debug (DEBUG_FILE, "START");
+
+       g_return_if_fail (GL_IS_NEW_LABEL_DIALOG (dialog));
+
+       dialog->priv = g_new0 (glNewLabelDialogPrivate, 1);
+
+       gtk_container_set_border_width (GTK_CONTAINER(dialog), GL_HIG_PAD1);
+
+       gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
+       gtk_dialog_add_buttons (GTK_DIALOG(dialog),
+                               GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                               GTK_STOCK_OK, GTK_RESPONSE_OK,
+                               NULL);
+       gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
+       gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+static void 
+gl_new_label_dialog_finalize (GObject *object)
+{
+       glNewLabelDialog* dialog = GL_NEW_LABEL_DIALOG (object);;
+       
+       gl_debug (DEBUG_FILE, "START");
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_NEW_LABEL_DIALOG (dialog));
+       g_return_if_fail (dialog->priv != NULL);
+
+       g_free (dialog->priv);
+
+       G_OBJECT_CLASS (gl_new_label_dialog_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_FILE, "END");
+
+}
+
+/*****************************************************************************/
+/* NEW object properties dialog.                                             */
+/*****************************************************************************/
+GtkWidget *
+gl_new_label_dialog_new (GtkWindow    *win)
+{
+       GtkWidget *dialog;
+
+       gl_debug (DEBUG_FILE, "");
+
+       dialog = GTK_WIDGET (g_object_new (GL_TYPE_NEW_LABEL_DIALOG, NULL));
+
+       gl_new_label_dialog_construct (GL_NEW_LABEL_DIALOG(dialog), win);
+
+       return dialog;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct dialog.                                              */
+/*--------------------------------------------------------------------------*/
+static void
+gl_new_label_dialog_construct (glNewLabelDialog   *dialog,
+                              GtkWindow          *win)
+{
+        GladeXML  *gui;
+       GtkWidget *vbox, *media_select_vbox, *rotate_label_vbox;
+       gchar     *name;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       gtk_window_set_transient_for (GTK_WINDOW (dialog), win);
+
+        gui = glade_xml_new (GLABELS_GLADE_DIR "new-label-dialog.glade",
+                             "new_label_dialog_vbox", NULL);
+
+        if (!gui) {
+                g_critical ("Could not open new-label-dialog.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+        vbox = glade_xml_get_widget (gui, "new_label_dialog_vbox");
+       gtk_box_pack_start (GTK_BOX( GTK_DIALOG (dialog)->vbox), vbox, FALSE, FALSE, 0);
+
+        media_select_vbox = glade_xml_get_widget (gui, "media_select_vbox");
+        rotate_label_vbox = glade_xml_get_widget (gui, "rotate_label_vbox");
+
+        g_object_unref (gui);
+
+       dialog->priv->media_select = gl_wdgt_media_select_new ();
+       gtk_box_pack_start (GTK_BOX (media_select_vbox),
+                           dialog->priv->media_select, FALSE, FALSE, 0);
+
+       dialog->priv->rotate_label = gl_wdgt_rotate_label_new ();
+       gtk_box_pack_start (GTK_BOX (rotate_label_vbox),
+                           dialog->priv->rotate_label, FALSE, FALSE, 0);
+
+       /* Sync template name from media select with rotate widget. */
+       name = gl_wdgt_media_select_get_name (GL_WDGT_MEDIA_SELECT (dialog->priv->media_select));
+       gl_wdgt_rotate_label_set_template_name (GL_WDGT_ROTATE_LABEL (dialog->priv->rotate_label),
+                                               name);
+
+       g_signal_connect (G_OBJECT (dialog->priv->media_select), "changed",
+                         G_CALLBACK (template_changed_cb), dialog);
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  New template changed callback.                                  */
+/*---------------------------------------------------------------------------*/
+static void
+template_changed_cb (glWdgtMediaSelect *select,
+                    gpointer           data)
+{
+       glNewLabelDialog  *dialog = GL_NEW_LABEL_DIALOG (data);
+       gchar             *name;
+
+       gl_debug (DEBUG_FILE, "START");
+
+       name = gl_wdgt_media_select_get_name (GL_WDGT_MEDIA_SELECT (select));
+
+       gl_wdgt_rotate_label_set_template_name (GL_WDGT_ROTATE_LABEL (dialog->priv->rotate_label),
+                                               name);
+
+       gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
+                                          GTK_RESPONSE_OK,
+                                          (name != NULL));
+
+       g_free (name);
+
+       gl_debug (DEBUG_FILE, "END");
+}
+
+/*****************************************************************************/
+/* Get template name.                                                        */
+/*****************************************************************************/
+gchar *
+gl_new_label_dialog_get_template_name (glNewLabelDialog *dialog)
+{
+       gchar *name;
+
+       name = gl_wdgt_media_select_get_name (GL_WDGT_MEDIA_SELECT (dialog->priv->media_select));
+
+       return name;
+}
+
+/*****************************************************************************/
+/* Set template name.                                                        */
+/*****************************************************************************/
+void
+gl_new_label_dialog_set_template_name (glNewLabelDialog *dialog,
+                                      gchar            *name)
+{
+       gl_wdgt_media_select_set_name (GL_WDGT_MEDIA_SELECT (dialog->priv->media_select), name);
+}
+
+/*****************************************************************************/
+/* Get current filter parameters.                                            */
+/*****************************************************************************/
+void
+gl_new_label_dialog_get_filter_parameters (glNewLabelDialog *dialog,
+                                          gchar           **page_size_id,
+                                          gchar           **category_id)
+{
+       gl_wdgt_media_select_get_filter_parameters (
+               GL_WDGT_MEDIA_SELECT (dialog->priv->media_select),
+               page_size_id, category_id);
+}
+
+/*****************************************************************************/
+/* Set current filter parameters.                                            */
+/*****************************************************************************/
+void
+gl_new_label_dialog_set_filter_parameters (glNewLabelDialog *dialog,
+                                          const gchar      *page_size_id,
+                                          const gchar      *category_id)
+{
+       gl_wdgt_media_select_set_filter_parameters (
+               GL_WDGT_MEDIA_SELECT (dialog->priv->media_select),
+               page_size_id, category_id);
+}
+
+/*****************************************************************************/
+/* Get rotate state.                                                         */
+/*****************************************************************************/
+gboolean
+gl_new_label_dialog_get_rotate_state (glNewLabelDialog *dialog)
+{
+       return gl_wdgt_rotate_label_get_state (
+               GL_WDGT_ROTATE_LABEL (dialog->priv->rotate_label));
+}
+
+/*****************************************************************************/
+/* Set rotate state.                                                         */
+/*****************************************************************************/
+void
+gl_new_label_dialog_set_rotate_state (glNewLabelDialog *dialog,
+                                     gboolean          state)
+{
+       gl_wdgt_rotate_label_set_state (
+               GL_WDGT_ROTATE_LABEL (dialog->priv->rotate_label), state);
+}
+
diff --git a/src/new-label-dialog.h b/src/new-label-dialog.h
new file mode 100644 (file)
index 0000000..a38a48d
--- /dev/null
@@ -0,0 +1,84 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  new-label-dialog.h:  New label dialog module header file
+ *
+ *  Copyright (C) 2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __NEW_LABEL_DIALOG_H__
+#define __NEW_LABEL_DIALOG_H__
+
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkdialog.h>
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_NEW_LABEL_DIALOG            (gl_new_label_dialog_get_type ())
+#define GL_NEW_LABEL_DIALOG(obj)            (GTK_CHECK_CAST ((obj), GL_TYPE_NEW_LABEL_DIALOG, glNewLabelDialog))
+#define GL_NEW_LABEL_DIALOG_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_NEW_LABEL_DIALOG, glNewLabelDialogClass))
+#define GL_IS_NEW_LABEL_DIALOG(obj)         (GTK_CHECK_TYPE ((obj), GL_TYPE_NEW_LABEL_DIALOG))
+#define GL_IS_NEW_LABEL_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_NEW_LABEL_DIALOG))
+#define GL_NEW_LABEL_DIALOG_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), GL_TYPE_NEW_LABEL_DIALOG, glNewLabelDialogClass))
+
+
+typedef struct _glNewLabelDialog         glNewLabelDialog;
+typedef struct _glNewLabelDialogClass    glNewLabelDialogClass;
+
+typedef struct _glNewLabelDialogPrivate  glNewLabelDialogPrivate;
+
+struct _glNewLabelDialog
+{
+       GtkDialog                parent_instance;
+
+       glNewLabelDialogPrivate *priv;
+
+};
+
+struct  _glNewLabelDialogClass
+{
+       GtkDialogClass           parent_class;
+};
+
+
+GType      gl_new_label_dialog_get_type              (void) G_GNUC_CONST;
+
+GtkWidget *gl_new_label_dialog_new                   (GtkWindow     *win);
+
+gchar     *gl_new_label_dialog_get_template_name     (glNewLabelDialog *dialog);
+
+void       gl_new_label_dialog_set_template_name     (glNewLabelDialog *dialog,
+                                                     gchar            *name);
+
+void       gl_new_label_dialog_get_filter_parameters (glNewLabelDialog *dialog,
+                                                     gchar           **page_size_id,
+                                                     gchar           **category_id);
+
+void       gl_new_label_dialog_set_filter_parameters (glNewLabelDialog *dialog,
+                                                     const gchar      *page_size_id,
+                                                     const gchar      *category_id);
+
+gboolean   gl_new_label_dialog_get_rotate_state      (glNewLabelDialog *dialog);
+
+void       gl_new_label_dialog_set_rotate_state      (glNewLabelDialog *dialog,
+                                                     gboolean          state);
+
+
+G_END_DECLS
+
+#endif
diff --git a/src/object-editor-bc-page.c b/src/object-editor-bc-page.c
new file mode 100644 (file)
index 0000000..0216d6c
--- /dev/null
@@ -0,0 +1,426 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtktogglebutton.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "mygal/widget-color-combo.h"
+#include "color.h"
+#include "util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void style_changed_cb     (glObjectEditor       *editor);
+static void bc_radio_toggled_cb  (glObjectEditor       *editor);
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare size page.                                             */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_bc_page (glObjectEditor       *editor)
+{
+       GList        *styles = NULL;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->bc_page_vbox =
+               glade_xml_get_widget (editor->priv->gui, "bc_page_vbox");
+       editor->priv->bc_style_combo =
+               glade_xml_get_widget (editor->priv->gui, "bc_style_combo");
+       editor->priv->bc_text_check =
+               glade_xml_get_widget (editor->priv->gui, "bc_text_check");
+       editor->priv->bc_cs_check =
+               glade_xml_get_widget (editor->priv->gui, "bc_cs_check");
+       editor->priv->bc_color_combo =
+               glade_xml_get_widget (editor->priv->gui, "bc_color_combo");
+       editor->priv->bc_key_combo = 
+               glade_xml_get_widget (editor->priv->gui, "bc_key_combo");       
+       editor->priv->bc_key_radio = 
+               glade_xml_get_widget (editor->priv->gui, "bc_key_radio");       
+       editor->priv->bc_color_radio = 
+               glade_xml_get_widget (editor->priv->gui, "bc_color_radio");     
+       editor->priv->data_format_label =
+               glade_xml_get_widget (editor->priv->gui, "data_format_label");
+       editor->priv->data_ex_label =
+               glade_xml_get_widget (editor->priv->gui, "data_ex_label");
+       editor->priv->data_digits_label =
+               glade_xml_get_widget (editor->priv->gui, "data_digits_label");
+       editor->priv->data_digits_spin =
+               glade_xml_get_widget (editor->priv->gui, "data_digits_spin");
+
+       editor->priv->data_format_fixed_flag = FALSE;
+
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->bc_style_combo));
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->bc_key_combo));
+
+       /* Load barcode styles */
+       styles = gl_barcode_get_styles_list ();
+       gl_util_combo_box_set_strings (GTK_COMBO_BOX(editor->priv->bc_style_combo),
+                                      styles);
+       gl_barcode_free_styles_list (styles);
+
+       /* Modify widgets */
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->bc_color_radio), TRUE);
+       gtk_widget_set_sensitive (editor->priv->bc_color_combo, TRUE);
+       gtk_widget_set_sensitive (editor->priv->bc_key_combo, FALSE);
+       
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->bc_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->bc_style_combo),
+                                 "changed",
+                                 G_CALLBACK (style_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->bc_text_check),
+                                 "toggled",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->bc_cs_check),
+                                 "toggled",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->bc_color_combo),
+                                 "color_changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->bc_key_combo),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->bc_color_radio),
+                                 "toggled",
+                                 G_CALLBACK (bc_radio_toggled_cb),
+                                 G_OBJECT (editor));                             
+       g_signal_connect_swapped (G_OBJECT (editor->priv->bc_key_radio),
+                                 "toggled",
+                                 G_CALLBACK (bc_radio_toggled_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->data_digits_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Callback for when style has changed.                           */
+/*--------------------------------------------------------------------------*/
+static void
+style_changed_cb (glObjectEditor       *editor)
+{
+        gchar          *style_string = NULL;
+       const gchar    *id;
+       gchar          *ex_string = NULL;
+       guint           digits;
+
+        if (editor->priv->stop_signals) return;
+
+        style_string =
+               gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->bc_style_combo));
+                                                                                
+        /* Don't emit if entry is empty. */
+        if ( *style_string != 0 ) {
+                id = gl_barcode_name_to_id (style_string);
+                                                                                
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(editor->priv->bc_text_check),
+                                             gl_barcode_can_text (id));
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(editor->priv->bc_cs_check),
+                                             gl_barcode_can_csum (id));
+                                                                                
+                gtk_widget_set_sensitive (editor->priv->bc_text_check,
+                                          gl_barcode_text_optional (id));
+                gtk_widget_set_sensitive (editor->priv->bc_cs_check,
+                                          gl_barcode_csum_optional (id));
+                                                                                
+               editor->priv->data_format_fixed_flag = !gl_barcode_can_freeform (id);
+               digits = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->data_digits_spin));
+               if (editor->priv->data_format_fixed_flag) {
+                       digits = gl_barcode_get_prefered_n(id);
+                       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->data_digits_spin), 
+                                                  digits);
+               }
+                                                                                
+               ex_string = gl_barcode_default_digits (id, digits);
+               gtk_label_set_text (GTK_LABEL(editor->priv->data_ex_label), ex_string);
+
+               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->data_literal_radio))) {
+                       gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
+                       gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
+                       gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
+                       gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
+               } else {
+                       gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
+                       gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
+                       gtk_widget_set_sensitive (editor->priv->data_digits_label,
+                                                 !editor->priv->data_format_fixed_flag);
+                       gtk_widget_set_sensitive (editor->priv->data_digits_spin,
+                                                 !editor->priv->data_format_fixed_flag);
+               }
+                /* Emit our "changed" signal */
+                g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        }
+                                                                                
+        g_free (style_string);
+        g_free (ex_string);
+}
+                                                                                
+/*****************************************************************************/
+/* Set barcode style.                                                        */
+/*****************************************************************************/
+void
+gl_object_editor_set_bc_style (glObjectEditor      *editor,
+                              gchar               *id,
+                              gboolean             text_flag,
+                              gboolean             checksum_flag,
+                              guint                format_digits)
+{
+       const gchar *style_string;
+       gchar       *ex_string;
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+        style_string = gl_barcode_id_to_name (id);
+       gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->bc_style_combo),
+                                          style_string);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->bc_text_check),
+                                      text_flag);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->bc_cs_check),
+                                      checksum_flag);
+
+       gtk_widget_set_sensitive (editor->priv->bc_text_check,
+                                 gl_barcode_text_optional (id));
+       gtk_widget_set_sensitive (editor->priv->bc_cs_check,
+                                 gl_barcode_csum_optional (id));
+
+       editor->priv->data_format_fixed_flag = !gl_barcode_can_freeform (id);
+
+       if (editor->priv->data_format_fixed_flag) {
+               format_digits = gl_barcode_get_prefered_n (id);
+       }
+
+       ex_string = gl_barcode_default_digits (id, format_digits);
+       gtk_label_set_text (GTK_LABEL(editor->priv->data_ex_label), ex_string);
+       g_free (ex_string);
+
+        gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->data_digits_spin), 
+                                  format_digits);
+
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->data_literal_radio))) {
+               gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
+        } else {
+               gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label,
+                                         !editor->priv->data_format_fixed_flag);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin,
+                                         !editor->priv->data_format_fixed_flag);
+       }
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query barcode style.                                                      */
+/*****************************************************************************/
+void
+gl_object_editor_get_bc_style (glObjectEditor      *editor,
+                              gchar              **id,
+                              gboolean            *text_flag,
+                              gboolean            *checksum_flag,
+                              guint               *format_digits)
+{
+        gchar *style_string;
+
+       gl_debug (DEBUG_EDITOR, "START");
+                                                                                
+        style_string =
+               gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->bc_style_combo));
+        *id = g_strdup (gl_barcode_name_to_id (style_string));
+                                                                                
+        *text_flag =
+            gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_text_check));
+                                                                                
+        *checksum_flag =
+            gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_cs_check));
+                                                                                
+
+       *format_digits =
+               gtk_spin_button_get_value (GTK_SPIN_BUTTON(editor->priv->data_digits_spin));
+
+        g_free (style_string);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set bc color.                                                             */
+/*****************************************************************************/
+void
+gl_object_editor_set_bc_color (glObjectEditor      *editor,
+                              gboolean             merge_flag,
+                              glColorNode         *color_node)
+{
+       GdkColor *gdk_color;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       gtk_widget_set_sensitive (editor->priv->bc_key_radio, merge_flag);
+
+       if ( color_node->color == GL_COLOR_NONE ) {
+
+               color_combo_set_color_to_default (COLOR_COMBO(editor->priv->bc_color_combo));
+
+       } else {
+
+               gdk_color = gl_color_to_gdk_color (color_node->color);
+               color_combo_set_color (COLOR_COMBO(editor->priv->bc_color_combo),
+                                          gdk_color);
+               g_free (gdk_color);
+       }
+       
+       if (!color_node->field_flag || !merge_flag) {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->bc_color_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->bc_color_combo, TRUE);
+               gtk_widget_set_sensitive (editor->priv->bc_key_combo, FALSE);
+               
+       } else {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->bc_key_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->bc_color_combo, FALSE);
+               gtk_widget_set_sensitive (editor->priv->bc_key_combo, TRUE);
+               
+               gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->bc_key_combo),
+                                                  color_node->key);
+       }       
+       
+        editor->priv->stop_signals = FALSE;
+       
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query bc color.                                                           */
+/*****************************************************************************/
+glColorNode*
+gl_object_editor_get_bc_color (glObjectEditor      *editor)
+{
+       GdkColor     *gdk_color;
+       glColorNode  *color_node;
+       gboolean      is_default;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       color_node = gl_color_node_new_default ();
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_key_radio))) {
+               color_node->field_flag = TRUE;
+               color_node->color = gl_prefs->default_line_color;
+               color_node->key = 
+                       gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->bc_key_combo));
+       } else {
+               color_node->field_flag = FALSE;
+               color_node->key = NULL;
+               gdk_color = color_combo_get_color (COLOR_COMBO(editor->priv->bc_color_combo),
+                                           &is_default);
+
+               if (is_default) {
+                       color_node->color = gl_prefs->default_line_color;
+               } else {
+                       color_node->color = gl_color_from_gdk_color (gdk_color);
+               }
+       }
+       
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return color_node;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  barcode color radio callback.                                  */
+/*--------------------------------------------------------------------------*/
+static void
+bc_radio_toggled_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+        gl_debug (DEBUG_EDITOR, "START");
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->bc_color_radio))) {
+                gtk_widget_set_sensitive (editor->priv->bc_color_combo, TRUE);
+                gtk_widget_set_sensitive (editor->priv->bc_key_combo, FALSE);
+    } else {
+                gtk_widget_set_sensitive (editor->priv->bc_color_combo, FALSE);
+                gtk_widget_set_sensitive (editor->priv->bc_key_combo, TRUE);
+               
+       }
+    /* Emit our "changed" signal */
+    g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+    gl_debug (DEBUG_EDITOR, "END");
+}
diff --git a/src/object-editor-data-page.c b/src/object-editor-data-page.c
new file mode 100644 (file)
index 0000000..1717845
--- /dev/null
@@ -0,0 +1,232 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtkeditable.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtktogglebutton.h>
+#include <string.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void data_radio_toggled_cb                (glObjectEditor        *editor);
+
+
+\f
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare data page.                                             */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_data_page (glObjectEditor *editor)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->data_page_vbox     = glade_xml_get_widget (editor->priv->gui,
+                                                                "data_page_vbox");
+       editor->priv->data_literal_radio = glade_xml_get_widget (editor->priv->gui,
+                                                                "data_literal_radio");
+       editor->priv->data_key_radio     = glade_xml_get_widget (editor->priv->gui,
+                                                                "data_key_radio");
+       editor->priv->data_text_entry    = glade_xml_get_widget (editor->priv->gui,
+                                                                "data_text_entry");
+       editor->priv->data_key_combo     = glade_xml_get_widget (editor->priv->gui,
+                                                                "data_key_combo");
+
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->data_key_combo));
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->data_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->data_text_entry),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->data_key_combo),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->data_literal_radio),
+                                 "toggled",
+                                 G_CALLBACK (data_radio_toggled_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->data_key_radio),
+                                 "toggled",
+                                 G_CALLBACK (data_radio_toggled_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  data radio callback.                                           */
+/*--------------------------------------------------------------------------*/
+static void
+data_radio_toggled_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+        gl_debug (DEBUG_WDGT, "START");
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->data_literal_radio))) {
+                gtk_widget_set_sensitive (editor->priv->data_text_entry, TRUE);
+                gtk_widget_set_sensitive (editor->priv->data_key_combo, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
+        } else {
+                gtk_widget_set_sensitive (editor->priv->data_text_entry, FALSE);
+                gtk_widget_set_sensitive (editor->priv->data_key_combo, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label,
+                                         !editor->priv->data_format_fixed_flag);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin,
+                                         !editor->priv->data_format_fixed_flag);
+       }
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        gl_debug (DEBUG_WDGT, "END");
+}
+
+/*****************************************************************************/
+/* Set data.                                                                 */
+/*****************************************************************************/
+void
+gl_object_editor_set_data (glObjectEditor      *editor,
+                           gboolean            merge_flag,
+                           glTextNode         *text_node)
+{
+        gint pos;
+        gl_debug (DEBUG_EDITOR, "START");
+        editor->priv->stop_signals = TRUE;
+
+        gtk_widget_set_sensitive (editor->priv->data_key_radio, merge_flag);
+        if (!text_node->field_flag || !merge_flag) {
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                              (editor->priv->data_literal_radio), TRUE); 
+                gtk_widget_set_sensitive (editor->priv->data_text_entry, TRUE);
+                gtk_widget_set_sensitive (editor->priv->data_key_combo, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_format_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin, FALSE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label, FALSE);
+                gtk_editable_delete_text (GTK_EDITABLE (editor->priv->data_text_entry), 0, -1);
+                pos = 0;
+                if (text_node->data != NULL ) {
+                       gtk_editable_insert_text (GTK_EDITABLE (editor->priv->data_text_entry),
+                                                 text_node->data,
+                                                 strlen (text_node->data),
+                                                 &pos);
+                }
+
+        } else {
+                                                                                
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                              (editor->priv->data_key_radio), TRUE);
+                                                                                
+                gtk_widget_set_sensitive (editor->priv->data_text_entry, FALSE);
+                gtk_widget_set_sensitive (editor->priv->data_key_combo, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_format_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_ex_label, TRUE);
+               gtk_widget_set_sensitive (editor->priv->data_digits_label,
+                                         !editor->priv->data_format_fixed_flag);
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin,
+                                         !editor->priv->data_format_fixed_flag);
+                                                                                
+
+               gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->data_key_combo),
+                                                  text_node->data);
+        }
+                                                                                
+
+        editor->priv->stop_signals = FALSE;
+
+        gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query data.                                                              */
+/*****************************************************************************/
+glTextNode *
+gl_object_editor_get_data (glObjectEditor      *editor)
+{
+        glTextNode *text_node;
+        gl_debug (DEBUG_EDITOR, "START");
+        text_node = g_new0(glTextNode,1);
+        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->data_literal_radio))) {
+                text_node->field_flag = FALSE;
+                text_node->data =
+                    gtk_editable_get_chars (GTK_EDITABLE (editor->priv->data_text_entry),
+                                            0, -1);
+        } else {
+                text_node->field_flag = TRUE;
+                text_node->data =
+                       gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->data_key_combo));
+        }
+       gl_debug (DEBUG_EDITOR, "text_node: field_flag=%d, data=%s",
+                 text_node->field_flag, text_node->data);
+
+        gl_debug (DEBUG_EDITOR, "END");
+        return text_node;
+}
diff --git a/src/object-editor-edit-page.c b/src/object-editor-edit-page.c
new file mode 100644 (file)
index 0000000..0a21e8d
--- /dev/null
@@ -0,0 +1,133 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtktextview.h>
+#include <gtk/gtkcombobox.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "mygal/widget-color-combo.h"
+#include "color.h"
+#include "util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void insert_button_cb (glObjectEditor  *editor);
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare size page.                                             */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_edit_page (glObjectEditor       *editor)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->edit_page_vbox =
+               glade_xml_get_widget (editor->priv->gui, "edit_page_vbox");
+       editor->priv->edit_text_view =
+               glade_xml_get_widget (editor->priv->gui, "edit_text_view");
+       editor->priv->edit_key_label =
+               glade_xml_get_widget (editor->priv->gui, "edit_key_label");
+       editor->priv->edit_key_combo =
+               glade_xml_get_widget (editor->priv->gui, "edit_key_combo");
+       editor->priv->edit_insert_field_button =
+               glade_xml_get_widget (editor->priv->gui, "edit_insert_field_button");
+
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->edit_key_combo));
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->edit_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->edit_insert_field_button),
+                                 "clicked",
+                                 G_CALLBACK (insert_button_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Alignment togglebutton callback.                               */
+/*--------------------------------------------------------------------------*/
+static void
+insert_button_cb (glObjectEditor  *editor)
+{
+        GtkTextBuffer *buffer;
+        gchar *key, *field;
+        gl_debug (DEBUG_EDITOR, "START");
+       key = gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->edit_key_combo));
+        field = g_strdup_printf ("${%s}", key);
+        gl_debug (DEBUG_WDGT, "Inserting %s", field);
+        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editor->priv->edit_text_view));
+        gtk_text_buffer_insert_at_cursor (buffer, field, -1);
+        g_free (field);
+        g_free (key);
+        gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set text buffer as model for text view/editor.                            */
+/*****************************************************************************/
+void
+gl_object_editor_set_text_buffer (glObjectEditor      *editor,
+                                 GtkTextBuffer       *buffer)
+{
+        gl_debug (DEBUG_EDITOR, "START");
+
+        gtk_text_view_set_buffer (GTK_TEXT_VIEW(editor->priv->edit_text_view), buffer);
+
+        gl_debug (DEBUG_EDITOR, "END");
+}
+
diff --git a/src/object-editor-fill-page.c b/src/object-editor-fill-page.c
new file mode 100644 (file)
index 0000000..4daedab
--- /dev/null
@@ -0,0 +1,224 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkcombobox.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "mygal/widget-color-combo.h"
+#include "color.h"
+#include "util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void fill_radio_toggled_cb                (glObjectEditor        *editor);
+
+\f
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare fill page.                                             */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_fill_page (glObjectEditor *editor)
+{
+       GdkColor *gdk_color;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->fill_page_vbox   = glade_xml_get_widget (editor->priv->gui,
+                                                              "fill_page_vbox");
+       editor->priv->fill_color_combo = glade_xml_get_widget (editor->priv->gui,
+                                                              "fill_color_combo");
+       editor->priv->fill_key_combo = glade_xml_get_widget (editor->priv->gui,
+                                                               "fill_key_combo");      
+       editor->priv->fill_key_radio = glade_xml_get_widget (editor->priv->gui,
+                                                               "fill_key_radio");      
+       editor->priv->fill_color_radio = glade_xml_get_widget (editor->priv->gui,
+                                                               "fill_color_radio");    
+
+       
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->fill_key_combo));
+
+       /* Modify widgets based on configuration */
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->fill_color_radio), TRUE);
+       gtk_widget_set_sensitive (editor->priv->fill_color_combo, TRUE);
+       gtk_widget_set_sensitive (editor->priv->fill_key_combo, FALSE);
+       gdk_color = gl_color_to_gdk_color (gl_prefs->default_fill_color);
+       color_combo_set_color (COLOR_COMBO(editor->priv->fill_color_combo), gdk_color);
+       g_free (gdk_color);
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->fill_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->fill_color_combo),
+                                 "color_changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->fill_key_combo),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->fill_color_radio),
+                                 "toggled",
+                                 G_CALLBACK (fill_radio_toggled_cb),
+                                 G_OBJECT (editor));                             
+       g_signal_connect_swapped (G_OBJECT (editor->priv->fill_key_radio),
+                                 "toggled",
+                                 G_CALLBACK (fill_radio_toggled_cb),
+                                 G_OBJECT (editor));                             
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set fill color.                                                           */
+/*****************************************************************************/
+void
+gl_object_editor_set_fill_color (glObjectEditor      *editor,
+                                gboolean             merge_flag,
+                                glColorNode         *color_node)
+{
+       GdkColor *gdk_color;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       gtk_widget_set_sensitive (editor->priv->fill_key_radio, merge_flag);
+
+       if ( color_node->color == GL_COLOR_NONE ) {
+
+               color_combo_set_color_to_default (COLOR_COMBO(editor->priv->fill_color_combo));
+
+       } else {
+
+               gdk_color = gl_color_to_gdk_color (color_node->color);
+               color_combo_set_color (COLOR_COMBO(editor->priv->fill_color_combo),
+                                          gdk_color);
+               g_free (gdk_color);
+
+       }
+       
+       if (!color_node->field_flag || !merge_flag) {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->fill_color_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->fill_color_combo, TRUE);
+               gtk_widget_set_sensitive (editor->priv->fill_key_combo, FALSE);
+               
+       } else {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->fill_key_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->fill_color_combo, FALSE);
+               gtk_widget_set_sensitive (editor->priv->fill_key_combo, TRUE);
+               
+               gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->fill_key_combo),
+                                                  color_node->key);
+       }
+       
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query fill color.                                                         */
+/*****************************************************************************/
+glColorNode*
+gl_object_editor_get_fill_color (glObjectEditor      *editor)
+{
+        GdkColor    *gdk_color;
+        gboolean     is_default;
+       glColorNode *color_node;
+       gl_debug (DEBUG_EDITOR, "START");
+
+       color_node = gl_color_node_new_default ();
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->fill_key_radio))) {
+               color_node->field_flag = TRUE;
+               color_node->key = 
+                       gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->fill_key_combo));
+    } else {
+               color_node->field_flag = FALSE;
+               color_node->key = NULL;
+               gdk_color = color_combo_get_color (COLOR_COMBO(editor->priv->fill_color_combo),
+                                           &is_default);
+
+               if (!is_default) {
+               color_node->color = gl_color_from_gdk_color (gdk_color);
+        }
+       }
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return color_node;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  fill radio callback.                                           */
+/*--------------------------------------------------------------------------*/
+static void
+fill_radio_toggled_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+        gl_debug (DEBUG_EDITOR, "START");
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->fill_color_radio))) {
+                gtk_widget_set_sensitive (editor->priv->fill_color_combo, TRUE);
+                gtk_widget_set_sensitive (editor->priv->fill_key_combo, FALSE);
+    } else {
+                gtk_widget_set_sensitive (editor->priv->fill_color_combo, FALSE);
+                gtk_widget_set_sensitive (editor->priv->fill_key_combo, TRUE);
+               
+       }
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        gl_debug (DEBUG_EDITOR, "END");
+}
diff --git a/src/object-editor-image-page.c b/src/object-editor-image-page.c
new file mode 100644 (file)
index 0000000..1433913
--- /dev/null
@@ -0,0 +1,350 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtkimage.h>
+#include <gtk/gtkfilechooserbutton.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtktogglebutton.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void img_radio_toggled_cb                (glObjectEditor        *editor);
+
+static void update_preview_cb                   (GtkFileChooser *file_chooser,
+                                                gpointer        data);
+static void add_image_filters_to_chooser        (GtkFileChooser *file_chooser);
+
+static void img_selection_changed_cb (glObjectEditor *editor);
+
+\f
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare image page.                                             */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_image_page (glObjectEditor *editor)
+{
+       GtkWidget     *preview;
+
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->img_page_vbox    = glade_xml_get_widget (editor->priv->gui,
+                                                              "img_page_vbox");
+       editor->priv->img_file_radio   = glade_xml_get_widget (editor->priv->gui,
+                                                              "img_file_radio");
+       editor->priv->img_key_radio    = glade_xml_get_widget (editor->priv->gui,
+                                                              "img_key_radio");
+       editor->priv->img_file_button  = glade_xml_get_widget (editor->priv->gui,
+                                                              "img_file_button");
+       editor->priv->img_key_combo    = glade_xml_get_widget (editor->priv->gui,
+                                                              "img_key_combo");
+
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->img_key_combo));
+
+       /* Modify file button properties. */
+       add_image_filters_to_chooser (GTK_FILE_CHOOSER (editor->priv->img_file_button));
+       preview = gtk_image_new ();
+       gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (editor->priv->img_file_button), preview);
+       g_signal_connect (G_OBJECT (editor->priv->img_file_button),
+                         "update-preview",
+                         G_CALLBACK (update_preview_cb), preview);
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->img_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->img_file_button),
+                                 "selection-changed",
+                                 G_CALLBACK (img_selection_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->img_key_combo),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->img_file_radio),
+                                 "toggled",
+                                 G_CALLBACK (img_radio_toggled_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->img_key_radio),
+                                 "toggled",
+                                 G_CALLBACK (img_radio_toggled_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  image radio callback.                                          */
+/*--------------------------------------------------------------------------*/
+static void
+img_radio_toggled_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+        gl_debug (DEBUG_WDGT, "START");
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->img_file_radio))) {
+                gtk_widget_set_sensitive (editor->priv->img_file_button, TRUE);
+                gtk_widget_set_sensitive (editor->priv->img_key_combo, FALSE);
+        } else {
+                gtk_widget_set_sensitive (editor->priv->img_file_button, FALSE);
+                gtk_widget_set_sensitive (editor->priv->img_key_combo, TRUE);
+        }
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        gl_debug (DEBUG_WDGT, "END");
+}
+
+/*****************************************************************************/
+/* Set image.                                                                */
+/*****************************************************************************/
+void
+gl_object_editor_set_image (glObjectEditor      *editor,
+                           gboolean             merge_flag,
+                           glTextNode          *text_node)
+{
+        gl_debug (DEBUG_EDITOR, "START");
+        editor->priv->stop_signals = TRUE;
+
+        gtk_widget_set_sensitive (editor->priv->img_key_radio, merge_flag);
+        if (!text_node->field_flag || !merge_flag) {
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                              (editor->priv->img_file_radio), TRUE); 
+                gtk_widget_set_sensitive (editor->priv->img_file_button, TRUE);
+                gtk_widget_set_sensitive (editor->priv->img_key_combo, FALSE);
+                if (text_node->data != NULL ) {
+                       gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(editor->priv->img_file_button),
+                                                       text_node->data);
+                } else {
+                       gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER(editor->priv->img_file_button));
+                }
+        } else {
+                                                                                
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                              (editor->priv->img_key_radio), TRUE);
+                                                                                
+                gtk_widget_set_sensitive (editor->priv->img_file_button, FALSE);
+                gtk_widget_set_sensitive (editor->priv->img_key_combo, TRUE);
+                                                                                
+               gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->img_key_combo),
+                                                  text_node->data);
+        }
+                                                                                
+        editor->priv->stop_signals = FALSE;
+                                                                                
+        gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query image.                                                              */
+/*****************************************************************************/
+glTextNode *
+gl_object_editor_get_image (glObjectEditor      *editor)
+{
+        glTextNode *text_node;
+        gl_debug (DEBUG_EDITOR, "START");
+        text_node = g_new0(glTextNode,1);
+        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->img_file_radio))) {
+                text_node->field_flag = FALSE;
+                text_node->data =
+                       gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(editor->priv->img_file_button));
+        } else {
+                text_node->field_flag = TRUE;
+                text_node->data =
+                       gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->img_key_combo));
+        }
+       gl_debug (DEBUG_EDITOR, "text_node: field_flag=%d, data=%s",
+                 text_node->field_flag, text_node->data);
+
+        gl_debug (DEBUG_EDITOR, "END");
+        return text_node;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Update preview image.                                          */
+/*--------------------------------------------------------------------------*/
+static void
+update_preview_cb (GtkFileChooser *file_chooser, gpointer data)
+{
+        GtkWidget *preview;
+        char *filename;
+        GdkPixbuf *pixbuf;
+        gboolean have_preview;
+
+        preview = GTK_WIDGET (data);
+        filename = gtk_file_chooser_get_preview_filename (file_chooser);
+
+        if (filename) {
+                pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL);
+                have_preview = (pixbuf != NULL);
+                g_free (filename);
+
+                gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf);
+                if (pixbuf)
+                        gdk_pixbuf_unref (pixbuf);
+
+                gtk_file_chooser_set_preview_widget_active (file_chooser,
+                                                            have_preview);
+        } else {
+                gtk_file_chooser_set_preview_widget_active (file_chooser, FALSE);
+        }
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add filters to file chooser.                                   */
+/*           Based on eog's eog_file_selection_add_filter().                */
+/*--------------------------------------------------------------------------*/
+static void
+add_image_filters_to_chooser (GtkFileChooser *chooser)
+{
+       GtkFileFilter *all_file_filter;
+       GtkFileFilter *all_img_filter;
+       GSList        *formats;
+       GSList        *it;
+       GtkFileFilter *filter;
+       GSList        *filters = NULL;
+       gchar        **mime_types, **pattern, *tmp;
+       int            i;
+
+       /* All Files Filter */
+       all_file_filter = gtk_file_filter_new ();
+       gtk_file_filter_set_name (all_file_filter, _("All Files"));
+       gtk_file_filter_add_pattern (all_file_filter, "*");
+
+       /* All Image Filter */
+       all_img_filter = gtk_file_filter_new ();
+       gtk_file_filter_set_name (all_img_filter, _("All Images"));
+
+       /* Individual image filters */
+       formats = gdk_pixbuf_get_formats ();
+       for (it = formats; it != NULL; it = it->next) {
+               gchar *filter_name;
+               GdkPixbufFormat *format;
+               filter = gtk_file_filter_new ();
+               gchar *description, *name;
+
+               format = (GdkPixbufFormat*) it->data;
+
+               /* Filter name: First description then file extension, eg. "The PNG-Format (*.png)".*/
+               description = gdk_pixbuf_format_get_description (format);
+               name = gdk_pixbuf_format_get_name (format);
+               filter_name = g_strdup_printf (_("%s (*.%s)"), description, name);
+               g_free (description);
+               g_free (name);
+               gtk_file_filter_set_name (filter, filter_name);
+               g_free (filter_name);
+
+               mime_types = gdk_pixbuf_format_get_mime_types ((GdkPixbufFormat *) it->data);
+               for (i = 0; mime_types[i] != NULL; i++) {
+                       gtk_file_filter_add_mime_type (filter, mime_types[i]);
+                       gtk_file_filter_add_mime_type (all_img_filter, mime_types[i]);
+               }
+               g_strfreev (mime_types);
+               pattern = gdk_pixbuf_format_get_extensions ((GdkPixbufFormat *) it->data);
+               for (i = 0; pattern[i] != NULL; i++) {
+                       tmp = g_strconcat ("*.", pattern[i], NULL);
+                       gtk_file_filter_add_pattern (filter, tmp);
+                       gtk_file_filter_add_pattern (all_img_filter, tmp);
+                       g_free (tmp);
+               }
+               g_strfreev (pattern);
+
+               filters = g_slist_prepend (filters, filter);
+       }
+       g_slist_free (formats);
+
+       /* Add filter to filechooser */
+       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), all_file_filter);
+       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), all_img_filter);
+       gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), all_img_filter);
+
+       for (it = filters; it != NULL; it = it->next) {
+               gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser),
+                                            GTK_FILE_FILTER (it->data));
+       }
+       g_slist_free (filters);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE. Selection changed callback.                                     */
+/*--------------------------------------------------------------------------*/
+static void
+img_selection_changed_cb (glObjectEditor *editor)
+{
+        gchar *filename;
+
+        if (editor->priv->stop_signals) return;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(editor->priv->img_file_button));
+        if (filename != NULL)
+        {
+                /* Emit our "changed" signal */
+                g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        }
+        g_free (filename);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
diff --git a/src/object-editor-line-page.c b/src/object-editor-line-page.c
new file mode 100644 (file)
index 0000000..c2f6450
--- /dev/null
@@ -0,0 +1,271 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtktogglebutton.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "mygal/widget-color-combo.h"
+#include "color.h"
+#include "util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+static void line_radio_toggled_cb               (glObjectEditor        *editor);
+
+\f
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare line page.                                             */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_line_page (glObjectEditor *editor)
+{
+       GdkColor     *gdk_color;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->line_page_vbox   = glade_xml_get_widget (editor->priv->gui,
+                                                              "line_page_vbox");
+       editor->priv->line_width_spin  = glade_xml_get_widget (editor->priv->gui,
+                                                              "line_width_spin");
+       editor->priv->line_color_combo = glade_xml_get_widget (editor->priv->gui,
+                                                              "line_color_combo");
+       editor->priv->line_key_combo = glade_xml_get_widget (editor->priv->gui,
+                                                               "line_key_combo");      
+       editor->priv->line_key_radio = glade_xml_get_widget (editor->priv->gui,
+                                                               "line_key_radio");      
+       editor->priv->line_color_radio = glade_xml_get_widget (editor->priv->gui,
+                                                               "line_color_radio");    
+
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->line_key_combo));
+
+       /* Modify widgets based on configuration */
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->line_color_radio), TRUE);
+       gtk_widget_set_sensitive (editor->priv->line_color_combo, TRUE);
+    gtk_widget_set_sensitive (editor->priv->line_key_combo, FALSE);    
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->line_width_spin),
+                                  gl_prefs->default_line_width);
+       gdk_color = gl_color_to_gdk_color (gl_prefs->default_line_color);
+       color_combo_set_color (COLOR_COMBO(editor->priv->line_color_combo), gdk_color);
+       g_free (gdk_color);
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->line_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->line_width_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->line_color_combo),
+                                 "color_changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->line_key_combo),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->line_color_radio),
+                                 "toggled",
+                                 G_CALLBACK (line_radio_toggled_cb),
+                                 G_OBJECT (editor));                             
+       g_signal_connect_swapped (G_OBJECT (editor->priv->line_key_radio),
+                                 "toggled",
+                                 G_CALLBACK (line_radio_toggled_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set line width.                                                           */
+/*****************************************************************************/
+void
+gl_object_editor_set_line_width (glObjectEditor      *editor,
+                                gdouble              width)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       /* Set widget values */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->line_width_spin),
+                                  width);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query line width.                                                         */
+/*****************************************************************************/
+gdouble
+gl_object_editor_get_line_width (glObjectEditor      *editor)
+{
+       gdouble w;
+       gl_debug (DEBUG_EDITOR, "START");
+
+       w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(editor->priv->line_width_spin));
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return w;
+}
+
+/*****************************************************************************/
+/* Set line color.                                                           */
+/*****************************************************************************/
+void
+gl_object_editor_set_line_color (glObjectEditor      *editor,
+                                gboolean             merge_flag,
+                                glColorNode         *color_node)
+{
+       GdkColor *gdk_color;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_EDITOR, "color field %s(%d) / %X", color_node->key, color_node->field_flag, color_node->color);
+       gtk_widget_set_sensitive (editor->priv->line_key_radio, merge_flag);
+
+       if ( color_node->color == GL_COLOR_NONE ) {
+
+               color_combo_set_color_to_default (COLOR_COMBO(editor->priv->line_color_combo));
+
+       } else {
+
+               gdk_color = gl_color_to_gdk_color (color_node->color);
+               color_combo_set_color (COLOR_COMBO(editor->priv->line_color_combo),
+                                          gdk_color);
+               g_free (gdk_color);
+
+       }       
+       
+       if (!color_node->field_flag || !merge_flag) {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->line_color_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->line_color_combo, TRUE);
+               gtk_widget_set_sensitive (editor->priv->line_key_combo, FALSE);
+               
+       } else {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->line_key_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->line_color_combo, FALSE);
+               gtk_widget_set_sensitive (editor->priv->line_key_combo, TRUE);
+               
+               gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->line_key_combo),
+                                                  color_node->key);
+       }
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query line color.                                                         */
+/*****************************************************************************/
+glColorNode*
+gl_object_editor_get_line_color (glObjectEditor      *editor)
+{
+        GdkColor    *gdk_color;
+        gboolean     is_default;
+       glColorNode *color_node;
+       gl_debug (DEBUG_EDITOR, "START");
+
+       color_node = gl_color_node_new_default ();
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->line_key_radio))) {
+               color_node->field_flag = TRUE;
+               color_node->key = 
+                       gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->line_key_combo));
+    } else {
+               color_node->field_flag = FALSE;
+               color_node->key = NULL;
+               gdk_color = color_combo_get_color (COLOR_COMBO(editor->priv->line_color_combo),
+                                           &is_default);
+
+               if (!is_default) {
+               color_node->color = gl_color_from_gdk_color (gdk_color);
+        }
+       }
+       
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return color_node;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  line color radio callback.                                     */
+/*--------------------------------------------------------------------------*/
+static void
+line_radio_toggled_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+        gl_debug (DEBUG_EDITOR, "START");
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->line_color_radio))) {
+                gtk_widget_set_sensitive (editor->priv->line_color_combo, TRUE);
+                gtk_widget_set_sensitive (editor->priv->line_key_combo, FALSE);
+        } else {
+                gtk_widget_set_sensitive (editor->priv->line_color_combo, FALSE);
+                gtk_widget_set_sensitive (editor->priv->line_key_combo, TRUE);
+               
+       }
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        gl_debug (DEBUG_EDITOR, "END");
+}
diff --git a/src/object-editor-lsize-page.c b/src/object-editor-lsize-page.c
new file mode 100644 (file)
index 0000000..d87c247
--- /dev/null
@@ -0,0 +1,259 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkspinbutton.h>
+#include <math.h>
+
+#include "prefs.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+#define LENGTH(x,y) sqrt( (x)*(x) + (y)*(y) )
+#define ANGLE(x,y)  ( (180.0/G_PI)*atan2( -(y), (x) ) )
+#define COMP_X(l,a) ( (l) * cos( (G_PI/180.0)*(a) ) )
+#define COMP_Y(l,a) ( -(l) * sin( (G_PI/180.0)*(a) ) )
+                                                                                
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+
+\f
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare line size page.                                        */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_lsize_page (glObjectEditor       *editor)
+{
+       const gchar  *units_string;
+       gdouble       climb_rate;
+       gint          digits;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->lsize_page_vbox =
+               glade_xml_get_widget (editor->priv->gui, "lsize_page_vbox");
+       editor->priv->lsize_r_spin =
+               glade_xml_get_widget (editor->priv->gui, "lsize_r_spin");
+       editor->priv->lsize_theta_spin =
+               glade_xml_get_widget (editor->priv->gui, "lsize_theta_spin");
+       editor->priv->lsize_r_units_label =
+               glade_xml_get_widget (editor->priv->gui, "lsize_r_units_label");
+
+       /* Get configuration information */
+       units_string = gl_prefs_get_units_string ();
+       editor->priv->units_per_point = gl_prefs_get_units_per_point ();
+       climb_rate = gl_prefs_get_units_step_size ();
+       digits = gl_prefs_get_units_precision ();
+
+       /* Modify widgets based on configuration */
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->lsize_r_spin), digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->lsize_r_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_label_set_text (GTK_LABEL(editor->priv->lsize_r_units_label), units_string);
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->lsize_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->lsize_r_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->lsize_theta_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set line size.                                                            */
+/*****************************************************************************/
+void
+gl_object_editor_set_lsize (glObjectEditor      *editor,
+                           gdouble              dx,
+                           gdouble              dy)
+{
+       gdouble r, theta;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       /* save a copy in internal units */
+       editor->priv->dx = dx;
+       editor->priv->dy = dy;
+
+       /* convert internal units to displayed units */
+       gl_debug (DEBUG_EDITOR, "internal dx,dy = %g, %g", dx, dy);
+       dx *= editor->priv->units_per_point;
+       dy *= editor->priv->units_per_point;
+       gl_debug (DEBUG_EDITOR, "display dx,dy = %g, %g", dx, dy);
+
+       r     = LENGTH (dx, dy);
+       theta = ANGLE (dx, dy);
+
+       /* Set widget values */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->lsize_r_spin), r);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->lsize_theta_spin),
+                                  theta);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set maximum line size.                                                    */
+/*****************************************************************************/
+void
+gl_object_editor_set_max_lsize (glObjectEditor      *editor,
+                               gdouble              dx_max,
+                               gdouble              dy_max)
+{
+       gdouble tmp;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        if (editor->priv->lsize_page_vbox)
+        {
+
+                editor->priv->stop_signals = TRUE;
+
+                /* save a copy in internal units */
+                editor->priv->dx_max = dx_max;
+                editor->priv->dy_max = dy_max;
+
+                /* convert internal units to displayed units */
+                gl_debug (DEBUG_EDITOR, "internal dx_max,dy_max = %g, %g", dx_max, dy_max);
+                dx_max *= editor->priv->units_per_point;
+                dy_max *= editor->priv->units_per_point;
+                gl_debug (DEBUG_EDITOR, "display dx_max,dy_max = %g, %g", dx_max, dy_max);
+
+                /* Set widget values */
+                tmp = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->lsize_r_spin));
+                gtk_spin_button_set_range (GTK_SPIN_BUTTON (editor->priv->lsize_r_spin),
+                                           0.0, 2.0*LENGTH (dx_max, dy_max));
+                gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->lsize_r_spin), tmp);
+
+                editor->priv->stop_signals = FALSE;
+
+        }
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query line size.                                                          */
+/*****************************************************************************/
+void
+gl_object_editor_get_lsize (glObjectEditor      *editor,
+                           gdouble             *dx,
+                           gdouble             *dy)
+{
+       gdouble r, theta;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Get values from widgets */
+       r = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->lsize_r_spin));
+       theta = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->lsize_theta_spin));
+
+       /* convert everything back to our internal units (points) */
+       r /= editor->priv->units_per_point;
+
+       *dx = COMP_X (r, theta);
+       *dy = COMP_Y (r, theta);
+
+       /* save a copy in internal units */
+       editor->priv->dx = *dx;
+       editor->priv->dy = *dy;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* PRIVATE. Prefs changed callback.  Update units related items.            */
+/*****************************************************************************/
+void
+lsize_prefs_changed_cb (glObjectEditor *editor)
+{
+       const gchar  *units_string;
+       gdouble       climb_rate;
+       gint          digits;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        /* Get new configuration information */
+        units_string = gl_prefs_get_units_string ();
+        editor->priv->units_per_point = gl_prefs_get_units_per_point ();
+        climb_rate = gl_prefs_get_units_step_size ();
+        digits = gl_prefs_get_units_precision ();
+
+       /* Update characteristics of r_spin */
+        editor->priv->stop_signals = TRUE;
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->lsize_r_spin),
+                                   digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->lsize_r_spin),
+                                       climb_rate, 10.0*climb_rate);
+        editor->priv->stop_signals = FALSE;
+
+       /* Update r_units_label */
+       gtk_label_set_text (GTK_LABEL(editor->priv->lsize_r_units_label),
+                           units_string);
+
+       /* Update values of r_spin/theta_spin */
+       gl_object_editor_set_lsize (editor,
+                                   editor->priv->dx,
+                                   editor->priv->dy);
+       gl_object_editor_set_max_lsize (editor,
+                                       editor->priv->dx_max,
+                                       editor->priv->dy_max);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
diff --git a/src/object-editor-position-page.c b/src/object-editor-position-page.c
new file mode 100644 (file)
index 0000000..e72036e
--- /dev/null
@@ -0,0 +1,253 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkspinbutton.h>
+#include <math.h>
+
+#include "prefs.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare position page.                                         */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_position_page (glObjectEditor *editor)
+{
+       const gchar  *units_string;
+       gdouble       climb_rate;
+       gint          digits;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->pos_page_vbox = glade_xml_get_widget (editor->priv->gui,
+                                                             "pos_page_vbox");
+       editor->priv->pos_x_spin    = glade_xml_get_widget (editor->priv->gui,
+                                                             "pos_x_spin");
+       editor->priv->pos_y_spin    = glade_xml_get_widget (editor->priv->gui,
+                                                             "pos_y_spin");
+       editor->priv->pos_x_units_label = glade_xml_get_widget (editor->priv->gui,
+                                                                 "pos_x_units_label");
+       editor->priv->pos_y_units_label = glade_xml_get_widget (editor->priv->gui,
+                                                                 "pos_y_units_label");
+
+       /* Get configuration information */
+       units_string = gl_prefs_get_units_string ();
+       editor->priv->units_per_point = gl_prefs_get_units_per_point ();
+       climb_rate = gl_prefs_get_units_step_size ();
+       digits = gl_prefs_get_units_precision ();
+
+       /* Modify widgets based on configuration */
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->pos_x_spin), digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->pos_x_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_label_set_text (GTK_LABEL(editor->priv->pos_x_units_label), units_string);
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->pos_y_spin), digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->pos_y_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_label_set_text (GTK_LABEL(editor->priv->pos_y_units_label), units_string);
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->pos_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->pos_x_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->pos_y_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set position.                                                             */
+/*****************************************************************************/
+void
+gl_object_editor_set_position (glObjectEditor      *editor,
+                                gdouble                x,
+                                gdouble                y)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       /* save a copy in internal units */
+       editor->priv->x = x;
+       editor->priv->y = y;
+
+       /* convert internal units to displayed units */
+       gl_debug (DEBUG_EDITOR, "internal x,y = %g, %g", x, y);
+       x *= editor->priv->units_per_point;
+       y *= editor->priv->units_per_point;
+       gl_debug (DEBUG_EDITOR, "display x,y = %g, %g", x, y);
+
+       /* Set widget values */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->pos_x_spin), x);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->pos_y_spin), y);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set maximum position.                                                     */
+/*****************************************************************************/
+void
+gl_object_editor_set_max_position (glObjectEditor      *editor,
+                                    gdouble                x_max,
+                                    gdouble                y_max)
+{
+       gdouble tmp;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       /* save a copy in internal units */
+       editor->priv->x_max = x_max;
+       editor->priv->y_max = y_max;
+
+       /* convert internal units to displayed units */
+       gl_debug (DEBUG_EDITOR, "internal x_max,y_max = %g, %g", x_max, y_max);
+       x_max *= editor->priv->units_per_point;
+       y_max *= editor->priv->units_per_point;
+       gl_debug (DEBUG_EDITOR, "display x_max,y_max = %g, %g", x_max, y_max);
+
+       /* Set widget values */
+       tmp = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->pos_x_spin));
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (editor->priv->pos_x_spin),
+                                  -x_max, 2.0*x_max);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->pos_x_spin), tmp);
+       tmp = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->pos_y_spin));
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (editor->priv->pos_y_spin),
+                                  -y_max, 2.0*y_max);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->pos_y_spin), tmp);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query position.                                                           */
+/*****************************************************************************/
+void
+gl_object_editor_get_position (glObjectEditor      *editor,
+                                gdouble               *x,
+                                gdouble               *y)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Get values from widgets */
+       *x = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->pos_x_spin));
+       *y = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->pos_y_spin));
+
+       /* convert everything back to our internal units (points) */
+       *x /= editor->priv->units_per_point;
+       *y /= editor->priv->units_per_point;
+
+       /* save a copy in internal units */
+       editor->priv->x = *x;
+       editor->priv->y = *y;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* PRIVATE. Prefs changed callback.  Update units related items.            */
+/*****************************************************************************/
+void
+position_prefs_changed_cb (glObjectEditor *editor)
+{
+       const gchar  *units_string;
+       gdouble       climb_rate;
+       gint          digits;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        /* Get new configuration information */
+        units_string = gl_prefs_get_units_string ();
+        editor->priv->units_per_point = gl_prefs_get_units_per_point ();
+        climb_rate = gl_prefs_get_units_step_size ();
+        digits = gl_prefs_get_units_precision ();
+
+       /* Update characteristics of x_spin/y_spin */
+        editor->priv->stop_signals = TRUE;
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->pos_x_spin),
+                                   digits);
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->pos_y_spin),
+                                   digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->pos_x_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->pos_y_spin),
+                                       climb_rate, 10.0*climb_rate);
+        editor->priv->stop_signals = FALSE;
+
+       /* Update units_labels */
+       gtk_label_set_text (GTK_LABEL(editor->priv->pos_x_units_label),
+                           units_string);
+       gtk_label_set_text (GTK_LABEL(editor->priv->pos_y_units_label),
+                           units_string);
+
+       /* Update values of x_spin/y_spin */
+       gl_object_editor_set_position (editor,
+                                      editor->priv->x,
+                                      editor->priv->y);
+       gl_object_editor_set_max_position (editor,
+                                          editor->priv->x_max,
+                                          editor->priv->y_max);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
diff --git a/src/object-editor-private.h b/src/object-editor-private.h
new file mode 100644 (file)
index 0000000..e83759a
--- /dev/null
@@ -0,0 +1,204 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor-private.h:  object properties editor module private header file
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __OBJECT_EDITOR_PRIVATE_H__
+#define __OBJECT_EDITOR_PRIVATE_H__
+
+#include <gtk/gtkwidget.h>
+#include <glade/glade-xml.h>
+
+G_BEGIN_DECLS
+
+struct _glObjectEditorPrivate {
+
+       GladeXML   *gui;
+       GtkWidget  *editor_vbox;
+
+        glLabel    *label;
+
+       gdouble     units_per_point;
+
+       GtkWidget  *title_image;
+       GtkWidget  *title_label;
+       GtkWidget  *notebook;
+
+       GtkWidget  *pos_page_vbox;
+       GtkWidget  *pos_x_spin;
+       GtkWidget  *pos_y_spin;
+       GtkWidget  *pos_x_units_label;
+       GtkWidget  *pos_y_units_label;
+       gdouble     x;
+       gdouble     y;
+       gdouble     x_max;
+       gdouble     y_max;
+
+       GtkWidget  *size_page_vbox;
+       GtkWidget  *size_w_spin;
+       GtkWidget  *size_h_spin;
+       GtkWidget  *size_w_units_label;
+       GtkWidget  *size_h_units_label;
+       GtkWidget  *size_aspect_checkbutton;
+       GtkWidget  *size_reset_image_button;
+       gdouble     size_aspect_ratio;
+       gdouble     w;
+       gdouble     h;
+       gdouble     w_max;
+       gdouble     h_max;
+       gdouble     w_base;
+       gdouble     h_base;
+
+       GtkWidget  *lsize_page_vbox;
+       GtkWidget  *lsize_r_spin;
+       GtkWidget  *lsize_theta_spin;
+       GtkWidget  *lsize_r_units_label;
+       gdouble     dx;
+       gdouble     dy;
+       gdouble     dx_max;
+       gdouble     dy_max;
+
+       GtkWidget  *fill_page_vbox;
+       GtkWidget  *fill_color_combo;
+       GtkWidget  *fill_key_combo;
+       GtkWidget  *fill_key_radio;
+       GtkWidget  *fill_color_radio;
+
+       GtkWidget  *line_page_vbox;
+       GtkWidget  *line_width_spin;
+       GtkWidget  *line_color_radio;
+       GtkWidget  *line_color_combo;
+       GtkWidget  *line_key_radio;
+       GtkWidget  *line_key_combo;
+
+       GtkWidget  *img_page_vbox;
+       GtkWidget  *img_file_radio;
+       GtkWidget  *img_key_radio;
+       GtkWidget  *img_file_button;
+       GtkWidget  *img_key_combo;
+
+       GtkWidget  *text_page_vbox;
+       GtkWidget  *text_family_combo;
+       GtkWidget  *text_size_spin;
+       GtkWidget  *text_bold_toggle;
+       GtkWidget  *text_italic_toggle;
+       GtkWidget  *text_color_radio;
+       GtkWidget  *text_color_combo;
+       GtkWidget  *text_color_key_radio;
+       GtkWidget  *text_color_key_combo;
+       GtkWidget  *text_left_toggle;
+       GtkWidget  *text_center_toggle;
+       GtkWidget  *text_right_toggle;
+       GtkWidget  *text_line_spacing_spin;
+       GtkWidget  *text_auto_shrink_check;
+
+       GtkWidget  *edit_page_vbox;
+       GtkWidget  *edit_text_view;
+       GtkWidget  *edit_key_label;
+       GtkWidget  *edit_key_combo;
+       GtkWidget  *edit_insert_field_button;
+
+       GtkWidget  *bc_page_vbox;
+       GtkWidget  *bc_style_combo;
+       GtkWidget  *bc_text_check;
+       GtkWidget  *bc_cs_check;
+       GtkWidget  *bc_color_radio;
+       GtkWidget  *bc_color_combo;
+       GtkWidget  *bc_key_radio;
+       GtkWidget  *bc_key_combo;
+
+       GtkWidget  *data_page_vbox;
+       GtkWidget  *data_literal_radio;
+       GtkWidget  *data_key_radio;
+       GtkWidget  *data_text_entry;
+       GtkWidget  *data_key_combo;
+       GtkWidget  *data_format_label;
+       GtkWidget  *data_ex_label;
+       GtkWidget  *data_digits_label;
+       GtkWidget  *data_digits_spin;
+       gboolean    data_format_fixed_flag;
+
+       GtkWidget  *shadow_page_vbox;
+       GtkWidget  *shadow_enable_check;
+       GtkWidget  *shadow_controls_table;
+       GtkWidget  *shadow_x_spin;
+       GtkWidget  *shadow_y_spin;
+       GtkWidget  *shadow_x_units_label;
+       GtkWidget  *shadow_y_units_label;
+       GtkWidget  *shadow_color_radio;
+       GtkWidget  *shadow_key_radio;
+       GtkWidget  *shadow_color_combo;
+       GtkWidget  *shadow_key_combo;
+       GtkWidget  *shadow_opacity_spin;
+       gdouble     shadow_x;
+       gdouble     shadow_y;
+       gdouble     shadow_x_max;
+       gdouble     shadow_y_max;
+
+        /* Prevent recursion */
+       gboolean    stop_signals;
+};
+
+enum {
+       CHANGED,
+       SIZE_CHANGED,
+       LAST_SIGNAL
+};
+
+extern gint gl_object_editor_signals[LAST_SIGNAL];
+
+
+
+void gl_object_editor_prepare_position_page     (glObjectEditor        *editor);
+
+void gl_object_editor_prepare_size_page         (glObjectEditor        *editor,
+                                                glObjectEditorOption   option);
+
+void gl_object_editor_prepare_lsize_page        (glObjectEditor        *editor);
+
+void gl_object_editor_prepare_fill_page         (glObjectEditor        *editor);
+
+void gl_object_editor_prepare_line_page         (glObjectEditor        *editor);
+
+void gl_object_editor_prepare_image_page        (glObjectEditor        *editor);
+
+void gl_object_editor_prepare_text_page         (glObjectEditor        *editor);
+
+void gl_object_editor_prepare_edit_page         (glObjectEditor        *editor);
+
+void gl_object_editor_prepare_bc_page           (glObjectEditor        *editor);
+
+void gl_object_editor_prepare_data_page         (glObjectEditor        *editor);
+
+void gl_object_editor_prepare_shadow_page       (glObjectEditor        *editor);
+
+
+void gl_object_editor_changed_cb                (glObjectEditor        *editor);
+void gl_object_editor_size_changed_cb           (glObjectEditor        *editor);
+
+void lsize_prefs_changed_cb                     (glObjectEditor        *editor);
+void size_prefs_changed_cb                      (glObjectEditor        *editor);
+void position_prefs_changed_cb                  (glObjectEditor        *editor);
+void shadow_prefs_changed_cb                    (glObjectEditor        *editor);
+
+G_END_DECLS
+
+#endif
diff --git a/src/object-editor-shadow-page.c b/src/object-editor-shadow-page.c
new file mode 100644 (file)
index 0000000..bf297da
--- /dev/null
@@ -0,0 +1,494 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtkcombobox.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "mygal/widget-color-combo.h"
+#include "color.h"
+#include "util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void shadow_enable_check_toggled_cb (glObjectEditor        *editor);
+static void shadow_color_radio_toggled_cb  (glObjectEditor        *editor);
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare shadow page.                                         */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_shadow_page (glObjectEditor *editor)
+{
+       const gchar  *units_string;
+       gdouble       climb_rate;
+       gint          digits;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->shadow_page_vbox
+               = glade_xml_get_widget (editor->priv->gui, "shadow_page_vbox");
+       editor->priv->shadow_enable_check
+               = glade_xml_get_widget (editor->priv->gui, "shadow_enable_check");
+       editor->priv->shadow_controls_table
+               = glade_xml_get_widget (editor->priv->gui, "shadow_controls_table");
+       editor->priv->shadow_x_spin
+               = glade_xml_get_widget (editor->priv->gui, "shadow_x_spin");
+       editor->priv->shadow_y_spin
+               = glade_xml_get_widget (editor->priv->gui, "shadow_y_spin");
+       editor->priv->shadow_x_units_label
+               = glade_xml_get_widget (editor->priv->gui, "shadow_x_units_label");
+       editor->priv->shadow_y_units_label
+               = glade_xml_get_widget (editor->priv->gui, "shadow_y_units_label");
+       editor->priv->shadow_color_radio
+               = glade_xml_get_widget (editor->priv->gui, "shadow_color_radio");       
+       editor->priv->shadow_key_radio
+               = glade_xml_get_widget (editor->priv->gui, "shadow_key_radio"); 
+       editor->priv->shadow_color_combo
+               = glade_xml_get_widget (editor->priv->gui, "shadow_color_combo");
+       editor->priv->shadow_key_combo
+               = glade_xml_get_widget (editor->priv->gui, "shadow_key_combo"); 
+       editor->priv->shadow_opacity_spin
+               = glade_xml_get_widget (editor->priv->gui, "shadow_opacity_spin");
+
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->shadow_key_combo));
+
+       /* Get configuration information */
+       units_string = gl_prefs_get_units_string ();
+       editor->priv->units_per_point = gl_prefs_get_units_per_point ();
+       climb_rate = gl_prefs_get_units_step_size ();
+       digits = gl_prefs_get_units_precision ();
+
+       /* Modify widgets based on configuration */
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->shadow_x_spin), digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->shadow_x_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_label_set_text (GTK_LABEL(editor->priv->shadow_x_units_label), units_string);
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->shadow_y_spin), digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->shadow_y_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_label_set_text (GTK_LABEL(editor->priv->shadow_y_units_label), units_string);
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->shadow_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->shadow_enable_check),
+                                 "toggled",
+                                 G_CALLBACK (shadow_enable_check_toggled_cb),
+                                 G_OBJECT (editor));                             
+       g_signal_connect_swapped (G_OBJECT (editor->priv->shadow_x_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->shadow_y_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->shadow_color_combo),
+                                 "color_changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->shadow_key_combo),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->shadow_color_radio),
+                                 "toggled",
+                                 G_CALLBACK (shadow_color_radio_toggled_cb),
+                                 G_OBJECT (editor));                             
+       g_signal_connect_swapped (G_OBJECT (editor->priv->shadow_key_radio),
+                                 "toggled",
+                                 G_CALLBACK (shadow_color_radio_toggled_cb),
+                                 G_OBJECT (editor));                             
+       g_signal_connect_swapped (G_OBJECT (editor->priv->shadow_opacity_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set shadow parameters.                                                    */
+/*****************************************************************************/
+void
+gl_object_editor_set_shadow_state (glObjectEditor      *editor,
+                                  gboolean             state)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->shadow_enable_check),
+                                      state);
+        gtk_widget_set_sensitive (editor->priv->shadow_controls_table, state);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+void
+gl_object_editor_set_shadow_offset (glObjectEditor      *editor,
+                                   gdouble              x,
+                                   gdouble              y)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       /* save a copy in internal units */
+       editor->priv->shadow_x = x;
+       editor->priv->shadow_y = y;
+
+       /* convert internal units to displayed units */
+       gl_debug (DEBUG_EDITOR, "internal x,y = %g, %g", x, y);
+       x *= editor->priv->units_per_point;
+       y *= editor->priv->units_per_point;
+       gl_debug (DEBUG_EDITOR, "display x,y = %g, %g", x, y);
+
+       /* Set widget values */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->shadow_x_spin), x);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->shadow_y_spin), y);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+void
+gl_object_editor_set_shadow_color (glObjectEditor      *editor,
+                                  gboolean             merge_flag,
+                                  glColorNode         *color_node)
+{
+       GdkColor *gdk_color;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       gtk_widget_set_sensitive (editor->priv->shadow_key_radio, merge_flag);
+
+       if ( color_node->color == GL_COLOR_NONE ) {
+
+               color_combo_set_color_to_default (COLOR_COMBO(editor->priv->shadow_color_combo));
+
+       } else {
+
+               gdk_color = gl_color_to_gdk_color (color_node->color);
+               color_combo_set_color (COLOR_COMBO(editor->priv->shadow_color_combo),
+                                          gdk_color);
+               g_free (gdk_color);
+
+       }
+       
+       if (!color_node->field_flag || !merge_flag) {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->shadow_color_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->shadow_color_combo, TRUE);
+               gtk_widget_set_sensitive (editor->priv->shadow_key_combo, FALSE);
+               
+       } else {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->shadow_key_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->shadow_color_combo, FALSE);
+               gtk_widget_set_sensitive (editor->priv->shadow_key_combo, TRUE);
+               
+               gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->shadow_key_combo),
+                                                  color_node->key);
+       }
+       
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+void
+gl_object_editor_set_shadow_opacity (glObjectEditor      *editor,
+                                    gdouble              alpha)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->shadow_opacity_spin),
+                                  alpha * 100.0);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+
+/*****************************************************************************/
+/* Set maximum shadow offset.                                                */
+/*****************************************************************************/
+void
+gl_object_editor_set_max_shadow_offset (glObjectEditor      *editor,
+                                       gdouble              x_max,
+                                       gdouble              y_max)
+{
+       gdouble tmp;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        if (editor->priv->shadow_page_vbox)
+        {
+
+                editor->priv->stop_signals = TRUE;
+
+                /* save a copy in internal units */
+                editor->priv->shadow_x_max = x_max;
+                editor->priv->shadow_y_max = y_max;
+
+                /* convert internal units to displayed units */
+                gl_debug (DEBUG_EDITOR, "internal x_max,y_max = %g, %g", x_max, y_max);
+                x_max *= editor->priv->units_per_point;
+                y_max *= editor->priv->units_per_point;
+                gl_debug (DEBUG_EDITOR, "display x_max,y_max = %g, %g", x_max, y_max);
+
+                /* Set widget values */
+                tmp = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->shadow_x_spin));
+                gtk_spin_button_set_range (GTK_SPIN_BUTTON (editor->priv->shadow_x_spin),
+                                           -x_max, x_max);
+                gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->shadow_x_spin), tmp);
+                tmp = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->shadow_y_spin));
+                gtk_spin_button_set_range (GTK_SPIN_BUTTON (editor->priv->shadow_y_spin),
+                                           -y_max, y_max);
+                gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->shadow_y_spin), tmp);
+
+                editor->priv->stop_signals = FALSE;
+
+        }
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query shadow parameters.                                                  */
+/*****************************************************************************/
+gboolean
+gl_object_editor_get_shadow_state (glObjectEditor      *editor)
+{
+       gboolean state;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->shadow_enable_check));
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return state;
+}
+
+void
+gl_object_editor_get_shadow_offset (glObjectEditor      *editor,
+                                   gdouble             *x,
+                                   gdouble             *y)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Get values from widgets */
+       *x = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->shadow_x_spin));
+       *y = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->shadow_y_spin));
+
+       /* convert everything back to our internal units (points) */
+       *x /= editor->priv->units_per_point;
+       *y /= editor->priv->units_per_point;
+
+       /* save a copy in internal units */
+       editor->priv->shadow_x = *x;
+       editor->priv->shadow_y = *y;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+glColorNode*
+gl_object_editor_get_shadow_color (glObjectEditor      *editor)
+{
+        GdkColor    *gdk_color;
+        gboolean     is_default;
+       glColorNode *color_node;
+       gl_debug (DEBUG_EDITOR, "START");
+
+       color_node = gl_color_node_new_default ();
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->shadow_key_radio))) {
+               color_node->field_flag = TRUE;
+               color_node->key = 
+                       gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->shadow_key_combo));
+    } else {
+               color_node->field_flag = FALSE;
+               color_node->key = NULL;
+               gdk_color = color_combo_get_color (COLOR_COMBO(editor->priv->shadow_color_combo),
+                                           &is_default);
+
+               if (!is_default) {
+               color_node->color = gl_color_from_gdk_color (gdk_color);
+        }
+       }
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return color_node;
+}
+
+gdouble
+gl_object_editor_get_shadow_opacity (glObjectEditor      *editor)
+{
+       gdouble alpha;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       alpha = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->shadow_opacity_spin));
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return alpha / 100.0;
+}
+
+
+/*****************************************************************************/
+/* PRIVATE. Prefs changed callback.  Update units related items.            */
+/*****************************************************************************/
+void
+shadow_prefs_changed_cb (glObjectEditor *editor)
+{
+       const gchar  *units_string;
+       gdouble       climb_rate;
+       gint          digits;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        /* Get new configuration information */
+        units_string = gl_prefs_get_units_string ();
+        editor->priv->units_per_point = gl_prefs_get_units_per_point ();
+        climb_rate = gl_prefs_get_units_step_size ();
+        digits = gl_prefs_get_units_precision ();
+
+       /* Update characteristics of x_spin/y_spin */
+        editor->priv->stop_signals = TRUE;
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->shadow_x_spin),
+                                   digits);
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->shadow_y_spin),
+                                   digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->shadow_x_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->shadow_y_spin),
+                                       climb_rate, 10.0*climb_rate);
+        editor->priv->stop_signals = FALSE;
+
+       /* Update units_labels */
+       gtk_label_set_text (GTK_LABEL(editor->priv->shadow_x_units_label),
+                           units_string);
+       gtk_label_set_text (GTK_LABEL(editor->priv->shadow_y_units_label),
+                           units_string);
+
+       /* Update values of x_spin/y_spin */
+       gl_object_editor_set_shadow_offset (editor,
+                                           editor->priv->shadow_x,
+                                           editor->priv->shadow_y);
+       gl_object_editor_set_max_shadow_offset (editor,
+                                               editor->priv->shadow_x_max,
+                                               editor->priv->shadow_y_max);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  shadow enable check callback.                                  */
+/*--------------------------------------------------------------------------*/
+static void
+shadow_enable_check_toggled_cb (glObjectEditor *editor)
+{
+       gboolean state;
+
+        if (editor->priv->stop_signals) return;
+
+        gl_debug (DEBUG_EDITOR, "START");
+
+       state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->shadow_enable_check));
+
+        gtk_widget_set_sensitive (editor->priv->shadow_controls_table, state);
+
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+
+        gl_debug (DEBUG_EDITOR, "END");
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  shadow color radio callback.                                   */
+/*--------------------------------------------------------------------------*/
+static void
+shadow_color_radio_toggled_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+        gl_debug (DEBUG_EDITOR, "START");
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->shadow_color_radio))) {
+                gtk_widget_set_sensitive (editor->priv->shadow_color_combo, TRUE);
+                gtk_widget_set_sensitive (editor->priv->shadow_key_combo, FALSE);
+        } else {
+                gtk_widget_set_sensitive (editor->priv->shadow_color_combo, FALSE);
+                gtk_widget_set_sensitive (editor->priv->shadow_key_combo, TRUE);
+               
+       }
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        gl_debug (DEBUG_EDITOR, "END");
+}
diff --git a/src/object-editor-size-page.c b/src/object-editor-size-page.c
new file mode 100644 (file)
index 0000000..58cec07
--- /dev/null
@@ -0,0 +1,453 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkspinbutton.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "wdgt-chain-button.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void aspect_toggle_cb                    (glObjectEditor        *editor);
+static void size_reset_cb                       (glObjectEditor        *editor);
+static void w_spin_cb                           (glObjectEditor        *editor);
+static void h_spin_cb                           (glObjectEditor        *editor);
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare size page.                                             */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_size_page (glObjectEditor       *editor,
+                                   glObjectEditorOption  option)
+{
+       const gchar  *units_string;
+       gdouble       climb_rate;
+       gint          digits;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->size_page_vbox =
+               glade_xml_get_widget (editor->priv->gui, "size_page_vbox");
+       editor->priv->size_w_spin =
+               glade_xml_get_widget (editor->priv->gui, "size_w_spin");
+       editor->priv->size_h_spin =
+               glade_xml_get_widget (editor->priv->gui, "size_h_spin");
+       editor->priv->size_w_units_label =
+               glade_xml_get_widget (editor->priv->gui, "size_w_units_label");
+       editor->priv->size_h_units_label =
+               glade_xml_get_widget (editor->priv->gui, "size_h_units_label");
+       editor->priv->size_aspect_checkbutton =
+               glade_xml_get_widget (editor->priv->gui, "size_aspect_checkbutton");
+       editor->priv->size_reset_image_button =
+               glade_xml_get_widget (editor->priv->gui, "size_reset_image_button");
+
+       /* Get configuration information */
+       units_string = gl_prefs_get_units_string ();
+       editor->priv->units_per_point = gl_prefs_get_units_per_point ();
+       climb_rate = gl_prefs_get_units_step_size ();
+       digits = gl_prefs_get_units_precision ();
+
+       /* Modify widgets based on configuration */
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->size_w_spin), digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->size_w_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_label_set_text (GTK_LABEL(editor->priv->size_w_units_label), units_string);
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->size_h_spin), digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->size_h_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_label_set_text (GTK_LABEL(editor->priv->size_h_units_label), units_string);
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->size_page_vbox);
+       if (option != GL_OBJECT_EDITOR_SIZE_IMAGE_PAGE) {
+               gtk_widget_hide (editor->priv->size_reset_image_button);
+       }
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->size_aspect_checkbutton),
+                                 "toggled",
+                                 G_CALLBACK (aspect_toggle_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->size_w_spin),
+                                 "changed",
+                                 G_CALLBACK (w_spin_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->size_h_spin),
+                                 "changed",
+                                 G_CALLBACK (h_spin_cb),
+                                 G_OBJECT (editor));
+
+       if (option == GL_OBJECT_EDITOR_SIZE_IMAGE_PAGE) {
+               g_signal_connect_swapped (G_OBJECT (editor->priv->size_reset_image_button),
+                                         "clicked",
+                                         G_CALLBACK (size_reset_cb),
+                                         G_OBJECT (editor));
+       }
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Maintain aspect ratio checkbox callback.                       */
+/*--------------------------------------------------------------------------*/
+static void
+aspect_toggle_cb (glObjectEditor *editor)
+{
+        glWdgtChainButton *toggle;
+       gdouble            w, h;
+
+        if (editor->priv->stop_signals) return;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       toggle = GL_WDGT_CHAIN_BUTTON (editor->priv->size_aspect_checkbutton);
+
+        if (gl_wdgt_chain_button_get_active (toggle)) {
+                                                                                
+                w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(editor->priv->size_w_spin));
+                h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(editor->priv->size_h_spin));
+                                                                                
+                editor->priv->size_aspect_ratio = h / w;
+                                                                                
+        }
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  W spin button changed callback.                                */
+/*--------------------------------------------------------------------------*/
+static void
+w_spin_cb (glObjectEditor *editor)
+{
+       gdouble            w, h;
+        glWdgtChainButton *toggle;
+
+        if (editor->priv->stop_signals) return;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       toggle = GL_WDGT_CHAIN_BUTTON (editor->priv->size_aspect_checkbutton);
+
+        if (gl_wdgt_chain_button_get_active (toggle)) {
+
+               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->size_w_spin));
+                                                                                
+                h = w * editor->priv->size_aspect_ratio;
+                                                                                
+                /* Update our sibling control, blocking recursion. */
+                editor->priv->stop_signals = TRUE;
+                gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->size_h_spin), h);
+                editor->priv->stop_signals = FALSE;
+        }
+                                                                                
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[SIZE_CHANGED], 0);
+                                                                                
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  H spin button changed callback.                                */
+/*--------------------------------------------------------------------------*/
+static void
+h_spin_cb (glObjectEditor *editor)
+{
+       gdouble            w, h;
+        glWdgtChainButton *toggle;
+
+        if (editor->priv->stop_signals) return;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        toggle = GL_WDGT_CHAIN_BUTTON (editor->priv->size_aspect_checkbutton);
+                                                                                
+        if (gl_wdgt_chain_button_get_active (toggle)) {
+
+               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->size_h_spin));
+                                                                                
+                w = h / editor->priv->size_aspect_ratio;
+                                                                                
+                /* Update our sibling control, blocking recursion. */
+                editor->priv->stop_signals = TRUE;
+                gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->size_w_spin), w);
+                editor->priv->stop_signals = FALSE;
+        }
+                                                                                
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[SIZE_CHANGED], 0);
+                                                                                
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Reset image size callback.                                     */
+/*--------------------------------------------------------------------------*/
+static void
+size_reset_cb (glObjectEditor *editor)
+{
+       gdouble w_base, h_base;
+       gdouble w_max, h_max, wh_max;
+       gdouble aspect_ratio;
+
+        if (editor->priv->stop_signals) return;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       w_base = editor->priv->w_base;
+       h_base = editor->priv->h_base;
+
+       w_max = editor->priv->w_max;
+       h_max = editor->priv->h_max;
+        wh_max = MAX( w_max, h_max );
+
+       if ( (w_base > wh_max) || (h_base > wh_max) ) {
+
+               aspect_ratio = h_base / w_base;
+
+               if ( aspect_ratio < 1.0 ) {
+                       w_base = wh_max;
+                       h_base = wh_max * aspect_ratio;
+
+               } else {
+                       w_base = wh_max / aspect_ratio;
+                       h_base = wh_max;
+               }
+       }
+
+       w_base *= editor->priv->units_per_point;
+       h_base *= editor->priv->units_per_point;
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->size_w_spin),
+                                  w_base);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->size_h_spin),
+                                  h_base);
+
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[SIZE_CHANGED], 0);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set size.                                                                 */
+/*****************************************************************************/
+void
+gl_object_editor_set_size (glObjectEditor      *editor,
+                            gdouble                w,
+                            gdouble                h)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       /* save a copy in internal units */
+       editor->priv->w = w;
+       editor->priv->h = h;
+
+       /* convert internal units to displayed units */
+       gl_debug (DEBUG_EDITOR, "internal w,h = %g, %g", w, h);
+       w *= editor->priv->units_per_point;
+       h *= editor->priv->units_per_point;
+       gl_debug (DEBUG_EDITOR, "display w,h = %g, %g", w, h);
+
+       /* Set widget values */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->size_w_spin), w);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->size_h_spin), h);
+
+       /* Update aspect ratio */
+       editor->priv->size_aspect_ratio = h / w;
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set maximum size.                                                         */
+/*****************************************************************************/
+void
+gl_object_editor_set_max_size (glObjectEditor      *editor,
+                              gdouble              w_max,
+                              gdouble              h_max)
+{
+       gdouble tmp;
+        gdouble wh_max;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        if (editor->priv->size_page_vbox)
+        {
+
+                editor->priv->stop_signals = TRUE;
+
+                /* save a copy in internal units */
+                editor->priv->w_max = w_max;
+                editor->priv->h_max = h_max;
+
+                /* convert internal units to displayed units */
+                gl_debug (DEBUG_EDITOR, "internal w_max,h_max = %g, %g", w_max, h_max);
+                w_max *= editor->priv->units_per_point;
+                h_max *= editor->priv->units_per_point;
+                wh_max = MAX( w_max, h_max );
+                gl_debug (DEBUG_EDITOR, "display w_max,h_max = %g, %g", w_max, h_max);
+
+                /* Set widget values */
+                tmp = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->size_w_spin));
+                gtk_spin_button_set_range (GTK_SPIN_BUTTON (editor->priv->size_w_spin),
+                                           0.0, 2.0*wh_max);
+                gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->size_w_spin), tmp);
+                tmp = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->size_h_spin));
+                gtk_spin_button_set_range (GTK_SPIN_BUTTON (editor->priv->size_h_spin),
+                                           0.0, 2.0*wh_max);
+                gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->size_h_spin), tmp);
+
+                editor->priv->stop_signals = FALSE;
+
+        }
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set base or natural size of image.                                        */
+/*****************************************************************************/
+void
+gl_object_editor_set_base_size    (glObjectEditor      *editor,
+                                  gdouble              w_base,
+                                  gdouble              h_base)
+{
+       gl_debug (DEBUG_EDITOR, "Setting w_base = %g", w_base);
+       gl_debug (DEBUG_EDITOR, "Setting h_base = %g", h_base);
+
+       editor->priv->w_base = w_base;
+       editor->priv->h_base = h_base;
+}
+
+/*****************************************************************************/
+/* Query size.                                                               */
+/*****************************************************************************/
+void
+gl_object_editor_get_size (glObjectEditor      *editor,
+                          gdouble             *w,
+                          gdouble             *h)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+
+       /* Get values from widgets */
+       *w = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->size_w_spin));
+       *h = gtk_spin_button_get_value (GTK_SPIN_BUTTON (editor->priv->size_h_spin));
+
+       /* convert everything back to our internal units (points) */
+       *w /= editor->priv->units_per_point;
+       *h /= editor->priv->units_per_point;
+
+       /* save a copy in internal units */
+       editor->priv->w = *w;
+       editor->priv->h = *h;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* PRIVATE. Prefs changed callback.  Update units related items.            */
+/*****************************************************************************/
+void
+size_prefs_changed_cb (glObjectEditor *editor)
+{
+       const gchar  *units_string;
+       gdouble       climb_rate;
+       gint          digits;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        /* Get new configuration information */
+        units_string = gl_prefs_get_units_string ();
+        editor->priv->units_per_point = gl_prefs_get_units_per_point ();
+        climb_rate = gl_prefs_get_units_step_size ();
+        digits = gl_prefs_get_units_precision ();
+
+       /* Update characteristics of w_spin/h_spin */
+        editor->priv->stop_signals = TRUE;
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->size_w_spin),
+                                   digits);
+       gtk_spin_button_set_digits (GTK_SPIN_BUTTON(editor->priv->size_h_spin),
+                                   digits);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->size_w_spin),
+                                       climb_rate, 10.0*climb_rate);
+       gtk_spin_button_set_increments (GTK_SPIN_BUTTON(editor->priv->size_h_spin),
+                                       climb_rate, 10.0*climb_rate);
+        editor->priv->stop_signals = FALSE;
+
+       /* Update units_labels */
+       gtk_label_set_text (GTK_LABEL(editor->priv->size_w_units_label),
+                           units_string);
+       gtk_label_set_text (GTK_LABEL(editor->priv->size_h_units_label),
+                           units_string);
+
+       /* Update values of w_spin/h_spin */
+       gl_object_editor_set_size (editor,
+                                  editor->priv->w,
+                                  editor->priv->h);
+       gl_object_editor_set_max_size (editor,
+                                      editor->priv->w_max,
+                                      editor->priv->h_max);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
diff --git a/src/object-editor-text-page.c b/src/object-editor-text-page.c
new file mode 100644 (file)
index 0000000..d283531
--- /dev/null
@@ -0,0 +1,636 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtkcombobox.h>
+#include <math.h>
+
+#include "prefs.h"
+#include "mygal/widget-color-combo.h"
+#include "color.h"
+#include "util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void align_toggle_cb (GtkToggleButton *toggle,
+                            glObjectEditor  *editor);
+static void text_radio_toggled_cb              (glObjectEditor        *editor);
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare size page.                                             */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_prepare_text_page (glObjectEditor       *editor)
+{
+       GList        *family_names = NULL;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Extract widgets from XML tree. */
+       editor->priv->text_page_vbox =
+               glade_xml_get_widget (editor->priv->gui, "text_page_vbox");
+       editor->priv->text_family_combo =
+               glade_xml_get_widget (editor->priv->gui, "text_family_combo");
+       editor->priv->text_size_spin =
+               glade_xml_get_widget (editor->priv->gui, "text_size_spin");
+       editor->priv->text_bold_toggle =
+               glade_xml_get_widget (editor->priv->gui, "text_bold_toggle");
+       editor->priv->text_italic_toggle =
+               glade_xml_get_widget (editor->priv->gui, "text_italic_toggle");
+       editor->priv->text_color_combo =
+               glade_xml_get_widget (editor->priv->gui, "text_color_combo");
+       editor->priv->text_color_radio =
+               glade_xml_get_widget (editor->priv->gui, "text_color_radio");
+       editor->priv->text_color_key_radio =
+               glade_xml_get_widget (editor->priv->gui, "text_color_key_radio");
+       editor->priv->text_color_key_combo =
+               glade_xml_get_widget (editor->priv->gui, "text_color_key_combo");
+       editor->priv->text_left_toggle =
+               glade_xml_get_widget (editor->priv->gui, "text_left_toggle");
+       editor->priv->text_center_toggle =
+               glade_xml_get_widget (editor->priv->gui, "text_center_toggle");
+       editor->priv->text_right_toggle =
+               glade_xml_get_widget (editor->priv->gui, "text_right_toggle");
+       editor->priv->text_line_spacing_spin =
+               glade_xml_get_widget (editor->priv->gui, "text_line_spacing_spin");
+       editor->priv->text_auto_shrink_check =
+               glade_xml_get_widget (editor->priv->gui, "text_auto_shrink_check");
+
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->text_family_combo));
+       gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->text_color_key_combo));
+
+       /* Load family names */
+       family_names = gl_util_get_font_family_list ();
+       gl_util_combo_box_set_strings (GTK_COMBO_BOX(editor->priv->text_family_combo),
+                                      family_names);
+
+       /* Modify widgets */
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->text_color_radio), TRUE);
+       gtk_widget_set_sensitive (editor->priv->text_color_combo, TRUE);
+    gtk_widget_set_sensitive (editor->priv->text_color_key_combo, FALSE);
+
+       /* Un-hide */
+       gtk_widget_show_all (editor->priv->text_page_vbox);
+
+       /* Connect signals */
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_family_combo),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_size_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_bold_toggle),
+                                 "toggled",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_italic_toggle),
+                                 "toggled",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_color_combo),
+                                 "color_changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_color_key_combo),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_color_radio),
+                                 "toggled",
+                                 G_CALLBACK (text_radio_toggled_cb),
+                                 G_OBJECT (editor));                             
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_color_key_radio),
+                                 "toggled",
+                                 G_CALLBACK (text_radio_toggled_cb),
+                                 G_OBJECT (editor));
+
+       g_signal_connect (G_OBJECT (editor->priv->text_left_toggle),
+                         "toggled",
+                         G_CALLBACK (align_toggle_cb),
+                         G_OBJECT (editor));
+       g_signal_connect (G_OBJECT (editor->priv->text_center_toggle),
+                         "toggled",
+                         G_CALLBACK (align_toggle_cb),
+                         G_OBJECT (editor));
+       g_signal_connect (G_OBJECT (editor->priv->text_right_toggle),
+                         "toggled",
+                         G_CALLBACK (align_toggle_cb),
+                         G_OBJECT (editor));
+
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_line_spacing_spin),
+                                 "changed",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+
+       g_signal_connect_swapped (G_OBJECT (editor->priv->text_auto_shrink_check),
+                                 "toggled",
+                                 G_CALLBACK (gl_object_editor_changed_cb),
+                                 G_OBJECT (editor));
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Alignment togglebutton callback.                               */
+/*--------------------------------------------------------------------------*/
+static void
+align_toggle_cb (GtkToggleButton *toggle,
+                glObjectEditor  *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+        if (gtk_toggle_button_get_active (toggle)) {
+                if (GTK_WIDGET (toggle) == GTK_WIDGET (editor->priv->text_left_toggle)) {
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (editor->priv->text_center_toggle),
+                                                      FALSE);
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (editor->priv->text_right_toggle),
+                                                      FALSE);
+                } else if (GTK_WIDGET (toggle) ==
+                           GTK_WIDGET (editor->priv->text_center_toggle)) {
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (editor->priv->text_left_toggle),
+                                                      FALSE);
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (editor->priv->text_right_toggle),
+                                                      FALSE);
+                } else if (GTK_WIDGET (toggle) ==
+                           GTK_WIDGET (editor->priv->text_right_toggle)) {
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (editor->priv->text_left_toggle),
+                                                      FALSE);
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (editor->priv->text_center_toggle),
+                                                      FALSE);
+                }
+
+               /* Emit our "changed" signal */
+               g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        }
+
+}
+
+/*****************************************************************************/
+/* Set font family.                                                          */
+/*****************************************************************************/
+void
+gl_object_editor_set_font_family (glObjectEditor      *editor,
+                                 const gchar         *font_family)
+{
+        GList    *family_names;
+       gchar    *old_font_family;
+       gchar    *good_font_family;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       old_font_family = gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->text_family_combo));
+
+        if ( !old_font_family || g_utf8_collate( old_font_family, font_family ) )
+        {
+
+                /* Make sure we have a valid font family.  if not provide a good default. */
+                family_names = gl_util_get_font_family_list ();
+                if (g_list_find_custom (family_names, font_family, (GCompareFunc)g_utf8_collate)) {
+                        good_font_family = g_strdup (font_family);
+                } else {
+                        if (family_names != NULL) {
+                                good_font_family = g_strdup (family_names->data); /* 1st entry */
+                        } else {
+                                good_font_family = NULL;
+                        }
+                }
+                gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->text_family_combo), good_font_family);
+                g_free (good_font_family);
+        }
+
+        g_free (old_font_family);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query font family.                                                        */
+/*****************************************************************************/
+gchar *
+gl_object_editor_get_font_family (glObjectEditor      *editor)
+{
+       gchar *font_family;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       font_family = gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->text_family_combo));
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return font_family;
+}
+
+/*****************************************************************************/
+/* Set font size.                                                            */
+/*****************************************************************************/
+void
+gl_object_editor_set_font_size (glObjectEditor      *editor,
+                               gdouble              font_size)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+        gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->text_size_spin),
+                                   font_size);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query font size.                                                          */
+/*****************************************************************************/
+gdouble
+gl_object_editor_get_font_size (glObjectEditor      *editor)
+{
+       gdouble font_size;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       font_size =
+               gtk_spin_button_get_value (GTK_SPIN_BUTTON(editor->priv->text_size_spin));
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return font_size;
+}
+
+/*****************************************************************************/
+/* Set font weight.                                                          */
+/*****************************************************************************/
+void
+gl_object_editor_set_font_weight (glObjectEditor      *editor,
+                                 PangoWeight          font_weight)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->text_bold_toggle),
+                                      (font_weight == PANGO_WEIGHT_BOLD));
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query font weight.                                                        */
+/*****************************************************************************/
+PangoWeight
+gl_object_editor_get_font_weight (glObjectEditor      *editor)
+{
+       PangoWeight font_weight;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        if (gtk_toggle_button_get_active
+           (GTK_TOGGLE_BUTTON (editor->priv->text_bold_toggle))) {
+                font_weight = PANGO_WEIGHT_BOLD;
+        } else {
+                font_weight = PANGO_WEIGHT_NORMAL;
+        }
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return font_weight;
+}
+
+/*****************************************************************************/
+/* Set font italic flag.                                                     */
+/*****************************************************************************/
+void
+gl_object_editor_set_font_italic_flag (glObjectEditor      *editor,
+                                      gboolean             font_italic_flag)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->text_italic_toggle),
+                                      font_italic_flag);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query font italic flag.                                                   */
+/*****************************************************************************/
+gboolean
+gl_object_editor_get_font_italic_flag (glObjectEditor      *editor)
+{
+       gboolean italic_flag;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       italic_flag =
+               gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
+                                             (editor->priv->text_italic_toggle));
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return italic_flag;
+}
+
+/*****************************************************************************/
+/* Set text alignment.                                                       */
+/*****************************************************************************/
+void
+gl_object_editor_set_text_alignment (glObjectEditor      *editor,
+                                    PangoAlignment       align)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->text_left_toggle),
+                                      (align == PANGO_ALIGN_LEFT));
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->text_center_toggle),
+                                      (align == PANGO_ALIGN_CENTER));
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->text_right_toggle),
+                                      (align == PANGO_ALIGN_RIGHT));
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query text alignment.                                                     */
+/*****************************************************************************/
+PangoAlignment
+gl_object_editor_get_text_alignment (glObjectEditor      *editor)
+{
+       PangoAlignment align;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        if (gtk_toggle_button_get_active
+            (GTK_TOGGLE_BUTTON (editor->priv->text_left_toggle))) {
+                align = PANGO_ALIGN_LEFT;
+        } else
+            if (gtk_toggle_button_get_active
+                (GTK_TOGGLE_BUTTON (editor->priv->text_right_toggle))) {
+                align = PANGO_ALIGN_RIGHT;
+        } else
+            if (gtk_toggle_button_get_active
+                (GTK_TOGGLE_BUTTON (editor->priv->text_center_toggle))) {
+                align = PANGO_ALIGN_CENTER;
+        } else {
+                align = PANGO_ALIGN_LEFT;       /* Should not happen. */
+        }
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return align;
+}
+
+/*****************************************************************************/
+/* Set text color.                                                           */
+/*****************************************************************************/
+void
+gl_object_editor_set_text_color (glObjectEditor      *editor,
+                                gboolean             merge_flag,
+                                glColorNode         *text_color_node)
+{
+       GdkColor *gdk_color;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_EDITOR, "color field %s(%d) / %X", text_color_node->key, text_color_node->field_flag, text_color_node->color);
+       
+       gtk_widget_set_sensitive (editor->priv->text_color_key_radio, merge_flag);
+
+       if ( text_color_node->color == GL_COLOR_NONE ) {
+
+               color_combo_set_color_to_default (COLOR_COMBO(editor->priv->text_color_combo));
+
+       } else {
+               
+        gdk_color = gl_color_to_gdk_color (text_color_node->color);
+        color_combo_set_color (COLOR_COMBO(editor->priv->text_color_combo), gdk_color);
+        g_free (gdk_color);
+       }
+       
+       if (!text_color_node->field_flag || !merge_flag) {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->text_color_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->text_color_combo, TRUE);
+               gl_debug (DEBUG_EDITOR, "color field false 0");
+               gtk_widget_set_sensitive (editor->priv->text_color_key_combo, FALSE);
+               
+       } else {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                 (editor->priv->text_color_key_radio), TRUE); 
+               gtk_widget_set_sensitive (editor->priv->text_color_combo, FALSE);
+               gtk_widget_set_sensitive (editor->priv->text_color_key_combo, TRUE);
+               
+               gl_debug (DEBUG_EDITOR, "color field true 1");
+               gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->text_color_key_combo), "");
+               gl_debug (DEBUG_EDITOR, "color field true 2");
+       }
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query text color.                                                         */
+/*****************************************************************************/
+glColorNode*
+gl_object_editor_get_text_color (glObjectEditor      *editor)
+{
+       GdkColor    *gdk_color;
+       glColorNode *color_node;
+       gboolean     is_default;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       color_node = gl_color_node_new_default ();
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->text_color_key_radio))) {
+               color_node->field_flag = TRUE;
+               color_node->color = gl_prefs->default_text_color;
+               color_node->key = 
+                       gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->text_color_key_combo));
+    } else {
+               color_node->field_flag = FALSE;
+               color_node->key = NULL;
+               gdk_color = color_combo_get_color (COLOR_COMBO(editor->priv->text_color_combo),
+                                           &is_default);
+
+        if (is_default) {
+                color_node->color = gl_prefs->default_text_color;
+        } else {
+                color_node->color = gl_color_from_gdk_color (gdk_color);
+        }
+       }      
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return color_node;
+}
+
+
+/*****************************************************************************/
+/* Set text line spacing.                                                    */
+/*****************************************************************************/
+void
+gl_object_editor_set_text_line_spacing (glObjectEditor      *editor,
+                                       gdouble              text_line_spacing)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+        gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->priv->text_line_spacing_spin),
+                                   text_line_spacing);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query text line spacing.                                                  */
+/*****************************************************************************/
+gdouble
+gl_object_editor_get_text_line_spacing (glObjectEditor      *editor)
+{
+       gdouble text_line_spacing;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       text_line_spacing = 
+               gtk_spin_button_get_value (GTK_SPIN_BUTTON(editor->priv->text_line_spacing_spin));
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return text_line_spacing;
+}
+
+/*****************************************************************************/
+/* Set auto shrink checkbox.                                                 */
+/*****************************************************************************/
+void
+gl_object_editor_set_text_auto_shrink (glObjectEditor      *editor,
+                                      gboolean             auto_shrink)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->stop_signals = TRUE;
+
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editor->priv->text_auto_shrink_check),
+                                      auto_shrink);
+
+        editor->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Query auto shrink checkbox.                                               */
+/*****************************************************************************/
+gboolean    gl_object_editor_get_text_auto_shrink (glObjectEditor      *editor)
+{
+       gboolean auto_shrink;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       auto_shrink = 
+               gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->text_auto_shrink_check));
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return auto_shrink;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  color radio callback.                                           */
+/*--------------------------------------------------------------------------*/
+static void
+text_radio_toggled_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+        gl_debug (DEBUG_EDITOR, "START");
+       
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->text_color_radio))) {
+                gtk_widget_set_sensitive (editor->priv->text_color_combo, TRUE);
+                gtk_widget_set_sensitive (editor->priv->text_color_key_combo, FALSE);
+        } else {
+                gtk_widget_set_sensitive (editor->priv->text_color_combo, FALSE);
+                gtk_widget_set_sensitive (editor->priv->text_color_key_combo, TRUE);
+               
+       }
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+        gl_debug (DEBUG_EDITOR, "END");
+}
diff --git a/src/object-editor.c b/src/object-editor.c
new file mode 100644 (file)
index 0000000..02a153d
--- /dev/null
@@ -0,0 +1,693 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/**
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.c:  object properties editor module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "object-editor.h"
+
+#include <glib/gi18n.h>
+#include <glade/glade-xml.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtknotebook.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtktogglebutton.h>
+
+#include <math.h>
+
+#include "prefs.h"
+#include "mygal/widget-color-combo.h"
+#include "color.h"
+#include "wdgt-chain-button.h"
+#include "marshal.h"
+#include "util.h"
+
+#include "object-editor-private.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros                            */
+/*===========================================*/
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+typedef void (*ChangedSignal) (GObject * object, gpointer data);
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+gint gl_object_editor_signals[LAST_SIGNAL] = { 0 };
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void gl_object_editor_finalize           (GObject              *object);
+
+static void gl_object_notebook_construct_valist (glObjectEditor       *editor,
+                                                 glLabel              *label,
+                                                glObjectEditorOption  first_option,
+                                                va_list               args);
+
+static void prefs_changed_cb                    (glObjectEditor       *editor);
+
+static void label_changed_cb                    (glLabel              *label,
+                                                 glObjectEditor       *editor);
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glObjectEditor, gl_object_editor, GTK_TYPE_VBOX);
+
+static void
+gl_object_editor_class_init (glObjectEditorClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_EDITOR, "START");
+       
+       gl_object_editor_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_object_editor_finalize;     
+
+       gl_object_editor_signals[CHANGED] =
+           g_signal_new ("changed",
+                         G_OBJECT_CLASS_TYPE(object_class),
+                         G_SIGNAL_RUN_LAST,
+                         G_STRUCT_OFFSET (glObjectEditorClass, changed),
+                         NULL, NULL,
+                         gl_marshal_VOID__VOID,
+                         G_TYPE_NONE, 0);
+
+       gl_object_editor_signals[SIZE_CHANGED] =
+           g_signal_new ("size_changed",
+                         G_OBJECT_CLASS_TYPE(object_class),
+                         G_SIGNAL_RUN_LAST,
+                         G_STRUCT_OFFSET (glObjectEditorClass, size_changed),
+                         NULL, NULL,
+                         gl_marshal_VOID__VOID,
+                         G_TYPE_NONE, 0);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+static void
+gl_object_editor_init (glObjectEditor *editor)
+{
+       gl_debug (DEBUG_EDITOR, "START");
+       
+       editor->priv = g_new0 (glObjectEditorPrivate, 1);
+
+       editor->priv->gui = glade_xml_new (GLABELS_GLADE_DIR "object-editor.glade",
+                                          "editor_vbox",
+                                          NULL);
+
+       if (!editor->priv->gui) {
+               g_critical ("Could not open object-editor.glade. gLabels may not be installed correctly!");
+               return;
+       }
+
+       editor->priv->editor_vbox = glade_xml_get_widget (editor->priv->gui,
+                                                         "editor_vbox");
+       gtk_box_pack_start (GTK_BOX(editor),
+                           editor->priv->editor_vbox,
+                           FALSE, FALSE, 0);
+
+       editor->priv->title_image = glade_xml_get_widget (editor->priv->gui,
+                                                         "title_image");
+       editor->priv->title_label = glade_xml_get_widget (editor->priv->gui,
+                                                         "title_label");
+       editor->priv->notebook    = glade_xml_get_widget (editor->priv->gui,
+                                                         "notebook");
+
+       gtk_widget_show_all (GTK_WIDGET(editor));
+
+       /* Hide all notebook pages to start with. */
+       gtk_widget_hide_all (editor->priv->notebook);
+       gtk_widget_set_no_show_all (editor->priv->notebook, TRUE);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+static void 
+gl_object_editor_finalize (GObject *object)
+{
+       glObjectEditor* editor = GL_OBJECT_EDITOR (object);;
+       
+       gl_debug (DEBUG_EDITOR, "START");
+       
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_OBJECT_EDITOR (editor));
+       g_return_if_fail (editor->priv != NULL);
+
+       g_signal_handlers_disconnect_by_func (G_OBJECT(gl_prefs),
+                                             prefs_changed_cb, editor);
+       g_signal_handlers_disconnect_by_func (G_OBJECT(editor->priv->label),
+                                             label_changed_cb, editor);
+
+        g_object_unref (editor->priv->gui);
+       g_free (editor->priv);
+
+       G_OBJECT_CLASS (gl_object_editor_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* NEW object editor.                                                      */
+/*****************************************************************************/
+GtkWidget*
+gl_object_editor_new (gchar                *image,
+                     gchar                *title,
+                      glLabel              *label,
+                     glObjectEditorOption  first_option, ...)
+{
+       glObjectEditor *editor;
+       va_list         args;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       editor = GL_OBJECT_EDITOR (g_object_new (GL_TYPE_OBJECT_EDITOR, NULL));
+
+       if (image) {
+               gtk_image_set_from_stock (GTK_IMAGE(editor->priv->title_image),
+                                         image,
+                                         GTK_ICON_SIZE_LARGE_TOOLBAR);
+       }
+
+       if (title) {
+               gchar *s;
+
+               s = g_strdup_printf ("<span weight=\"bold\">%s</span>",
+                                    title);
+               gtk_label_set_text (GTK_LABEL(editor->priv->title_label), s);
+               g_free (s);
+
+               gtk_label_set_use_markup (GTK_LABEL(editor->priv->title_label), TRUE);
+                                         
+       }
+
+       gtk_notebook_set_homogeneous_tabs (GTK_NOTEBOOK(editor->priv->notebook), TRUE);
+
+       va_start (args, first_option);
+       gl_object_notebook_construct_valist (editor, label, first_option, args);
+       va_end (args);
+
+       gl_debug (DEBUG_EDITOR, "END");
+
+       return GTK_WIDGET(editor);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct notebook.                                            */
+/*--------------------------------------------------------------------------*/
+static void
+gl_object_notebook_construct_valist (glObjectEditor       *editor,
+                                     glLabel              *label,
+                                    glObjectEditorOption  first_option,
+                                    va_list               args)
+{
+       glObjectEditorOption option;
+       gint pages = 0;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+        editor->priv->label = label;
+
+       option = first_option;
+
+       for ( option=first_option; option; option=va_arg (args, glObjectEditorOption) ) {
+
+               switch (option) {
+
+               case GL_OBJECT_EDITOR_EMPTY:
+                       gtk_widget_set_sensitive (editor->priv->title_image, FALSE);
+                       gtk_widget_set_sensitive (editor->priv->title_label, FALSE);
+                       break;
+
+               case GL_OBJECT_EDITOR_POSITION_PAGE:
+                       gl_object_editor_prepare_position_page (editor);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_SIZE_PAGE:
+               case GL_OBJECT_EDITOR_SIZE_IMAGE_PAGE:
+                       gl_object_editor_prepare_size_page (editor, option);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_SIZE_LINE_PAGE:
+                       gl_object_editor_prepare_lsize_page (editor);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_FILL_PAGE:
+                       gl_object_editor_prepare_fill_page (editor);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_LINE_PAGE:
+                       gl_object_editor_prepare_line_page (editor);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_IMAGE_PAGE:
+                       gl_object_editor_prepare_image_page (editor);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_TEXT_PAGE:
+                       gl_object_editor_prepare_text_page (editor);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_EDIT_PAGE:
+                       gl_object_editor_prepare_edit_page (editor);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_BC_PAGE:
+                       gl_object_editor_prepare_bc_page (editor);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_DATA_PAGE:
+                       gl_object_editor_prepare_data_page (editor);
+                       pages++;
+                       break;
+
+               case GL_OBJECT_EDITOR_SHADOW_PAGE:
+                       gl_object_editor_prepare_shadow_page (editor);
+                       pages++;
+                       break;
+
+               default:
+                       g_message ("option = %d", option);
+                       g_assert_not_reached ();
+               }
+               
+       }
+       if (pages) {
+               gtk_widget_show (editor->priv->notebook);
+       }
+
+       g_signal_connect_swapped (G_OBJECT (gl_prefs), "changed",
+                                 G_CALLBACK (prefs_changed_cb),
+                                 editor);
+        if (label)
+        {
+                label_changed_cb (label, editor);
+                g_signal_connect (G_OBJECT (label), "size_changed",
+                                  G_CALLBACK (label_changed_cb),
+                                  editor);
+                g_signal_connect (G_OBJECT (label), "merge_changed",
+                                  G_CALLBACK (label_changed_cb),
+                                  editor);
+        }
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE. Widget changed callback.  Emit our "changed" signal.            */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_changed_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Emit our "changed" signal */
+       g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE. Widget size changed callback.  Emit our "size-changed" signal.  */
+/*--------------------------------------------------------------------------*/
+void
+gl_object_editor_size_changed_cb (glObjectEditor *editor)
+{
+        if (editor->priv->stop_signals) return;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       /* Emit our "size_changed" signal */
+       g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[SIZE_CHANGED], 0);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Set possible key names from merge object.                                 */
+/*****************************************************************************/
+void
+gl_object_editor_set_key_names (glObjectEditor      *editor,
+                               glMerge             *merge)
+{
+        GList     *keys;
+       GtkWidget *combo;
+       gboolean   fixed_flag;
+       gboolean   state;
+        gl_debug (DEBUG_EDITOR, "START");
+
+       if (editor->priv->edit_key_label) {
+               gtk_widget_set_sensitive (editor->priv->edit_key_label, merge != NULL);
+       }
+       if (editor->priv->edit_key_combo) {
+               gtk_widget_set_sensitive (editor->priv->edit_key_combo, merge != NULL);
+       }
+       if (editor->priv->text_auto_shrink_check) {
+               gtk_widget_set_sensitive (editor->priv->text_auto_shrink_check,
+                                         merge != NULL);
+       }
+       if (editor->priv->text_page_vbox) {
+               gtk_widget_set_sensitive (editor->priv->text_color_key_radio, merge != NULL);
+               if (merge == NULL) {
+                       gtk_toggle_button_set_active (
+                               GTK_TOGGLE_BUTTON(editor->priv->text_color_radio), TRUE);
+                       gtk_widget_set_sensitive (editor->priv->text_color_combo, TRUE);
+                       gtk_widget_set_sensitive (editor->priv->text_color_key_combo, FALSE);
+               } else {
+                       state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->text_color_key_radio));
+                       gtk_widget_set_sensitive (editor->priv->text_color_combo, !state);
+                       gtk_widget_set_sensitive (editor->priv->text_color_key_combo, state);
+                                                 
+               }
+       }
+
+       if (editor->priv->edit_insert_field_button) {
+               gtk_widget_set_sensitive (editor->priv->edit_insert_field_button,
+                                         merge != NULL);
+       }
+
+       if (editor->priv->img_key_combo) {
+               gtk_widget_set_sensitive (editor->priv->img_key_combo, merge != NULL);
+       }
+       if (editor->priv->img_key_radio) {
+               gtk_widget_set_sensitive (editor->priv->img_key_radio, merge != NULL);
+               if (merge == NULL) {
+                       gtk_toggle_button_set_active (
+                               GTK_TOGGLE_BUTTON(editor->priv->img_file_radio), TRUE);
+               }
+       }
+
+       if (editor->priv->data_key_combo) {
+               gtk_widget_set_sensitive (editor->priv->data_key_combo, merge != NULL);
+       }
+       if (editor->priv->data_key_radio) {
+               gtk_widget_set_sensitive (editor->priv->data_key_radio, merge != NULL);
+               if (merge == NULL) {
+                       gtk_toggle_button_set_active (
+                               GTK_TOGGLE_BUTTON(editor->priv->data_literal_radio), TRUE);
+               }
+       }
+       
+       fixed_flag = editor->priv->data_format_fixed_flag;
+       if (editor->priv->data_format_label) {
+               gtk_widget_set_sensitive (editor->priv->data_format_label,
+                                         (merge != NULL));
+       }
+       if (editor->priv->data_ex_label) {
+               gtk_widget_set_sensitive (editor->priv->data_ex_label,
+                                         (merge != NULL));
+       }
+       if (editor->priv->data_digits_label) {
+               gtk_widget_set_sensitive (editor->priv->data_digits_label,
+                                         (merge != NULL) && !fixed_flag);
+       }
+       if (editor->priv->data_digits_spin) {
+               gtk_widget_set_sensitive (editor->priv->data_digits_spin,
+                                         (merge != NULL) && !fixed_flag);
+       }
+
+       if (editor->priv->fill_page_vbox) {
+               gtk_widget_set_sensitive (editor->priv->fill_key_radio, merge != NULL);
+               if (merge == NULL) {
+                       gtk_toggle_button_set_active (
+                               GTK_TOGGLE_BUTTON(editor->priv->fill_color_radio), TRUE);
+                       gtk_widget_set_sensitive (editor->priv->fill_color_combo, TRUE);
+                       gtk_widget_set_sensitive (editor->priv->fill_key_combo, FALSE);
+               } else {
+                       state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->fill_key_radio));
+                       gtk_widget_set_sensitive (editor->priv->fill_color_combo, !state);
+                       gtk_widget_set_sensitive (editor->priv->fill_key_combo, state);
+                                                 
+               }
+       }
+
+       if (editor->priv->line_page_vbox) {
+               gtk_widget_set_sensitive (editor->priv->line_key_radio, merge != NULL);
+               if (merge == NULL) {
+                       gtk_toggle_button_set_active (
+                               GTK_TOGGLE_BUTTON(editor->priv->line_color_radio), TRUE);
+                       gtk_widget_set_sensitive (editor->priv->line_color_combo, TRUE);
+                       gtk_widget_set_sensitive (editor->priv->line_key_combo, FALSE);
+               } else {
+                       state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->line_key_radio));
+                       gtk_widget_set_sensitive (editor->priv->line_color_combo, !state);
+                       gtk_widget_set_sensitive (editor->priv->line_key_combo, state);
+                                                 
+               }
+       }
+
+       if (editor->priv->bc_page_vbox) {
+               gtk_widget_set_sensitive (editor->priv->bc_key_radio, merge != NULL);
+               if (merge == NULL) {
+                       gtk_toggle_button_set_active (
+                               GTK_TOGGLE_BUTTON(editor->priv->bc_color_radio), TRUE);
+                       gtk_widget_set_sensitive (editor->priv->bc_color_combo, TRUE);
+                       gtk_widget_set_sensitive (editor->priv->bc_key_combo, FALSE);
+               } else {
+                       state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->bc_key_radio));
+                       gtk_widget_set_sensitive (editor->priv->bc_color_combo, !state);
+                       gtk_widget_set_sensitive (editor->priv->bc_key_combo, state);
+                                                 
+               }
+       }
+
+       if (editor->priv->shadow_page_vbox) {
+               gtk_widget_set_sensitive (editor->priv->shadow_key_radio, merge != NULL);
+               if (merge == NULL) {
+                       gtk_toggle_button_set_active (
+                               GTK_TOGGLE_BUTTON(editor->priv->shadow_color_radio), TRUE);
+                       gtk_widget_set_sensitive (editor->priv->shadow_color_combo, TRUE);
+                       gtk_widget_set_sensitive (editor->priv->shadow_key_combo, FALSE);
+               } else {
+                       state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->priv->shadow_key_radio));
+                       gtk_widget_set_sensitive (editor->priv->shadow_color_combo, !state);
+                       gtk_widget_set_sensitive (editor->priv->shadow_key_combo, state);
+                                                 
+               }
+       }
+
+        keys = gl_merge_get_key_list (merge);
+        if ( keys == NULL ) {
+                keys = g_list_append (keys, g_strdup (""));
+       }
+
+       combo = editor->priv->img_key_combo;
+       if (combo) {
+               gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+       }
+
+       combo = editor->priv->edit_key_combo;
+       if (combo) {
+               gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+       }
+
+       combo = editor->priv->data_key_combo;
+       if (combo) {
+               gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+       }
+               
+       combo = editor->priv->fill_key_combo;
+       if (combo) {
+               gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+       }
+
+       combo = editor->priv->text_color_key_combo;
+       if (combo) {
+               gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+       }
+
+       combo = editor->priv->line_key_combo;
+       if (combo) {
+               gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+       }
+               
+       combo = editor->priv->bc_key_combo;
+       if (combo) {
+               gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+       }
+               
+       combo = editor->priv->shadow_key_combo;
+       if (combo) {
+               gl_util_combo_box_set_strings (GTK_COMBO_BOX (combo), keys);
+       }
+
+       gl_merge_free_key_list (&keys);
+        gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*****************************************************************************/
+/* Construct color combo "Custom widget".                                    */
+/*****************************************************************************/
+GtkWidget *
+gl_object_editor_construct_color_combo (gchar *name,
+                                       gchar *string1,
+                                       gchar *string2,
+                                       gint   int1,
+                                       gint   int2)
+{
+       GtkWidget  *color_combo;
+       ColorGroup *cg;
+       gchar      *cg_name;
+       GdkColor   *gdk_color;
+       gchar      *no_color;
+
+       switch (int1) {
+
+       case 3:
+               cg_name  = "shadow_color_group";
+                gdk_color = gl_color_to_gdk_color (GL_COLOR_SHADOW_DEFAULT);
+               no_color = _("Default");
+               break;
+
+       case 2:
+               cg_name  = "text_color_group";
+                gdk_color = gl_color_to_gdk_color (gl_prefs->default_text_color);
+               no_color = _("Default");
+               break;
+
+       case 1:
+               cg_name  = "line_color_group";
+                gdk_color = NULL;
+               no_color = _("No line");
+               break;
+
+       case 0:
+       default:
+               cg_name  = "fill_color_group";
+                gdk_color = NULL;
+               no_color = _("No fill");
+               break;
+
+       }
+
+       cg = color_group_fetch (cg_name, NULL);
+       color_combo = color_combo_new (NULL, no_color, gdk_color, cg);
+        g_free (gdk_color);
+
+       color_combo_box_set_preview_relief (COLOR_COMBO(color_combo), GTK_RELIEF_NORMAL);
+
+       return color_combo;
+}
+
+/*****************************************************************************/
+/* Construct chain button "Custom widget".                                   */
+/*****************************************************************************/
+GtkWidget *
+gl_object_editor_construct_chain_button (gchar *name,
+                                        gchar *string1,
+                                        gchar *string2,
+                                        gint   int1,
+                                        gint   int2)
+{
+       GtkWidget  *chain_button;
+
+       chain_button = gl_wdgt_chain_button_new (GL_WDGT_CHAIN_RIGHT);
+       gl_wdgt_chain_button_set_active (GL_WDGT_CHAIN_BUTTON(chain_button), TRUE);
+
+       return chain_button;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE. Prefs changed callback.  Update units related items.            */
+/*--------------------------------------------------------------------------*/
+static void
+prefs_changed_cb (glObjectEditor *editor)
+{
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       if (editor->priv->lsize_r_spin) {
+               lsize_prefs_changed_cb (editor);
+       }
+               
+       if (editor->priv->size_w_spin) {
+               size_prefs_changed_cb (editor);
+       }
+               
+       if (editor->priv->pos_x_spin) {
+               position_prefs_changed_cb (editor);
+       }
+
+       if (editor->priv->shadow_x_spin) {
+               shadow_prefs_changed_cb (editor);
+       }
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label "changed" callback.                                        */
+/*---------------------------------------------------------------------------*/
+static void
+label_changed_cb (glLabel        *label,
+                  glObjectEditor *editor)
+{
+       gdouble   label_width, label_height;
+       glMerge  *merge;
+
+       gl_debug (DEBUG_EDITOR, "START");
+
+       gl_label_get_size (label, &label_width, &label_height);
+       gl_object_editor_set_max_position (GL_OBJECT_EDITOR (editor),
+                                          label_width, label_height);
+       gl_object_editor_set_max_size (GL_OBJECT_EDITOR (editor),
+                                      label_width, label_height);
+       gl_object_editor_set_max_lsize (GL_OBJECT_EDITOR (editor),
+                                      label_width, label_height);
+       gl_object_editor_set_max_shadow_offset (GL_OBJECT_EDITOR (editor),
+                                               label_width, label_height);
+       
+       merge = gl_label_get_merge (label);
+       gl_object_editor_set_key_names (editor, merge);
+
+       gl_debug (DEBUG_EDITOR, "END");
+}
+
diff --git a/src/object-editor.h b/src/object-editor.h
new file mode 100644 (file)
index 0000000..fe3bbe5
--- /dev/null
@@ -0,0 +1,302 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  object-editor.h:  object properties editor module header file
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __OBJECT_EDITOR_H__
+#define __OBJECT_EDITOR_H__
+
+#include <gtk/gtkvbox.h>
+#include <gtk/gtktextbuffer.h>
+
+#include "text-node.h"
+#include "label.h"
+#include "merge.h"
+#include "bc.h"
+#include "color.h"
+
+G_BEGIN_DECLS
+
+typedef enum {
+       GL_OBJECT_EDITOR_EMPTY = 1,
+       GL_OBJECT_EDITOR_POSITION_PAGE,
+       GL_OBJECT_EDITOR_SIZE_PAGE,
+       GL_OBJECT_EDITOR_SIZE_IMAGE_PAGE,
+       GL_OBJECT_EDITOR_SIZE_LINE_PAGE,
+       GL_OBJECT_EDITOR_FILL_PAGE,
+       GL_OBJECT_EDITOR_LINE_PAGE,
+       GL_OBJECT_EDITOR_IMAGE_PAGE,
+       GL_OBJECT_EDITOR_TEXT_PAGE,
+       GL_OBJECT_EDITOR_EDIT_PAGE,
+       GL_OBJECT_EDITOR_BC_PAGE,
+       GL_OBJECT_EDITOR_DATA_PAGE,
+       GL_OBJECT_EDITOR_SHADOW_PAGE,
+} glObjectEditorOption;
+
+#define GL_TYPE_OBJECT_EDITOR            (gl_object_editor_get_type ())
+#define GL_OBJECT_EDITOR(obj)            (GTK_CHECK_CAST ((obj), GL_TYPE_OBJECT_EDITOR, glObjectEditor))
+#define GL_OBJECT_EDITOR_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_OBJECT_EDITOR, glObjectEditorClass))
+#define GL_IS_OBJECT_EDITOR(obj)         (GTK_CHECK_TYPE ((obj), GL_TYPE_OBJECT_EDITOR))
+#define GL_IS_OBJECT_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_OBJECT_EDITOR))
+#define GL_OBJECT_EDITOR_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), GL_TYPE_OBJECT_EDITOR, glObjectEditorClass))
+
+
+typedef struct _glObjectEditor         glObjectEditor;
+typedef struct _glObjectEditorClass    glObjectEditorClass;
+
+typedef struct _glObjectEditorPrivate  glObjectEditorPrivate;
+
+struct _glObjectEditor
+{
+       GtkVBox                parent_instance;
+
+       glObjectEditorPrivate *priv;
+
+};
+
+struct  _glObjectEditorClass
+{
+       GtkVBoxClass             parent_class;
+
+       void (*changed)      (glObjectEditor *editor, gpointer user_data);
+       void (*size_changed) (glObjectEditor *editor, gpointer user_data);
+};
+
+
+
+
+GtkType     gl_object_editor_get_type             (void) G_GNUC_CONST;
+
+GtkWidget  *gl_object_editor_new                  (gchar               *image,
+                                                  gchar               *title,
+                                                   glLabel             *label,
+                                                  glObjectEditorOption first_option, ...);
+
+void        gl_object_editor_set_key_names        (glObjectEditor      *editor,
+                                                  glMerge             *merge);
+
+
+/*
+ * Position Page
+ */
+void        gl_object_editor_set_position         (glObjectEditor      *editor,
+                                                  gdouble              x,
+                                                  gdouble              y);
+
+void        gl_object_editor_set_max_position     (glObjectEditor      *editor,
+                                                  gdouble              x_max,
+                                                  gdouble              y_max);
+
+void        gl_object_editor_get_position         (glObjectEditor      *editor,
+                                                  gdouble             *x,
+                                                  gdouble             *y);
+
+/*
+ * Size Page
+ */
+void        gl_object_editor_set_size             (glObjectEditor      *editor,
+                                                  gdouble              w,
+                                                  gdouble              h);
+
+void        gl_object_editor_set_max_size         (glObjectEditor      *editor,
+                                                  gdouble              w_max,
+                                                  gdouble              h_max);
+
+void        gl_object_editor_set_base_size        (glObjectEditor      *editor,
+                                                  gdouble              w_max,
+                                                  gdouble              h_max);
+
+void        gl_object_editor_get_size             (glObjectEditor      *editor,
+                                                  gdouble             *w,
+                                                  gdouble             *h);
+
+
+/*
+ * Line Size Page
+ */
+void        gl_object_editor_set_lsize            (glObjectEditor      *editor,
+                                                  gdouble              dx,
+                                                  gdouble              dy);
+
+void        gl_object_editor_set_max_lsize        (glObjectEditor      *editor,
+                                                  gdouble              dx_max,
+                                                  gdouble              dy_max);
+
+void        gl_object_editor_get_lsize            (glObjectEditor      *editor,
+                                                  gdouble             *dx,
+                                                  gdouble             *dy);
+
+
+/*
+ * Fill Page
+ */
+void        gl_object_editor_set_fill_color       (glObjectEditor      *editor,
+                                                  gboolean             merge_flag,
+                                                  glColorNode         *color_node);
+
+glColorNode* gl_object_editor_get_fill_color      (glObjectEditor      *editor);
+
+
+/*
+ * Line/Outline Page
+ */
+void        gl_object_editor_set_line_color       (glObjectEditor      *editor,
+                                                  gboolean             merge_flag,
+                                                  glColorNode         *color_node);
+
+glColorNode* gl_object_editor_get_line_color      (glObjectEditor      *editor);
+
+void        gl_object_editor_set_line_width       (glObjectEditor      *editor,
+                                                  gdouble              width);
+
+gdouble     gl_object_editor_get_line_width       (glObjectEditor      *editor);
+
+
+/*
+ * Image Page
+ */
+void        gl_object_editor_set_image            (glObjectEditor      *editor,
+                                                  gboolean             merge_flag,
+                                                  glTextNode          *text_node);
+
+glTextNode *gl_object_editor_get_image            (glObjectEditor      *editor);
+
+
+/*
+ * Text Page
+ */
+void        gl_object_editor_set_font_family      (glObjectEditor      *editor,
+                                                  const gchar         *font_family);
+
+gchar      *gl_object_editor_get_font_family      (glObjectEditor      *editor);
+
+void        gl_object_editor_set_font_size        (glObjectEditor      *editor,
+                                                  gdouble              font_size);
+
+gdouble     gl_object_editor_get_font_size        (glObjectEditor      *editor);
+
+void        gl_object_editor_set_font_weight      (glObjectEditor      *editor,
+                                                  PangoWeight          font_weight);
+
+PangoWeight gl_object_editor_get_font_weight      (glObjectEditor      *editor);
+
+void        gl_object_editor_set_font_italic_flag (glObjectEditor      *editor,
+                                                  gboolean             font_italic_flag);
+
+gboolean    gl_object_editor_get_font_italic_flag (glObjectEditor      *editor);
+
+void        gl_object_editor_set_text_alignment   (glObjectEditor      *editor,
+                                                  PangoAlignment       text_alignment);
+
+PangoAlignment gl_object_editor_get_text_alignment (glObjectEditor      *editor);
+
+void        gl_object_editor_set_text_line_spacing (glObjectEditor      *editor,
+                                                  gdouble               text_line_spacing);
+
+gdouble     gl_object_editor_get_text_line_spacing (glObjectEditor      *editor);
+
+void        gl_object_editor_set_text_color       (glObjectEditor       *editor,
+                                                  gboolean              merge_flag,
+                                                  glColorNode          *text_color_node);
+
+glColorNode* gl_object_editor_get_text_color      (glObjectEditor      *editor);
+
+void        gl_object_editor_set_text_auto_shrink (glObjectEditor      *editor,
+                                                  gboolean             auto_shrink);
+
+gboolean    gl_object_editor_get_text_auto_shrink (glObjectEditor      *editor);
+
+
+/*
+ * Edit Text Page
+ */
+void        gl_object_editor_set_text_buffer      (glObjectEditor      *editor,
+                                                  GtkTextBuffer       *buffer);
+
+/*
+ * Barcode Page
+ */
+void        gl_object_editor_set_bc_style         (glObjectEditor      *editor,
+                                                  gchar               *id,
+                                                  gboolean             text_flag,
+                                                  gboolean             checksum_flag,
+                                                  guint                format_digits);
+
+void        gl_object_editor_get_bc_style         (glObjectEditor      *editor,
+                                                  gchar              **id,
+                                                  gboolean            *text_flag,
+                                                  gboolean            *checksum_flag,
+                                                  guint               *format_digits);
+
+void        gl_object_editor_set_bc_color         (glObjectEditor      *editor,
+                                                  gboolean             merge_flag,
+                                                  glColorNode         *color_node);
+
+glColorNode* gl_object_editor_get_bc_color        (glObjectEditor      *editor);
+
+
+/*
+ * Barcode Data Page
+ */
+void        gl_object_editor_set_data             (glObjectEditor      *editor,
+                                                  gboolean             merge_flag,
+                                                  glTextNode          *text_node);
+
+glTextNode *gl_object_editor_get_data             (glObjectEditor      *editor);
+
+
+/*
+ * Shadow Page
+ */
+void        gl_object_editor_set_shadow_state     (glObjectEditor      *editor,
+                                                  gboolean             state);
+
+void        gl_object_editor_set_shadow_offset    (glObjectEditor      *editor,
+                                                  gdouble              x,
+                                                  gdouble              y);
+
+void        gl_object_editor_set_shadow_color     (glObjectEditor      *editor,
+                                                  gboolean             merge_flag,
+                                                  glColorNode         *color_node);
+
+void        gl_object_editor_set_shadow_opacity   (glObjectEditor      *editor,
+                                                  gdouble              alpha);
+
+void        gl_object_editor_set_max_shadow_offset(glObjectEditor      *editor,
+                                                  gdouble              x_max,
+                                                  gdouble              y_max);
+
+
+gboolean    gl_object_editor_get_shadow_state     (glObjectEditor      *editor);
+
+void        gl_object_editor_get_shadow_offset    (glObjectEditor      *editor,
+                                                  gdouble             *x,
+                                                  gdouble             *y);
+
+glColorNode* gl_object_editor_get_shadow_color    (glObjectEditor      *editor);
+
+gdouble     gl_object_editor_get_shadow_opacity   (glObjectEditor      *editor);
+
+
+
+G_END_DECLS
+
+#endif
diff --git a/src/pixbuf-cache.c b/src/pixbuf-cache.c
new file mode 100644 (file)
index 0000000..df67604
--- /dev/null
@@ -0,0 +1,254 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  pixbuf-cache.c:  GLabels pixbuf cache module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "pixbuf-cache.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+typedef struct {
+       gchar     *key;
+       guint      references;
+       GdkPixbuf *pixbuf;
+} CacheRecord;
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void  record_destroy   (gpointer val);
+
+static void  add_name_to_list (gpointer key,
+                              gpointer val,
+                              gpointer user_data);
+
+\f
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Destroy cache record.                                           */
+/*---------------------------------------------------------------------------*/
+static void
+record_destroy (gpointer val)
+{
+       CacheRecord *record = (CacheRecord *)val;
+
+       g_return_if_fail (record);
+
+       g_free (record->key);
+       g_object_unref (record->pixbuf);
+       g_free (record);
+}
+
+/*****************************************************************************/
+/* Create a new hash table to keep track of cached pixbufs.                  */
+/*****************************************************************************/
+GHashTable *
+gl_pixbuf_cache_new (void)
+{
+       GHashTable *pixbuf_cache;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+       pixbuf_cache = g_hash_table_new_full (g_str_hash,
+                                             g_str_equal,
+                                             NULL,
+                                             record_destroy);
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END pixbuf_cache=%p", pixbuf_cache);
+
+       return pixbuf_cache;
+}
+
+/*****************************************************************************/
+/* Free up previously allocated hash table and its contents.                 */
+/*****************************************************************************/
+void
+gl_pixbuf_cache_free (GHashTable *pixbuf_cache)
+{
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+       g_hash_table_destroy (pixbuf_cache);
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+}
+
+/*****************************************************************************/
+/* Add pixbuf to cache explicitly (not a reference).                         */
+/*****************************************************************************/
+void
+gl_pixbuf_cache_add_pixbuf (GHashTable *pixbuf_cache,
+                           gchar      *name,
+                           GdkPixbuf  *pixbuf)
+{
+       CacheRecord *test_record, *record;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+       test_record = g_hash_table_lookup (pixbuf_cache, name);
+       if (test_record != NULL) {
+               /* pixbuf is already in the cache. */
+               gl_debug (DEBUG_PIXBUF_CACHE, "END already in cache");
+               return;
+       }
+
+       record = g_new0 (CacheRecord, 1);
+       record->key        = g_strdup (name);
+       record->references = 0; /* Nobody has referenced it yet. */
+       record->pixbuf     = g_object_ref (G_OBJECT (pixbuf));
+
+       g_hash_table_insert (pixbuf_cache, record->key, record);
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+}
+
+/*****************************************************************************/
+/* Get pixbuf.  If not in cache, read it and add to cache.                   */
+/*****************************************************************************/
+GdkPixbuf *
+gl_pixbuf_cache_get_pixbuf (GHashTable *pixbuf_cache,
+                           gchar      *name)
+{
+       CacheRecord *record;
+       GdkPixbuf   *pixbuf;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START pixbuf_cache=%p", pixbuf_cache);
+
+       record = g_hash_table_lookup (pixbuf_cache, name);
+
+       if (record != NULL) {
+               record->references++;
+               gl_debug (DEBUG_PIXBUF_CACHE, "references=%d", record->references);
+               gl_debug (DEBUG_PIXBUF_CACHE, "END cached");
+               return record->pixbuf;
+       }
+
+
+       pixbuf = gdk_pixbuf_new_from_file (name, NULL);
+       if ( pixbuf != NULL) {
+               record = g_new0 (CacheRecord, 1);
+               record->key        = g_strdup (name);
+               record->references = 1;
+               record->pixbuf     = pixbuf;
+
+               g_hash_table_insert (pixbuf_cache, record->key, record);
+       }
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+
+       return pixbuf;
+}
+
+/*****************************************************************************/
+/* Remove pixbuf, but only if no references left.                            */
+/*****************************************************************************/
+void
+gl_pixbuf_cache_remove_pixbuf (GHashTable *pixbuf_cache,
+                              gchar      *name)
+{
+       CacheRecord *record;
+
+       if (name == NULL) return;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+       record = g_hash_table_lookup (pixbuf_cache, name);
+       if (record == NULL) {
+               gl_debug (DEBUG_PIXBUF_CACHE, "END not in cache");
+               return;
+       }
+
+       record->references--;
+
+       if ( record->references == 0 ) {
+               g_hash_table_remove (pixbuf_cache, name);
+       }
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Add a name to a GList while iterating over cache.               */
+/*---------------------------------------------------------------------------*/
+static void
+add_name_to_list (gpointer key,
+                 gpointer val,
+                 gpointer user_data)
+{
+       gchar     *name       = (gchar *)key;
+       GList     **name_list = (GList **)user_data;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "adding name=%s", name);
+
+       *name_list = g_list_append (*name_list, g_strdup(name));
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+}
+
+/*****************************************************************************/
+/* Return a list of names for all pixbufs in the cache.                      */
+/*****************************************************************************/
+GList *
+gl_pixbuf_cache_get_name_list (GHashTable *pixbuf_cache)
+{
+       GList *name_list = NULL;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+       g_hash_table_foreach (pixbuf_cache, add_name_to_list, &name_list);
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+
+       return name_list;
+}
+
+/*****************************************************************************/
+/* Free up a list of pixbuf names.                                           */
+/*****************************************************************************/
+void
+gl_pixbuf_cache_free_name_list (GList *name_list)
+{
+       GList *p_name;
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "START");
+
+       for (p_name = name_list; p_name != NULL; p_name = p_name->next) {
+               g_free (p_name->data);
+               p_name->data = NULL;
+       }
+
+       g_list_free (name_list);
+
+       gl_debug (DEBUG_PIXBUF_CACHE, "END");
+}
+
+
diff --git a/src/pixbuf-cache.h b/src/pixbuf-cache.h
new file mode 100644 (file)
index 0000000..5fe8a80
--- /dev/null
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  pixbuf-cache.h:  GLabels pixbuf cache module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __PIXBUF_CACHE_H__
+#define __PIXBUF_CACHE_H__
+
+#include <glib/gmem.h>
+#include <glib/ghash.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+G_BEGIN_DECLS
+
+GHashTable *gl_pixbuf_cache_new            (void);
+
+void        gl_pixbuf_cache_free           (GHashTable *pixbuf_cache);
+
+void        gl_pixbuf_cache_add_pixbuf     (GHashTable *pixbuf_cache,
+                                           gchar      *name,
+                                           GdkPixbuf  *pixbuf);
+
+GdkPixbuf  *gl_pixbuf_cache_get_pixbuf     (GHashTable *pixbuf_cache,
+                                           gchar      *name);
+
+void        gl_pixbuf_cache_remove_pixbuf  (GHashTable *pixbuf_cache,
+                                           gchar      *name);
+
+GList      *gl_pixbuf_cache_get_name_list  (GHashTable *pixbuf_cache);
+
+void        gl_pixbuf_cache_free_name_list (GList      *name_list);
+
+G_END_DECLS
+
+#endif /*__PIXBUF_CACHE_H__ */
diff --git a/src/pixmaps/Makefile.am b/src/pixmaps/Makefile.am
new file mode 100644 (file)
index 0000000..5b19286
--- /dev/null
@@ -0,0 +1,18 @@
+
+EXTRA_DIST =                   \
+       collate.xpm             \
+       nocollate.xpm           \
+       checkerboard.xpm        \
+       cursor_text.xbm         \
+       cursor_text_mask.xbm    \
+       cursor_box.xbm          \
+       cursor_box_mask.xbm     \
+       cursor_line.xbm         \
+       cursor_line_mask.xbm    \
+       cursor_ellipse.xbm      \
+       cursor_ellipse_mask.xbm \
+       cursor_image.xbm        \
+       cursor_image_mask.xbm   \
+       cursor_barcode.xbm      \
+       cursor_barcode_mask.xbm 
+
diff --git a/src/pixmaps/Makefile.in b/src/pixmaps/Makefile.in
new file mode 100644 (file)
index 0000000..6ae7312
--- /dev/null
@@ -0,0 +1,418 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/pixmaps
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+       collate.xpm             \
+       nocollate.xpm           \
+       checkerboard.xpm        \
+       cursor_text.xbm         \
+       cursor_text_mask.xbm    \
+       cursor_box.xbm          \
+       cursor_box_mask.xbm     \
+       cursor_line.xbm         \
+       cursor_line_mask.xbm    \
+       cursor_ellipse.xbm      \
+       cursor_ellipse_mask.xbm \
+       cursor_image.xbm        \
+       cursor_image_mask.xbm   \
+       cursor_barcode.xbm      \
+       cursor_barcode_mask.xbm 
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/pixmaps/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu src/pixmaps/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# 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/src/pixmaps/checkerboard.xpm b/src/pixmaps/checkerboard.xpm
new file mode 100644 (file)
index 0000000..33ab7b5
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char * checkerboard_xpm[] = {
+"24 24 2 1",
+"      c #CCCCCC",
+".     c #000000",
+"..  ..  ..  ..  ..  ..  ",
+"..  ..  ..  ..  ..  ..  ",
+"  ..  ..  ..  ..  ..  ..",
+"  ..  ..  ..  ..  ..  ..",
+"..  ..  ..  ..  ..  ..  ",
+"..  ..  ..  ..  ..  ..  ",
+"  ..  ..  ..  ..  ..  ..",
+"  ..  ..  ..  ..  ..  ..",
+"..  ..  ..  ..  ..  ..  ",
+"..  ..  ..  ..  ..  ..  ",
+"  ..  ..  ..  ..  ..  ..",
+"  ..  ..  ..  ..  ..  ..",
+"..  ..  ..  ..  ..  ..  ",
+"..  ..  ..  ..  ..  ..  ",
+"  ..  ..  ..  ..  ..  ..",
+"  ..  ..  ..  ..  ..  ..",
+"..  ..  ..  ..  ..  ..  ",
+"..  ..  ..  ..  ..  ..  ",
+"  ..  ..  ..  ..  ..  ..",
+"  ..  ..  ..  ..  ..  ..",
+"..  ..  ..  ..  ..  ..  ",
+"..  ..  ..  ..  ..  ..  ",
+"  ..  ..  ..  ..  ..  ..",
+"  ..  ..  ..  ..  ..  .."};
diff --git a/src/pixmaps/collate.xpm b/src/pixmaps/collate.xpm
new file mode 100644 (file)
index 0000000..a781151
--- /dev/null
@@ -0,0 +1,34 @@
+/* XPM */
+static char *collate_xpm[]={
+"58 28 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"..........................................................",
+".###################..###################.................",
+".#aaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaa#.................",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaaa##aaaaaaaa#.................",
+".#aaaaaaa##aaaaaaaa#..#aaaaaa#aa#aaaaaaa#.................",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaaaaa#aaaaaaa#..##..##..##.....",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaaaa#aaaaaaaa#..##..##..##.....",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaaa#aaaaaaaaa#.................",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaa#aaaaaaaaaa#.................",
+".#aaaaaaa###aaaaaaa#..#aaaaaa####aaaaaaa#.................",
+".#aaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaa#.................",
+".###################..###################.................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+".................###################..###################.",
+".................#aaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaa#.",
+".................#aaaaaaaa#aaaaaaaa#..#aaaaaaa##aaaaaaaa#.",
+".................#aaaaaaa##aaaaaaaa#..#aaaaaa#aa#aaaaaaa#.",
+"....##..##..##...#aaaaaaaa#aaaaaaaa#..#aaaaaaaaa#aaaaaaa#.",
+"....##..##..##...#aaaaaaaa#aaaaaaaa#..#aaaaaaaa#aaaaaaaa#.",
+".................#aaaaaaaa#aaaaaaaa#..#aaaaaaa#aaaaaaaaa#.",
+".................#aaaaaaaa#aaaaaaaa#..#aaaaaa#aaaaaaaaaa#.",
+".................#aaaaaaa###aaaaaaa#..#aaaaaa####aaaaaaa#.",
+".................#aaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaa#.",
+".................###################..###################.",
+"..........................................................",
+".........................................................."};
diff --git a/src/pixmaps/cursor_barcode.xbm b/src/pixmaps/cursor_barcode.xbm
new file mode 100644 (file)
index 0000000..6e8d1d6
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_barcode_width 32
+#define cursor_barcode_height 32
+#define cursor_barcode_x_hot 7
+#define cursor_barcode_y_hot 7
+static unsigned char cursor_barcode_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0xa0, 0xad, 0x5a, 0x00, 0xa0, 0xad, 0x5a,
+   0x00, 0xa0, 0xad, 0x5a, 0x00, 0xa0, 0xad, 0x5a, 0x00, 0xa0, 0xad, 0x5a,
+   0x00, 0xa0, 0xad, 0x5a, 0x00, 0xa0, 0xad, 0x5a, 0x00, 0xa0, 0xad, 0x5a,
+   0x00, 0xa0, 0xad, 0x5a, 0x00, 0xa0, 0xad, 0x5a, 0x00, 0xa0, 0xad, 0x5a,
+   0x00, 0xa0, 0xad, 0x5a, 0x00, 0xa0, 0xad, 0x5a, 0x00, 0xa0, 0xad, 0x5a,
+   0x00, 0xa0, 0xad, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/cursor_barcode_mask.xbm b/src/pixmaps/cursor_barcode_mask.xbm
new file mode 100644 (file)
index 0000000..52ed3ba
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_barcode_mask_width 32
+#define cursor_barcode_mask_height 32
+#define cursor_barcode_mask_x_hot 7
+#define cursor_barcode_mask_y_hot 7
+static unsigned char cursor_barcode_mask_bits[] = {
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xc0, 0xf1, 0xff, 0xff, 0xc0, 0xf1, 0xff, 0xff, 0xc0, 0xf1, 0xff, 0xff,
+   0x00, 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff,
+   0x00, 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff,
+   0x00, 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff,
+   0x00, 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff,
+   0x00, 0xf0, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/cursor_box.xbm b/src/pixmaps/cursor_box.xbm
new file mode 100644 (file)
index 0000000..48ae4ea
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_box_width 32
+#define cursor_box_height 32
+#define cursor_box_x_hot 7
+#define cursor_box_y_hot 7
+static unsigned char cursor_box_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x80, 0xff, 0x7f, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x80, 0x01, 0x60,
+   0x00, 0x80, 0x01, 0x60, 0x00, 0x80, 0x01, 0x60, 0x00, 0x80, 0x01, 0x60,
+   0x00, 0x80, 0x01, 0x60, 0x00, 0x80, 0x01, 0x60, 0x00, 0x80, 0x01, 0x60,
+   0x00, 0x80, 0x01, 0x60, 0x00, 0x80, 0x01, 0x60, 0x00, 0x80, 0x01, 0x60,
+   0x00, 0x80, 0x01, 0x60, 0x00, 0x80, 0x01, 0x60, 0x00, 0x80, 0xff, 0x7f,
+   0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/cursor_box_mask.xbm b/src/pixmaps/cursor_box_mask.xbm
new file mode 100644 (file)
index 0000000..b41e055
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_box_mask_width 32
+#define cursor_box_mask_height 32
+#define cursor_box_mask_x_hot 7
+#define cursor_box_mask_y_hot 7
+static unsigned char cursor_box_mask_bits[] = {
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0xc1, 0xff, 0xff,
+   0x00, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff,
+   0x00, 0xc0, 0x03, 0xf0, 0x00, 0xc0, 0x03, 0xf0, 0x00, 0xc0, 0x03, 0xf0,
+   0x00, 0xc0, 0x03, 0xf0, 0x00, 0xc0, 0x03, 0xf0, 0x00, 0xc0, 0x03, 0xf0,
+   0x00, 0xc0, 0x03, 0xf0, 0x00, 0xc0, 0x03, 0xf0, 0x00, 0xc0, 0x03, 0xf0,
+   0x00, 0xc0, 0x03, 0xf0, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff,
+   0x00, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff};
diff --git a/src/pixmaps/cursor_ellipse.xbm b/src/pixmaps/cursor_ellipse.xbm
new file mode 100644 (file)
index 0000000..946af9a
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_ellipse_width 32
+#define cursor_ellipse_height 32
+#define cursor_ellipse_x_hot 7
+#define cursor_ellipse_y_hot 7
+static unsigned char cursor_ellipse_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x7c, 0x00, 0x80, 0x00, 0xef, 0x01, 0x00, 0x80, 0x01, 0x03,
+   0x00, 0xc0, 0x00, 0x06, 0x00, 0x60, 0x00, 0x0c, 0x00, 0x20, 0x00, 0x08,
+   0x00, 0x30, 0x00, 0x18, 0x00, 0x30, 0x00, 0x18, 0x00, 0x10, 0x00, 0x10,
+   0x00, 0x30, 0x00, 0x18, 0x00, 0x30, 0x00, 0x18, 0x00, 0x20, 0x00, 0x08,
+   0x00, 0x60, 0x00, 0x0c, 0x00, 0xc0, 0x00, 0x06, 0x00, 0x80, 0x01, 0x03,
+   0x00, 0x00, 0xef, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/cursor_ellipse_mask.xbm b/src/pixmaps/cursor_ellipse_mask.xbm
new file mode 100644 (file)
index 0000000..22fb544
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_ellipse_mask_width 32
+#define cursor_ellipse_mask_height 32
+#define cursor_ellipse_mask_x_hot 7
+#define cursor_ellipse_mask_y_hot 7
+static unsigned char cursor_ellipse_mask_bits[] = {
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0xfe, 0x00,
+   0xc0, 0x81, 0xff, 0x03, 0xc0, 0xc1, 0xff, 0x07, 0xc0, 0xe1, 0xff, 0x0f,
+   0x00, 0xf0, 0x83, 0x1f, 0x00, 0xf0, 0x01, 0x1f, 0x00, 0xf8, 0x00, 0x3e,
+   0x00, 0x78, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x3c,
+   0x00, 0x78, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x3c, 0x00, 0xf8, 0x00, 0x3e,
+   0x00, 0xf0, 0x01, 0x1f, 0x00, 0xf0, 0x83, 0x1f, 0x00, 0xe0, 0xff, 0x0f,
+   0x00, 0xc0, 0xff, 0x07, 0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0xfe, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/cursor_image.xbm b/src/pixmaps/cursor_image.xbm
new file mode 100644 (file)
index 0000000..3230836
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_image_width 32
+#define cursor_image_height 32
+#define cursor_image_x_hot 7
+#define cursor_image_y_hot 7
+static unsigned char cursor_image_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0xf0, 0xff, 0x7f, 0x80, 0x10, 0x00, 0x40, 0x00, 0x10, 0x00, 0x40,
+   0x00, 0x10, 0x00, 0x4c, 0x00, 0x10, 0x00, 0x52, 0x00, 0x10, 0x08, 0x4c,
+   0x00, 0x10, 0x14, 0x40, 0x00, 0x10, 0x22, 0x40, 0x00, 0x10, 0x41, 0x40,
+   0x00, 0x90, 0xc1, 0x40, 0x00, 0x10, 0x41, 0x40, 0x00, 0xf0, 0xc1, 0x7f,
+   0x00, 0x10, 0x41, 0x40, 0x00, 0x10, 0x41, 0x40, 0x00, 0x10, 0x41, 0x40,
+   0x00, 0x10, 0x7f, 0x40, 0x00, 0x10, 0x00, 0x40, 0x00, 0x10, 0x00, 0x40,
+   0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/cursor_image_mask.xbm b/src/pixmaps/cursor_image_mask.xbm
new file mode 100644 (file)
index 0000000..9c79e82
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_image_mask_width 32
+#define cursor_image_mask_height 32
+#define cursor_image_mask_x_hot 7
+#define cursor_image_mask_y_hot 7
+static unsigned char cursor_image_mask_bits[] = {
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0xf9, 0xff, 0xff,
+   0xc0, 0xf9, 0xff, 0xff, 0xc0, 0xf9, 0xff, 0xff, 0xc0, 0xf9, 0xff, 0xff,
+   0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff,
+   0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff,
+   0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff,
+   0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff,
+   0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff,
+   0x00, 0xf8, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff};
diff --git a/src/pixmaps/cursor_line.xbm b/src/pixmaps/cursor_line.xbm
new file mode 100644 (file)
index 0000000..f5e2636
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_line_width 32
+#define cursor_line_height 32
+#define cursor_line_x_hot 7
+#define cursor_line_y_hot 7
+static unsigned char cursor_line_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08,
+   0x80, 0x00, 0x00, 0x0c, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03,
+   0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x60, 0x00,
+   0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00,
+   0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00,
+   0x00, 0xc0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
+   0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/cursor_line_mask.xbm b/src/pixmaps/cursor_line_mask.xbm
new file mode 100644 (file)
index 0000000..a9359d5
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_line_mask_width 32
+#define cursor_line_mask_height 32
+#define cursor_line_mask_x_hot 7
+#define cursor_line_mask_y_hot 7
+static unsigned char cursor_line_mask_bits[] = {
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x08, 0xc0, 0x01, 0x00, 0x1c,
+   0xc0, 0x01, 0x00, 0x1e, 0xc0, 0x01, 0x00, 0x0f, 0xc0, 0x01, 0x80, 0x07,
+   0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x00,
+   0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x1e, 0x00,
+   0x00, 0x00, 0x0f, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00,
+   0x00, 0x3c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/cursor_text.xbm b/src/pixmaps/cursor_text.xbm
new file mode 100644 (file)
index 0000000..4378c1a
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_text_width 32
+#define cursor_text_height 32
+#define cursor_text_x_hot 7
+#define cursor_text_y_hot 7
+static unsigned char cursor_text_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01,
+   0x00, 0xc0, 0x9c, 0x01, 0x00, 0x40, 0x1c, 0x01, 0x00, 0x00, 0x1c, 0x00,
+   0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00,
+   0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00,
+   0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x3e, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/cursor_text_mask.xbm b/src/pixmaps/cursor_text_mask.xbm
new file mode 100644 (file)
index 0000000..543c2b7
--- /dev/null
@@ -0,0 +1,16 @@
+#define cursor_text_mask_width 32
+#define cursor_text_mask_height 32
+#define cursor_text_mask_x_hot 7
+#define cursor_text_mask_y_hot 7
+static unsigned char cursor_text_mask_bits[] = {
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
+   0xc0, 0x01, 0x00, 0x00, 0xc0, 0xe1, 0xff, 0x03, 0xc0, 0xe1, 0xff, 0x03,
+   0x00, 0xe0, 0xff, 0x03, 0x00, 0xe0, 0xbe, 0x03, 0x00, 0x60, 0x3e, 0x03,
+   0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00,
+   0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00,
+   0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x00,
+   0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/src/pixmaps/nocollate.xpm b/src/pixmaps/nocollate.xpm
new file mode 100644 (file)
index 0000000..a67cc13
--- /dev/null
@@ -0,0 +1,34 @@
+/* XPM */
+static char *nocollate_xpm[]={
+"58 28 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"..........................................................",
+".###################..###################.................",
+".#aaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaa#.................",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaaaa#aaaaaaaa#.................",
+".#aaaaaaa##aaaaaaaa#..#aaaaaaa##aaaaaaaa#.................",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaaaa#aaaaaaaa#..##..##..##.....",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaaaa#aaaaaaaa#..##..##..##.....",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaaaa#aaaaaaaa#.................",
+".#aaaaaaaa#aaaaaaaa#..#aaaaaaaa#aaaaaaaa#.................",
+".#aaaaaaa###aaaaaaa#..#aaaaaaa###aaaaaaa#.................",
+".#aaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaa#.................",
+".###################..###################.................",
+"..........................................................",
+"..........................................................",
+"..........................................................",
+".................###################..###################.",
+".................#aaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaa#.",
+".................#aaaaaaaa##aaaaaaa#..#aaaaaaaa##aaaaaaa#.",
+".................#aaaaaaa#aa#aaaaaa#..#aaaaaaa#aa#aaaaaa#.",
+"....##..##..##...#aaaaaaaaaa#aaaaaa#..#aaaaaaaaaa#aaaaaa#.",
+"....##..##..##...#aaaaaaaaa#aaaaaaa#..#aaaaaaaaa#aaaaaaa#.",
+".................#aaaaaaaa#aaaaaaaa#..#aaaaaaaa#aaaaaaaa#.",
+".................#aaaaaaa#aaaaaaaaa#..#aaaaaaa#aaaaaaaaa#.",
+".................#aaaaaaa####aaaaaa#..#aaaaaaa####aaaaaa#.",
+".................#aaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaa#.",
+".................###################..###################.",
+"..........................................................",
+".........................................................."};
diff --git a/src/prefs-dialog.c b/src/prefs-dialog.c
new file mode 100644 (file)
index 0000000..0a09523
--- /dev/null
@@ -0,0 +1,692 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  prefs-dialog.c:  Preferences dialog module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "prefs-dialog.h"
+
+#include <glib/gi18n.h>
+#include <glade/glade-xml.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkstock.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtkspinbutton.h>
+
+#include "prefs.h"
+#include "hig.h"
+#include "mygal/widget-color-combo.h"
+#include "color.h"
+#include "util.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+#define US_LETTER_ID "US-Letter"
+#define A4_ID        "A4"
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glPrefsDialogPrivate
+{
+       GladeXML   *gui;
+
+       /* Units properties */
+       GtkWidget       *units_points_radio;
+       GtkWidget       *units_inches_radio;
+       GtkWidget       *units_mm_radio;
+
+       /* Page size properties */
+       GtkWidget       *page_size_us_letter_radio;
+       GtkWidget       *page_size_a4_radio;
+
+       /* Default text properties */
+       GtkWidget       *text_family_combo;
+       GtkWidget       *text_size_spin;
+       GtkWidget       *text_bold_toggle;
+       GtkWidget       *text_italic_toggle;
+       GtkWidget       *text_color_combo;
+       GtkWidget       *text_left_toggle;
+       GtkWidget       *text_center_toggle;
+       GtkWidget       *text_right_toggle;
+       GtkWidget       *text_line_spacing_spin;
+
+       /* Default line properties */
+       GtkWidget       *line_width_spin;
+       GtkWidget       *line_color_combo;
+
+       /* Default fill properties */
+       GtkWidget       *fill_color_combo;
+
+        /* Prevent recursion */
+       gboolean    stop_signals;
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void gl_prefs_dialog_finalize             (GObject            *object);
+static void gl_prefs_dialog_construct     (glPrefsDialog      *dialog);
+
+static void response_cb                   (glPrefsDialog      *dialog,
+                                          gint                response,
+                                          gpointer            user_data);
+
+static void construct_locale_page         (glPrefsDialog      *dialog);
+static void construct_object_page         (glPrefsDialog      *dialog);
+
+static void align_toggle_cb               (GtkToggleButton    *toggle,
+                                          glPrefsDialog      *dialog);
+                                                                                
+static void update_locale_page_from_prefs (glPrefsDialog      *dialog);
+static void update_object_page_from_prefs (glPrefsDialog      *dialog);
+
+static void update_prefs_from_locale_page (glPrefsDialog      *dialog);
+static void update_prefs_from_object_page (glPrefsDialog      *dialog);
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glPrefsDialog, gl_prefs_dialog, GTK_TYPE_DIALOG);
+
+static void
+gl_prefs_dialog_class_init (glPrefsDialogClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_PREFS, "");
+       
+       gl_prefs_dialog_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_prefs_dialog_finalize;      
+}
+
+static void
+gl_prefs_dialog_init (glPrefsDialog *dialog)
+{
+       gl_debug (DEBUG_PREFS, "START");
+
+       dialog->priv = g_new0 (glPrefsDialogPrivate, 1);
+
+       dialog->priv->gui = glade_xml_new (GLABELS_GLADE_DIR "prefs-dialog.glade",
+                                       "prefs_notebook",
+                                       NULL);
+
+       if (!dialog->priv->gui)
+        {
+               g_critical ("Could not open prefs-dialog.glade. gLabels may not be installed correctly!");
+               return;
+       }
+
+       gtk_container_set_border_width (GTK_CONTAINER(dialog), GL_HIG_PAD2);
+
+       gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
+       gtk_dialog_add_button (GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
+       gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
+
+       g_signal_connect(G_OBJECT (dialog), "response",
+                        G_CALLBACK (response_cb), NULL);
+
+        gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+        gtk_window_set_title (GTK_WINDOW (dialog), _("gLabels Preferences"));
+        gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+
+       gl_debug (DEBUG_PREFS, "END");
+}
+
+static void 
+gl_prefs_dialog_finalize (GObject *object)
+{
+       glPrefsDialog* dialog = GL_PREFS_DIALOG (object);
+       
+       gl_debug (DEBUG_PREFS, "START");
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_PREFS_DIALOG (dialog));
+       g_return_if_fail (dialog->priv != NULL);
+
+       if (dialog->priv->gui)
+        {
+               g_object_unref (G_OBJECT (dialog->priv->gui));
+       }
+       g_free (dialog->priv);
+
+       G_OBJECT_CLASS (gl_prefs_dialog_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_PREFS, "END");
+}
+
+/*****************************************************************************/
+/* NEW preferences dialog.                                                   */
+/*****************************************************************************/
+GtkWidget*
+gl_prefs_dialog_new (GtkWindow *parent)
+{
+       GtkWidget *dialog;
+
+       gl_debug (DEBUG_PREFS, "START");
+       gl_debug (DEBUG_PREFS, "page size = \"%s\"", gl_prefs->default_page_size);
+
+       dialog = GTK_WIDGET (g_object_new (GL_TYPE_PREFS_DIALOG, NULL));
+
+       if (parent)
+               gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+       
+       gl_prefs_dialog_construct (GL_PREFS_DIALOG(dialog));
+
+
+       gl_debug (DEBUG_PREFS, "END");
+
+       return dialog;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Construct composite widget.                                     */
+/*---------------------------------------------------------------------------*/
+static void
+gl_prefs_dialog_construct (glPrefsDialog *dialog)
+{
+       GtkWidget *notebook;
+
+       g_return_if_fail (GL_IS_PREFS_DIALOG (dialog));
+       g_return_if_fail (dialog->priv != NULL);
+
+       notebook = glade_xml_get_widget (dialog->priv->gui, "prefs_notebook");
+       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), notebook, FALSE, FALSE, 0);
+
+       construct_locale_page (dialog);
+       construct_object_page (dialog);
+
+       update_locale_page_from_prefs (dialog);
+       update_object_page_from_prefs (dialog);
+
+        gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);   
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  "Response" callback.                                            */
+/*---------------------------------------------------------------------------*/
+static void
+response_cb (glPrefsDialog *dialog,
+            gint          response,
+            gpointer      user_data)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail(dialog != NULL);
+       g_return_if_fail(GTK_IS_DIALOG(dialog));
+
+       switch(response) {
+       case GTK_RESPONSE_CLOSE:
+               gtk_widget_hide (GTK_WIDGET(dialog));
+               break;
+       case GTK_RESPONSE_DELETE_EVENT:
+               break;
+       default:
+               g_print ("response = %d", response);
+               g_assert_not_reached ();
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Build Locale Properties Notebook Tab                           */
+/*--------------------------------------------------------------------------*/
+static void
+construct_locale_page (glPrefsDialog *dialog)
+{
+
+       dialog->priv->units_points_radio =
+               glade_xml_get_widget (dialog->priv->gui, "units_points_radio");
+
+       dialog->priv->units_inches_radio =
+               glade_xml_get_widget (dialog->priv->gui, "units_inches_radio");
+
+       dialog->priv->units_mm_radio =
+               glade_xml_get_widget (dialog->priv->gui, "units_mm_radio");
+
+       dialog->priv->page_size_us_letter_radio =
+               glade_xml_get_widget (dialog->priv->gui, "page_size_us_letter_radio");
+
+       dialog->priv->page_size_a4_radio =
+               glade_xml_get_widget (dialog->priv->gui, "page_size_a4_radio");
+
+       g_signal_connect_swapped (
+               G_OBJECT(dialog->priv->units_points_radio),
+               "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
+       g_signal_connect_swapped (
+               G_OBJECT(dialog->priv->units_inches_radio),
+               "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
+       g_signal_connect_swapped (
+               G_OBJECT(dialog->priv->units_mm_radio),
+               "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
+       g_signal_connect_swapped (
+               G_OBJECT(dialog->priv->page_size_us_letter_radio),
+               "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
+       g_signal_connect_swapped (
+               G_OBJECT(dialog->priv->page_size_a4_radio),
+               "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Build Default Object Properties Notebook Tab                   */
+/*--------------------------------------------------------------------------*/
+static void
+construct_object_page (glPrefsDialog *dialog)
+{
+        GList    *family_names;
+
+       dialog->priv->text_family_combo =
+               glade_xml_get_widget (dialog->priv->gui, "text_family_combo");
+       dialog->priv->text_size_spin =
+               glade_xml_get_widget (dialog->priv->gui, "text_size_spin");
+       dialog->priv->text_bold_toggle =
+               glade_xml_get_widget (dialog->priv->gui, "text_bold_toggle");
+       dialog->priv->text_italic_toggle =
+               glade_xml_get_widget (dialog->priv->gui, "text_italic_toggle");
+       dialog->priv->text_color_combo =
+               glade_xml_get_widget (dialog->priv->gui, "text_color_combo");
+       dialog->priv->text_left_toggle =
+               glade_xml_get_widget (dialog->priv->gui, "text_left_toggle");
+       dialog->priv->text_center_toggle =
+               glade_xml_get_widget (dialog->priv->gui, "text_center_toggle");
+       dialog->priv->text_right_toggle =
+               glade_xml_get_widget (dialog->priv->gui, "text_right_toggle");
+       dialog->priv->text_line_spacing_spin =
+               glade_xml_get_widget (dialog->priv->gui, "text_line_spacing_spin");
+
+       dialog->priv->line_width_spin =
+               glade_xml_get_widget (dialog->priv->gui, "line_width_spin");
+       dialog->priv->line_color_combo =
+               glade_xml_get_widget (dialog->priv->gui, "line_color_combo");
+
+       dialog->priv->fill_color_combo =
+               glade_xml_get_widget (dialog->priv->gui, "fill_color_combo");
+
+       gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dialog->priv->text_family_combo));
+
+        /* Load family names */
+        family_names = gl_util_get_font_family_list ();
+       gl_util_combo_box_set_strings (GTK_COMBO_BOX (dialog->priv->text_family_combo),
+                                      family_names);
+                                                                                
+
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->text_family_combo),
+                                 "changed",
+                                 G_CALLBACK(update_prefs_from_object_page),
+                                 G_OBJECT(dialog));
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->text_size_spin),
+                                 "changed",
+                                 G_CALLBACK(update_prefs_from_object_page),
+                                 G_OBJECT(dialog));
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->text_bold_toggle),
+                                 "toggled",
+                                 G_CALLBACK(update_prefs_from_object_page),
+                                 G_OBJECT(dialog));
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->text_italic_toggle),
+                                 "toggled",
+                                 G_CALLBACK(update_prefs_from_object_page),
+                                 G_OBJECT(dialog));
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->text_color_combo),
+                                 "color_changed",
+                                 G_CALLBACK(update_prefs_from_object_page),
+                                 G_OBJECT(dialog));
+
+       g_signal_connect (G_OBJECT(dialog->priv->text_left_toggle),
+                         "toggled",
+                         G_CALLBACK(align_toggle_cb),
+                         G_OBJECT(dialog));
+       g_signal_connect (G_OBJECT(dialog->priv->text_center_toggle),
+                         "toggled",
+                         G_CALLBACK(align_toggle_cb),
+                         G_OBJECT(dialog));
+       g_signal_connect (G_OBJECT(dialog->priv->text_right_toggle),
+                         "toggled",
+                         G_CALLBACK(align_toggle_cb),
+                         G_OBJECT(dialog));
+
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->text_line_spacing_spin),
+                                 "changed",
+                                 G_CALLBACK(update_prefs_from_object_page),
+                                 G_OBJECT(dialog));
+
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->line_width_spin),
+                                 "changed",
+                                 G_CALLBACK(update_prefs_from_object_page),
+                                 G_OBJECT(dialog));
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->line_color_combo),
+                                 "color_changed",
+                                 G_CALLBACK(update_prefs_from_object_page),
+                                 G_OBJECT(dialog));
+
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->fill_color_combo),
+                                 "color_changed",
+                                 G_CALLBACK(update_prefs_from_object_page),
+                                 G_OBJECT(dialog));
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Alignment togglebutton callback.                               */
+/*--------------------------------------------------------------------------*/
+static void
+align_toggle_cb (GtkToggleButton *toggle,
+                 glPrefsDialog   *dialog)
+{
+        if (gtk_toggle_button_get_active (toggle))
+        {
+  
+                if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_left_toggle))
+                {
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (dialog->priv->text_center_toggle),
+                                                      FALSE);
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (dialog->priv->text_right_toggle),
+                                                      FALSE);
+                }
+                else if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_center_toggle))
+                {
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (dialog->priv->text_left_toggle),
+                                                      FALSE);
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (dialog->priv->text_right_toggle),
+                                                      FALSE);
+                }
+                else if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_right_toggle))
+                {
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (dialog->priv->text_left_toggle),
+                                                      FALSE);
+                        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                                      (dialog->priv->text_center_toggle),
+                                                      FALSE);
+                }
+                                                                                
+               update_prefs_from_object_page (dialog);
+        }
+                                                                                
+}
+                                                                                
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Update locale page widgets from current prefs.                 */
+/*--------------------------------------------------------------------------*/
+static void
+update_locale_page_from_prefs (glPrefsDialog *dialog)
+{
+       dialog->priv->stop_signals = TRUE;
+
+       switch (gl_prefs->units) {
+       case LGL_UNITS_POINT:
+               gtk_toggle_button_set_active (
+                       GTK_TOGGLE_BUTTON(dialog->priv->units_points_radio),
+                       TRUE);
+               break;
+       case LGL_UNITS_INCH:
+               gtk_toggle_button_set_active (
+                       GTK_TOGGLE_BUTTON(dialog->priv->units_inches_radio),
+                       TRUE);
+               break;
+       case LGL_UNITS_MM:
+               gtk_toggle_button_set_active (
+                       GTK_TOGGLE_BUTTON(dialog->priv->units_mm_radio),
+                       TRUE);
+               break;
+       default:
+               g_message ("Illegal units");    /* Should not happen */
+               break;
+       }
+
+       if ( g_strcasecmp(gl_prefs->default_page_size, US_LETTER_ID) == 0)
+        {
+               gtk_toggle_button_set_active (
+                       GTK_TOGGLE_BUTTON(dialog->priv->page_size_us_letter_radio), TRUE);
+       }
+        else if ( g_strcasecmp(gl_prefs->default_page_size, A4_ID) == 0)
+        {
+               gtk_toggle_button_set_active (
+                       GTK_TOGGLE_BUTTON(dialog->priv->page_size_a4_radio), TRUE);
+       }
+        else
+        {
+               g_message ("Unknown default page size"); /* Shouldn't happen */
+       }
+
+       dialog->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Update object page widgets from current prefs.                 */
+/*--------------------------------------------------------------------------*/
+static void
+update_object_page_from_prefs (glPrefsDialog *dialog)
+{
+        GList    *family_names;
+        gchar    *good_font_family;
+       GdkColor *gdk_color;
+       dialog->priv->stop_signals = TRUE;
+
+
+        /* Make sure we have a valid font family.  if not provide a good default. */
+        family_names = gl_util_get_font_family_list ();
+        if (g_list_find_custom (family_names,
+                               gl_prefs->default_font_family,
+                               (GCompareFunc)g_utf8_collate))
+        {
+                good_font_family = g_strdup (gl_prefs->default_font_family);
+        }
+        else
+        {
+                if (family_names != NULL)
+                {
+                        good_font_family = g_strdup (family_names->data); /* 1st entry */
+                }
+                else
+                {
+                        good_font_family = NULL;
+                }
+        }
+       gl_util_combo_box_set_active_text (GTK_COMBO_BOX (dialog->priv->text_family_combo),
+                                          good_font_family);
+        g_free (good_font_family);
+
+        gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->text_size_spin),
+                                   gl_prefs->default_font_size);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_bold_toggle),
+                                      (gl_prefs->default_font_weight == PANGO_WEIGHT_BOLD));
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_italic_toggle),
+                                      gl_prefs->default_font_italic_flag);
+        gdk_color = gl_color_to_gdk_color (gl_prefs->default_text_color);
+        color_combo_set_color (COLOR_COMBO(dialog->priv->text_color_combo), gdk_color);
+        g_free (gdk_color);
+
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_left_toggle),
+                                 (gl_prefs->default_text_alignment == GTK_JUSTIFY_LEFT));
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_center_toggle),
+                                 (gl_prefs->default_text_alignment == GTK_JUSTIFY_CENTER));
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_right_toggle),
+                                 (gl_prefs->default_text_alignment == GTK_JUSTIFY_RIGHT));
+
+        gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->text_line_spacing_spin),
+                                   gl_prefs->default_text_line_spacing);
+
+        gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->line_width_spin),
+                                   gl_prefs->default_line_width);
+       gdk_color = gl_color_to_gdk_color (gl_prefs->default_line_color);
+        color_combo_set_color (COLOR_COMBO(dialog->priv->line_color_combo), gdk_color);
+        g_free (gdk_color);
+
+
+       gdk_color = gl_color_to_gdk_color (gl_prefs->default_fill_color);
+        color_combo_set_color (COLOR_COMBO(dialog->priv->fill_color_combo), gdk_color);
+        g_free (gdk_color);
+
+
+       dialog->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Update prefs from current state of locale page widgets.        */
+/*--------------------------------------------------------------------------*/
+static void
+update_prefs_from_locale_page (glPrefsDialog *dialog)
+{
+       if (dialog->priv->stop_signals) return;
+
+       if (gtk_toggle_button_get_active (
+                   GTK_TOGGLE_BUTTON(dialog->priv->units_points_radio)))
+        {
+               gl_prefs->units = LGL_UNITS_POINT;
+       }
+       if (gtk_toggle_button_get_active (
+                   GTK_TOGGLE_BUTTON(dialog->priv->units_inches_radio)))
+        {
+               gl_prefs->units = LGL_UNITS_INCH;
+       }
+       if (gtk_toggle_button_get_active (
+                   GTK_TOGGLE_BUTTON(dialog->priv->units_mm_radio)))
+        {
+               gl_prefs->units = LGL_UNITS_MM;
+       }
+
+       if (gtk_toggle_button_get_active (
+                   GTK_TOGGLE_BUTTON(dialog->priv->page_size_us_letter_radio)))
+        {
+               g_free (gl_prefs->default_page_size);
+               gl_prefs->default_page_size = g_strdup (US_LETTER_ID);
+       }
+       if (gtk_toggle_button_get_active (
+                   GTK_TOGGLE_BUTTON(dialog->priv->page_size_a4_radio)))
+        {
+               g_free (gl_prefs->default_page_size);
+               gl_prefs->default_page_size = g_strdup (A4_ID);
+       }
+
+       gl_prefs_model_save_settings (gl_prefs);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Update prefs from current state of object page widgets.        */
+/*--------------------------------------------------------------------------*/
+static void
+update_prefs_from_object_page (glPrefsDialog *dialog)
+{
+       GdkColor *gdk_color;
+       gboolean  is_default;
+
+       if (dialog->priv->stop_signals) return;
+
+        g_free (gl_prefs->default_font_family);
+        gl_prefs->default_font_family =
+               gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->text_family_combo));
+        gl_prefs->default_font_size =
+                gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->text_size_spin));
+
+        if (gtk_toggle_button_get_active
+            (GTK_TOGGLE_BUTTON (dialog->priv->text_bold_toggle)))
+        {
+                gl_prefs->default_font_weight = PANGO_WEIGHT_BOLD;
+        }
+        else
+        {
+                gl_prefs->default_font_weight = PANGO_WEIGHT_NORMAL;
+        }
+
+        gl_prefs->default_font_italic_flag =
+                gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
+                                              (dialog->priv->text_italic_toggle));
+
+        gdk_color = color_combo_get_color (COLOR_COMBO(dialog->priv->text_color_combo),
+                                           &is_default);
+        if (!is_default)
+        {
+                gl_prefs->default_text_color = gl_color_from_gdk_color (gdk_color);
+        }
+
+        if (gtk_toggle_button_get_active
+            (GTK_TOGGLE_BUTTON (dialog->priv->text_left_toggle)))
+        {
+                gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
+        }
+        else if (gtk_toggle_button_get_active
+                 (GTK_TOGGLE_BUTTON (dialog->priv->text_right_toggle)))
+        {
+                gl_prefs->default_text_alignment = GTK_JUSTIFY_RIGHT;
+        }
+        else if (gtk_toggle_button_get_active
+                 (GTK_TOGGLE_BUTTON (dialog->priv->text_center_toggle)))
+        {
+                gl_prefs->default_text_alignment = GTK_JUSTIFY_CENTER;
+        }
+        else
+        {
+               /* Should not happen. */
+                gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
+        }
+                                                                                
+
+        gl_prefs->default_text_line_spacing =
+                gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->text_line_spacing_spin));
+
+        gl_prefs->default_line_width =
+                gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->line_width_spin));
+
+        gdk_color = color_combo_get_color (COLOR_COMBO(dialog->priv->line_color_combo),
+                                           &is_default);
+        if (!is_default)
+        {
+                gl_prefs->default_line_color = gl_color_from_gdk_color (gdk_color);
+        }
+
+
+        gdk_color = color_combo_get_color (COLOR_COMBO(dialog->priv->fill_color_combo),
+                                           &is_default);
+        if (!is_default)
+        {
+                gl_prefs->default_fill_color = gl_color_from_gdk_color (gdk_color);
+        }
+
+       gl_prefs_model_save_settings (gl_prefs);
+}
+
+
+       
diff --git a/src/prefs-dialog.h b/src/prefs-dialog.h
new file mode 100644 (file)
index 0000000..8ec8e92
--- /dev/null
@@ -0,0 +1,65 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  prefs-dialog.h:  Preferences dialog module header file
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __PREFS_DIALOG_H__
+#define __PREFS_DIALOG_H__
+
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkdialog.h>
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_PREFS_DIALOG            (gl_prefs_dialog_get_type ())
+#define GL_PREFS_DIALOG(obj)            (GTK_CHECK_CAST ((obj), GL_TYPE_PREFS_DIALOG, glPrefsDialog))
+#define GL_PREFS_DIALOG_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_PREFS_DIALOG, glPrefsDialogClass))
+#define GL_IS_PREFS_DIALOG(obj)         (GTK_CHECK_TYPE ((obj), GL_TYPE_PREFS_DIALOG))
+#define GL_IS_PREFS_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_PREFS_DIALOG))
+#define GL_PREFS_DIALOG_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), GL_TYPE_PREFS_DIALOG, glPrefsDialogClass))
+
+
+typedef struct _glPrefsDialog          glPrefsDialog;
+typedef struct _glPrefsDialogClass     glPrefsDialogClass;
+
+typedef struct _glPrefsDialogPrivate   glPrefsDialogPrivate;
+
+struct _glPrefsDialog
+{
+       GtkDialog             parent_instance;
+
+       glPrefsDialogPrivate *priv;
+
+};
+
+struct  _glPrefsDialogClass
+{
+       GtkDialogClass        parent_class;
+};
+
+GType          gl_prefs_dialog_get_type        (void) G_GNUC_CONST;
+
+GtkWidget      *gl_prefs_dialog_new            (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* __PREFS_DIALOG_H__ */
diff --git a/src/prefs-model.c b/src/prefs-model.c
new file mode 100644 (file)
index 0000000..1d5c219
--- /dev/null
@@ -0,0 +1,754 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  prefs-model.c:  Application preferences model module
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "prefs-model.h"
+
+#include <libglabels/db.h>
+#include <libglabels/xml.h>
+#include <gtk/gtkpapersize.h>
+
+#include "marshal.h"
+#include "util.h"
+#include "color.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+/* GConf keys */
+#define BASE_KEY                            "/apps/glabels"
+
+#define PREF_UNITS                          "/units"
+#define PREF_DEFAULT_PAGE_SIZE              "/default-page-size"
+
+#define PREF_DEFAULT_FONT_FAMILY            "/default-font-family"
+#define PREF_DEFAULT_FONT_SIZE              "/default-font-size"
+#define PREF_DEFAULT_FONT_WEIGHT            "/default-font-weight"
+#define PREF_DEFAULT_FONT_ITALIC_FLAG       "/default-font-italic-flag"
+#define PREF_DEFAULT_TEXT_COLOR             "/default-text-color"
+#define PREF_DEFAULT_TEXT_ALIGNMENT         "/default-text-alignment"
+#define PREF_DEFAULT_TEXT_LINE_SPACING      "/default-text-line-spacing"
+
+#define PREF_DEFAULT_LINE_WIDTH             "/default-line-width"
+#define PREF_DEFAULT_LINE_COLOR             "/default-line-color"
+
+#define PREF_DEFAULT_FILL_COLOR             "/default-fill-color"
+
+#define PREF_MAIN_TOOLBAR_VISIBLE           "/main-toolbar-visible"
+#define PREF_MAIN_TOOLBAR_BUTTONS_STYLE     "/main-toolbar-buttons-style"
+#define PREF_MAIN_TOOLBAR_VIEW_TOOLTIPS     "/main-toolbar-view-tooltips"
+
+#define PREF_DRAWING_TOOLBAR_VISIBLE        "/drawing-toolbar-visible"
+#define PREF_DRAWING_TOOLBAR_VIEW_TOOLTIPS  "/drawing-toolbar-view-tooltips"
+
+#define PREF_PROPERTY_TOOLBAR_VISIBLE        "/property-toolbar-visible"
+#define PREF_PROPERTY_TOOLBAR_VIEW_TOOLTIPS  "/property-toolbar-view-tooltips"
+
+#define PREF_GRID_VISIBLE                   "/grid-visible"
+#define PREF_MARKUP_VISIBLE                 "/markup-visible"
+
+#define PREF_MAX_RECENTS                    "/max-recents"
+
+#define PREF_RECENT_TEMPLATES               "/recent-templates"
+#define PREF_MAX_RECENT_TEMPLATES           "/max-recent-templates"
+
+/* Default values */
+#define DEFAULT_UNITS_STRING_US    units_to_string (LGL_UNITS_INCH)
+#define DEFAULT_PAGE_SIZE_US       "US-Letter"
+
+#define DEFAULT_UNITS_STRING_METRIC units_to_string (LGL_UNITS_MM)
+#define DEFAULT_PAGE_SIZE_METRIC   "A4"
+
+#define DEFAULT_FONT_FAMILY        "Sans"
+#define DEFAULT_FONT_SIZE          14.0
+#define DEFAULT_FONT_WEIGHT_STRING gl_util_weight_to_string (PANGO_WEIGHT_NORMAL)
+#define DEFAULT_FONT_ITALIC_FLAG   FALSE
+#define DEFAULT_TEXT_ALIGN_STRING  gl_util_align_to_string (PANGO_ALIGN_LEFT)
+#define DEFAULT_TEXT_COLOR         GL_COLOR (0,0,0)
+#define DEFAULT_TEXT_LINE_SPACING  1.0
+
+#define DEFAULT_LINE_WIDTH         1.0
+#define DEFAULT_LINE_COLOR         GL_COLOR_A (0, 0, 0, 255)
+
+#define DEFAULT_FILL_COLOR         GL_COLOR_A (0, 255, 0, 255)
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+enum {
+       CHANGED,
+       LAST_SIGNAL
+};
+
+
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+static guint signals[LAST_SIGNAL] = {0};
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void           gl_prefs_model_finalize      (GObject             *object);
+
+static void           notify_cb                    (GConfClient         *client,
+                                                   guint                cnxn_id,
+                                                   GConfEntry          *entry,
+                                                   glPrefsModel        *prefs_model);
+
+static gchar         *get_string                   (GConfClient         *client,
+                                                   const gchar         *key,
+                                                   const gchar         *def);
+
+static gboolean       get_bool                     (GConfClient         *client,
+                                                   const gchar         *key,
+                                                   gboolean             def);
+
+static gint           get_int                      (GConfClient         *client,
+                                                   const gchar         *key,
+                                                   gint                 def);
+
+static gdouble        get_float                    (GConfClient         *client,
+                                                   const gchar         *key,
+                                                   gdouble              def);
+
+static lglUnitsType   string_to_units              (const gchar         *string);
+static const gchar   *units_to_string              (lglUnitsType         units);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glPrefsModel, gl_prefs_model, G_TYPE_OBJECT);
+
+static void
+gl_prefs_model_class_init (glPrefsModelClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_PREFS, "START");
+
+       gl_prefs_model_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_prefs_model_finalize;
+
+       signals[CHANGED] =
+               g_signal_new ("changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glPrefsModelClass, changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+
+       gl_debug (DEBUG_PREFS, "END");
+}
+
+static void
+gl_prefs_model_init (glPrefsModel *prefs_model)
+{
+       gl_debug (DEBUG_PREFS, "START");
+
+        prefs_model->gconf_client = gconf_client_get_default ();
+
+        g_return_if_fail (prefs_model->gconf_client != NULL);
+        gconf_client_add_dir (prefs_model->gconf_client,
+                              BASE_KEY,
+                              GCONF_CLIENT_PRELOAD_ONELEVEL,
+                              NULL);
+         
+        gconf_client_notify_add (prefs_model->gconf_client,
+                                 BASE_KEY,
+                                 (GConfClientNotifyFunc)notify_cb, prefs_model,
+                                 NULL, NULL);
+
+       gl_debug (DEBUG_PREFS, "END");
+}
+
+static void
+gl_prefs_model_finalize (GObject *object)
+{
+       glPrefsModel *prefs_model = GL_PREFS_MODEL (object);
+
+       gl_debug (DEBUG_PREFS, "START");
+
+       g_return_if_fail (object && GL_IS_PREFS_MODEL (object));
+
+       g_object_unref (G_OBJECT(prefs_model->gconf_client));
+       g_free (prefs_model->default_page_size);
+       g_free (prefs_model->default_font_family);
+
+       G_OBJECT_CLASS (gl_prefs_model_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_PREFS, "END");
+}
+
+/*****************************************************************************/
+/* New prefs_model object.                                                   */
+/*****************************************************************************/
+glPrefsModel *
+gl_prefs_model_new (void)
+{
+       glPrefsModel *prefs_model;
+
+       gl_debug (DEBUG_PREFS, "START");
+
+       prefs_model = GL_PREFS_MODEL (g_object_new (gl_prefs_model_get_type(), NULL));
+
+       gl_debug (DEBUG_PREFS, "END");
+
+       return prefs_model;
+}
+
+
+
+/*****************************************************************************/
+/* Save all settings.                                                        */
+/*****************************************************************************/
+void 
+gl_prefs_model_save_settings (glPrefsModel *prefs_model)
+{
+       gl_debug (DEBUG_PREFS, "START");
+       
+       g_return_if_fail (prefs_model && GL_IS_PREFS_MODEL(prefs_model));
+       g_return_if_fail (prefs_model->gconf_client != NULL);
+
+       /* We are saving settings because presumably some of them have been changed. */
+       g_signal_emit (G_OBJECT(prefs_model), signals[CHANGED], 0);
+
+       /* Units */
+       gconf_client_set_string (prefs_model->gconf_client,
+                                BASE_KEY PREF_UNITS,
+                                units_to_string(prefs_model->units),
+                                NULL);
+        lgl_xml_set_default_units (prefs_model->units);
+
+       /* Default page size */
+       gconf_client_set_string (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_PAGE_SIZE,
+                                prefs_model->default_page_size,
+                                NULL);
+
+
+       /* Text properties */
+       gconf_client_set_string (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_FONT_FAMILY,
+                                prefs_model->default_font_family,
+                                NULL);
+
+       gconf_client_set_float  (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_FONT_SIZE,
+                                prefs_model->default_font_size,
+                                NULL);
+
+       gconf_client_set_string (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_FONT_WEIGHT,
+                                gl_util_weight_to_string(prefs_model->default_font_weight),
+                                NULL);
+
+       gconf_client_set_int    (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_TEXT_COLOR,
+                                prefs_model->default_text_color,
+                                NULL);
+
+       gconf_client_set_string (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_TEXT_ALIGNMENT,
+                                gl_util_align_to_string(prefs_model->default_text_alignment),
+                                NULL);
+
+       gconf_client_set_float  (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_TEXT_LINE_SPACING,
+                                prefs_model->default_text_line_spacing,
+                                NULL);
+
+       /* Line properties */
+       gconf_client_set_float  (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_LINE_WIDTH,
+                                prefs_model->default_line_width,
+                                NULL);
+
+       gconf_client_set_int    (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_LINE_COLOR,
+                                prefs_model->default_line_color,
+                                NULL);
+
+
+       /* Fill properties */
+       gconf_client_set_int    (prefs_model->gconf_client,
+                                BASE_KEY PREF_DEFAULT_FILL_COLOR,
+                                prefs_model->default_fill_color,
+                                NULL);
+
+
+       /* Main Toolbar */
+       gconf_client_set_bool (prefs_model->gconf_client,
+                              BASE_KEY PREF_MAIN_TOOLBAR_VISIBLE,
+                              prefs_model->main_toolbar_visible,
+                              NULL);
+
+       gconf_client_set_int (prefs_model->gconf_client,
+                             BASE_KEY PREF_MAIN_TOOLBAR_BUTTONS_STYLE,
+                             prefs_model->main_toolbar_buttons_style,
+                             NULL);
+
+       gconf_client_set_bool (prefs_model->gconf_client,
+                              BASE_KEY PREF_MAIN_TOOLBAR_VIEW_TOOLTIPS,
+                              prefs_model->main_toolbar_view_tooltips,
+                              NULL);
+
+       /* Drawing Toolbar */
+       gconf_client_set_bool (prefs_model->gconf_client,
+                              BASE_KEY PREF_DRAWING_TOOLBAR_VISIBLE,
+                              prefs_model->drawing_toolbar_visible,
+                              NULL);
+
+       gconf_client_set_bool (prefs_model->gconf_client,
+                              BASE_KEY PREF_DRAWING_TOOLBAR_VIEW_TOOLTIPS,
+                              prefs_model->drawing_toolbar_view_tooltips,
+                              NULL);
+
+       /* Property Toolbar */
+       gconf_client_set_bool (prefs_model->gconf_client,
+                              BASE_KEY PREF_PROPERTY_TOOLBAR_VISIBLE,
+                              prefs_model->property_toolbar_visible,
+                              NULL);
+
+       gconf_client_set_bool (prefs_model->gconf_client,
+                              BASE_KEY PREF_PROPERTY_TOOLBAR_VIEW_TOOLTIPS,
+                              prefs_model->property_toolbar_view_tooltips,
+                              NULL);
+
+       /* View properties */
+       gconf_client_set_bool (prefs_model->gconf_client,
+                              BASE_KEY PREF_GRID_VISIBLE,
+                              prefs_model->grid_visible,
+                              NULL);
+
+       gconf_client_set_bool (prefs_model->gconf_client,
+                              BASE_KEY PREF_MARKUP_VISIBLE,
+                              prefs_model->markup_visible,
+                              NULL);
+
+       /* Recent files */
+       gconf_client_set_int (prefs_model->gconf_client,
+                             BASE_KEY PREF_MAX_RECENTS,
+                             prefs_model->max_recents,
+                             NULL);
+
+       /* Recent templates */
+       gconf_client_set_list (prefs_model->gconf_client,
+                              BASE_KEY PREF_RECENT_TEMPLATES,
+                               GCONF_VALUE_STRING,
+                               prefs_model->recent_templates,
+                               NULL);
+       gconf_client_set_int (prefs_model->gconf_client,
+                             BASE_KEY PREF_MAX_RECENT_TEMPLATES,
+                             prefs_model->max_recent_templates,
+                             NULL);
+
+
+       gconf_client_suggest_sync (prefs_model->gconf_client, NULL);
+       
+       gl_debug (DEBUG_PREFS, "END");
+}
+
+/*****************************************************************************/
+/* Load all settings.                                                        */
+/*****************************************************************************/
+void
+gl_prefs_model_load_settings (glPrefsModel *prefs_model)
+{
+        const gchar *pgsize, *default_units_string, *default_page_size;
+       gchar    *string;
+       lglPaper *paper;
+        GSList   *p, *p_next;
+
+       gl_debug (DEBUG_PREFS, "START");
+       
+       g_return_if_fail (prefs_model && GL_IS_PREFS_MODEL(prefs_model));
+       g_return_if_fail (prefs_model->gconf_client != NULL);
+
+        /* Make educated guess about locale defaults. */
+        pgsize = gtk_paper_size_get_default ();
+        if ( strcmp (pgsize,GTK_PAPER_NAME_LETTER) == 0 )
+        {
+                default_units_string = DEFAULT_UNITS_STRING_US;
+                default_page_size    = DEFAULT_PAGE_SIZE_US;
+        }
+        else
+        {
+                default_units_string = DEFAULT_UNITS_STRING_METRIC;
+                default_page_size    = DEFAULT_PAGE_SIZE_METRIC;
+        }
+
+       /* Units */
+       string =
+               get_string (prefs_model->gconf_client,
+                           BASE_KEY PREF_UNITS,
+                           default_units_string);
+       prefs_model->units = string_to_units( string );
+       g_free( string );
+        lgl_xml_set_default_units (prefs_model->units);
+
+
+       /* Page size */
+        g_free (prefs_model->default_page_size);
+       prefs_model->default_page_size =
+               get_string (prefs_model->gconf_client,
+                           BASE_KEY PREF_DEFAULT_PAGE_SIZE,
+                           default_page_size);
+
+       /* Text properties */
+        g_free (prefs_model->default_font_family);
+       prefs_model->default_font_family =
+               get_string (prefs_model->gconf_client,
+                           BASE_KEY PREF_DEFAULT_FONT_FAMILY,
+                           DEFAULT_FONT_FAMILY);
+
+       prefs_model->default_font_size =
+               get_float (prefs_model->gconf_client,
+                          BASE_KEY PREF_DEFAULT_FONT_SIZE,
+                          DEFAULT_FONT_SIZE);
+
+       string =
+               get_string (prefs_model->gconf_client,
+                           BASE_KEY PREF_DEFAULT_FONT_WEIGHT,
+                           DEFAULT_FONT_WEIGHT_STRING);
+       prefs_model->default_font_weight = gl_util_string_to_weight( string );
+       g_free( string );
+
+       prefs_model->default_text_color =
+               get_int (prefs_model->gconf_client,
+                        BASE_KEY PREF_DEFAULT_TEXT_COLOR,
+                        DEFAULT_TEXT_COLOR);
+
+       string =
+               get_string (prefs_model->gconf_client,
+                           BASE_KEY PREF_DEFAULT_TEXT_ALIGNMENT,
+                           DEFAULT_TEXT_ALIGN_STRING);
+       prefs_model->default_text_alignment = gl_util_string_to_align( string );
+       g_free( string );
+
+       prefs_model->default_text_line_spacing =
+               get_float (prefs_model->gconf_client,
+                          BASE_KEY PREF_DEFAULT_TEXT_LINE_SPACING,
+                          DEFAULT_TEXT_LINE_SPACING);
+
+       gl_debug (DEBUG_PREFS, "text_line_spacing = %f", prefs_model->default_text_line_spacing);
+
+       /* Line properties */
+       prefs_model->default_line_width =
+               get_float (prefs_model->gconf_client,
+                          BASE_KEY PREF_DEFAULT_LINE_WIDTH,
+                          DEFAULT_LINE_WIDTH);
+       prefs_model->default_line_color =
+               get_int (prefs_model->gconf_client,
+                        BASE_KEY PREF_DEFAULT_LINE_COLOR,
+                        DEFAULT_LINE_COLOR);
+
+       /* Fill properties */
+       prefs_model->default_fill_color =
+               get_int (prefs_model->gconf_client,
+                        BASE_KEY PREF_DEFAULT_FILL_COLOR,
+                        DEFAULT_FILL_COLOR);
+
+
+       /* User Inferface/Main Toolbar */
+       prefs_model->main_toolbar_visible =
+               get_bool (prefs_model->gconf_client,
+                         BASE_KEY PREF_MAIN_TOOLBAR_VISIBLE,
+                         TRUE);
+
+       prefs_model->main_toolbar_buttons_style =
+               get_int (prefs_model->gconf_client,
+                        BASE_KEY PREF_MAIN_TOOLBAR_BUTTONS_STYLE,
+                        GL_TOOLBAR_SYSTEM);
+
+       prefs_model->main_toolbar_view_tooltips =
+               get_bool (prefs_model->gconf_client,
+                         BASE_KEY PREF_MAIN_TOOLBAR_VIEW_TOOLTIPS,
+                         TRUE);
+
+       /* User Inferface/Drawing Toolbar */
+       prefs_model->drawing_toolbar_visible =
+               get_bool (prefs_model->gconf_client,
+                         BASE_KEY PREF_DRAWING_TOOLBAR_VISIBLE,
+                         TRUE);
+
+       prefs_model->drawing_toolbar_view_tooltips =
+               get_bool (prefs_model->gconf_client,
+                         BASE_KEY PREF_DRAWING_TOOLBAR_VIEW_TOOLTIPS,
+                         TRUE);
+
+       /* User Inferface/Property Toolbar */
+       prefs_model->property_toolbar_visible =
+               get_bool (prefs_model->gconf_client,
+                         BASE_KEY PREF_PROPERTY_TOOLBAR_VISIBLE,
+                         TRUE);
+
+       prefs_model->property_toolbar_view_tooltips =
+               get_bool (prefs_model->gconf_client,
+                         BASE_KEY PREF_PROPERTY_TOOLBAR_VIEW_TOOLTIPS,
+                         TRUE);
+
+
+       /* View properties */
+       prefs_model->grid_visible =
+               get_bool (prefs_model->gconf_client,
+                         BASE_KEY PREF_GRID_VISIBLE,
+                         TRUE);
+
+       prefs_model->markup_visible =
+               get_bool (prefs_model->gconf_client,
+                         BASE_KEY PREF_MARKUP_VISIBLE,
+                         TRUE);
+
+       /* Recent files */
+       prefs_model->max_recents =
+               get_int (prefs_model->gconf_client,
+                        BASE_KEY PREF_MAX_RECENTS,
+                        -1);
+
+       /* Recent templates */
+        for (p=prefs_model->recent_templates; p != NULL; p=p->next)
+        {
+                g_free (p->data);
+        }
+        g_slist_free (prefs_model->recent_templates);
+       prefs_model->recent_templates =
+               gconf_client_get_list (prefs_model->gconf_client,
+                                       BASE_KEY PREF_RECENT_TEMPLATES,
+                                       GCONF_VALUE_STRING,
+                                       NULL);
+       prefs_model->max_recent_templates =
+               get_int (prefs_model->gconf_client,
+                        BASE_KEY PREF_MAX_RECENT_TEMPLATES,
+                        5);
+
+
+       /* Proof read the default page size -- it must be a valid id. */
+       /* (For compatability with older versions.) */
+       paper = lgl_db_lookup_paper_from_id (prefs_model->default_page_size);
+       if ( paper == NULL ) {
+               prefs_model->default_page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
+       } else {
+               lgl_paper_free (paper);
+               paper = NULL;
+       }
+
+        /* Proof read the recent templates list.  Make sure the template names */
+        /* are valid.  Remove from list if not. */
+        for (p=prefs_model->recent_templates; p != NULL; p=p_next)
+        {
+                p_next = p->next;
+
+                if ( !lgl_db_does_template_name_exist (p->data) )
+                {
+                        g_free (p->data);
+                        prefs_model->recent_templates = g_slist_delete_link (prefs_model->recent_templates, p);
+                }
+        }
+
+       gl_debug (DEBUG_PREFS, "max_recents = %d", prefs_model->max_recents);
+
+
+       g_signal_emit (G_OBJECT(prefs_model), signals[CHANGED], 0);
+
+       gl_debug (DEBUG_PREFS, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Key changed callback.                                           */
+/*---------------------------------------------------------------------------*/
+static void 
+notify_cb (GConfClient  *client,
+          guint         cnxn_id,
+          GConfEntry   *entry,
+          glPrefsModel *prefs_model)
+{
+       gl_debug (DEBUG_PREFS, "Key was changed: %s", entry->key);
+
+       gl_prefs_model_load_settings (prefs_model);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Utilities to get values with defaults.                          */
+/*---------------------------------------------------------------------------*/
+static gchar*
+get_string (GConfClient *client,
+           const gchar *key,
+           const gchar *def)
+{
+       gchar* val;
+
+       val = gconf_client_get_string (client, key, NULL);
+
+       if (val != NULL) {
+
+               return val;
+
+       } else {
+
+               return def ? g_strdup (def) : NULL;
+
+       }
+}
+
+static gboolean
+get_bool (GConfClient *client,
+         const gchar *key,
+         gboolean     def)
+{
+       GConfValue* val;
+       gboolean retval;
+
+       val = gconf_client_get (client, key, NULL);
+
+       if (val != NULL) {
+
+               if ( val->type == GCONF_VALUE_BOOL ) {
+                       retval = gconf_value_get_bool (val);
+               } else {
+                       retval = def;
+               }
+
+               gconf_value_free (val);
+
+               return retval;
+
+       } else {
+
+               return def;
+
+       }
+}
+
+static gint
+get_int (GConfClient *client,
+        const gchar *key,
+        gint         def)
+{
+       GConfValue* val;
+       gint retval;
+
+       val = gconf_client_get (client, key, NULL);
+
+       if (val != NULL) {
+
+               if ( val->type == GCONF_VALUE_INT) {
+                       retval = gconf_value_get_int(val);
+               } else {
+                       retval = def;
+               }
+
+               gconf_value_free (val);
+
+               return retval;
+
+       } else {
+
+               return def;
+
+       }
+}
+
+static gdouble
+get_float (GConfClient *client,
+          const gchar *key,
+          gdouble      def)
+{
+       GConfValue* val;
+       gdouble retval;
+
+       val = gconf_client_get (client, key, NULL);
+
+       if (val != NULL) {
+
+               if ( val->type == GCONF_VALUE_FLOAT ) {
+                       retval = gconf_value_get_float(val);
+               } else {
+                       retval = def;
+               }
+
+               gconf_value_free (val);
+
+               return retval;
+
+       } else {
+               return def;
+
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Utilities to deal with units.                                   */
+/*---------------------------------------------------------------------------*/
+static lglUnitsType
+string_to_units (const gchar *string)
+{
+       lglUnitsType units;
+
+       if (g_strcasecmp (string, "Points") == 0) {
+               units = LGL_UNITS_POINT;
+       } else if (g_strcasecmp (string, "Inches") == 0) {
+               units = LGL_UNITS_INCH;
+       } else if (g_strcasecmp (string, "Millimeters") == 0) {
+               units = LGL_UNITS_MM;
+       } else {
+               units = LGL_UNITS_INCH;
+       }
+
+       return units;
+}
+
+static const
+gchar *units_to_string (lglUnitsType units)
+{
+       switch (units) {
+       case LGL_UNITS_POINT:
+               return "Points";
+               break;
+       case LGL_UNITS_INCH:
+               return "Inches";
+               break;
+       case LGL_UNITS_MM:
+               return "Millimeters";
+               break;
+       default:
+               return "Inches";
+               break;
+       }
+}
+
+
diff --git a/src/prefs-model.h b/src/prefs-model.h
new file mode 100644 (file)
index 0000000..c7873fb
--- /dev/null
@@ -0,0 +1,124 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  prefs-model.h:  Application preferences model module header file
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __PREFS_MODEL_H__
+#define __PREFS_MODEL_H__
+
+#include <glib-object.h>
+#include <gconf/gconf-client.h>
+#include <pango/pango.h>
+#include <libglabels/enums.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+       GL_TOOLBAR_SYSTEM = 0,
+       GL_TOOLBAR_ICONS,
+       GL_TOOLBAR_ICONS_AND_TEXT
+} glToolbarSetting;
+
+#define GL_TYPE_PREFS_MODEL              (gl_prefs_model_get_type ())
+#define GL_PREFS_MODEL(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_PREFS_MODEL, glPrefsModel))
+#define GL_PREFS_MODEL_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_PREFS_MODEL, glPrefsModelClass))
+#define GL_IS_PREFS_MODEL(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_PREFS_MODEL))
+#define GL_IS_PREFS_MODEL_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_PREFS_MODEL))
+#define GL_PREFS_MODEL_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GL_TYPE_PREFS_MODEL, glPrefsModelClass))
+
+
+typedef struct _glPrefsModel          glPrefsModel;
+typedef struct _glPrefsModelClass     glPrefsModelClass;
+
+typedef struct _glPrefsModelPrivate   glPrefsModelPrivate;
+
+
+struct _glPrefsModel {
+       GObject           parent;
+
+       GConfClient      *gconf_client;
+
+       /* Units */
+       lglUnitsType      units;
+
+       /* Page size */
+       gchar            *default_page_size;
+
+       /* Text properties */
+       gchar            *default_font_family;
+       gdouble           default_font_size;
+       PangoWeight       default_font_weight;
+       gboolean          default_font_italic_flag;
+       guint             default_text_color;
+       PangoAlignment    default_text_alignment;
+       gdouble           default_text_line_spacing;
+       
+       /* Line properties */
+       gdouble           default_line_width;
+       guint             default_line_color;
+       
+       /* Fill properties */
+       guint             default_fill_color;
+
+       /* User Interface/Main Toolbar */
+       gboolean          main_toolbar_visible;
+       glToolbarSetting  main_toolbar_buttons_style; 
+       gboolean          main_toolbar_view_tooltips;
+
+       /* User Interface/Drawing Toolbar */
+       gboolean          drawing_toolbar_visible;
+       gboolean          drawing_toolbar_view_tooltips;
+
+       /* User Interface/Property Toolbar */
+       gboolean          property_toolbar_visible;
+       gboolean          property_toolbar_view_tooltips;
+
+       /* View properties */
+       gboolean          grid_visible;
+       gboolean          markup_visible;
+
+       /* Recent files */
+       gint              max_recents;
+
+       /* Recent templates */
+        GSList           *recent_templates;
+       gint              max_recent_templates;
+};
+
+struct _glPrefsModelClass {
+       GObjectClass     parent_class;
+
+        void (*changed)          (glPrefsModel *prefs_model, gpointer user_data);
+};
+
+
+GType         gl_prefs_model_get_type            (void) G_GNUC_CONST;
+
+glPrefsModel *gl_prefs_model_new                 (void);
+
+void          gl_prefs_model_save_settings       (glPrefsModel   *prefs_model);
+
+void          gl_prefs_model_load_settings       (glPrefsModel   *prefs_model);
+
+G_END_DECLS
+
+#endif /* __PREFS_MODEL_H__ */
+
diff --git a/src/prefs.c b/src/prefs.c
new file mode 100644 (file)
index 0000000..32011b7
--- /dev/null
@@ -0,0 +1,214 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  prefs.c:  Application preferences module
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "prefs.h"
+
+#include <glib/gi18n.h>
+#include <libglabels/libglabels.h>
+
+#include "debug.h"
+
+glPrefsModel      *gl_prefs     = NULL;
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+
+\f
+/*****************************************************************************/
+/* Initialize preferences module.                                            */
+/*****************************************************************************/
+void 
+gl_prefs_init (void)
+{
+       gl_debug (DEBUG_PREFS, "START");
+
+       gl_prefs = gl_prefs_model_new ();
+
+       gl_prefs_model_load_settings (gl_prefs);
+
+       gl_debug (DEBUG_PREFS, "END");
+}
+
+\f
+/****************************************************************************/
+/* Get string representing desired units.                                   */
+/****************************************************************************/
+const gchar *
+gl_prefs_get_page_size (void)
+{
+       return (gl_prefs->default_page_size);
+}
+
+/****************************************************************************/
+/* Get desired units.                                                       */
+/****************************************************************************/
+lglUnitsType
+gl_prefs_get_units (void)
+{
+       return gl_prefs->units;
+}
+
+/****************************************************************************/
+/* Get desired units per point.                                             */
+/****************************************************************************/
+gdouble
+gl_prefs_get_units_per_point (void)
+{
+
+       switch (gl_prefs->units) {
+       case LGL_UNITS_POINT:
+               return 1.0;     /* points */
+       case LGL_UNITS_INCH:
+               return 1.0 / 72.0;      /* inches */
+       case LGL_UNITS_MM:
+               return 0.35277778;      /* mm */
+       default:
+               g_message ("Illegal units");    /* Should not happen */
+               return 1.0;
+       }
+}
+
+/****************************************************************************/
+/* Get precision for desired units.                                         */
+/****************************************************************************/
+gint
+gl_prefs_get_units_precision (void)
+{
+
+       switch (gl_prefs->units) {
+       case LGL_UNITS_POINT:
+               return 1;       /* points */
+       case LGL_UNITS_INCH:
+               return 3;       /* inches */
+       case LGL_UNITS_MM:
+               return 1;       /* mm */
+       default:
+               g_message ("Illegal units");    /* Should not happen */
+               return 1.0;
+       }
+}
+
+/****************************************************************************/
+/* Get step size for desired units.                                         */
+/****************************************************************************/
+gdouble
+gl_prefs_get_units_step_size (void)
+{
+
+       switch (gl_prefs->units) {
+       case LGL_UNITS_POINT:
+               return 0.1;     /* points */
+       case LGL_UNITS_INCH:
+               return 0.001;   /* inches */
+       case LGL_UNITS_MM:
+               return 0.1;     /* mm */
+       default:
+               g_message ("Illegal units");    /* Should not happen */
+               return 1.0;
+       }
+}
+
+/****************************************************************************/
+/* Get string representing desired units.                                   */
+/****************************************************************************/
+const gchar *
+gl_prefs_get_units_string (void)
+{
+
+       switch (gl_prefs->units) {
+       case LGL_UNITS_POINT:
+               return _("points");
+       case LGL_UNITS_INCH:
+               return _("inches");
+       case LGL_UNITS_MM:
+               return _("mm");
+       default:
+               g_message ("Illegal units");    /* Should not happen */
+               return _("points");
+       }
+}
+
+/****************************************************************************/
+/* Add template to recent template list.                                    */
+/****************************************************************************/
+void
+gl_prefs_add_recent_template (const gchar *name)
+{
+        GSList *p;
+
+        /*
+         * If already in list, remove that entry.
+         */
+        p = g_slist_find_custom (gl_prefs->recent_templates,
+                                 name,
+                                 (GCompareFunc)lgl_str_utf8_casecmp);
+        if (p)
+        {
+                gl_prefs->recent_templates =
+                        g_slist_remove_link (gl_prefs->recent_templates, p);
+                g_free (p->data);
+                g_slist_free_1 (p);
+        }
+
+        /*
+         * Now prepend to list.
+         */
+        gl_prefs->recent_templates =
+                g_slist_prepend (gl_prefs->recent_templates, g_strdup (name));
+
+        /*
+         * Truncate list to maximum size
+         */
+        while (g_slist_length (gl_prefs->recent_templates) > gl_prefs->max_recent_templates)
+        {
+                p = g_slist_last (gl_prefs->recent_templates);
+                gl_prefs->recent_templates =
+                        g_slist_remove_link (gl_prefs->recent_templates, p);
+                g_free (p->data);
+                g_slist_free_1 (p);
+        }
+
+        /*
+         * Sync to disk.
+         */
+        gl_prefs_model_save_settings (gl_prefs);
+}
diff --git a/src/prefs.h b/src/prefs.h
new file mode 100644 (file)
index 0000000..98474f5
--- /dev/null
@@ -0,0 +1,56 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  prefs.h:  Application preferences module header file
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __PREFS_H__
+#define __PREFS_H__
+
+#include "prefs-model.h"
+
+G_BEGIN_DECLS
+
+
+
+extern glPrefsModel *gl_prefs;
+
+
+
+void          gl_prefs_init                (void);
+
+const gchar  *gl_prefs_get_page_size       (void);
+
+lglUnitsType  gl_prefs_get_units           (void);
+
+const gchar  *gl_prefs_get_units_string    (void);
+
+gdouble       gl_prefs_get_units_per_point (void);
+
+gdouble       gl_prefs_get_units_step_size (void);
+
+gint          gl_prefs_get_units_precision (void);
+
+void          gl_prefs_add_recent_template (const gchar *name);
+
+G_END_DECLS
+
+#endif /* __PREFS_H__ */
+
diff --git a/src/print-op.c b/src/print-op.c
new file mode 100644 (file)
index 0000000..2b2cd4a
--- /dev/null
@@ -0,0 +1,690 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  print-op.c:  Print operation module
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "print-op.h"
+
+#include <glib/gi18n.h>
+#include <glade/glade-xml.h>
+#include <math.h>
+#include <time.h>
+#include <ctype.h>
+#include <gtk/gtktogglebutton.h>
+
+#include <libglabels/db.h>
+#include "print.h"
+#include "label.h"
+
+#include "wdgt-print-copies.h"
+#include "wdgt-print-merge.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private data types                        */
+/*===========================================*/
+
+struct _glPrintOpPrivate {
+
+       glLabel   *label;
+
+       GtkWidget *simple_frame;
+       GtkWidget *copies_vbox;
+       GtkWidget *copies;
+
+       GtkWidget *merge_frame;
+       GtkWidget *prmerge_vbox;
+       GtkWidget *prmerge;
+
+       GtkWidget *outline_check;
+       GtkWidget *reverse_check;
+       GtkWidget *crop_marks_check;
+
+        gboolean   force_outline_flag;
+
+        gchar     *filename;
+
+       gboolean   outline_flag;
+        gboolean   reverse_flag;
+        gboolean   crop_marks_flag;
+        gboolean   merge_flag;
+        gboolean   collate_flag;
+
+       gint       first;
+        gint       last;
+        gint       n_sheets;
+        gint       n_copies;
+
+        glPrintState state;
+};
+
+struct _glPrintOpSettings
+{
+
+        GtkPrintSettings *gtk_settings;
+
+        gboolean          outline_flag;
+        gboolean          reverse_flag;
+        gboolean          crop_marks_flag;
+        gboolean          collate_flag;
+
+        gint              first;
+        gint              last;
+        gint              n_sheets;
+        gint              n_copies;
+        
+};
+
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void     gl_print_op_finalize      (GObject            *object);
+
+static void     gl_print_op_construct       (glPrintOp          *op,
+                                             glLabel            *label);
+
+static void     gl_print_op_construct_batch (glPrintOp          *op,
+                                             glLabel            *label,
+                                             gchar              *filename,
+                                             gint                n_sheets,
+                                             gint                n_copies,
+                                             gint                first,
+                                             gboolean            outline_flag,
+                                             gboolean            reverse_flag,
+                                             gboolean            crop_marks_flag);
+
+
+static void     set_page_size                 (glPrintOp         *op,
+                                               glLabel           *label);
+
+static GObject *create_custom_widget_cb       (GtkPrintOperation *operation,
+                                               gpointer           user_data);
+
+static void     custom_widget_apply_cb        (GtkPrintOperation *operation,
+                                               GtkWidget         *widget,
+                                               gpointer           user_data);
+
+static void     begin_print_cb                (GtkPrintOperation *operation,
+                                               GtkPrintContext   *context,
+                                               gpointer           user_data);
+
+static void     draw_page_cb                  (GtkPrintOperation *operation,
+                                               GtkPrintContext   *context,
+                                               int                page_nr,
+                                               gpointer           user_data);
+
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glPrintOp, gl_print_op, GTK_TYPE_PRINT_OPERATION);
+
+static void
+gl_print_op_class_init (glPrintOpClass *class)
+{
+       GObjectClass           *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_PRINT, "");
+       
+       gl_print_op_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_print_op_finalize;
+}
+
+static void
+gl_print_op_init (glPrintOp *op)
+{
+       gl_debug (DEBUG_PRINT, "");
+
+       gtk_print_operation_set_use_full_page (GTK_PRINT_OPERATION (op), TRUE);
+
+        gtk_print_operation_set_unit (GTK_PRINT_OPERATION (op), GTK_UNIT_POINTS);
+
+       op->priv = g_new0 (glPrintOpPrivate, 1);
+
+}
+
+static void 
+gl_print_op_finalize (GObject *object)
+{
+       glPrintOp* op = GL_PRINT_OP (object);
+       
+       gl_debug (DEBUG_PRINT, "");
+
+       g_return_if_fail (object != NULL);
+        g_return_if_fail (GL_IS_PRINT_OP (op));
+       g_return_if_fail (op->priv != NULL);
+
+       if (op->priv->label) {
+               g_object_unref (G_OBJECT(op->priv->label));
+       }
+        g_free (op->priv->filename);
+       g_free (op->priv);
+
+       G_OBJECT_CLASS (gl_print_op_parent_class)->finalize (object);
+
+       g_free (op->priv);
+}
+
+/*****************************************************************************/
+/* NEW print op.                                                         */
+/*****************************************************************************/
+glPrintOp *
+gl_print_op_new (glLabel      *label)
+{
+       glPrintOp *op;
+
+       gl_debug (DEBUG_PRINT, "");
+
+       op = GL_PRINT_OP (g_object_new (GL_TYPE_PRINT_OP, NULL));
+
+       gl_print_op_construct (GL_PRINT_OP(op), label);
+
+       return op;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct op.                                              */
+/*--------------------------------------------------------------------------*/
+static void
+gl_print_op_construct (glPrintOp      *op,
+                       glLabel        *label)
+{
+        const lglTemplateFrame *frame;
+
+       op->priv->label              = label;
+       op->priv->force_outline_flag = FALSE;
+
+        frame = (lglTemplateFrame *)label->template->frames->data;
+
+        op->priv->n_sheets           = 1;
+        op->priv->first              = 1;
+        op->priv->last               = lgl_template_frame_get_n_labels (frame);
+        op->priv->n_copies           = 1;
+
+        set_page_size (op, label);
+
+       gtk_print_operation_set_custom_tab_label ( GTK_PRINT_OPERATION (op),
+                                                  _("Labels"));
+
+       g_signal_connect (G_OBJECT (op), "create-custom-widget",
+                         G_CALLBACK (create_custom_widget_cb), label);
+
+       g_signal_connect (G_OBJECT (op), "custom-widget-apply",
+                         G_CALLBACK (custom_widget_apply_cb), label);
+
+       g_signal_connect (G_OBJECT (op), "begin-print",
+                         G_CALLBACK (begin_print_cb), label);
+
+       g_signal_connect (G_OBJECT (op), "draw-page",
+                         G_CALLBACK (draw_page_cb), label);
+}
+
+/*****************************************************************************/
+/* NEW batch print operation.                                                */
+/*****************************************************************************/
+glPrintOp *
+gl_print_op_new_batch (glLabel       *label,
+                       gchar         *filename,
+                       gint           n_sheets,
+                       gint           n_copies,
+                       gint           first,
+                       gboolean       outline_flag,
+                       gboolean       reverse_flag,
+                       gboolean       crop_marks_flag)
+{
+       glPrintOp *op;
+
+       gl_debug (DEBUG_PRINT, "");
+
+       op = GL_PRINT_OP (g_object_new (GL_TYPE_PRINT_OP, NULL));
+
+       gl_print_op_construct_batch (GL_PRINT_OP(op),
+                                         label,
+                                         filename,
+                                         n_sheets,
+                                         n_copies,
+                                         first,
+                                         outline_flag,
+                                         reverse_flag,
+                                         crop_marks_flag);
+
+       return op;
+}
+
+/*****************************************************************************/
+/* Get print operation settings.                                             */
+/*****************************************************************************/
+glPrintOpSettings *
+gl_print_op_get_settings (glPrintOp         *print_op)
+{
+        glPrintOpSettings *settings;
+
+        settings = g_new0 (glPrintOpSettings, 1);
+
+        if ( settings )
+        {
+                settings->gtk_settings =
+                        gtk_print_operation_get_print_settings (GTK_PRINT_OPERATION (print_op));
+
+                settings->outline_flag     = print_op->priv->outline_flag;
+                settings->reverse_flag     = print_op->priv->reverse_flag;
+                settings->crop_marks_flag  = print_op->priv->crop_marks_flag;
+                settings->collate_flag     = print_op->priv->collate_flag;
+
+                settings->first            = print_op->priv->first;
+                settings->last             = print_op->priv->last;
+                settings->n_sheets         = print_op->priv->n_sheets;
+                settings->n_copies         = print_op->priv->n_copies;
+        }
+
+        return settings;
+}
+
+/*****************************************************************************/
+/* Set print operation settings.                                             */
+/*****************************************************************************/
+void
+gl_print_op_set_settings (glPrintOp         *print_op,
+                          glPrintOpSettings *settings)
+{
+
+        if ( settings )
+        {
+                gtk_print_operation_set_print_settings (GTK_PRINT_OPERATION (print_op),
+                                                        settings->gtk_settings);
+
+                print_op->priv->outline_flag     = settings->outline_flag;
+                print_op->priv->reverse_flag     = settings->reverse_flag;
+                print_op->priv->crop_marks_flag  = settings->crop_marks_flag;
+                print_op->priv->collate_flag     = settings->collate_flag;
+
+                print_op->priv->first            = settings->first;
+                print_op->priv->last             = settings->last;
+                print_op->priv->n_sheets         = settings->n_sheets;
+                print_op->priv->n_copies         = settings->n_copies;
+        }
+
+ }
+
+/*****************************************************************************/
+/* Free print operation settings structure.                                  */
+/*****************************************************************************/
+void
+gl_print_op_free_settings(glPrintOpSettings *settings)
+{
+        
+        if ( settings )
+        {
+                if ( settings->gtk_settings )
+                {
+                        g_object_unref (settings->gtk_settings);
+                }
+
+                g_free (settings);
+        }
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct op.                                                  */
+/*--------------------------------------------------------------------------*/
+static void
+gl_print_op_construct_batch (glPrintOp      *op,
+                             glLabel        *label,
+                             gchar          *filename,
+                             gint            n_sheets,
+                             gint            n_copies,
+                             gint            first,
+                             gboolean        outline_flag,
+                             gboolean        reverse_flag,
+                             gboolean        crop_marks_flag)
+
+{
+        glMerge                *merge = NULL;
+        const lglTemplateFrame *frame = NULL;
+
+       op->priv->label              = label;
+       op->priv->force_outline_flag = FALSE;
+        op->priv->filename           = g_strdup (filename);
+        op->priv->n_sheets           = n_sheets;
+        op->priv->n_copies           = n_copies;
+        op->priv->first              = first;
+        op->priv->outline_flag       = outline_flag;
+        op->priv->reverse_flag       = reverse_flag;
+        op->priv->crop_marks_flag    = crop_marks_flag;
+
+        merge = gl_label_get_merge (label);
+
+        frame = (lglTemplateFrame *)label->template->frames->data;
+        if (merge == NULL)
+        {
+                op->priv->merge_flag = FALSE;
+
+                op->priv->last = lgl_template_frame_get_n_labels (frame);
+
+        }
+        else
+        {
+                op->priv->merge_flag = TRUE;
+
+                op->priv->n_sheets =
+                        ceil ((double)(first-1 + n_copies * gl_merge_get_record_count(merge))
+                              / lgl_template_frame_get_n_labels (frame));;
+
+                g_object_unref (G_OBJECT(merge));
+
+        }
+
+        set_page_size (op, label);
+
+        gtk_print_operation_set_export_filename (GTK_PRINT_OPERATION (op),
+                                                 filename);
+
+       g_signal_connect (G_OBJECT (op), "begin-print",
+                         G_CALLBACK (begin_print_cb), label);
+
+       g_signal_connect (G_OBJECT (op), "draw-page",
+                         G_CALLBACK (draw_page_cb), label);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Set page size.                                                 */
+/*--------------------------------------------------------------------------*/
+static void
+set_page_size (glPrintOp  *op,
+               glLabel    *label)
+{
+        GtkPaperSize *psize;
+        GtkPageSetup *su;
+        lglPaper     *paper;
+
+       gl_debug (DEBUG_PRINT, "begin");
+
+        paper = lgl_db_lookup_paper_from_id (label->template->paper_id);
+
+        if (!paper)
+        {
+                const gchar *name;
+
+                name = gtk_paper_size_get_default ();
+                psize = gtk_paper_size_new (name);
+
+                gl_debug (DEBUG_PRINT, "Using default size = \"%s\"", name);
+        }
+        else if (lgl_db_is_paper_id_other (paper->id))
+        {
+                psize = gtk_paper_size_new_custom (paper->id,
+                                                   paper->name,
+                                                   label->template->page_width,
+                                                   label->template->page_height,
+                                                   GTK_UNIT_POINTS);
+                gl_debug (DEBUG_PRINT, "Using custom size = %g x %g points",
+                          label->template->page_width,
+                          label->template->page_height);
+
+        }
+        else
+        {
+                psize = gtk_paper_size_new (paper->pwg_size);
+                gl_debug (DEBUG_PRINT, "Using PWG size \"%s\"", paper->pwg_size);
+        }
+        lgl_paper_free (paper);
+
+        su = gtk_page_setup_new ();
+        gtk_page_setup_set_paper_size (su, psize);
+        gtk_print_operation_set_default_page_setup (GTK_PRINT_OPERATION (op), su);
+        g_object_unref (su);
+
+        gtk_paper_size_free (psize);
+
+       gl_debug (DEBUG_PRINT, "end");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  "Create custom widget" callback                                */
+/*--------------------------------------------------------------------------*/
+static GObject *
+create_custom_widget_cb (GtkPrintOperation *operation,
+                        gpointer           user_data)
+{
+       GladeXML      *gui;
+       glPrintOp     *op = GL_PRINT_OP (operation);
+       glLabel       *label  = GL_LABEL (user_data);
+       GtkWidget     *vbox;
+        glMerge       *merge = NULL;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "print-custom-widget.glade",
+                             "print_custom_widget_vbox", NULL);
+
+       if (!gui) {
+               g_warning ("Could not open print-op.glade, reinstall glabels!");
+               return NULL;
+       }
+
+       vbox = glade_xml_get_widget (gui, "print_custom_widget_vbox");
+
+       /* ----- Simple print control ----- */
+       op->priv->simple_frame = glade_xml_get_widget (gui, "simple_frame");
+       op->priv->copies_vbox  = glade_xml_get_widget (gui, "copies_vbox");
+       op->priv->copies = gl_wdgt_print_copies_new (label);
+       gtk_box_pack_start (GTK_BOX(op->priv->copies_vbox),
+                           op->priv->copies, FALSE, FALSE, 0);
+
+       /* ----- Merge print control ----- */
+       op->priv->merge_frame  = glade_xml_get_widget (gui, "merge_frame");
+       op->priv->prmerge_vbox = glade_xml_get_widget (gui, "prmerge_vbox");
+       op->priv->prmerge = gl_wdgt_print_merge_new (label);
+       gtk_box_pack_start (GTK_BOX(op->priv->prmerge_vbox),
+                           op->priv->prmerge, FALSE, FALSE, 0);
+
+       /* ----- Options ----------------- */
+       op->priv->outline_check    = glade_xml_get_widget (gui, "outline_check");
+       op->priv->reverse_check    = glade_xml_get_widget (gui, "reverse_check");
+       op->priv->crop_marks_check = glade_xml_get_widget (gui, "crop_marks_check");
+
+        g_object_unref (gui);
+
+        /* ---- Activate either simple or merge print control widgets. ---- */
+        merge = gl_label_get_merge (op->priv->label);
+       if (merge == NULL) {
+
+                gl_wdgt_print_copies_set_range (GL_WDGT_PRINT_COPIES (op->priv->copies),
+                                                op->priv->n_sheets,
+                                                op->priv->first,
+                                                op->priv->last);
+
+               gtk_widget_show_all (op->priv->simple_frame);
+               gtk_widget_hide_all (op->priv->merge_frame);
+
+       } else {
+
+               gint n_records = gl_merge_get_record_count( merge );
+                gl_wdgt_print_merge_set_copies (GL_WDGT_PRINT_MERGE (op->priv->prmerge),
+                                                op->priv->n_copies,
+                                                op->priv->first,
+                                                n_records,
+                                                op->priv->collate_flag);
+               g_object_unref (G_OBJECT(merge));
+
+               gtk_widget_hide_all (op->priv->simple_frame);
+               gtk_widget_show_all (op->priv->merge_frame);
+       }
+
+        /* --- Set options --- */
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->outline_check),
+                                      op->priv->outline_flag);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->reverse_check),
+                                      op->priv->reverse_flag);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (op->priv->crop_marks_check),
+                                      op->priv->crop_marks_flag);
+
+        /* --- Do we need to force the outline flag --- */
+        if (op->priv->force_outline_flag)
+        {
+                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(op->priv->outline_check),
+                                              TRUE);
+
+                gtk_widget_set_sensitive (op->priv->outline_check, FALSE);
+                gtk_widget_set_sensitive (op->priv->reverse_check, FALSE);
+                gtk_widget_set_sensitive (op->priv->crop_marks_check, FALSE);
+        }
+
+       return G_OBJECT (vbox);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  "Custom widget apply" callback                                 */
+/*--------------------------------------------------------------------------*/
+static void
+custom_widget_apply_cb (GtkPrintOperation *operation,
+                        GtkWidget         *widget,
+                        gpointer           user_data)
+{
+        glPrintOp *op = GL_PRINT_OP (operation);
+        glMerge       *merge = NULL;
+
+
+        op->priv->outline_flag =
+                gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
+                                              (op->priv->outline_check));
+        op->priv->reverse_flag =
+                gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
+                                              (op->priv->reverse_check));
+        op->priv->crop_marks_flag =
+                gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
+                                              (op->priv->crop_marks_check));
+
+        merge = gl_label_get_merge (op->priv->label);
+
+        if (merge == NULL)
+        {
+
+                op->priv->merge_flag = FALSE;
+                gl_wdgt_print_copies_get_range (GL_WDGT_PRINT_COPIES (op->priv->copies),
+                                                &op->priv->n_sheets,
+                                                &op->priv->first,
+                                                &op->priv->last);
+        }
+        else
+        {
+
+                op->priv->merge_flag = TRUE;
+                gl_wdgt_print_merge_get_copies (GL_WDGT_PRINT_MERGE (op->priv->prmerge),
+                                                &op->priv->n_copies,
+                                                &op->priv->first,
+                                                &op->priv->collate_flag,
+                                                &op->priv->n_sheets);
+                g_object_unref (G_OBJECT(merge));
+        }
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  "Begin print" callback                                         */
+/*--------------------------------------------------------------------------*/
+static void
+begin_print_cb (GtkPrintOperation *operation,
+               GtkPrintContext   *context,
+               gpointer           user_data)
+{
+        glPrintOp *op = GL_PRINT_OP (operation);
+
+        gtk_print_operation_set_n_pages (operation, op->priv->n_sheets);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  "Draw page" callback.                                          */
+/*--------------------------------------------------------------------------*/
+static void
+draw_page_cb (GtkPrintOperation *operation,
+             GtkPrintContext   *context,
+             int                page_nr,
+             gpointer           user_data)
+{
+        glPrintOp *op = GL_PRINT_OP (operation);
+        cairo_t       *cr;
+
+        cr = gtk_print_context_get_cairo_context (context);
+
+        if (!op->priv->merge_flag)
+        {
+                gl_print_simple_sheet (op->priv->label,
+                                       cr,
+                                       page_nr,
+                                       op->priv->n_sheets,
+                                       op->priv->first,
+                                       op->priv->last,
+                                       op->priv->outline_flag,
+                                       op->priv->reverse_flag,
+                                       op->priv->crop_marks_flag);
+        }
+        else
+        {
+                if (op->priv->collate_flag)
+                {
+                        gl_print_collated_merge_sheet (op->priv->label,
+                                                       cr,
+                                                       page_nr,
+                                                       op->priv->n_copies,
+                                                       op->priv->first,
+                                                       op->priv->outline_flag,
+                                                       op->priv->reverse_flag,
+                                                       op->priv->crop_marks_flag,
+                                                       &op->priv->state);
+                }
+                else
+                {
+                        gl_print_uncollated_merge_sheet (op->priv->label,
+                                                         cr,
+                                                         page_nr,
+                                                         op->priv->n_copies,
+                                                         op->priv->first,
+                                                         op->priv->outline_flag,
+                                                         op->priv->reverse_flag,
+                                                         op->priv->crop_marks_flag,
+                                                         &op->priv->state);
+                }
+        }
+}
+
+
+/*****************************************************************************/
+/* Set outline flag/checkbox.                                                */
+/*****************************************************************************/
+void
+gl_print_op_force_outline_flag (glPrintOp *op)
+{
+        op->priv->force_outline_flag = TRUE;
+}
+
+
diff --git a/src/print-op.h b/src/print-op.h
new file mode 100644 (file)
index 0000000..75c893c
--- /dev/null
@@ -0,0 +1,88 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  print-op.h:  Print operation module header file
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __PRINT_OP_H__
+#define __PRINT_OP_H__
+
+#include <gtk/gtkprintoperation.h>
+#include "label.h"
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_PRINT_OP            (gl_print_op_get_type ())
+#define GL_PRINT_OP(obj)            (GTK_CHECK_CAST ((obj), GL_TYPE_PRINT_OP, glPrintOp))
+#define GL_PRINT_OP_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_PRINT_OP, glPrintOpClass))
+#define GL_IS_PRINT_OP(obj)         (GTK_CHECK_TYPE ((obj), GL_TYPE_PRINT_OP))
+#define GL_IS_PRINT_OP_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_PRINT_OP))
+#define GL_PRINT_OP_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), GL_TYPE_PRINT_OP, glPrintOpClass))
+
+
+typedef struct _glPrintOp         glPrintOp;
+typedef struct _glPrintOpClass    glPrintOpClass;
+
+typedef struct _glPrintOpPrivate  glPrintOpPrivate;
+
+struct _glPrintOp
+{
+        GtkPrintOperation     parent_instance;
+
+        glPrintOpPrivate     *priv;
+
+};
+
+struct  _glPrintOpClass
+{
+        GtkPrintOperationClass        parent_class;
+};
+
+
+typedef struct _glPrintOpSettings glPrintOpSettings;
+
+
+
+GType              gl_print_op_get_type           (void) G_GNUC_CONST;
+
+glPrintOp         *gl_print_op_new                (glLabel           *label);
+
+void               gl_print_op_force_outline_flag (glPrintOp         *print_op);
+
+glPrintOpSettings *gl_print_op_get_settings          (glPrintOp         *print_op);
+void               gl_print_op_set_settings          (glPrintOp         *print_op,
+                                                      glPrintOpSettings *settings);
+void               gl_print_op_free_settings         (glPrintOpSettings *settings);
+                                          
+/*
+ * Batch print operation
+ */
+glPrintOp         *gl_print_op_new_batch          (glLabel           *label,
+                                                   gchar             *filename,
+                                                   gint               n_sheets,
+                                                   gint               n_copies,
+                                                   gint               first,
+                                                   gboolean           outline_flag,
+                                                   gboolean           reverse_flag,
+                                                   gboolean           crop_marks_flag);
+
+G_END_DECLS
+
+#endif
diff --git a/src/print.c b/src/print.c
new file mode 100644 (file)
index 0000000..a33e3ad
--- /dev/null
@@ -0,0 +1,575 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  print.c:  Print module
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "print.h"
+
+#include <glib/gi18n.h>
+#include <math.h>
+#include <time.h>
+#include <ctype.h>
+
+#include "label.h"
+#include <libglabels/template.h>
+#include "cairo-label-path.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros and constants.             */
+/*===========================================*/
+
+#define OUTLINE_RGB_ARGS          0.0,   0.0,   0.0
+
+#define OUTLINE_WIDTH 0.25
+
+#define TICK_OFFSET  2.25
+#define TICK_LENGTH 18.0
+
+/*=========================================================================*/
+/* Private types.                                                          */
+/*=========================================================================*/
+
+typedef struct _PrintInfo {
+        cairo_t    *cr;
+
+       /* gLabels Template */
+       lglTemplate *template;
+       gboolean     label_rotate_flag;
+
+       /* page size */
+       gdouble page_width;
+       gdouble page_height;
+
+} PrintInfo;
+
+
+/*=========================================================================*/
+/* Private function prototypes.                                            */
+/*=========================================================================*/
+static PrintInfo *print_info_new              (cairo_t          *cr,
+                                              glLabel          *label);
+
+static void       print_info_free             (PrintInfo       **pi);
+
+static void       print_crop_marks            (PrintInfo        *pi);
+
+static void       print_label                 (PrintInfo        *pi,
+                                              glLabel          *label,
+                                              gdouble           x,
+                                              gdouble           y,
+                                              glMergeRecord    *record,
+                                              gboolean          outline_flag,
+                                              gboolean          reverse_flag);
+
+
+static void       draw_outline                (PrintInfo        *pi,
+                                              glLabel          *label);
+
+static void       clip_to_outline             (PrintInfo        *pi,
+                                              glLabel          *label);
+
+
+\f
+/*****************************************************************************/
+/* Print simple sheet (no merge data) command.                               */
+/*****************************************************************************/
+void
+gl_print_simple_sheet (glLabel          *label,
+                       cairo_t          *cr,
+                       gint              page,
+                       gint              n_sheets,
+                       gint              first,
+                       gint              last,
+                       gboolean          outline_flag,
+                       gboolean          reverse_flag,
+                       gboolean          crop_marks_flag)
+{
+       PrintInfo              *pi;
+       const lglTemplateFrame *frame;
+       gint                    i_label;
+       lglTemplateOrigin      *origins;
+
+       gl_debug (DEBUG_PRINT, "START");
+
+       pi         = print_info_new (cr, label);
+
+        frame = (lglTemplateFrame *)pi->template->frames->data;
+       origins = lgl_template_frame_get_origins (frame);
+
+        if (crop_marks_flag) {
+                print_crop_marks (pi);
+        }
+
+        for (i_label = first - 1; i_label < last; i_label++) {
+
+                print_label (pi, label,
+                             origins[i_label].x, origins[i_label].y,
+                             NULL, outline_flag, reverse_flag);
+
+        }
+
+       g_free (origins);
+
+       print_info_free (&pi);
+
+       gl_debug (DEBUG_PRINT, "END");
+}
+
+/*****************************************************************************/
+/* Print collated merge sheet command                                        */
+/*****************************************************************************/
+void
+gl_print_collated_merge_sheet   (glLabel          *label,
+                                 cairo_t          *cr,
+                                 gint              page,
+                                 gint              n_copies,
+                                 gint              first,
+                                 gboolean          outline_flag,
+                                 gboolean          reverse_flag,
+                                 gboolean          crop_marks_flag,
+                                 glPrintState     *state)
+{
+       glMerge                   *merge;
+       const GList               *record_list;
+       PrintInfo                 *pi;
+       const lglTemplateFrame    *frame;
+       gint                       i_label, n_labels_per_page, i_copy;
+       glMergeRecord             *record;
+       GList                     *p;
+       lglTemplateOrigin         *origins;
+
+       gl_debug (DEBUG_PRINT, "START");
+
+       merge = gl_label_get_merge (label);
+       record_list = gl_merge_get_record_list (merge);
+
+       pi = print_info_new (cr, label);
+        frame = (lglTemplateFrame *)pi->template->frames->data;
+
+       n_labels_per_page = lgl_template_frame_get_n_labels (frame);
+       origins = lgl_template_frame_get_origins (frame);
+
+        if (crop_marks_flag) {
+                print_crop_marks (pi);
+        }
+
+        if (page == 0)
+        {
+                state->i_copy  = 0;
+                state->p_record = (GList *)record_list;
+
+                i_label = first - 1;
+        }
+        else
+        {
+                i_label = 0;
+        }
+
+
+       for ( p=(GList *)state->p_record; p!=NULL; p=p->next ) {
+               record = (glMergeRecord *)p->data;
+                       
+               if ( record->select_flag ) {
+                       for (i_copy = state->i_copy; i_copy < n_copies; i_copy++) {
+
+                               print_label (pi, label,
+                                            origins[i_label].x,
+                                            origins[i_label].y,
+                                            record,
+                                            outline_flag, reverse_flag);
+
+                               i_label++;
+                                if (i_label == n_labels_per_page)
+                                {
+                                        g_free (origins);
+                                        print_info_free (&pi);
+
+                                        state->i_copy = (i_copy+1) % n_copies;
+                                        if (state->i_copy == 0)
+                                        {
+                                                state->p_record = p->next;
+                                        }
+                                        else
+                                        {
+                                                state->p_record = p;
+                                        }
+                                        return;
+                                }
+                       }
+                        state->i_copy = 0;
+               }
+       }
+
+        g_free (origins);
+        print_info_free (&pi);
+
+       gl_debug (DEBUG_PRINT, "END");
+}
+
+/*****************************************************************************/
+/* Print uncollated merge sheet command                                      */
+/*****************************************************************************/
+void
+gl_print_uncollated_merge_sheet (glLabel          *label,
+                                 cairo_t          *cr,
+                                 gint              page,
+                                 gint              n_copies,
+                                 gint              first,
+                                 gboolean          outline_flag,
+                                 gboolean          reverse_flag,
+                                 gboolean          crop_marks_flag,
+                                 glPrintState     *state)
+{
+       glMerge                   *merge;
+       const GList               *record_list;
+       PrintInfo                 *pi;
+       const lglTemplateFrame    *frame;
+       gint                       i_label, n_labels_per_page, i_copy;
+       glMergeRecord             *record;
+       GList                     *p;
+       lglTemplateOrigin         *origins;
+
+       gl_debug (DEBUG_PRINT, "START");
+
+       merge = gl_label_get_merge (label);
+       record_list = gl_merge_get_record_list (merge);
+
+       pi = print_info_new (cr, label);
+        frame = (lglTemplateFrame *)pi->template->frames->data;
+
+       n_labels_per_page = lgl_template_frame_get_n_labels (frame);
+       origins = lgl_template_frame_get_origins (frame);
+
+        if (crop_marks_flag) {
+                print_crop_marks (pi);
+        }
+
+        if (page == 0)
+        {
+                state->i_copy  = 0;
+                state->p_record = (GList *)record_list;
+
+                i_label = first - 1;
+        }
+        else
+        {
+                i_label = 0;
+        }
+
+       for (i_copy = state->i_copy; i_copy < n_copies; i_copy++) {
+
+               for ( p=state->p_record; p!=NULL; p=p->next ) {
+                       record = (glMergeRecord *)p->data;
+                       
+                       if ( record->select_flag ) {
+
+                                print_label (pi, label,
+                                            origins[i_label].x,
+                                            origins[i_label].y,
+                                            record,
+                                            outline_flag, reverse_flag);
+
+                               i_label++;
+                                if (i_label == n_labels_per_page)
+                                {
+                                        g_free (origins);
+                                        print_info_free (&pi);
+
+                                        state->p_record = p->next;
+                                        if (state->p_record == NULL)
+                                        {
+                                                state->p_record = (GList *)record_list;
+                                                state->i_copy = i_copy + 1;
+                                        }
+                                        else
+                                        {
+                                                state->i_copy = i_copy;
+                                        }
+                                        return;
+                                }
+                       }
+               }
+                state->p_record = (GList *)record_list;
+
+       }
+
+       g_free (origins);
+       print_info_free (&pi);
+
+       gl_debug (DEBUG_PRINT, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  new print info structure                                        */
+/*---------------------------------------------------------------------------*/
+static PrintInfo *
+print_info_new (cairo_t          *cr,
+               glLabel          *label)
+{
+       PrintInfo            *pi = g_new0 (PrintInfo, 1);
+
+       gl_debug (DEBUG_PRINT, "START");
+
+       g_return_val_if_fail (label && GL_IS_LABEL (label), NULL);
+
+       g_return_val_if_fail (label->template, NULL);
+       g_return_val_if_fail (label->template->paper_id, NULL);
+       g_return_val_if_fail (label->template->page_width > 0, NULL);
+       g_return_val_if_fail (label->template->page_height > 0, NULL);
+
+       pi->cr = cr;
+
+       gl_debug (DEBUG_PRINT,
+                 "setting page size = \"%s\"", label->template->paper_id);
+
+       pi->page_width  = label->template->page_width;
+       pi->page_height = label->template->page_height;
+
+       pi->template = label->template;
+       pi->label_rotate_flag = label->rotate_flag;
+
+       gl_debug (DEBUG_PRINT, "END");
+
+       return pi;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  free print info structure                                       */
+/*---------------------------------------------------------------------------*/
+static void
+print_info_free (PrintInfo **pi)
+{
+       gl_debug (DEBUG_PRINT, "START");
+
+
+       g_free (*pi);
+       *pi = NULL;
+
+       gl_debug (DEBUG_PRINT, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Print crop tick marks.                                          */
+/*---------------------------------------------------------------------------*/
+static void
+print_crop_marks (PrintInfo *pi)
+{
+       const lglTemplateFrame    *frame;
+       gdouble                    w, h, page_w, page_h;
+       GList                     *p;
+       lglTemplateLayout         *layout;
+       gdouble                    xmin, ymin, xmax, ymax, dx, dy;
+       gdouble                    x1, y1, x2, y2, x3, y3, x4, y4;
+       gint                       ix, iy, nx, ny;
+
+       gl_debug (DEBUG_PRINT, "START");
+
+        frame = (lglTemplateFrame *)pi->template->frames->data;
+
+       lgl_template_frame_get_size (frame, &w, &h);
+
+       page_w = pi->page_width;
+       page_h = pi->page_height;
+
+        cairo_save (pi->cr);
+
+        cairo_set_source_rgb (pi->cr, OUTLINE_RGB_ARGS);
+       cairo_set_line_width (pi->cr, OUTLINE_WIDTH);
+
+       for (p=frame->all.layouts; p != NULL; p=p->next) {
+
+               layout = (lglTemplateLayout *)p->data;
+
+               xmin = layout->x0;
+               ymin = layout->y0;
+               xmax = layout->x0 + layout->dx*(layout->nx - 1) + w;
+               ymax = layout->y0 + layout->dy*(layout->ny - 1) + h;
+
+               dx = layout->dx;
+               dy = layout->dy;
+
+               nx = layout->nx;
+               ny = layout->ny;
+
+               for (ix=0; ix < nx; ix++) {
+
+                       x1 = xmin + ix*dx;
+                       x2 = x1 + w;
+
+                       y1 = MAX((ymin - TICK_OFFSET), 0.0);
+                       y2 = MAX((y1 - TICK_LENGTH), 0.0);
+
+                       y3 = MIN((ymax + TICK_OFFSET), page_h);
+                       y4 = MIN((y3 + TICK_LENGTH), page_h);
+
+                       cairo_move_to (pi->cr, x1, y1);
+                       cairo_line_to (pi->cr, x1, y2);
+                       cairo_stroke  (pi->cr);
+
+                       cairo_move_to (pi->cr, x2, y1);
+                       cairo_line_to (pi->cr, x2, y2);
+                       cairo_stroke  (pi->cr);
+
+                       cairo_move_to (pi->cr, x1, y3);
+                       cairo_line_to (pi->cr, x1, y4);
+                       cairo_stroke  (pi->cr);
+
+                       cairo_move_to (pi->cr, x2, y3);
+                       cairo_line_to (pi->cr, x2, y4);
+                       cairo_stroke  (pi->cr);
+
+               }
+
+               for (iy=0; iy < ny; iy++) {
+
+                       y1 = ymin + iy*dy;
+                       y2 = y1 + h;
+
+                       x1 = MAX((xmin - TICK_OFFSET), 0.0);
+                       x2 = MAX((x1 - TICK_LENGTH), 0.0);
+
+                       x3 = MIN((xmax + TICK_OFFSET), page_w);
+                       x4 = MIN((x3 + TICK_LENGTH), page_w);
+
+                       cairo_move_to (pi->cr, x1, y1);
+                       cairo_line_to (pi->cr, x2, y1);
+                       cairo_stroke  (pi->cr);
+
+                       cairo_move_to (pi->cr, x1, y2);
+                       cairo_line_to (pi->cr, x2, y2);
+                       cairo_stroke  (pi->cr);
+
+                       cairo_move_to (pi->cr, x3, y1);
+                       cairo_line_to (pi->cr, x4, y1);
+                       cairo_stroke  (pi->cr);
+
+                       cairo_move_to (pi->cr, x3, y2);
+                       cairo_line_to (pi->cr, x4, y2);
+                       cairo_stroke  (pi->cr);
+
+               }
+
+       }
+
+        cairo_restore (pi->cr);
+
+       gl_debug (DEBUG_PRINT, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Print i'th label.                                               */
+/*---------------------------------------------------------------------------*/
+static void
+print_label (PrintInfo     *pi,
+            glLabel       *label,
+            gdouble        x,
+            gdouble        y,
+            glMergeRecord *record,
+            gboolean       outline_flag,
+            gboolean       reverse_flag)
+{
+       const lglTemplateFrame *frame;
+       gdouble                 width, height;
+
+       gl_debug (DEBUG_PRINT, "START");
+
+        frame = (lglTemplateFrame *)pi->template->frames->data;
+
+       gl_label_get_size (label, &width, &height);
+
+       cairo_save (pi->cr);
+
+       /* Transform coordinate system to be relative to upper corner */
+       /* of the current label */
+       cairo_translate (pi->cr, x, y);
+
+       clip_to_outline (pi, label);
+
+       cairo_save (pi->cr);
+
+        /* Special transformations. */
+       if (label->rotate_flag) {
+               gl_debug (DEBUG_PRINT, "Rotate flag set");
+               cairo_rotate (pi->cr, -M_PI/2.0);
+               cairo_translate (pi->cr, -width, 0.0);
+       }
+       if ( reverse_flag ) {
+               cairo_translate (pi->cr, width, 0.0);
+               cairo_scale (pi->cr, -1.0, 1.0);
+       }
+
+        gl_label_draw (label, pi->cr, FALSE, record);
+
+       cairo_restore (pi->cr); /* From special transformations. */
+
+       if (outline_flag) {
+               draw_outline (pi, label);
+       }
+
+       cairo_restore (pi->cr); /* From translation. */
+
+       gl_debug (DEBUG_PRINT, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw outline.                                                   */
+/*---------------------------------------------------------------------------*/
+static void
+draw_outline (PrintInfo *pi,
+             glLabel   *label)
+{
+       gl_debug (DEBUG_PRINT, "START");
+
+        cairo_save (pi->cr);
+
+       cairo_set_source_rgb (pi->cr, OUTLINE_RGB_ARGS);
+       cairo_set_line_width (pi->cr, OUTLINE_WIDTH);
+
+        gl_cairo_label_path (pi->cr, label->template, FALSE, FALSE);
+
+        cairo_stroke (pi->cr);
+
+        cairo_restore (pi->cr);
+
+       gl_debug (DEBUG_PRINT, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Clip to outline.                                                */
+/*---------------------------------------------------------------------------*/
+static void
+clip_to_outline (PrintInfo *pi,
+                glLabel   *label)
+{
+       gl_debug (DEBUG_PRINT, "START");
+
+        gl_cairo_label_path (pi->cr, label->template, FALSE, TRUE);
+
+        cairo_set_fill_rule (pi->cr, CAIRO_FILL_RULE_EVEN_ODD);
+        cairo_clip (pi->cr);
+
+       gl_debug (DEBUG_PRINT, "END");
+}
+
diff --git a/src/print.h b/src/print.h
new file mode 100644 (file)
index 0000000..b4f46a1
--- /dev/null
@@ -0,0 +1,70 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  print.h:  Print module header file
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __PRINT_H__
+#define __PRINT_H__
+
+#include <cairo/cairo.h>
+
+#include "label.h"
+
+G_BEGIN_DECLS
+
+typedef struct {
+       gint   i_copy;
+       GList *p_record;
+} glPrintState;
+
+void gl_print_simple_sheet           (glLabel          *label,
+                                     cairo_t          *cr,
+                                     gint              page,
+                                     gint              n_sheets,
+                                     gint              first,
+                                     gint              last,
+                                     gboolean          outline_flag,
+                                     gboolean          reverse_flag,
+                                     gboolean          crop_marks_flag);
+
+void gl_print_collated_merge_sheet   (glLabel          *label,
+                                     cairo_t          *cr,
+                                     gint              page,
+                                     gint              n_copies,
+                                     gint              first,
+                                     gboolean          outline_flag,
+                                     gboolean          reverse_flag,
+                                     gboolean          crop_marks_flag,
+                                     glPrintState     *state);
+
+void gl_print_uncollated_merge_sheet (glLabel          *label,
+                                     cairo_t          *cr,
+                                     gint              page,
+                                     gint              n_copies,
+                                     gint              first,
+                                     gboolean          outline_flag,
+                                     gboolean          reverse_flag,
+                                     gboolean          crop_marks_flag,
+                                     glPrintState     *state);
+
+G_END_DECLS
+
+#endif
diff --git a/src/recent.c b/src/recent.c
new file mode 100644 (file)
index 0000000..f713fcb
--- /dev/null
@@ -0,0 +1,155 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  recent.c:  gLabels recent files module
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "recent.h"
+
+#include <string.h>
+#include <gtk/gtkrecentchoosermenu.h>
+
+#include "prefs.h"
+#include "debug.h"
+
+#define GLABELS_MIME_TYPE "application/x-glabels"
+
+static GtkRecentManager *model;
+
+
+
+/*****************************************************************************/
+/* Initialize recent files model.                                            */
+/*****************************************************************************/
+void
+gl_recent_init (void)
+{
+        gl_debug (DEBUG_RECENT, "START");
+
+        model = gtk_recent_manager_get_default ();
+
+        gl_debug (DEBUG_RECENT, "END");
+}
+
+
+/*****************************************************************************/
+/* Get UTF8 filename from GtkRecentInfo structure.                           */
+/*****************************************************************************/
+gchar *
+gl_recent_get_utf8_filename (GtkRecentInfo *item)
+{
+        const gchar *uri;
+        gchar       *filename;
+        gchar       *utf8_filename = NULL;
+
+        gl_debug (DEBUG_RECENT, "START");
+
+        uri = gtk_recent_info_get_uri (item);
+
+        filename = g_filename_from_uri (uri, NULL, NULL);
+        if ( filename != NULL )
+        {
+                utf8_filename = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
+                g_free (filename);
+        }
+
+        return utf8_filename;
+        gl_debug (DEBUG_RECENT, "END");
+}
+
+/*****************************************************************************/
+/* Add file by UTF8 filename to recent model.                                */
+/*****************************************************************************/
+void
+gl_recent_add_utf8_filename (gchar *utf8_filename)
+{
+        GtkRecentData *recent_data;
+        gchar         *filename;
+        gchar         *uri;
+
+        static gchar *groups[2] = {
+                "glabels",
+                NULL
+        };
+
+        gl_debug (DEBUG_RECENT, "START");
+
+        recent_data = g_slice_new (GtkRecentData);
+
+        recent_data->display_name = NULL;
+        recent_data->description  = NULL;
+        recent_data->mime_type    = GLABELS_MIME_TYPE;
+        recent_data->app_name     = (gchar *) g_get_application_name ();
+        recent_data->app_exec     = g_strjoin (" ", g_get_prgname (), "%f", NULL);
+        recent_data->groups       = groups;
+        recent_data->is_private = FALSE;
+
+        filename = g_filename_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
+        if ( filename != NULL )
+        {
+
+                uri = g_filename_to_uri (filename, NULL, NULL);
+                if ( uri != NULL )
+                {
+
+                        gtk_recent_manager_add_full (model, uri, recent_data);
+                        g_free (uri);
+
+                }
+                g_free (filename);
+
+        }
+
+        g_free (recent_data->app_exec);
+        g_slice_free (GtkRecentData, recent_data);
+
+        gl_debug (DEBUG_RECENT, "END");
+}
+
+
+/*****************************************************************************/
+/* Create a menu of recent files.                                            */
+/*****************************************************************************/
+GtkWidget *
+gl_recent_create_menu (void)
+{
+        GtkWidget               *recent_menu;
+        GtkRecentFilter         *recent_filter;
+
+        gl_debug (DEBUG_RECENT, "START");
+
+        recent_menu  =
+                gtk_recent_chooser_menu_new_for_manager (model);
+        gtk_recent_chooser_menu_set_show_numbers (GTK_RECENT_CHOOSER_MENU (recent_menu), FALSE);
+        gtk_recent_chooser_set_show_icons (GTK_RECENT_CHOOSER (recent_menu), TRUE);
+        gtk_recent_chooser_set_limit (GTK_RECENT_CHOOSER (recent_menu), gl_prefs->max_recents);
+        gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (recent_menu), GTK_RECENT_SORT_MRU);
+        gtk_recent_chooser_set_local_only (GTK_RECENT_CHOOSER (recent_menu), TRUE);
+
+        recent_filter = gtk_recent_filter_new ();
+        gtk_recent_filter_add_mime_type (recent_filter, GLABELS_MIME_TYPE);
+        gtk_recent_chooser_set_filter (GTK_RECENT_CHOOSER (recent_menu), recent_filter);
+
+        gl_debug (DEBUG_RECENT, "END");
+        return recent_menu;
+}
diff --git a/src/recent.h b/src/recent.h
new file mode 100644 (file)
index 0000000..9a1b36c
--- /dev/null
@@ -0,0 +1,45 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  recent.h:  gLabels recent files module header file
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __RECENT_H__
+#define __RECENT_H__
+
+#include <gtk/gtkrecentmanager.h>
+#include <gtk/gtkwidget.h>
+
+G_BEGIN_DECLS
+
+void       gl_recent_init              (void);
+
+gchar     *gl_recent_get_utf8_filename (GtkRecentInfo *item);
+
+void       gl_recent_add_utf8_filename (gchar         *utf8_filename);
+
+GtkWidget *gl_recent_create_menu       (void);
+
+
+G_END_DECLS
+
+#endif /*__RECENT_H__*/
+
diff --git a/src/stock-pixmaps/Makefile.am b/src/stock-pixmaps/Makefile.am
new file mode 100644 (file)
index 0000000..5e34a95
--- /dev/null
@@ -0,0 +1,95 @@
+
+IMAGES =                               \
+       stock_arrow_24.png              \
+       stock_arrow_16.png              \
+       stock_barcode_24.png            \
+       stock_barcode_16.png            \
+       stock_box_24.png                \
+       stock_box_16.png                \
+       stock_ellipse_24.png            \
+       stock_ellipse_16.png            \
+       stock_image_24.png              \
+       stock_image_16.png              \
+       stock_line_24.png               \
+       stock_line_16.png               \
+       stock_merge_24.png              \
+       stock_merge_16.png              \
+       stock_properties_24.png         \
+       stock_properties_16.png         \
+       stock_text_24.png               \
+       stock_text_16.png               \
+       stock_order_top_16.png          \
+       stock_order_bottom_16.png       \
+       stock_rotate_left_16.png        \
+       stock_rotate_right_16.png       \
+       stock_flip_horiz_16.png         \
+       stock_flip_vert_16.png          \
+       stock_align_left_16.png         \
+       stock_align_right_16.png        \
+       stock_align_hcenter_16.png      \
+       stock_align_top_16.png          \
+       stock_align_bottom_16.png       \
+       stock_align_vcenter_16.png      \
+       stock_center_horiz_16.png       \
+       stock_center_vert_16.png        \
+       stock_bucket_fill_16.png        \
+       stock_bucket_fill_24.png        \
+       stock_pencil_16.png             \
+       stock_pencil_24.png             \
+       stock_hchain_24.png             \
+       stock_hchain_broken_24.png      \
+       stock_vchain_24.png             \
+       stock_vchain_broken_24.png
+
+VARIABLES1 = \
+               stock_arrow_24          $(srcdir)/stock_arrow_24.png    \
+               stock_arrow_16          $(srcdir)/stock_arrow_16.png    \
+               stock_barcode_24        $(srcdir)/stock_barcode_24.png  \
+               stock_barcode_16        $(srcdir)/stock_barcode_16.png  \
+               stock_box_24            $(srcdir)/stock_box_24.png      \
+               stock_box_16            $(srcdir)/stock_box_16.png      \
+               stock_ellipse_24        $(srcdir)/stock_ellipse_24.png  \
+               stock_ellipse_16        $(srcdir)/stock_ellipse_16.png  \
+               stock_image_24          $(srcdir)/stock_image_24.png    \
+               stock_image_16          $(srcdir)/stock_image_16.png    \
+               stock_line_24           $(srcdir)/stock_line_24.png     \
+               stock_line_16           $(srcdir)/stock_line_16.png     \
+               stock_merge_24          $(srcdir)/stock_merge_24.png    \
+               stock_merge_16          $(srcdir)/stock_merge_16.png    \
+               stock_properties_24     $(srcdir)/stock_properties_24.png \
+               stock_properties_16     $(srcdir)/stock_properties_16.png \
+               stock_text_24           $(srcdir)/stock_text_24.png     \
+               stock_text_16           $(srcdir)/stock_text_16.png     \
+               stock_order_top_16      $(srcdir)/stock_order_top_16.png \
+               stock_order_bottom_16   $(srcdir)/stock_order_bottom_16.png \
+               stock_rotate_left_16    $(srcdir)/stock_rotate_left_16.png \
+               stock_rotate_right_16   $(srcdir)/stock_rotate_right_16.png \
+               stock_flip_horiz_16     $(srcdir)/stock_flip_horiz_16.png \
+               stock_flip_vert_16      $(srcdir)/stock_flip_vert_16.png \
+               stock_align_left_16     $(srcdir)/stock_align_left_16.png \
+               stock_align_right_16    $(srcdir)/stock_align_right_16.png \
+               stock_align_hcenter_16  $(srcdir)/stock_align_hcenter_16.png \
+               stock_align_top_16      $(srcdir)/stock_align_top_16.png \
+               stock_align_bottom_16   $(srcdir)/stock_align_bottom_16.png \
+               stock_align_vcenter_16  $(srcdir)/stock_align_vcenter_16.png \
+               stock_center_horiz_16   $(srcdir)/stock_center_horiz_16.png \
+               stock_center_vert_16    $(srcdir)/stock_center_vert_16.png \
+               stock_bucket_fill_16    $(srcdir)/stock_bucket_fill_16.png \
+               stock_bucket_fill_24    $(srcdir)/stock_bucket_fill_24.png \
+               stock_pencil_16         $(srcdir)/stock_pencil_16.png \
+               stock_pencil_24         $(srcdir)/stock_pencil_24.png \
+               stock_hchain_24         $(srcdir)/stock_hchain_24.png \
+               stock_hchain_broken_24  $(srcdir)/stock_hchain_broken_24.png \
+               stock_vchain_24         $(srcdir)/stock_vchain_24.png \
+               stock_vchain_broken_24  $(srcdir)/stock_vchain_broken_24.png
+
+
+noinst_DATA = stockpixbufs.h
+CLEANFILES = $(noinst_DATA)
+
+stockpixbufs.h: $(IMAGES)
+       gdk-pixbuf-csource                                                \
+          --raw --build-list $(VARIABLES1) > $(srcdir)/stockpixbufs.h || \
+           ( rm -f $(srcdir)/stockpixbufs.h && false )
+
+EXTRA_DIST = $(IMAGES) stockpixbufs.h
diff --git a/src/stock-pixmaps/Makefile.in b/src/stock-pixmaps/Makefile.in
new file mode 100644 (file)
index 0000000..50fcf41
--- /dev/null
@@ -0,0 +1,496 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/stock-pixmaps
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DATA = $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLABELS_CFLAGS = @GLABELS_CFLAGS@
+GLABELS_LIBS = @GLABELS_LIBS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_REQUIRED = @GLIB_REQUIRED@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_REQUIRED = @GTK_REQUIRED@
+HAVE_XML_PARSE_HUGE = @HAVE_XML_PARSE_HUGE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEBOOK_CFLAGS = @LIBEBOOK_CFLAGS@
+LIBEBOOK_LIBS = @LIBEBOOK_LIBS@
+LIBEBOOK_REQUIRED = @LIBEBOOK_REQUIRED@
+LIBGLABELS_CFLAGS = @LIBGLABELS_CFLAGS@
+LIBGLABELS_LIBS = @LIBGLABELS_LIBS@
+LIBGLABELS_VERSION_INFO = @LIBGLABELS_VERSION_INFO@
+LIBGLADE_REQUIRED = @LIBGLADE_REQUIRED@
+LIBGNOMEUI_REQUIRED = @LIBGNOMEUI_REQUIRED@
+LIBGNOME_REQUIRED = @LIBGNOME_REQUIRED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_REQUIRED = @LIBXML_REQUIRED@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+MYGAL_CFLAGS = @MYGAL_CFLAGS@
+MYGAL_LIBS = @MYGAL_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+XML_PARSE_HUGE_CFLAGS = @XML_PARSE_HUGE_CFLAGS@
+XML_PARSE_HUGE_LIBS = @XML_PARSE_HUGE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+IMAGES = \
+       stock_arrow_24.png              \
+       stock_arrow_16.png              \
+       stock_barcode_24.png            \
+       stock_barcode_16.png            \
+       stock_box_24.png                \
+       stock_box_16.png                \
+       stock_ellipse_24.png            \
+       stock_ellipse_16.png            \
+       stock_image_24.png              \
+       stock_image_16.png              \
+       stock_line_24.png               \
+       stock_line_16.png               \
+       stock_merge_24.png              \
+       stock_merge_16.png              \
+       stock_properties_24.png         \
+       stock_properties_16.png         \
+       stock_text_24.png               \
+       stock_text_16.png               \
+       stock_order_top_16.png          \
+       stock_order_bottom_16.png       \
+       stock_rotate_left_16.png        \
+       stock_rotate_right_16.png       \
+       stock_flip_horiz_16.png         \
+       stock_flip_vert_16.png          \
+       stock_align_left_16.png         \
+       stock_align_right_16.png        \
+       stock_align_hcenter_16.png      \
+       stock_align_top_16.png          \
+       stock_align_bottom_16.png       \
+       stock_align_vcenter_16.png      \
+       stock_center_horiz_16.png       \
+       stock_center_vert_16.png        \
+       stock_bucket_fill_16.png        \
+       stock_bucket_fill_24.png        \
+       stock_pencil_16.png             \
+       stock_pencil_24.png             \
+       stock_hchain_24.png             \
+       stock_hchain_broken_24.png      \
+       stock_vchain_24.png             \
+       stock_vchain_broken_24.png
+
+VARIABLES1 = \
+               stock_arrow_24          $(srcdir)/stock_arrow_24.png    \
+               stock_arrow_16          $(srcdir)/stock_arrow_16.png    \
+               stock_barcode_24        $(srcdir)/stock_barcode_24.png  \
+               stock_barcode_16        $(srcdir)/stock_barcode_16.png  \
+               stock_box_24            $(srcdir)/stock_box_24.png      \
+               stock_box_16            $(srcdir)/stock_box_16.png      \
+               stock_ellipse_24        $(srcdir)/stock_ellipse_24.png  \
+               stock_ellipse_16        $(srcdir)/stock_ellipse_16.png  \
+               stock_image_24          $(srcdir)/stock_image_24.png    \
+               stock_image_16          $(srcdir)/stock_image_16.png    \
+               stock_line_24           $(srcdir)/stock_line_24.png     \
+               stock_line_16           $(srcdir)/stock_line_16.png     \
+               stock_merge_24          $(srcdir)/stock_merge_24.png    \
+               stock_merge_16          $(srcdir)/stock_merge_16.png    \
+               stock_properties_24     $(srcdir)/stock_properties_24.png \
+               stock_properties_16     $(srcdir)/stock_properties_16.png \
+               stock_text_24           $(srcdir)/stock_text_24.png     \
+               stock_text_16           $(srcdir)/stock_text_16.png     \
+               stock_order_top_16      $(srcdir)/stock_order_top_16.png \
+               stock_order_bottom_16   $(srcdir)/stock_order_bottom_16.png \
+               stock_rotate_left_16    $(srcdir)/stock_rotate_left_16.png \
+               stock_rotate_right_16   $(srcdir)/stock_rotate_right_16.png \
+               stock_flip_horiz_16     $(srcdir)/stock_flip_horiz_16.png \
+               stock_flip_vert_16      $(srcdir)/stock_flip_vert_16.png \
+               stock_align_left_16     $(srcdir)/stock_align_left_16.png \
+               stock_align_right_16    $(srcdir)/stock_align_right_16.png \
+               stock_align_hcenter_16  $(srcdir)/stock_align_hcenter_16.png \
+               stock_align_top_16      $(srcdir)/stock_align_top_16.png \
+               stock_align_bottom_16   $(srcdir)/stock_align_bottom_16.png \
+               stock_align_vcenter_16  $(srcdir)/stock_align_vcenter_16.png \
+               stock_center_horiz_16   $(srcdir)/stock_center_horiz_16.png \
+               stock_center_vert_16    $(srcdir)/stock_center_vert_16.png \
+               stock_bucket_fill_16    $(srcdir)/stock_bucket_fill_16.png \
+               stock_bucket_fill_24    $(srcdir)/stock_bucket_fill_24.png \
+               stock_pencil_16         $(srcdir)/stock_pencil_16.png \
+               stock_pencil_24         $(srcdir)/stock_pencil_24.png \
+               stock_hchain_24         $(srcdir)/stock_hchain_24.png \
+               stock_hchain_broken_24  $(srcdir)/stock_hchain_broken_24.png \
+               stock_vchain_24         $(srcdir)/stock_vchain_24.png \
+               stock_vchain_broken_24  $(srcdir)/stock_vchain_broken_24.png
+
+noinst_DATA = stockpixbufs.h
+CLEANFILES = $(noinst_DATA)
+EXTRA_DIST = $(IMAGES) stockpixbufs.h
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/stock-pixmaps/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu src/stock-pixmaps/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+stockpixbufs.h: $(IMAGES)
+       gdk-pixbuf-csource                                                \
+          --raw --build-list $(VARIABLES1) > $(srcdir)/stockpixbufs.h || \
+           ( rm -f $(srcdir)/stockpixbufs.h && false )
+
+# 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/src/stock-pixmaps/stock_align_bottom_16.png b/src/stock-pixmaps/stock_align_bottom_16.png
new file mode 100644 (file)
index 0000000..da901bc
Binary files /dev/null and b/src/stock-pixmaps/stock_align_bottom_16.png differ
diff --git a/src/stock-pixmaps/stock_align_hcenter_16.png b/src/stock-pixmaps/stock_align_hcenter_16.png
new file mode 100644 (file)
index 0000000..684c125
Binary files /dev/null and b/src/stock-pixmaps/stock_align_hcenter_16.png differ
diff --git a/src/stock-pixmaps/stock_align_left_16.png b/src/stock-pixmaps/stock_align_left_16.png
new file mode 100644 (file)
index 0000000..1cdcf9b
Binary files /dev/null and b/src/stock-pixmaps/stock_align_left_16.png differ
diff --git a/src/stock-pixmaps/stock_align_right_16.png b/src/stock-pixmaps/stock_align_right_16.png
new file mode 100644 (file)
index 0000000..2b4872b
Binary files /dev/null and b/src/stock-pixmaps/stock_align_right_16.png differ
diff --git a/src/stock-pixmaps/stock_align_top_16.png b/src/stock-pixmaps/stock_align_top_16.png
new file mode 100644 (file)
index 0000000..5bda931
Binary files /dev/null and b/src/stock-pixmaps/stock_align_top_16.png differ
diff --git a/src/stock-pixmaps/stock_align_vcenter_16.png b/src/stock-pixmaps/stock_align_vcenter_16.png
new file mode 100644 (file)
index 0000000..a51293f
Binary files /dev/null and b/src/stock-pixmaps/stock_align_vcenter_16.png differ
diff --git a/src/stock-pixmaps/stock_arrow_16.png b/src/stock-pixmaps/stock_arrow_16.png
new file mode 100644 (file)
index 0000000..0ae5f36
Binary files /dev/null and b/src/stock-pixmaps/stock_arrow_16.png differ
diff --git a/src/stock-pixmaps/stock_arrow_24.png b/src/stock-pixmaps/stock_arrow_24.png
new file mode 100644 (file)
index 0000000..6e0e26a
Binary files /dev/null and b/src/stock-pixmaps/stock_arrow_24.png differ
diff --git a/src/stock-pixmaps/stock_barcode_16.png b/src/stock-pixmaps/stock_barcode_16.png
new file mode 100644 (file)
index 0000000..6e0e289
Binary files /dev/null and b/src/stock-pixmaps/stock_barcode_16.png differ
diff --git a/src/stock-pixmaps/stock_barcode_24.png b/src/stock-pixmaps/stock_barcode_24.png
new file mode 100644 (file)
index 0000000..9699c8d
Binary files /dev/null and b/src/stock-pixmaps/stock_barcode_24.png differ
diff --git a/src/stock-pixmaps/stock_box_16.png b/src/stock-pixmaps/stock_box_16.png
new file mode 100644 (file)
index 0000000..c141c9d
Binary files /dev/null and b/src/stock-pixmaps/stock_box_16.png differ
diff --git a/src/stock-pixmaps/stock_box_24.png b/src/stock-pixmaps/stock_box_24.png
new file mode 100644 (file)
index 0000000..9f8e06f
Binary files /dev/null and b/src/stock-pixmaps/stock_box_24.png differ
diff --git a/src/stock-pixmaps/stock_bucket_fill_16.png b/src/stock-pixmaps/stock_bucket_fill_16.png
new file mode 100644 (file)
index 0000000..2be70de
Binary files /dev/null and b/src/stock-pixmaps/stock_bucket_fill_16.png differ
diff --git a/src/stock-pixmaps/stock_bucket_fill_24.png b/src/stock-pixmaps/stock_bucket_fill_24.png
new file mode 100644 (file)
index 0000000..1ee5993
Binary files /dev/null and b/src/stock-pixmaps/stock_bucket_fill_24.png differ
diff --git a/src/stock-pixmaps/stock_center_horiz_16.png b/src/stock-pixmaps/stock_center_horiz_16.png
new file mode 100644 (file)
index 0000000..fce3e90
Binary files /dev/null and b/src/stock-pixmaps/stock_center_horiz_16.png differ
diff --git a/src/stock-pixmaps/stock_center_vert_16.png b/src/stock-pixmaps/stock_center_vert_16.png
new file mode 100644 (file)
index 0000000..08b19af
Binary files /dev/null and b/src/stock-pixmaps/stock_center_vert_16.png differ
diff --git a/src/stock-pixmaps/stock_ellipse_16.png b/src/stock-pixmaps/stock_ellipse_16.png
new file mode 100644 (file)
index 0000000..9652562
Binary files /dev/null and b/src/stock-pixmaps/stock_ellipse_16.png differ
diff --git a/src/stock-pixmaps/stock_ellipse_24.png b/src/stock-pixmaps/stock_ellipse_24.png
new file mode 100644 (file)
index 0000000..12f0468
Binary files /dev/null and b/src/stock-pixmaps/stock_ellipse_24.png differ
diff --git a/src/stock-pixmaps/stock_flip_horiz_16.png b/src/stock-pixmaps/stock_flip_horiz_16.png
new file mode 100644 (file)
index 0000000..e477068
Binary files /dev/null and b/src/stock-pixmaps/stock_flip_horiz_16.png differ
diff --git a/src/stock-pixmaps/stock_flip_vert_16.png b/src/stock-pixmaps/stock_flip_vert_16.png
new file mode 100644 (file)
index 0000000..93027c9
Binary files /dev/null and b/src/stock-pixmaps/stock_flip_vert_16.png differ
diff --git a/src/stock-pixmaps/stock_hchain_24.png b/src/stock-pixmaps/stock_hchain_24.png
new file mode 100644 (file)
index 0000000..5bc2eed
Binary files /dev/null and b/src/stock-pixmaps/stock_hchain_24.png differ
diff --git a/src/stock-pixmaps/stock_hchain_broken_24.png b/src/stock-pixmaps/stock_hchain_broken_24.png
new file mode 100644 (file)
index 0000000..2e961a3
Binary files /dev/null and b/src/stock-pixmaps/stock_hchain_broken_24.png differ
diff --git a/src/stock-pixmaps/stock_image_16.png b/src/stock-pixmaps/stock_image_16.png
new file mode 100644 (file)
index 0000000..ee9ed3d
Binary files /dev/null and b/src/stock-pixmaps/stock_image_16.png differ
diff --git a/src/stock-pixmaps/stock_image_24.png b/src/stock-pixmaps/stock_image_24.png
new file mode 100644 (file)
index 0000000..093c8ad
Binary files /dev/null and b/src/stock-pixmaps/stock_image_24.png differ
diff --git a/src/stock-pixmaps/stock_line_16.png b/src/stock-pixmaps/stock_line_16.png
new file mode 100644 (file)
index 0000000..cf0e040
Binary files /dev/null and b/src/stock-pixmaps/stock_line_16.png differ
diff --git a/src/stock-pixmaps/stock_line_24.png b/src/stock-pixmaps/stock_line_24.png
new file mode 100644 (file)
index 0000000..7bb6523
Binary files /dev/null and b/src/stock-pixmaps/stock_line_24.png differ
diff --git a/src/stock-pixmaps/stock_merge_16.png b/src/stock-pixmaps/stock_merge_16.png
new file mode 100644 (file)
index 0000000..2a3bfe8
Binary files /dev/null and b/src/stock-pixmaps/stock_merge_16.png differ
diff --git a/src/stock-pixmaps/stock_merge_24.png b/src/stock-pixmaps/stock_merge_24.png
new file mode 100644 (file)
index 0000000..af61200
Binary files /dev/null and b/src/stock-pixmaps/stock_merge_24.png differ
diff --git a/src/stock-pixmaps/stock_order_bottom_16.png b/src/stock-pixmaps/stock_order_bottom_16.png
new file mode 100644 (file)
index 0000000..f6ed2d0
Binary files /dev/null and b/src/stock-pixmaps/stock_order_bottom_16.png differ
diff --git a/src/stock-pixmaps/stock_order_top_16.png b/src/stock-pixmaps/stock_order_top_16.png
new file mode 100644 (file)
index 0000000..0884bc1
Binary files /dev/null and b/src/stock-pixmaps/stock_order_top_16.png differ
diff --git a/src/stock-pixmaps/stock_pencil_16.png b/src/stock-pixmaps/stock_pencil_16.png
new file mode 100644 (file)
index 0000000..83a1493
Binary files /dev/null and b/src/stock-pixmaps/stock_pencil_16.png differ
diff --git a/src/stock-pixmaps/stock_pencil_24.png b/src/stock-pixmaps/stock_pencil_24.png
new file mode 100644 (file)
index 0000000..a36ce93
Binary files /dev/null and b/src/stock-pixmaps/stock_pencil_24.png differ
diff --git a/src/stock-pixmaps/stock_properties_16.png b/src/stock-pixmaps/stock_properties_16.png
new file mode 100644 (file)
index 0000000..ab42b19
Binary files /dev/null and b/src/stock-pixmaps/stock_properties_16.png differ
diff --git a/src/stock-pixmaps/stock_properties_24.png b/src/stock-pixmaps/stock_properties_24.png
new file mode 100644 (file)
index 0000000..f592606
Binary files /dev/null and b/src/stock-pixmaps/stock_properties_24.png differ
diff --git a/src/stock-pixmaps/stock_rotate_left_16.png b/src/stock-pixmaps/stock_rotate_left_16.png
new file mode 100644 (file)
index 0000000..157884e
Binary files /dev/null and b/src/stock-pixmaps/stock_rotate_left_16.png differ
diff --git a/src/stock-pixmaps/stock_rotate_right_16.png b/src/stock-pixmaps/stock_rotate_right_16.png
new file mode 100644 (file)
index 0000000..cc5dc49
Binary files /dev/null and b/src/stock-pixmaps/stock_rotate_right_16.png differ
diff --git a/src/stock-pixmaps/stock_text_16.png b/src/stock-pixmaps/stock_text_16.png
new file mode 100644 (file)
index 0000000..c539bf1
Binary files /dev/null and b/src/stock-pixmaps/stock_text_16.png differ
diff --git a/src/stock-pixmaps/stock_text_24.png b/src/stock-pixmaps/stock_text_24.png
new file mode 100644 (file)
index 0000000..b9e5511
Binary files /dev/null and b/src/stock-pixmaps/stock_text_24.png differ
diff --git a/src/stock-pixmaps/stock_vchain_24.png b/src/stock-pixmaps/stock_vchain_24.png
new file mode 100644 (file)
index 0000000..7dc2031
Binary files /dev/null and b/src/stock-pixmaps/stock_vchain_24.png differ
diff --git a/src/stock-pixmaps/stock_vchain_broken_24.png b/src/stock-pixmaps/stock_vchain_broken_24.png
new file mode 100644 (file)
index 0000000..8ef1363
Binary files /dev/null and b/src/stock-pixmaps/stock_vchain_broken_24.png differ
diff --git a/src/stock-pixmaps/stockpixbufs.h b/src/stock-pixmaps/stockpixbufs.h
new file mode 100644 (file)
index 0000000..25772bb
--- /dev/null
@@ -0,0 +1,2942 @@
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_arrow_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_arrow_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_arrow_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1"
+  "\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\1\0\0\0\316\0\0\0\7\0\0\0\7\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\1\0\0\0\377\0\0\0\321\0\0\0\26\0\0\0\7\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\0\0\0\377\0\0\0\314\0\0\0\25\0\0\0\6\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\336\0\0\0\30\0\0\0\7\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\336\0\0\0\27\0\0\0\7\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\336\0\0\0\27\0\0\0\7\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\336\0\0\0\27\0"
+  "\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\353"
+  "\0\0\0\27\0\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\376\0\0\0\366\0\0\0\261\0\0\0\77\0\0\0""6\0\0\0(\0\0"
+  "\0\27\0\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0"
+  "\0\0\341\0\0\0\225\0\0\0\366\0\0\0\370\0\0\0`\0\0\0(\0\0\0\32\0\0\0\20"
+  "\0\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\346\0\0\0"
+  "(\0\0\0""4\0\0\0\362\0\0\0\377\0\0\0\225\0\0\0\33\0\0\0\6\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\0\27\0"
+  "\0\0\33\0\0\0\204\0\0\0\377\0\0\0\377\0\0\0'\0\0\0\16\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\7"
+  "\0\0\0#\0\0\0\360\0\0\0\350\0\0\0\251\0\0\0\31\0\0\0\5\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\4\0\0\0\223\0\0\0\344\0\0\0\335\0\0\0D\0\0\0\15\0\0\0\1\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0"
+  "\0""5\0\0\0\312\0\0\0t\0\0\0I\0\0\0\21\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0\0\0"
+  "\23\0\0\0\35\0\0\0\32\0\0\0\14\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\10\0\0\0"
+  "\12\0\0\0\12\0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_arrow_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_arrow_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_arrow_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\202\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\377\0\0\0\365\0\0\0q\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\367\0\0\0}\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\367\0\0\0m\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\366\0\0\0\212\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\0\0\0\377\0\0\0\374\0\0\0\314\0\0\0*\0\0\0\20\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\0\0\0\241\0\0\0\377\0\0\0\377\0\0\0\31\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\0\0\0\5\0\0\0\31\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\214\0\0\0\377\0\0\0A\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0""0\0\0\0\261\0\0\0\227\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0#\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_barcode_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_barcode_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_barcode_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377"
+  "\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377"
+  "\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377"
+  "\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377"
+  "\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\0\0\0"
+  "\0\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377"
+  "\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377"
+  "\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377"
+  "\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377"
+  "\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0\0\0\11\0\0\0\377\0\0\0\377\0\0\0\21\0\0\0\377"
+  "\0\0\0\377\0\0\0\21\0\0\0\377\0\0\0\11\0\0\0\377\0\0\0\11\0\0\0\377\0"
+  "\0\0\11\0\0\0\377\0\0\0\377\0\0\0\21\0\0\0\377\0\0\0\11\0\0\0\11\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\21\0\0\0\377\0\0\0\377\0"
+  "\0\0#\0\0\0\377\0\0\0\377\0\0\0#\0\0\0\377\0\0\0\21\0\0\0\377\0\0\0\21"
+  "\0\0\0\377\0\0\0\21\0\0\0\377\0\0\0\377\0\0\0#\0\0\0\377\0\0\0\21\0\0"
+  "\0\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\32\0\0\0\377\0"
+  "\0\0\377\0\0\0""4\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0"
+  "\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0"
+  "\377\0\0\0\32\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0"
+  "\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0"
+  "\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377"
+  "\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\377"
+  "\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0"
+  "\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\32\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0"
+  "\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0"
+  "\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0"
+  "\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\32\0\0\0\377\0\0"
+  "\0\377\0\0\0""4\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0"
+  "\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377"
+  "\0\0\0\32\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\32"
+  "\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377"
+  "\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0"
+  "\0\0""4\0\0\0\377\0\0\0\32\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\377\0"
+  "\0\0""4\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0"
+  "\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\32\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0"
+  "\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0"
+  "\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\32"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377"
+  "\0\0\0""4\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\377\0"
+  "\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0"
+  "\0\32\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\32\0\0"
+  "\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0"
+  "\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0"
+  "4\0\0\0\377\0\0\0\32\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\377\0\0\0""4\0"
+  "\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0"
+  "\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0"
+  "\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0"
+  "\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\32\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0"
+  "4\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32"
+  "\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0"
+  "\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\32\0\0\0\377"
+  "\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\377\0\0\0\32\0"
+  "\0\0\377\0\0\0\32\0\0\0\377\0\0\0\32\0\0\0\377\0\0\0\377\0\0\0""4\0\0"
+  "\0\377\0\0\0\32\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0"
+  "\0\21\0\0\0#\0\0\0#\0\0\0#\0\0\0#\0\0\0#\0\0\0#\0\0\0#\0\0\0\21\0\0\0"
+  "#\0\0\0\21\0\0\0#\0\0\0\21\0\0\0#\0\0\0#\0\0\0#\0\0\0#\0\0\0\21\0\0\0"
+  "\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\11\0\0\0\11\0\0\0\21\0\0\0"
+  "\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\11\0\0\0\21\0"
+  "\0\0\11\0\0\0\21\0\0\0\11\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\21\0\0\0\11"
+  "\0\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_barcode_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_barcode_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_barcode_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0X\250\377\0X\250\377\0X\250\377\0X\250\377\0X\250\377\0X\250"
+  "\377\0X\250\377\0X\250\377\0X\250\377\0X\250\377\0X\250\377\0X\250\377"
+  "\0X\250\377\0X\250\377\0X\250\377\0\0\0\0\0\0\0\0\0X\250\377\0\0\0\0"
+  "\0\0\0\0\0X\250\377\0\0\0\0\0\0\0\0\0X\250\377\0\0\0\0\0X\250\377\0\0"
+  "\0\0\0X\250\377\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377X\250"
+  "\377\0\0\0\0\377\0\0\0\377X\250\377\0\0\0\0\377\0\0\0\0X\250\377\0\0"
+  "\0\0\377X\250\377\0\0\0\0\377\377\377\0\0\0\0\0\377\0\0\0\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\377X\250\377\0\0\0\0\377\0\0\0\377X\250\377\0\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\377X\250\377\0\0\0\0\377X\250\377\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377X\250\377\0\0\0\0\377\0\0\0\377\0"
+  "\0\0\0\0\0\0\377\0\0\0\0\377\377\300\0\0\0\0\377X\250\377\0\0\0\0\377"
+  "X\250\377\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\250\334\377"
+  "\0\0\0\0\377\0\0\0\377\377\377\300\0\0\0\0\377\0\0\0\0\377\377\300\0"
+  "\0\0\0\377\0\0\0\0\0\0\0\377\250\334\377\0\0\0\0\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\377X\250\377\0\0\0\0\377\0\0\0\377\377\377\300\0\0\0"
+  "\0\377\0\0\0\0\377\377\300\0\0\0\0\377\0\0\0\0\0\0\0\377X\250\377\0\0"
+  "\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\250\334\377\0\0\0\0\377"
+  "\0\0\0\377\377\377\300\0\0\0\0\377\0\0\0\0\377\377\300\0\0\0\0\377\0"
+  "\0\0\0\0\0\0\377\250\334\377\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\300\377\377\0\0\0\0\377\0\0\0\377\377\377\300\0\0\0\0\377\0"
+  "\0\0\0\377\377\300\0\0\0\0\377\0\0\0\0\0\0\0\377\300\377\377\0\0\0\0"
+  "\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\377"
+  "\377\377\300\0\0\0\0\377\0\0\0\0\240\240\240\0\0\0\0\377\0\0\0\0\0\0"
+  "\0\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\300\0"
+  "\0\0\0\0\377\0\0\0\377\377\377\300\0\0\0\0\377\0\0\0\0\240\240\240\0"
+  "\0\0\0\377\0\0\0\0\0\0\0\377\0\300\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\0\300\0\0\0\0\0\377\0\0\0\377\377\377\300\0\0\0\0\377"
+  "\0\0\0\0\377\377\300\0\0\0\0\377\0\0\0\0\0\0\0\377\0\300\0\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\200\0\0\0\0\0\377\0\0\0\377\377"
+  "\377\300\0\0\0\0\377\0\0\0\0\377\377\300\0\0\0\0\377\0\0\0\0\0\0\0\377"
+  "\377\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\300\0\0\0"
+  "\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\2\0\0\0\0\0\0\0\377\0\0\0"
+  "\0\0\0\0\377\0\300\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\300\0\0\0\0\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\300\0\0\0\0\0\0"
+  "\0\300\0\0\0\0\0\0\0@\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\300\0\0\0\0\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0"
+  "\0\0\377\377\377\0\0\0\0\0\377\377\377\0\0\0\0\0\377\377\377\0\0\0\0"
+  "\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_box_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_box_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_box_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\21\0\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377UWS\377UWS\377UWS\377UWS\377UWS\377UWS\377UWS\377UWS\377"
+  "UWS\377UWS\377UWS\377UWS\377UWS\377UWS\377UWS\377UWS\377\0\0\0\377\0"
+  "\0\0#\0\0\0\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377UWS\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377UWS\377\0\0\0\377\0\0\0""4\0\0\0\32"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377UWS\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377UWS\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\377UWS\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377UWS\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377UWS\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "UWS\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\377UWS\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377UWS\377\0\0"
+  "\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377UW"
+  "S\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377UWS\377\0\0\0\377\0\0"
+  "\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\3\4\3\377\365"
+  "\340/\377\361\333\27\377\357\327\14\377\356\326\11\377\355\324\0\377"
+  "\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377"
+  "\355\324\0\377\357\330\20\377\363\334\34\377\364\335&\377\3\4\3\377\0"
+  "\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\2\2\2\377\357\330\15\377\355\324\2\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\0\0\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\0\0\0\377\355\324\0\377\355\324\0\377\355\324\0\377"
+  "\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377"
+  "\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377"
+  "\355\324\0\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\355\324\0\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0"
+  "\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\21\0\0\0#\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0"
+  "\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4"
+  "\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0#\0\0\0\21\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\11\0\0\0\21\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32"
+  "\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0"
+  "\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\21\0\0\0\11\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_box_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_box_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_box_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\371\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\1\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0"
+  "\0\377\0\0\0\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\377\0\0\0\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\7\0\0\0\377\0\0\0\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\377\0\0\0\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\1\0\0\0\377\0\0\0\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_ellipse_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_ellipse_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_ellipse_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\0\0\0\202\1\1\1\310\6\6\6\361"
+  "\11\11\11\377\12\12\11\362\4\4\4\311\0\0\0\202\0\0\0&\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\220\0\0\0\377\0\0\0\377\23\23\22\377"
+  ")*(\377&'%\377*,)\377\26\26\25\377\0\0\0\377\0\0\0\377\0\0\0\232\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\31\0\0\0\307\0\0\0\377$$#\377\177|a\377\304\271"
+  "\203\377\355\334O\377\374\351O\377\352\331O\377\275\263\200\377\177|"
+  "a\377\3\3\3\377\3\3\3\377\0\0\0\322\0\0\0\31\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\307\0\0\0\377"
+  "DC7\377\325\307\207\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\277\264~\377FF;\377\0\0"
+  "\0\377\0\0\0\323\0\0\0\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\220\0\0\0\377DC7\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377DC8\377\16\16\15\377\0\0"
+  "\0\250\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\6\6\6\377"
+  "&'%\377\304\271\177\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\317\302\204\377,,+\377\0\0\0\377\0\0\0R\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\202&&$\377us]\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\177|a\377\0\0\0\377\0\0\0\237\0\0\0\30\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\307,-+\377\304\271\203\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\312\276\206\377\0\0\0\377\0\0\0\326\0\0\0<\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\360\40!\36\377\364\342O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\364\0\0\0I\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\2\3\2\377*+(\377\355\334O\377\361\331\25\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\356\325\3\377\374\351O\377\0\0\0\377\0\0\0\377\0\0\0M\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\360\11\11\10\377\351\321\1\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\0\0\0\377\0\0\0"
+  "\365\0\0\0N\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\307\0\0\0\377\312\276"
+  "\206\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\312\276\206\377"
+  "\0\0\0\377\0\0\0\330\0\0\0M\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\202"
+  "\0\0\0\377\177|a\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\177|a"
+  "\377\0\0\0\377\0\0\0\247\0\0\0I\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "&\0\0\0\377\0\0\0\377\325\307\207\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355"
+  "\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\325\307\207\377"
+  "\0\0\0\377\0\0\0\377\0\0\0a\0\0\0<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\232\0\0\0\377DC7\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\355\324\0\377\355\324\0\377DC7\377\0\0\0\377\0\0"
+  "\0\261\0\0\0;\0\0\0\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\322\0\0\0\377DC7\377\325\307\207\377\355\324\0\377\355\324\0"
+  "\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324\0\377\355\324"
+  "\0\377\325\307\207\377DC7\377\0\0\0\377\0\0\0\330\0\0\0C\0\0\0""4\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\31\0\0\0\323"
+  "\0\0\0\377\0\0\0\377\177|a\377\312\276\206\377\355\324\0\377\355\324"
+  "\0\377\355\324\0\377\312\276\206\377\177|a\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\330\0\0\0X\0\0\0""8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\0\250\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\261\0\0\0C\0\0\0""8\0\0\0\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\0\0\0\237"
+  "\0\0\0\326\0\0\0\364\0\0\0\377\0\0\0\365\0\0\0\330\0\0\0\247\0\0\0a\0"
+  "\0\0;\0\0\0""4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\27\0"
+  "\0\0""3\0\0\0""7\0\0\0""5\0\0\0""4\0\0\0""5\0\0\0""7\0\0\0""3\0\0\0\27"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_ellipse_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_ellipse_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_ellipse_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\210\0\0\0\323\0\0\0\372\0\0\0"
+  "\372\0\0\0\323\0\0\0\210\0\0\0\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0d\0\0\0\372\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\372\0\0\0d\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0d\0\0\0\377\0\0\0\377SJ,\377\263\241`\377\374\351"
+  "O\377\374\351O\377\263\241`\377SJ,\377\0\0\0\377\0\0\0\377\0\0\0d\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\372\0\0\0\377\202uF\377\374\351O"
+  "\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\202uF\377\0\0\0\377\0\0\0\372\0\0\0\35\0\0\0\0\0\0\0\0\0\0\0\210\0\0"
+  "\0\377SJ,\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377SJ,\377\0\0\0\377\0\0"
+  "\0\210\0\0\0\0\0\0\0\0\0\0\0\323\0\0\0\377\263\241`\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\263\241`\377\0\0\0\377\0\0\0\323\0\0\0\0\0\0\0"
+  "\0\0\0\0\372\0\0\0\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\0\0\0\377\0\0\0\372\0\0\0\0\0\0\0\0\0\0\0\372\0\0\0\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377"
+  "\0\0\0\372\0\0\0\0\0\0\0\0\0\0\0\323\0\0\0\377\263\241`\377\374\351O"
+  "\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\263\241`\377\0\0\0\377\0\0\0\323\0\0\0\0\0"
+  "\0\0\0\0\0\0\210\0\0\0\377SJ,\377\374\351O\377\374\351O\377\374\351O"
+  "\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "SJ,\377\0\0\0\377\0\0\0\210\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\372\0\0\0"
+  "\377\202uF\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\202uF\377\0\0\0\377\0\0\0\372\0\0\0\35\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0d\0\0\0\377\0\0\0\377SJ,\377\263\241`\377\374\351"
+  "O\377\374\351O\377\263\241`\377SJ,\377\0\0\0\377\0\0\0\377\0\0\0d\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0d\0\0\0\372\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\372\0\0\0d\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\210\0"
+  "\0\0\323\0\0\0\372\0\0\0\372\0\0\0\323\0\0\0\210\0\0\0\35\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_image_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_image_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_image_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\2\21\4\0\4\11"
+  "\0\0\0\0\0\0\0\0\0\0\0\377e\251\362\377e\251\362\377e\251\362\377e\251"
+  "\362\377e\251\362\377e\251\362\377e\251\362\377e\251\362\377e\251\362"
+  "\377e\251\362\377e\251\362\377e\251\362\377e\251\362\377e\251\362\377"
+  "e\251\362\377e\251\362\377e\251\362\377e\251\362\377\0\0\0\377\0\0\0"
+  "\"\0\0\0\21\0\0\0\0\0\0\0\0\0\0\0\377e\251\362\377e\251\362\377e\251"
+  "\362\377e\251\362\377e\251\362\377e\251\362\377e\251\362\377e\251\362"
+  "\377e\251\362\377e\251\362\377e\251\362\377e\251\362\377\377\377\0\377"
+  "\377\377\0\377e\251\362\377e\251\362\377e\251\362\377e\251\362\377\0"
+  "\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377e\251\362\377e\251"
+  "\362\377e\251\362\377e\251\362\377e\251\362\377e\251\362\377\0\0\0\377"
+  "e\251\362\377e\251\362\377e\251\362\377e\251\362\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377e\251\362\377e\251\362\377e\251"
+  "\362\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377e\251\362"
+  "\377e\251\362\377e\251\362\377e\251\362\377e\251\362\377\0\0\0\377\377"
+  "\377\300\377\0\0\0\377e\251\362\377e\251\362\377e\251\362\377e\251\362"
+  "\377\377\377\0\377\377\377\0\377e\251\362\377e\251\362\377e\251\362\377"
+  "e\251\362\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377e"
+  "\251\362\377e\251\362\377e\251\362\377e\251\362\377\0\0\0\377\377\377"
+  "\300\377\377\377\300\377\377\377\300\377\0\0\0\377e\251\362\377e\251"
+  "\362\377e\251\362\377e\251\362\377e\251\362\377e\251\362\377\0\377\0"
+  "\377N\232\6\377\0\200\0\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0"
+  "\0\0\0\0\377{\272\366\377\250\334\377\377y\270\366\377\0\0\0\377\377"
+  "\377\300\377\377\377\300\377\240\240\240\377\377\377\300\377\377\377"
+  "\300\377\0\0\0\377o\261\364\377\241\327\377\377q\262\365\377\250\334"
+  "\377\377\0\377\0\377N\232\6\377N\232\6\377\0@\0\377\0\0\0\377\0\0\0""3"
+  "\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377\245\332\377\377[\252\377\377\4\7"
+  "\12\377\0\0\0\377\377\377\300\377\377\377\300\377\240\240\240\377\377"
+  "\377\300\377\377\377\300\377\0\0\0\377\0\0\0\377f\261\377\377\250\334"
+  "\377\377{\276\377\377N\232\6\377N\232\6\377\0\200\0\377\0@\0\377\0\0"
+  "\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377\250\334\377\377\250"
+  "\334\377\377\250\334\377\377\0\0\0\377\377\377\300\377\377\377\300\377"
+  "\377\377\300\377\377\377\300\377\377\377\300\377\0\0\0\377\250\334\377"
+  "\377\250\334\377\377\250\334\377\377\250\334\377\377\250\334\377\377"
+  "\0\200\0\377\0@\0\377\0@\0\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\342\360\377\377\342\360\377\377\342\360\377\377\0\0"
+  "\0\377\377\377\300\377\377\377\300\377\377\377\300\377\377\377\300\377"
+  "\377\377\300\377\0\0\0\377\342\360\377\377\342\360\377\377\342\360\377"
+  "\377\342\360\377\377\342\360\377\377\342\360\377\377\0@\0\377\342\360"
+  "\377\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0"
+  "\377\3\4\1\377\0\0\0\377\0\0\0\377\377\377\300\377\240\240\240\377\377"
+  "\377\300\377\240\240\240\377\377\377\300\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377@@\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\4\11\1\377\206\3372\377\207"
+  "\3403\377\212\3424\377\0\0\0\377\377\377\300\377\240\240\240\377\377"
+  "\377\300\377\240\240\240\377\377\377\300\377\0\0\0\377\212\3424\377\212"
+  "\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377@@\0\377"
+  "\212\3424\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377y"
+  "\320.\377p\317*\377\212\3424\377\0\0\0\377\377\377\300\377\240\240\240"
+  "\377\377\377\300\377\377\377\300\377\377\377\300\377\0\0\0\377\212\342"
+  "4\377\212\3424\377\212\3424\377\377\0\0\377\212\3424\377\377\0\0\377"
+  "@@\0\377\212\3424\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0"
+  "\0\377!\225\14\377E\260\32\377\203\3351\377\0\0\0\377\377\377\300\377"
+  "\240\240\240\377\377\377\300\377\377\377\300\377\377\377\300\377\0\0"
+  "\0\377\212\3424\377\377\0\0\377\212\3424\377\0@\0\377\212\3424\377\0"
+  "@\0\377@@\0\377\212\3424\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0"
+  "\0\0\0\0\0\377a\267$\377k\314(\377\207\3403\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\212\3424\377~\3250\377"
+  "\30S\6\377}\320.\377\13K\3\377\377\0\0\377\212\3424\377\0@\0\377\0\0"
+  "\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\3\7\1\377\33\213\12\377\202"
+  "\3330\377\205\3352\377\211\3413\377\211\3414\377\377\377\377\377\212"
+  "\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\3771p\40\377"
+  "j\273(\377y\315-\377\177\324/\377\210\3373\377\24N\5\377\211\3403\377"
+  "\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\27&\10\377r\307*\377\200"
+  "\3270\377\205\3341\377\207\3362\377\211\3403\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\217\343<\377"
+  "\211\3413\377\202\3311\377\212\3424\377\0\0\0\377\0\0\0""3\0\0\0\32\0"
+  "\0\0\0\0\0\0\0\0\0\0\377\212\3424\377~\3300\377\211\3413\377\212\342"
+  "4\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377"
+  "\212\3424\377\212\3424\377\212\3424\377\212\3424\377\377\377\377\377"
+  "\377\377\377\377\212\3424\377\212\3424\377\212\3424\377\0\0\0\377\0\0"
+  "\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377\212\3424\377\212\3424\377\212"
+  "\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\342"
+  "4\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377"
+  "\212\3424\377\377\377\377\377\212\3424\377\212\3424\377\212\3424\377"
+  "\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0\0"
+  "\0\0\0\0\0\0\21\0\0\0\"\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""3"
+  "\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0"
+  "3\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0""3\0\0\0\"\0\0\0\21\0\0\0"
+  "\0\0\0\0\0\0\0\0\10\0\0\0\21\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0"
+  "\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32"
+  "\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\21\0\0\0"
+  "\10"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_image_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_image_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_image_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\377X\250\377\377X\250\377\377X\250\377\377X\250"
+  "\377\377X\250\377\377X\250\377\377X\250\377\377\356\326\200\377\220\305"
+  "\252\377\356\326\200\377X\250\377\377X\250\377\377\0\0\0\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\377X\250\377\377X\250\377\377X\250\377\377X\250\377\377"
+  "\0\0\0\377X\250\377\377X\250\377\377\242\317\216\377\377\377\0\377\332"
+  "\3549\377X\250\377\377X\250\377\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377"
+  "X\250\377\377X\250\377\377N\225\343\377\0\0\0\377\377\377\300\377\0\0"
+  "\0\377X\250\377\377\356\326\200\377\307\342U\377\356\326\200\377;\276"
+  "\252\377;\242\252\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377j\264\377\377"
+  "j\264\377\377\0\0\0\377\377\377\300\377\377\377\300\377\377\377\300\377"
+  "\0\0\0\377|\277\377\377j\264\377\377C\332\216\377\0\316\0\377\0y\0\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\226\320\377\377\0\0\0\377\0\0\0"
+  "\377\377\377\300\377\325\325\262\377\377\377\300\377\23\30\34\377\0\0"
+  "\0\377\226\320\377\377L\304\216\377\0\225\0\377\0N\0\377\0\0\0\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\377\270\363\377\377\270\363\377\377\0\0\0\377\377"
+  "\377\300\377\377\377\300\377\377\377\300\377\0\0\0\377\270\363\377\377"
+  "\270\363\377\377\270\363\377\377U\243q\377U\225q\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0@\0\377\0@\0\377\0\0\0\377\300\300\253\377\377"
+  "\377\300\377\337\337\265\377\0\0\0\377\0@\0\377\0@\0\377\0@\0\377\25"
+  "@\0\377\25@\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\300\0\377\0\300"
+  "\0\377\0\0\0\377\300\300\253\377\364\364\274\377\364\364\274\377\0\0"
+  "\0\377\0\300\0\3779\225\0\3779\225\0\377\207@\0\377\25\225\0\377\0\0"
+  "\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\225\0\377\0\262\0\377\0\0\0\377\200"
+  "\200r\377\377\377\300\377\377\377\300\377\0\0\0\377qk\0\377\0\207\0\377"
+  "\0\207\0\377G@\0\377\16\207\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\244\0\377\0\300\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\207\0\377\0\244\0\377\0\244\0\3779y\0\377\0\207\0\377\0\0\0"
+  "\377\0\0\0\0\0\0\0\0\0\0\0\377\0\300\0\377\0\300\0\377\0\300\0\377q\334"
+  "q\377\252\352\252\377\252\352\252\377\252\352\252\377\252\352\252\377"
+  "\306\361\306\377\216\343\216\377\0\300\0\377\0\300\0\377\0\0\0\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\377\0\300\0\377\0\300\0\377\0\300\0\377\0\300\0"
+  "\377\0\300\0\377\0\300\0\377\0\300\0\377\0\300\0\377\34\307\34\377\306"
+  "\361\306\377\0\300\0\377\0\300\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_line_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_line_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_line_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0\221"
+  "\0\0\0\15\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\36\0\0\0\26"
+  "\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0\377\0\0\0+\0\0\0'\0\0\0\26\0\0\0\5\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0"
+  "\0\0\377\0\0\0\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\377\0\0\0\377"
+  "\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0\0\0\377\0\0\0\377\0\0\0+\0\0\0+\0"
+  "\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2"
+  "\0\0\0\377\0\0\0\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0"
+  "\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\377\0\0\0\377\0\0\0+\0\0\0"
+  "+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1"
+  "\0\0\0\377\0\0\0\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\377\0\0\0"
+  "\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0+\0\0\0"
+  "+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\4\0\0\0\377\0\0\0\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4"
+  "\0\0\0\377\0\0\0\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\377\0\0\0"
+  "\377\0\0\0+\0\0\0+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0+\0\0\0"
+  "+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\221\0\0\0\36\0\0\0'\0\0\0\32\0\0\0\10"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\15\0\0\0\26\0\0\0\26\0\0\0\10\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\5\0\0\0\5\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_line_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_line_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_line_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\377\0\0\0""3\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\235\270\322\0\235"
+  "\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235"
+  "\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\0\0\0\1\0\0\0\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\235\270\322\0\235\270\322\0\235\270"
+  "\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270"
+  "\322\0\235\270\322\0\0\0\0\2\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0"
+  "\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\0\0\0\2\0\0"
+  "\0\377\0\0\0\377\235\270\322\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\235\270"
+  "\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270"
+  "\322\0\235\270\322\0\0\0\0\6\0\0\0\377\0\0\0\377\235\270\322\0\235\270"
+  "\322\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\235\270\322\0\235\270\322\0\235"
+  "\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\0\0\0\1\0\0\0\377"
+  "\0\0\0\377\235\270\322\0\235\270\322\0\235\270\322\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322"
+  "\0\235\270\322\0\0\0\0\2\0\0\0\377\0\0\0\377\235\270\322\0\235\270\322"
+  "\0\235\270\322\0\235\270\322\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\235\270"
+  "\322\0\235\270\322\0\235\270\322\0\235\270\322\0\0\0\0\1\0\0\0\377\0"
+  "\0\0\377\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235"
+  "\270\322\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\235\270\322\0\235\270\322"
+  "\0\235\270\322\0\0\0\0\4\0\0\0\377\0\0\0\377\235\270\322\0\235\270\322"
+  "\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\235\270\322\0\235\270\322\0\0\0\0\1\0\0\0\377"
+  "\0\0\0\377\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235"
+  "\270\322\0\235\270\322\0\235\270\322\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\235\270\322\0\0\0\0\1\0\0\0\377\0\0\0\377\235\270\322\0\235\270\322"
+  "\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322"
+  "\0\235\270\322\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\377\0"
+  "\0\0\377\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235"
+  "\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\0\0\0""3\235\270\322\0\235\270"
+  "\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270\322\0\235\270"
+  "\322\0\235\270\322\0\235\270\322\0\235\270\322\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_merge_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_merge_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_merge_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\2\0\0\0\5\0\0\0\14\0\0\0\22\0\0\0\27\0\0\0\31\0\0\0\31\0\0"
+  "\0\31\0\0\0\31\0\0\0\31\0\0\0\31\0\0\0\26\0\0\0\21\0\0\0\12\0\0\0\5\0"
+  "\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0"
+  "\1\0\0\0\4\0\0\0]\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\40\0\0\0\21\0"
+  "\0\0\7\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0"
+  "\0\0\0\0\4\0\0\0\\\0\0\0\377UUU\377\0\0\0\377\374\372\351\377\374\372"
+  "\351\377\374\372\351\377\374\372\351\377\374\372\351\377\374\372\351"
+  "\377\374\372\351\377\0\0\0\377\0\0\0.\0\0\0\30\0\0\0\10\0\0\0\1\0\0\0"
+  "\1\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\377"
+  "UUU\377\377\377\377\377\0\0\0\377\374\372\351\377\374\372\351\377\374"
+  "\372\351\377\374\372\351\377\374\372\351\377\374\372\351\377\374\372"
+  "\351\377\0\0\0\377\0\0\0<\0\0\0\36\0\0\0\12\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377UUU\377\377\377\377\377"
+  "\377\377\377\377\0\0\0\377\254\247\227\377\300\273\255\377\360\352\333"
+  "\377\314\310\275\377\327\324\314\377\314\312\304\377\374\372\351\377"
+  "\0\0\0\377\0\0\0D\0\0\0\"\0\0\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\374\363\330\377\374\364\334\377\374\370\346\377\374\372\351"
+  "\377\374\372\351\377\374\372\351\377\374\372\351\377\0\0\0\377\0\0\0"
+  "D\0\0\0\"\0\0\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\377\372\354\301\377\264\252\215\377\277\265\230"
+  "\377\325\314\256\377\312\301\250\377\373\362\326\377\266\257\235\377"
+  "\313\305\262\377\300\273\254\377\301\274\257\377\374\372\351\377\0\0"
+  "\0\377\0\0\0D\0\0\0\"\0\0\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\370\351\267\377\370\351\273\377"
+  "\371\353\300\377\371\355\305\377\372\356\311\377\372\357\315\377\373"
+  "\361\323\377\374\363\327\377\374\364\334\377\374\370\345\377\374\372"
+  "\351\377\0\0\0\377\0\0\0H\0\0\0)\0\0\0\25\0\0\0\13\0\0\0\12\0\0\0\7\0"
+  "\0\0\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\370\346\256\377\312"
+  "\275\224\377\340\322\250\377\11\10\7\377\5\4\3\377\2\2\2\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\26\0\0\0\13\0\0\0\4\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\377\370\344\244\377\367\345\255\377\370\347\263\377"
+  "\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0"
+  "\0\377\0\0\0""1\0\0\0\35\0\0\0\16\0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\377\370"
+  "\343\234\377\270\251}\377\311\271\214\377\0\0\0\377\377\377\377\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\35\0\0\0\13\0\0\0\4\0\0\0\0\0\0\0\377\367\342\222\377\366\341"
+  "\236\377\367\342\242\377\1\1\1\377\377\377\377\377\0\0\0\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0""4\0"
+  "\0\0\35\0\0\0\16\0\0\0\0\0\0\0\377\367\342\205\377\275\254v\377\355\330"
+  "\222\377\3\2\1\377\377\377\377\377\0\0\0\377\377\377\377\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\35"
+  "\0\0\0\0\0\0\0\377\371\343k\377\365\336\224\377\367\341\216\377\5\5\2"
+  "\377\377\377\377\377\0\0\0\377\377\377\377\377\0\0\0\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0""1\0\0\0"
+  "\0\0\0\0\377\374\351O\377\277\253k\377\373\350O\377\12\11\5\377\0\0\0"
+  "\377\0\0\0\377\377\377\377\377\0\0\0\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\0\0\0\377\0\0\0>\0\0\0\0\0\0\0\377\374\351"
+  "O\377\361\336R\377\372\347O\377\370\342s\377\367\340\215\377\0\0\0\377"
+  "\377\377\377\377\0\0\0\377\351\361\371\377\351\361\371\377\351\361\371"
+  "\377\351\361\371\377\351\361\371\377\351\361\371\377\351\361\371\377"
+  "\351\361\371\377\351\361\371\377\351\361\371\377\351\361\371\377\377"
+  "\377\377\377\0\0\0\377\0\0\0D\0\0\0\0\0\0\0\377\374\351O\377\277\252"
+  "`\377\306\257k\377\334\303{\377\334\305\177\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\351\361\371\377\351\361\371\377\351\361\371\377\351\361\371"
+  "\377\351\361\371\377\351\361\371\377\351\361\371\377\351\361\371\377"
+  "\351\361\371\377\351\361\371\377\351\361\371\377\377\377\377\377\0\0"
+  "\0\377\0\0\0D\0\0\0\0\0\0\0\377\374\351O\377\356\332Q\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\370\342r\377\0\0\0\377\351\361"
+  "\371\377\351\361\371\377\351\361\371\377\351\361\371\377\351\361\371"
+  "\377\351\361\371\377\351\361\371\377\351\361\371\377\351\361\371\377"
+  "\351\361\371\377\351\361\371\377\377\377\377\377\0\0\0\377\0\0\0D\0\0"
+  "\0\0\0\0\0\377\374\351O\377\272\242X\377\327\276b\377\374\351O\377\262"
+  "\236]\377\306\257k\377\330\302n\377\12\11\3\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0<\0\0\0\0\0\0\0\377\367"
+  "\334]\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\371\344i\377\367\336\217"
+  "\377\0\0\0\377\0\0\0Z\0\0\0O\0\0\0H\0\0\0D\0\0\0D\0\0\0D\0\0\0D\0\0\0"
+  "D\0\0\0<\0\0\0-\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0H\0\0\0""4\0\0\0(\0\0\0\"\0\0\0\"\0\0\0\"\0\0\0"
+  "\"\0\0\0\"\0\0\0\36\0\0\0\26\0\0\0\0\0\0\0\36\0\0\0-\0\0\0<\0\0\0D\0"
+  "\0\0D\0\0\0D\0\0\0D\0\0\0D\0\0\0D\0\0\0D\0\0\0D\0\0\0D\0\0\0>\0\0\0""1"
+  "\0\0\0\36\0\0\0\21\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0\13\0\0\0"
+  "\12\0\0\0\7\0\0\0\0\0\0\0\17\0\0\0\26\0\0\0\36\0\0\0\"\0\0\0\"\0\0\0"
+  "\"\0\0\0\"\0\0\0\"\0\0\0\"\0\0\0\"\0\0\0\"\0\0\0\"\0\0\0\36\0\0\0\26"
+  "\0\0\0\13\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_merge_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_merge_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_merge_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0^\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\11\0\0\0h\0\0\0\377\0\0\0\377\374\371\354\377\374\372\356\377\374"
+  "\372\356\377\374\373\357\377\374\373\357\377\4\4\4\377\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0B\0\0\0\377\331\331\331\377\0"
+  "\0\0\377\313\306\267\377\351\343\325\377\343\336\321\377\364\362\353"
+  "\377\374\373\357\377\1\1\1\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\361\350\316\377\353"
+  "\342\311\377\353\343\316\377\351\344\326\377\350\342\316\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\10\377\312\272"
+  "\205\377\330\313\243\377\346\331\257\377\347\332\264\377\350\335\277"
+  "\377\352\342\312\377\350\342\314\377\362\357\345\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\334"
+  "\313\230\377\340\321\246\377\341\327\271\377\345\336\310\377\347\341"
+  "\315\377\350\342\316\377\350\342\316\377\0\0\0\377UUU\0UUU\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\332\307\213\377\336\324"
+  "\266\377YYY\377YYY\377YYY\377YYY\377YYY\377YYY\377YYY\377YYY\377YYY\377"
+  "\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\350\320\215\377\350\333"
+  "\270\377YYY\377000\377000\377000\377000\377000\377000\377000\377000\377"
+  "000\377\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\366\342]\377\350\327\250"
+  "\377YYY\377000\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377\374\351O\377"
+  "\374\351O\377\337\320\237\377YYY\377000\377\0\0\0\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\0\0\0\377\0\0\0\1\0\0\0\377\374\351O\377"
+  "\337\311f\377\374\351O\377\343\321\234\377000\377\0\0\0\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\2\0\0\0\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\364\337d\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\2\0\0\0\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\244\222\\\377\244\223_\377ncB\377\0\0\0\377\0"
+  "\0\0\1\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_properties_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_properties_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_properties_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\21\0\0"
+  "\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0#\0\0\0\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0"
+  "\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0"
+  "\0\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\377"
+  "\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\0\0\0\377\0\0\0\377"
+  "\374\351O\377\374\351O\377\0\0\0\377\0\0\0\377\304\260i\377\374\351O"
+  "\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\377\0\0\0""4"
+  "\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0:\0\0\0\377\377\377\377\377\0\0\0\377"
+  "\340\264\\\377\374\351O\377\0\0\0\377\357\357\357\377\0\0\0\377\267\245"
+  "b\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\377\0\0\0""4"
+  "\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\0"
+  "\0\0\377\321\224\14\377\374\351O\377\0\0\0\377\357\357\357\377\357\357"
+  "\357\377\0\0\0\377\321\224\14\377\374\351O\377\374\351O\377\374\351O"
+  "\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0"
+  "\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+  "\377\377\377\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\357\357\357"
+  "\377\357\357\357\377\0\0\0\377\321\224\14\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0"
+  "\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+  "\377\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357"
+  "\377\357\357\357\377\357\357\357\377\357\357\357\377\0\0\0\377\321\224"
+  "\14\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O"
+  "\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32"
+  "\0\0\0\0\0\0\0\0\0\0\0R\0\0\0\377\377\377\377\377\357\357\357\377\357"
+  "\357\357\377\303\303\303\377\357\357\357\377\303\303\303\377\0\0\0\377"
+  "\321\224\14\377\340\264\\\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0"
+  "\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\0\0\0\377\377\377"
+  "\377\377\303\303\303\377\303\303\303\377\303\303\303\377\0\0\0\377\321"
+  "\224\14\377\321\224\14\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377"
+  "\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\377\377\377\377\357\357\357\377\357\357\357\377\303\303\303\377\0\0"
+  "\0\377\321\224\14\377\340\264\\\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\377\377\377\377\357\357\357\377\357\357\357\377\303\303"
+  "\303\377\0\0\0\377\321\224\14\377\340\264\\\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\357\357\357\377\357\357\357"
+  "\377\303\303\303\377\0\0\0\377\321\224\14\377\340\264\\\377\374\351O"
+  "\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\357\357\357\377\303\303\303\377"
+  "\303\303\303\377\303\303\303\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\377\377\377\377\357\357\357\377\357\357\357\377\357\357\357"
+  "\377\303\303\303\377\303\303\303\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\377\377"
+  "\377\377\377\377\377\377\377\357\357\357\377\357\357\357\377\357\357"
+  "\357\377\357\357\357\377\357\357\357\377\303\303\303\377\0\0\0\377\0"
+  "\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4\0\0\0""4"
+  "\0\0\0""4\0\0\0""4\0\0\0#\0\0\0\21\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+  "\377\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357"
+  "\377\357\357\357\377\357\357\357\377\357\357\357\377\0\0\0\377\0\0\0"
+  "B\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0"
+  "\0\32\0\0\0\32\0\0\0\21\0\0\0\11\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+  "\377\377\377\377\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\357\357"
+  "\357\377\357\357\357\377\0\0\0\377%\36\17F\0\0\0\20\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0\0\0\377\377\377\377\377\0\0\0\377\0\0\0:\0\0\0"
+  ":\0\0\0\377\357\357\357\377\0\0\0\377\0\0\0\377\0\0\0:\0\0\0\20\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\0\0\0\377\377\377\377\377\0\0\0\377\0\0"
+  "\0:\0\0\0\20\0\0\0\377\303\303\303\377\0\0\0\377\0\0\0x\0\0\0\20\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\0\0\0\377\0\0\0\377\0"
+  "\0\0:\0\0\0\20\0\0\0\377\0\0\0\377\0\0\0]\0\0\0\20\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\0\0\0:\0\0\0:\0\0\0"
+  "\20\0\0\0\20\0\0\0:\0\0\0\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_properties_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_properties_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_properties_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+  "\0;\0\0\0\377\0\0\0\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\377"
+  "\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374"
+  "\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377"
+  "\340\264\\\377\374\351O\377\0\0\0\377\357\357\357\377\0\0\0\377\321\224"
+  "\14\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\357\357\357\377\0\0\0\377\321\224\14\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+  "\0\377\377\377\377\377\357\357\357\377\357\357\357\377\357\357\357\377"
+  "\357\357\357\377\303\303\303\377\0\0\0\377\321\224\14\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+  "\0""1\0\0\0\377\377\377\377\377\357\357\357\377\357\357\357\377\303\303"
+  "\303\377\0\0\0\377\223u9\377\340\264\\\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\0"
+  "\0\0\377\377\377\377\377\303\303\303\377\0\0\0\377\223u9\377\340\264"
+  "\\\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+  "\357\357\357\377\0\0\0\377\321\224\14\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\303\303\303\377\0\0"
+  "\0\377\321\224\14\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0O\0\0\0\377\377\377\377\377\357\357\357\377\0\0\0\377\223u9\377\340"
+  "\264\\\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0C\0\0\0\377\377\377\377\377\357"
+  "\357\357\377\303\303\303\377\303\303\303\377\0\0\0\377\223u9\377\340"
+  "\264\\\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0"
+  "\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\357\357\357\377\357\357"
+  "\357\377\357\357\357\377\357\357\357\377\303\303\303\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\357\357\357\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377\202\202"
+  "\202\377\240\240\240\377\0\0\0\377\357\357\357\377\0\0\0\377\217\217"
+  "\217\0\221\221\221\0\235\235\235\0\265\265\265\0\273\273\273\0\240\240"
+  "\240\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_text_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_text_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_text_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\21\0\0\0\10\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0\0\0\340\0\0\0)\0\0\0!\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0+\0\0\0\"\0\0\0\340\0\0\0\377\0\0\0!\0\0\0\21\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\353\0\0\0A\0\0\0""2\0\0\0\"\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0<\0\0\0+\0\0\0:\0\0\0\361\0\0\0*\0\0\0\31\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\20\0\0\0\30\0\0\0\30\0\0\0\10\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0""3\0\0\0\32\0\0\0\10\0\0\0\32\0\0\0\31\0\0\0\20\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\10\0\0\0\11\0\0\0\11\0\0\0\1\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0""3\0\0\0\32\0\0\0\1\0\0\0\11\0\0\0\11\0\0\0\10\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0""3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "3\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0""3\0\0"
+  "\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0""3\0\0\0\32"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0""3\0\0\0\32\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\1\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0""4\0\0\0\32\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\"\0\0\0\10\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\10\0\0\0\32\0\0\0+\0\0\0""3\0\0\0+\0\0\0\32\0\0\0\10\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\21"
+  "\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\21\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_text_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_text_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_text_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\1\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_order_top_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_order_top_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_order_top_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\212\3424\377\212"
+  "\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\342"
+  "4\377\212\3424\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377"
+  "\212\3424\377\212\3424\377\212\3424\377\212\3424\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\212\3424\377\212"
+  "\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\342"
+  "4\377\212\3424\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377"
+  "\212\3424\377\212\3424\377\212\3424\377\212\3424\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\212\3424\377\212"
+  "\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\342"
+  "4\377\212\3424\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\212\3424\377\212\3424\377\212\3424\377\212"
+  "\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\377VRH\377VRH\377VRH\377\0\0\0\377\212\3424\377"
+  "\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212"
+  "\3424\377\212\3424\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377VRH\377VRH"
+  "\377VRH\377\0\0\0\377\212\3424\377\212\3424\377\212\3424\377\212\342"
+  "4\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\0\0\0\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\377VRH\377VRH\377VRH\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377VRH\377VRH\377VRH\377VRH\377VRH\377"
+  "VRH\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\377VRH\377VRH\377VRH\377VRH\377VRH\377VRH\377\0\0"
+  "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377VRH\377VRH\377VRH\377VRH\377VRH\377VRH\377\0\0\0\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_order_bottom_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_order_bottom_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_order_bottom_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377VR"
+  "H\377VRH\377VRH\377VRH\377VRH\377VRH\377\0\0\0\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377VRH\377VRH\377"
+  "VRH\377VRH\377VRH\377VRH\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377VRH\377VRH\377VRH\377VRH"
+  "\377VRH\377VRH\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377VRH\377VRH\377VRH\377V"
+  "RH\377VRH\377VRH\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\212\3424\377"
+  "\212\3424\377\212\3424\377\212\3424\377\212\3424\377\0\0\0\377VRH\377"
+  "VRH\377VRH\377VRH\377VRH\377VRH\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\0\0"
+  "\0\377VRH\377VRH\377VRH\377VRH\377VRH\377VRH\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377"
+  "\212\3424\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\212\3424\377\212\342"
+  "4\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377"
+  "\212\3424\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212"
+  "\3424\377\212\3424\377\212\3424\377\212\3424\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\212\3424\377\212\342"
+  "4\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377"
+  "\212\3424\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212"
+  "\3424\377\212\3424\377\212\3424\377\212\3424\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\212\3424\377\212\342"
+  "4\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377\212\3424\377"
+  "\212\3424\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_rotate_left_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_rotate_left_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_rotate_left_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\24\0\0\0""7\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\352\350\343"
+  "\0\352\350\343\0\0\0\0\377\0\0\0&\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\352"
+  "\350\343\0\352\350\343\0\0\0\0\377\0\0\0\357\0\0\0\377\0\0\0\377\0\0"
+  "\0""7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\352\350\343\0\352\350\343\0\0\0\0\377\0\0\0&\0\0\0\377\0\0\0"
+  "\377\0\0\0\357\0\0\0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\352\350\343\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\35\0\0"
+  "\0\377\0\0\0\35\0\0\0\377\0\0\0n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+  "G\0\0\0\35\0\0\0\35\0\0\0\377\0\0\0e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\35\0\0\0\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0t\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\35\0\0\0\357\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\357\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_rotate_right_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_rotate_right_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_rotate_right_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""7\0\0\0\24"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\352\350\343"
+  "\0\352\350\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0&\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\352"
+  "\350\343\0\352\350\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0""7\0\0\0\377\0\0\0\377\0\0\0\357\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\352\350\343\0\352\350\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0e\0\0\0\357\0\0\0\377\0\0\0\377\0\0\0&\0\0\0\377\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\352\350\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0n\0\0\0\377\0\0\0\35\0\0\0\377\0\0\0\35\0\0\0\0\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0e\0\0\0\377"
+  "\0\0\0\35\0\0\0\35\0\0\0G\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\0\0\0\35\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\0\0\0\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\357\0\0\0\35\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\357\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_flip_horiz_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_flip_horiz_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_flip_horiz_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""7"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0""7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377"
+  "\0\0\0\320\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\320"
+  "\0\0\0\377\0\0\0\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\35\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\344\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\344\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+  "\35\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\35\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0\320\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\320\0\0\0\377\0\0\0\35\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""7\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0""7\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_flip_vert_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_flip_vert_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_flip_vert_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0"
+  "\0\0\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""7\0\0\0\377\0\0\0\377\0\0\0\344\0\0\0"
+  "\377\0\0\0\377\0\0\0""7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\320\0\0\0\377\0\0\0\0\0\0"
+  "\0\377\0\0\0\320\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0"
+  "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\377\0\0\0\320\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\320\0\0\0"
+  "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0""7\0\0\0\377\0\0\0\377\0\0\0\344\0\0\0\377\0\0\0\377\0"
+  "\0\0""7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\35\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0\35\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_align_left_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_align_left_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_align_left_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\374"
+  "\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351"
+  "O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377"
+  "r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237"
+  "\317\377r\237\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377"
+  "r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237"
+  "\317\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377\1\0\0\377\1\0\0\377\1\0"
+  "\0\377\1\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0"
+  "\0\0\0\0\377\374\257>\377\374\257>\377\374\257>\377\374\257>\377\0\0"
+  "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\0\0\0\0\0\0\0\377\374\257>\377\374\257>\377\374\257>\377"
+  "\374\257>\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_align_right_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_align_right_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_align_right_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\374"
+  "\257>\377\374\257>\377\374\257>\377\374\257>\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\377\374\257>\377\374\257>\377\374\257>\377\374\257>\377\0"
+  "\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\1\0\0"
+  "\377\1\0\0\377\1\0\0\377\1\0\0\377\1\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377"
+  "r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237"
+  "\317\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377"
+  "r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237"
+  "\317\377r\237\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\374\351O\377"
+  "\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_align_hcenter_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_align_hcenter_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_align_hcenter_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\374\351"
+  "O\377\0\0\0\377\374\351O\377\374\351O\377\374\351O\377\0\0\0\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\374\351"
+  "O\377\374\351O\377\374\351O\377\0\0\0\377\374\351O\377\374\351O\377\374"
+  "\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377r\237\317\377r\237\317"
+  "\377r\237\317\377\0\0\0\377r\237\317\377r\237\317\377r\237\317\377r\237"
+  "\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377r\237"
+  "\317\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377\0\0\0\377"
+  "r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377\0\0"
+  "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377\1\0\0\377\1\0\0\377\1\0\0\377"
+  "\1\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\374\257>\377\374\257>\377\0\0\0\377\374\257>\377\374\257>"
+  "\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\377\374\257>\377\374\257>\377\0\0\0\377\374"
+  "\257>\377\374\257>\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_align_top_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_align_top_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_align_top_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\374\257>\377\374\257>\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0"
+  "\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\374"
+  "\257>\377\374\257>\377\0\0\0\377\0\0\0\0\0\0\0\377r\237\317\377r\237"
+  "\317\377\0\0\0\377\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\0\0\0"
+  "\377\0\0\0\0\0\0\0\0\0\0\0\377\374\257>\377\374\257>\377\0\0\0\377\0"
+  "\0\0\0\0\0\0\377r\237\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\377"
+  "\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\374\257"
+  ">\377\374\257>\377\0\0\0\377\0\0\0\0\0\0\0\377r\237\317\377r\237\317"
+  "\377\0\0\0\377\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\1\0"
+  "\0\377r\237\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\377\374\351"
+  "O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\1\0\0\377r\237\317\377r\237\317\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\377r\237\317\377r\237\317"
+  "\377\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\377r\237\317"
+  "\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\377r\237"
+  "\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "r\237\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_align_bottom_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_align_bottom_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_align_bottom_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377r\237\317\377r\237\317"
+  "\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377r\237\317\377r\237"
+  "\317\377\1\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377r\237\317\377"
+  "r\237\317\377\1\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377"
+  "r\237\317\377r\237\317\377\1\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377\1\0\0\377\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\374"
+  "\351O\377\0\0\0\377\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377\1\0\0"
+  "\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\377r\237"
+  "\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\377\374\257>\377\374\257"
+  ">\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\0"
+  "\0\0\377\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\377\374\257>\377\374\257>\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+  "\0\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\377r\237\317"
+  "\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\377\374\257>\377\374\257>\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\0\0\0"
+  "\377\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\377\374\257>\377\374\257>\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_align_vcenter_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_align_vcenter_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_align_vcenter_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377"
+  "\1\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377r\237\317\377"
+  "r\237\317\377\1\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0"
+  "\0\377r\237\317\377r\237\317\377\1\0\0\377\0\0\0\0\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\374\351O"
+  "\377\0\0\0\377\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377\1\0\0\377"
+  "\0\0\0\0\0\0\0\377\374\257>\377\374\257>\377\0\0\0\377\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\377r\237"
+  "\317\377r\237\317\377\1\0\0\377\0\0\0\0\0\0\0\377\374\257>\377\374\257"
+  ">\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377"
+  "\374\351O\377\0\0\0\377\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377\0"
+  "\0\0\377\0\0\0\0\0\0\0\377\374\257>\377\374\257>\377\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\377\374\351O\377\374\351O\377\0\0\0\377\0\0\0\0\0\0"
+  "\0\377r\237\317\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\377\374\257"
+  ">\377\374\257>\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\377\374\351O\377\374"
+  "\351O\377\0\0\0\377\0\0\0\0\0\0\0\377r\237\317\377r\237\317\377\0\0\0"
+  "\377\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0"
+  "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\377r\237\317\377"
+  "r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377r\237\317"
+  "\377r\237\317\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_center_horiz_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_center_horiz_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_center_horiz_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\0\0\0""7\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0""7"
+  "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\320\0\0\0\377\0\0\0\35\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\35\0\0\0"
+  "\377\0\0\0\320\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\35\0\0\0\377\0\0\0\35\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\344\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\344\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\35\0"
+  "\0\0\377\0\0\0\35\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\320\0\0\0\377\0\0\0\35\0"
+  "\0\0\0\0\0\0\377\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0\320\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0""7\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0""7\0\0\0\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_center_vert_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_center_vert_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_center_vert_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\0\0\0\320\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\320\0"
+  "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0""7\0\0\0\377\0\0\0\377\0\0\0\344\0\0\0\377\0\0\0\377"
+  "\0\0\0""7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\35"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0\35\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0"
+  "\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\0\377\0\0\0\377\0\0\0\377"
+  "\0\0\0\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0""7\0\0\0\377\0\0\0\377\0\0\0\344\0\0\0\377"
+  "\0\0\0\377\0\0\0""7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\320\0\0\0\377\0\0\0\0\0\0\0\377"
+  "\0\0\0\320\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_bucket_fill_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_bucket_fill_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_bucket_fill_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0N\0\0\0\377\0\0\0N\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\26\26\26\323\0\0\0\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0www\10\0\0\0\0\0\0\0\377\246\246\246\377\0\0\0\377___/\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\250\250\250\12\0\0\0\0\0\0\0\377\266\266\266\377\335\335\335\377\0"
+  "\0\0\377\0\0\0\377KKK;\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\257\257\257\14\0\0\0\0\0\0\0\377\266\266\266\377\351\351\351"
+  "\377\243\243\243\377\0\0\0\377\300\300\300\376\0\0\0\377\0\0\0\27\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\266\266"
+  "\266\377\342\342\342\377\362\362\362\377\0\0\0\377\367\367\367\377\0"
+  "\0\0\377\323\323\323\377\0\0\0\377\0\0\0\31\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\377\266\266\266\377\341\341\341\377\362\362\362"
+  "\377\367\367\367\377\253\253\253\377\0\0\0\377sss\377\271\271\271\377"
+  "\332\331\331\377\0\0\0\377\0\0\0\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\266\266\266\377\362\362\362\377\362\362\362\377\367\367\367"
+  "\377\367\367\367\377\302\302\302\377\326\326\326\377\260\260\260\377"
+  "\231\231\231\377\231\231\231\377\4\4\4\361\3003\35Y\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\13\13\13\27\0\0\0\377\266\266\266\377\322\322\322\376\346\346"
+  "\346\377\302\302\302\377\326\326\326\377\256\256\256\377\231\231\231"
+  "\377\3\3\3\377\13\13\13\355\13\13\13\343\231\14\10\363\325^G\225\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\14\0\0\0\377\266\266\266\377\302\302\302\377"
+  "\326\326\326\377\256\256\256\377\231\231\231\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\6\0\0\0\0\314\0\0\377\357))\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\34\34\34\23\0\0\0\377\266\266\266\377\242\242\242\377\231\231\231\377"
+  "\0\0\0\377\0\0\0\0\0\0\0\4\0\0\0\0\0\0\0\0\314\0\0\377\357))\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\22\22\23\0\0\0\377FFF\360\0\0"
+  "\0\377\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\314\0\0\377\3169\32\371"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0\0\0F\0\0\0"
+  "\0\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\225\11\4\363\357))\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\314\0\0\377\255%\20\362\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\211\13\4\277\316\223\223\367"
+  "\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_bucket_fill_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_bucket_fill_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_bucket_fill_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0N\0\0\0\377\0\0"
+  "\0N\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\23\0\0\0\377\0\0\0"
+  "\23\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\24\24\24\336\0\0\0\377\0\0\0\77"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0www\10\0\0\0\0\0\0\0\377\246\246\246\377\0\0\0\377---b\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\250\250"
+  "\250\12www\0\0\0\0\377\266\266\266\377\335\335\335\377\0\0\0\377\0\0"
+  "\0\377AAAD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\257\257"
+  "\257\14\250\250\250\0\0\0\0\377\266\266\266\377\351\351\351\377\243\243"
+  "\243\377\0\0\0\377\300\300\300\376\0\0\0\377\0\0\0%\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\257\257\257\0\0\0\0\377\266\266\266\377\342"
+  "\342\342\377\362\362\362\377\0\0\0\377\367\367\367\377\0\0\0\377\323"
+  "\323\323\377\0\0\0\377\0\0\0\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\377\266\266\266\377\341\341\341\377\362\362\362\377\367\367\367"
+  "\377\253\253\253\377\0\0\0\377sss\377\271\271\271\377\332\331\331\377"
+  "\0\0\0\377\0\0\0\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\266\266\266"
+  "\377\362\362\362\377\362\362\362\377\367\367\367\377\367\367\367\377"
+  "\302\302\302\377\326\326\326\377\260\260\260\377\231\231\231\377\231"
+  "\231\231\377\3\3\3\364\2670\33]\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\13\13\13\27\0\0\0"
+  "\377\266\266\266\377\322\322\322\376\346\346\346\377\302\302\302\377"
+  "\326\326\326\377\256\256\256\377\231\231\231\377\3\3\3\377\12\12\12\361"
+  "\12\12\12\352\314\0\0\377\310XB\236\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\13\13\13\0\0\0\0\22\0"
+  "\0\0\377\266\266\266\377\302\302\302\377\326\326\326\377\256\256\256"
+  "\377\231\231\231\377\0\0\0\377\0\0\0\77\0\0\0D\0\0\0;\314\0\0\377\357"
+  "))\377\0\0\0%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\26\0\0\0\377\266\266\266\377"
+  "\242\242\242\377\231\231\231\377\0\0\0\377\0\0\0\77\0\0\0B\0\0\0\0\0"
+  "\0\0\1\231\13\6\365\357))\377\0\0\0>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\0\16"
+  "\16\16\30\0\0\0\377DDD\364\0\0\0\377\0\0\0\77\0\0\0@\0\0\0\0\0\0\0\1"
+  "\0\0\0\0\314\0\0\377\314\0\0\377\0\0\0>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16"
+  "\16\16\0\0\0\0\13\0\0\0t\0\0\0;\0\0\0C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\314\0\0\377\357))\377\0\0\0>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\1\0\0\0\21\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\314\0"
+  "\0\377\252$\17\365\0\0\0<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\314\0\0\377"
+  "\314\221\221\371\0\0\0<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\211\13\4\0\0\0"
+  "\0/\0\0\0=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_pencil_16)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_pencil_16[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_pencil_16[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (1024) */
+  "\0\0\4\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (64) */
+  "\0\0\0@"
+  /* width (16) */
+  "\0\0\0\20"
+  /* height (16) */
+  "\0\0\0\20"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\0\0\0"
+  "\230\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0$\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\277\257"
+  "\254\262\215mh\377\252[O\377\271YM\344\0\0\0\377\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""4;;;\377"
+  "\253\222\215\377\2211\40\377\206/!\377\317R>\377\0\0\0\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "u\303\253\246\327a\36\22\377\2305%\377\317R>\377\343\232\216\377\0\0"
+  "\0\230\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0""4;;;\377\263\225\217\377\2425!\377\210/!\377\333~p\377\203"
+  "sp\377\0\0\0Z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\305\314\274\240\345\330\251D\377\254\214:\377\352\316"
+  "y\377\326\326\326\377\0\0\0\377Q'\36\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""4CCC\377\276\253\210\377\330\251D\377"
+  "\254\214:\377\352\316y\377yyy\377\0\0\0u\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\305\307\264\222\377\330\251"
+  "D\377\254\214:\377\352\316y\377\357\335\242\377\0\0\0\377i_D\14\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0CCCC\377\333"
+  "\300\220\377\330\251D\377\254\214:\377\352\316y\377\206\204y\377\0\0"
+  "\0u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0unnn\377\240~W\377\271\225i\377\271\225i\377\367\357\326\377\0\0"
+  "\0\377WK'\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\377\275\250\217\377\233\203g\377\271\225i\377\367\357"
+  "\326\377\205\201s\377\0\0\0u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\263\236\206\377\270\237\203"
+  "\377\313\260\220\377\324\315\267\377\0\0\0\377}iB\7\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\236"
+  "\221\202\377\264\254\243\377\332\324\301\377\0\0\0\377\252\227u\13\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\377okg\377\236\235\234\377\0\0\0\377\264\244\212\13"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\377[YV\377\0\0\0\377C\77""8\5\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\5\4\2\4\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_pencil_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_pencil_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_pencil_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (2304) */
+  "\0\0\11\30"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0(\0\0\0\230\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0$\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230"
+  "\273\254\251\265\215mh\377\252[O\377\264VK\352\0\0\0\377\0\0\0\11\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""4;;;"
+  "\377\253\222\215\377\2211\40\377\206/!\377\317R>\377\0\0\0\377\0\0\0"
+  "=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0u\301"
+  "\251\244\331a\36\22\377\2305%\377\317R>\377\343\232\216\377\0\0\0\261"
+  "\0\0\0=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""4;"
+  ";;\377\263\225\217\377\2425!\377\210/!\377\333~p\377\203sp\377\0\0\0"
+  "\201\0\0\0$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\305\313\273\237\346\330\251D\377\254\214:\377\352\316y\377\326\326\326"
+  "\377\0\0\0\377\12\5\3D\0\0\0\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0""4CCC\377\276\253\210\377\330\251D\377\254\214:\377\352"
+  "\316y\377yyy\377\0\0\0\226\0\0\0=\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\305\307\264\222\377\330\251D\377\254\214:\377"
+  "\352\316y\377\357\335\242\377\0\0\0\377\22\20\13F\0\0\0\34\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0CCCC\377\333\300\220\377\330"
+  "\251D\377\254\214:\377\352\316y\377\206\204y\377\0\0\0\226\0\0\0=\0\0"
+  "\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0unnn\377\240~W"
+  "\377\271\225i\377\271\225i\377\367\357\326\377\0\0\0\377\13\11\5D\0\0"
+  "\0\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\275"
+  "\250\217\377\233\203g\377\271\225i\377\367\357\326\377\205\201s\377\0"
+  "\0\0\226\0\0\0=\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\377\263\236\206\377\270\237\203\377\313\260\220\377\324"
+  "\315\267\377\0\0\0\377\15\13\7B\0\0\0\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\236\221\202\377\264\254\243"
+  "\377\332\324\301\377\0\0\0\377\33\30\22E\0\0\0=\0\0\0\2\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377okg\377\236\235"
+  "\234\377\0\0\0\377\34\32\26E\0\0\0=\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377[YV\377\0\0\0\377"
+  "\5\4\4A\0\0\0=\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0@\0\0\0=\0\0"
+  "\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0=\0\0\0=\0\0\0\1\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_hchain_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_hchain_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_hchain_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (864) */
+  "\0\0\3x"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (9) */
+  "\0\0\0\11"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4"
+  "\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\2"
+  "\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\2\2\4\377ZZ\\\377\350\350\351\377\320\320\321\377"
+  "\320\320\321\377\320\320\321\377\320\320\321\377\217\217\221\377\2\2"
+  "\4\377\0\0\0\0\0\0\0\0\2\2\4\377\217\217\221\377\265\265\266\377\350"
+  "\350\351\377\350\350\351\377\350\350\351\377\350\350\351\377\265\265"
+  "\266\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\265\265"
+  "\266\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377"
+  "\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377"
+  "\2\2\4\377\2\2\4\377\2\2\4\377\350\350\351\377\2\2\4\377\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\2\2\4\377nnn\377\265\265\266\377\320\320\321\377\320\320"
+  "\321\377\320\320\321\377\265\265\266\377\2\2\4\377\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4"
+  "\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2"
+  "\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\350\350\351"
+  "\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377nnn\377\232\232"
+  "\230\377\320\320\321\377\320\320\321\377\265\265\266\377\232\232\230"
+  "\377\217\217\221\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377nnn\377\265\265"
+  "\266\377\265\265\266\377\265\265\266\377\265\265\266\377\320\320\321"
+  "\377nnn\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377"
+  "\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2"
+  "\4\377\2\2\4\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_hchain_broken_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_hchain_broken_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_hchain_broken_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (864) */
+  "\0\0\3x"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (96) */
+  "\0\0\0`"
+  /* width (24) */
+  "\0\0\0\30"
+  /* height (9) */
+  "\0\0\0\11"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2"
+  "\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4"
+  "\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\0\0"
+  "\0\0\2\2\4\377ZZ\\\377\350\350\351\377\320\320\321\377\320\320\321\377"
+  "\320\320\321\377\320\320\321\377\217\217\221\377\2\2\4\377\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\217\217\221\377\265"
+  "\265\266\377\350\350\351\377\350\350\351\377\350\350\351\377\350\350"
+  "\351\377\265\265\266\377\2\2\4\377\2\2\4\377\265\265\266\377\2\2\4\377"
+  "\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4"
+  "\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\350\350\351\377\2\2\4\377"
+  "\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377"
+  "nnn\377\265\265\266\377\320\320\321\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\320\320\321\377\320\320\321\377\265\265\266\377\2\2\4\377\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\2\2\4\377\320\320"
+  "\321\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377"
+  "\2\2\4\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4"
+  "\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\350"
+  "\350\351\377\2\2\4\377\2\2\4\377nnn\377\232\232\230\377\320\320\321\377"
+  "\320\320\321\377\265\265\266\377\232\232\230\377\217\217\221\377\2\2"
+  "\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377nnn\377"
+  "\265\265\266\377\265\265\266\377\265\265\266\377\265\265\266\377\320"
+  "\320\321\377nnn\377\2\2\4\377\0\0\0\0\2\2\4\377\2\2\4\377\2\2\4\377\2"
+  "\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\2\2\4\377\2\2"
+  "\4\377\2\2\4\377\2\2\4\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_vchain_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_vchain_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_vchain_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (864) */
+  "\0\0\3x"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (36) */
+  "\0\0\0$"
+  /* width (9) */
+  "\0\0\0\11"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2"
+  "\4\377\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377nnn\377\320\320\321\377\320\320"
+  "\321\377\265\265\266\377ZZ\\\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377"
+  "\232\232\230\377\2\2\4\377\2\2\4\377\2\2\4\377\350\350\351\377\2\2\4"
+  "\377\0\0\0\0\0\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\2\2"
+  "\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\320\320\321"
+  "\377\2\2\4\377\0\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0"
+  "\0\0\0\2\2\4\377\265\265\266\377\2\2\4\377\0\0\0\0\2\2\4\377\320\320"
+  "\321\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\232\232\230\377\2\2\4\377"
+  "\2\2\4\377\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4"
+  "\377\217\217\221\377\2\2\4\377nnn\377\2\2\4\377\217\217\221\377\2\2\4"
+  "\377\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\265\265\266\377\2\2"
+  "\4\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\320"
+  "\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\2\2\4\377\2\2\4\377\320\320\321\377\2\2\4\377\2\2\4\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377nnn\377\2\2\4\377\265\265\266\377\2\2"
+  "\4\377\217\217\221\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\265\265\266"
+  "\377\2\2\4\377\2\2\4\377\2\2\4\377\265\265\266\377\2\2\4\377\0\0\0\0"
+  "\0\0\0\0\2\2\4\377\265\265\266\377\2\2\4\377\0\0\0\0\2\2\4\377\350\350"
+  "\351\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\265\265\266\377\2\2\4\377"
+  "\0\0\0\0\2\2\4\377\350\350\351\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377"
+  "\265\265\266\377\2\2\4\377\0\0\0\0\2\2\4\377\350\350\351\377\2\2\4\377"
+  "\0\0\0\0\0\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\2\2\4\377\2\2\4"
+  "\377\350\350\351\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377nnn\377\350\350"
+  "\351\377\320\320\321\377\350\350\351\377\265\265\266\377\2\2\4\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4"
+  "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (stock_vchain_broken_24)
+#endif
+#ifdef __GNUC__
+static const guint8 stock_vchain_broken_24[] __attribute__ ((__aligned__ (4))) = 
+#else
+static const guint8 stock_vchain_broken_24[] = 
+#endif
+{ ""
+  /* Pixbuf magic (0x47646b50) */
+  "GdkP"
+  /* length: header (24) + pixel_data (864) */
+  "\0\0\3x"
+  /* pixdata_type (0x1010002) */
+  "\1\1\0\2"
+  /* rowstride (36) */
+  "\0\0\0$"
+  /* width (9) */
+  "\0\0\0\11"
+  /* height (24) */
+  "\0\0\0\30"
+  /* pixel_data: */
+  "\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\2\2\4\377\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377nnn\377\320\320\321\377\320\320\321\377"
+  "\265\265\266\377ZZ\\\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\232\232"
+  "\230\377\2\2\4\377\2\2\4\377\2\2\4\377\350\350\351\377\2\2\4\377\0\0"
+  "\0\0\0\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\2\2\4\377\320"
+  "\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\320\320\321\377\2\2"
+  "\4\377\0\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\2"
+  "\2\4\377\265\265\266\377\2\2\4\377\0\0\0\0\2\2\4\377\320\320\321\377"
+  "\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\232\232\230\377\2\2\4\377\2\2\4"
+  "\377\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\217"
+  "\217\221\377\2\2\4\377nnn\377\2\2\4\377\217\217\221\377\2\2\4\377\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\265\265\266\377\2\2\4\377\2"
+  "\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\320\320\321"
+  "\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0"
+  "\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\320\320\321\377\2\2\4\377\2\2"
+  "\4\377\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377nnn\377\2\2\4\377\265\265\266"
+  "\377\2\2\4\377\217\217\221\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\265"
+  "\265\266\377\2\2\4\377\2\2\4\377\2\2\4\377\265\265\266\377\2\2\4\377"
+  "\0\0\0\0\0\0\0\0\2\2\4\377\265\265\266\377\2\2\4\377\0\0\0\0\2\2\4\377"
+  "\350\350\351\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\265\265\266\377"
+  "\2\2\4\377\0\0\0\0\2\2\4\377\350\350\351\377\2\2\4\377\0\0\0\0\0\0\0"
+  "\0\2\2\4\377\265\265\266\377\2\2\4\377\0\0\0\0\2\2\4\377\350\350\351"
+  "\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377\320\320\321\377\2\2\4\377\2"
+  "\2\4\377\2\2\4\377\350\350\351\377\2\2\4\377\0\0\0\0\0\0\0\0\2\2\4\377"
+  "nnn\377\350\350\351\377\320\320\321\377\350\350\351\377\265\265\266\377"
+  "\2\2\4\377\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\377\2\2\4\377\2\2\4\377\2\2"
+  "\4\377\2\2\4\377\0\0\0\0\0\0\0\0"};
+
+
diff --git a/src/stock.c b/src/stock.c
new file mode 100644 (file)
index 0000000..a733e5c
--- /dev/null
@@ -0,0 +1,221 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  stock.h:  Stock image module header file
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "stock.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtkiconfactory.h>
+#include <gtk/gtkstock.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+
+#include "stock-pixmaps/stockpixbufs.h"
+
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void add_icons (GtkIconFactory *factory,
+                       const gchar    *stock_id,
+                       const guchar   *inline_24,
+                       const guchar   *inline_16);
+
+static void add_button_icon (GtkIconFactory *factory,
+                             const gchar    *stock_id,
+                             const guchar   *inline_24);
+
+\f
+/****************************************************************************/
+/* Initialize our stock icons.                                              */
+/****************************************************************************/
+void
+gl_stock_init (void)
+{
+       GtkIconFactory *factory;
+
+       static GtkStockItem items[] = {
+               { GL_STOCK_ARROW,         N_("_Select Mode"),          0, 0, NULL },
+               { GL_STOCK_TEXT,          N_("_Text"),                 0, 0, NULL },
+               { GL_STOCK_LINE,          N_("_Line"),                 0, 0, NULL },
+               { GL_STOCK_BOX,           N_("_Box"),                  0, 0, NULL },
+               { GL_STOCK_ELLIPSE,       N_("_Ellipse"),              0, 0, NULL },
+               { GL_STOCK_IMAGE,         N_("_Image"),                0, 0, NULL },
+               { GL_STOCK_BARCODE,       N_("Bar_code"),              0, 0, NULL },
+               { GL_STOCK_MERGE,         N_("_Merge Properties"),     0, 0, NULL },
+               { GL_STOCK_PROPERTIES,    N_("Object _Properties"),    0, 0, NULL },
+               { GL_STOCK_ORDER_TOP,     N_("Bring to _Front"),       0, 0, NULL },
+               { GL_STOCK_ORDER_BOTTOM,  N_("Send to _Back"),         0, 0, NULL },
+               { GL_STOCK_ROTATE_LEFT,   N_("Rotate _Left"),          0, 0, NULL },
+               { GL_STOCK_ROTATE_RIGHT,  N_("Rotate _Right"),         0, 0, NULL },
+               { GL_STOCK_FLIP_HORIZ,    N_("Flip _Horizontally"),    0, 0, NULL },
+               { GL_STOCK_FLIP_VERT,     N_("Flip _Vertically"),      0, 0, NULL },
+               { GL_STOCK_ALIGN_LEFT,    N_("_Lefts"),                0, 0, NULL },
+               { GL_STOCK_ALIGN_RIGHT,   N_("_Rights"),               0, 0, NULL },
+               { GL_STOCK_ALIGN_HCENTER, N_("_Centers"),              0, 0, NULL },
+               { GL_STOCK_ALIGN_TOP,     N_("_Tops"),                 0, 0, NULL },
+               { GL_STOCK_ALIGN_BOTTOM,  N_("Bottoms"),               0, 0, NULL },
+               { GL_STOCK_ALIGN_VCENTER, N_("Centers"),               0, 0, NULL },
+               { GL_STOCK_CENTER_HORIZ,  N_("Label Ce_nter"),         0, 0, NULL },
+               { GL_STOCK_CENTER_VERT,   N_("Label Ce_nter"),         0, 0, NULL },
+               { GL_STOCK_BUCKET_FILL,   N_("Fill color"),            0, 0, NULL },
+               { GL_STOCK_PENCIL,        N_("Line color"),            0, 0, NULL },
+               { GL_STOCK_HCHAIN,        N_("Linked"),                0, 0, NULL },
+               { GL_STOCK_HCHAIN_BROKEN, N_("Not Linked"),            0, 0, NULL },
+               { GL_STOCK_VCHAIN,        N_("Linked"),                0, 0, NULL },
+               { GL_STOCK_VCHAIN_BROKEN, N_("Not Linked"),            0, 0, NULL },
+       };
+
+       gtk_stock_add (items, G_N_ELEMENTS (items));
+
+       factory = gtk_icon_factory_new ();
+       gtk_icon_factory_add_default (factory);
+
+       add_icons (factory, GL_STOCK_ARROW,         stock_arrow_24,   stock_arrow_16);
+       add_icons (factory, GL_STOCK_TEXT,          stock_text_24,    stock_text_16);
+       add_icons (factory, GL_STOCK_LINE,          stock_line_24,    stock_line_16);
+       add_icons (factory, GL_STOCK_BOX,           stock_box_24,     stock_box_16);
+       add_icons (factory, GL_STOCK_ELLIPSE,       stock_ellipse_24, stock_ellipse_16);
+       add_icons (factory, GL_STOCK_IMAGE,         stock_image_24,   stock_image_16);
+       add_icons (factory, GL_STOCK_BARCODE,       stock_barcode_24, stock_barcode_16);
+       add_icons (factory, GL_STOCK_MERGE,         stock_merge_24,   stock_merge_16);
+
+       add_icons (factory, GL_STOCK_PROPERTIES,
+                  stock_properties_24,
+                  stock_properties_16);
+
+       add_icons (factory, GL_STOCK_ORDER_TOP,     NULL, stock_order_top_16);
+       add_icons (factory, GL_STOCK_ORDER_BOTTOM,  NULL, stock_order_bottom_16);
+       add_icons (factory, GL_STOCK_ROTATE_LEFT,   NULL, stock_rotate_left_16);
+       add_icons (factory, GL_STOCK_ROTATE_RIGHT,  NULL, stock_rotate_right_16);
+       add_icons (factory, GL_STOCK_FLIP_HORIZ,    NULL, stock_flip_horiz_16);
+       add_icons (factory, GL_STOCK_FLIP_VERT,     NULL, stock_flip_vert_16);
+       add_icons (factory, GL_STOCK_ALIGN_LEFT,    NULL, stock_align_left_16);
+       add_icons (factory, GL_STOCK_ALIGN_RIGHT,   NULL, stock_align_right_16);
+       add_icons (factory, GL_STOCK_ALIGN_HCENTER, NULL, stock_align_hcenter_16);
+       add_icons (factory, GL_STOCK_ALIGN_TOP,     NULL, stock_align_top_16);
+       add_icons (factory, GL_STOCK_ALIGN_BOTTOM,  NULL, stock_align_bottom_16);
+       add_icons (factory, GL_STOCK_ALIGN_VCENTER, NULL, stock_align_vcenter_16);
+       add_icons (factory, GL_STOCK_CENTER_HORIZ,  NULL, stock_center_horiz_16);
+       add_icons (factory, GL_STOCK_CENTER_VERT,   NULL, stock_center_vert_16);
+
+       add_icons (factory, GL_STOCK_BUCKET_FILL,   stock_bucket_fill_24, stock_bucket_fill_16);
+       add_icons (factory, GL_STOCK_PENCIL,        stock_pencil_24,      stock_pencil_16);
+
+       add_button_icon (factory, GL_STOCK_HCHAIN,        stock_hchain_24);
+       add_button_icon (factory, GL_STOCK_HCHAIN_BROKEN, stock_hchain_broken_24);
+       add_button_icon (factory, GL_STOCK_VCHAIN,        stock_vchain_24);
+       add_button_icon (factory, GL_STOCK_VCHAIN_BROKEN, stock_vchain_broken_24);
+
+       g_object_unref (G_OBJECT(factory));
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Unpack and associate given icons with stock_id.                */
+/*--------------------------------------------------------------------------*/
+static void
+add_icons (GtkIconFactory *factory,
+           const gchar    *stock_id,
+           const guchar   *inline_24,
+           const guchar   *inline_16)
+{
+       GdkPixbuf      *pixbuf;
+       GtkIconSet     *icon_set;
+       GtkIconSource  *icon_source;
+
+       if ( inline_24 != NULL ) {
+               /* Create icon set with default image */
+               pixbuf = gdk_pixbuf_new_from_inline (-1, inline_24, FALSE, NULL);
+               icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
+               g_object_unref (G_OBJECT(pixbuf));
+       } else {
+               /* Create an empty icon set */
+               icon_set = gtk_icon_set_new ();
+       }
+
+       if ( inline_16 != NULL ) {
+               /* Add 16x16 icon for menus to icon set */
+               icon_source = gtk_icon_source_new ();
+               pixbuf = gdk_pixbuf_new_from_inline (-1, inline_16,
+                                                    FALSE, NULL);
+               gtk_icon_source_set_pixbuf (icon_source, pixbuf);
+               g_object_unref (G_OBJECT(pixbuf));
+               gtk_icon_source_set_size_wildcarded (icon_source, FALSE);
+               gtk_icon_source_set_size (icon_source, GTK_ICON_SIZE_MENU);
+               gtk_icon_set_add_source (icon_set, icon_source);
+               gtk_icon_source_free (icon_source);
+       }
+
+       /* Now associate icon set with stock id */
+       gtk_icon_factory_add (factory, stock_id, icon_set);
+       gtk_icon_set_unref (icon_set);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Unpack and associate given button icon with stock_id.          */
+/*--------------------------------------------------------------------------*/
+static void
+add_button_icon (GtkIconFactory *factory,
+                 const gchar    *stock_id,
+                 const guchar   *inline_24)
+{
+       GtkIconSet     *icon_set;
+       GdkPixbuf      *pixbuf;
+       GtkIconSource  *icon_source;
+
+       icon_set = gtk_icon_set_new ();
+
+       icon_source = gtk_icon_source_new ();
+       pixbuf = gdk_pixbuf_new_from_inline (-1, inline_24, FALSE, NULL);
+       gtk_icon_source_set_pixbuf (icon_source, pixbuf);
+       g_object_unref (G_OBJECT(pixbuf));
+       gtk_icon_source_set_size_wildcarded (icon_source, FALSE);
+       gtk_icon_source_set_size (icon_source, GTK_ICON_SIZE_BUTTON);
+       gtk_icon_set_add_source (icon_set, icon_source);
+       gtk_icon_source_free (icon_source);
+
+       /* Now associate icon set with stock id */
+       gtk_icon_factory_add (factory, stock_id, icon_set);
+       gtk_icon_set_unref (icon_set);
+}
+
+
+
+
+
+
+
diff --git a/src/stock.h b/src/stock.h
new file mode 100644 (file)
index 0000000..14fb907
--- /dev/null
@@ -0,0 +1,68 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  stock.h:  Stock image module header file
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __STOCK_H__
+#define __STOCK_H__
+
+#include <glib/gmacros.h>
+
+G_BEGIN_DECLS
+
+/* Stock names */
+
+#define GL_STOCK_ARROW         "gl_stock_arrow"
+#define GL_STOCK_TEXT          "gl_stock_text"
+#define GL_STOCK_LINE          "gl_stock_line"
+#define GL_STOCK_BOX           "gl_stock_box"
+#define GL_STOCK_ELLIPSE       "gl_stock_ellipse"
+#define GL_STOCK_IMAGE         "gl_stock_image"
+#define GL_STOCK_BARCODE       "gl_stock_barcode"
+#define GL_STOCK_MERGE         "gl_stock_merge"
+#define GL_STOCK_PROPERTIES    "gl_stock_properties"
+#define GL_STOCK_ORDER_TOP     "gl_stock_order_top"
+#define GL_STOCK_ORDER_BOTTOM  "gl_stock_order_bottom"
+#define GL_STOCK_ROTATE_LEFT   "gl_stock_rotate_left"
+#define GL_STOCK_ROTATE_RIGHT  "gl_stock_rotate_right"
+#define GL_STOCK_FLIP_HORIZ    "gl_stock_flip_horiz"
+#define GL_STOCK_FLIP_VERT     "gl_stock_flip_vert"
+#define GL_STOCK_ALIGN_LEFT    "gl_stock_align_left"
+#define GL_STOCK_ALIGN_RIGHT   "gl_stock_align_right"
+#define GL_STOCK_ALIGN_HCENTER "gl_stock_align_hcenter"
+#define GL_STOCK_ALIGN_TOP     "gl_stock_align_top"
+#define GL_STOCK_ALIGN_BOTTOM  "gl_stock_align_bottom"
+#define GL_STOCK_ALIGN_VCENTER "gl_stock_align_vcenter"
+#define GL_STOCK_CENTER_HORIZ  "gl_stock_center_horiz"
+#define GL_STOCK_CENTER_VERT   "gl_stock_center_vert"
+#define GL_STOCK_BUCKET_FILL   "gl_stock_bucket_fill"
+#define GL_STOCK_PENCIL        "gl_stock_pencil"
+#define GL_STOCK_HCHAIN        "gl_stock_hchain"
+#define GL_STOCK_HCHAIN_BROKEN "gl_stock_hchain_broken"
+#define GL_STOCK_VCHAIN        "gl_stock_vchain"
+#define GL_STOCK_VCHAIN_BROKEN "gl_stock_vchain_broken"
+
+void gl_stock_init (void);
+
+G_END_DECLS
+
+#endif
diff --git a/src/template-designer.c b/src/template-designer.c
new file mode 100644 (file)
index 0000000..60ffe57
--- /dev/null
@@ -0,0 +1,1758 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  template-designer.c:  Template designer module
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "template-designer.h"
+
+#include <glib/gi18n.h>
+#include <glade/glade-xml.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtklabel.h>
+#include <string.h>
+#include <math.h>
+
+#include "prefs.h"
+#include <libglabels/db.h>
+#include "wdgt-mini-preview.h"
+#include "mini-preview-pixbuf-cache.h"
+#include "print-op.h"
+#include "util.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+#define ICON_PIXMAP        (GLABELS_ICON_DIR "glabels.png")
+
+#define EX_RECT_IMAGE      (GLABELS_PIXMAP_DIR "ex-rect-size.png")
+#define EX_ROUND_IMAGE     (GLABELS_PIXMAP_DIR "ex-round-size.png")
+#define EX_CD_IMAGE        (GLABELS_PIXMAP_DIR "ex-cd-size.png")
+#define EX_NLAYOUTS_IMAGE1 (GLABELS_PIXMAP_DIR "ex-1layout.png")
+#define EX_NLAYOUTS_IMAGE2 (GLABELS_PIXMAP_DIR "ex-2layouts.png")
+
+#define DEFAULT_MARGIN 9.0
+
+#define DEFAULT_RECT_W      252.0
+#define DEFAULT_RECT_H      144.0
+#define DEFAULT_RECT_R        0.0
+#define DEFAULT_RECT_WASTE    0.0 /* Should never exceed 1/2 the distance between items. */
+
+#define DEFAULT_ROUND_R      72.0
+#define DEFAULT_ROUND_WASTE   0.0 /* Should never exceed 1/2 the distance between items. */
+
+#define DEFAULT_CD_RADIUS   166.5
+#define DEFAULT_CD_HOLE      58.5
+#define DEFAULT_CD_WASTE      9.0 /* Should never exceed 1/2 the distance between items. */
+
+#define DELTA 0.01
+#define MAX_PAGE_DIM_POINTS 5000.0
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glTemplateDesignerPrivate
+{
+       /* Assistant pages */
+       GtkWidget       *start_page;
+       GtkWidget       *name_page;
+       GtkWidget       *pg_size_page;
+       GtkWidget       *shape_page;
+       GtkWidget       *rect_size_page;
+       GtkWidget       *round_size_page;
+       GtkWidget       *cd_size_page;
+       GtkWidget       *nlayouts_page;
+       GtkWidget       *layout_page;
+       GtkWidget       *finish_page;
+
+       /* Name page controls */
+       GtkWidget       *brand_entry;
+       GtkWidget       *part_num_entry;
+        GtkWidget       *name_warning_image;
+        GtkWidget       *name_warning_label;
+       GtkWidget       *description_entry;
+
+       /* Page size page controls */
+       GtkWidget       *pg_size_combo;
+       GtkWidget       *pg_w_spin;
+       GtkWidget       *pg_h_spin;
+       GtkWidget       *pg_w_units_label;
+       GtkWidget       *pg_h_units_label;
+
+       /* Shape page controls */
+       GtkWidget       *shape_rect_radio;
+       GtkWidget       *shape_round_radio;
+       GtkWidget       *shape_cd_radio;
+
+       /* Label size (rectangular) page controls */
+       GtkWidget       *rect_image;
+       GtkWidget       *rect_w_spin;
+       GtkWidget       *rect_h_spin;
+       GtkWidget       *rect_r_spin;
+       GtkWidget       *rect_x_waste_spin;
+       GtkWidget       *rect_y_waste_spin;
+       GtkWidget       *rect_margin_spin;
+       GtkWidget       *rect_w_units_label;
+       GtkWidget       *rect_h_units_label;
+       GtkWidget       *rect_r_units_label;
+       GtkWidget       *rect_x_waste_units_label;
+       GtkWidget       *rect_y_waste_units_label;
+       GtkWidget       *rect_margin_units_label;
+
+       /* Label size (round) page controls */
+       GtkWidget       *round_image;
+       GtkWidget       *round_r_spin;
+       GtkWidget       *round_waste_spin;
+       GtkWidget       *round_margin_spin;
+       GtkWidget       *round_r_units_label;
+       GtkWidget       *round_waste_units_label;
+       GtkWidget       *round_margin_units_label;
+
+       /* Label size (cd) page controls */
+       GtkWidget       *cd_image;
+       GtkWidget       *cd_radius_spin;
+       GtkWidget       *cd_hole_spin;
+       GtkWidget       *cd_w_spin;
+       GtkWidget       *cd_h_spin;
+       GtkWidget       *cd_waste_spin;
+       GtkWidget       *cd_margin_spin;
+       GtkWidget       *cd_radius_units_label;
+       GtkWidget       *cd_hole_units_label;
+       GtkWidget       *cd_w_units_label;
+       GtkWidget       *cd_h_units_label;
+       GtkWidget       *cd_waste_units_label;
+       GtkWidget       *cd_margin_units_label;
+
+       /* Number of layouts controls */
+       GtkWidget       *nlayouts_image1;
+       GtkWidget       *nlayouts_image2;
+       GtkWidget       *nlayouts_spin;
+
+       /* Layout page controls */
+       GtkWidget       *layout1_head_label;
+       GtkWidget       *layout1_nx_spin;
+       GtkWidget       *layout1_ny_spin;
+       GtkWidget       *layout1_x0_spin;
+       GtkWidget       *layout1_y0_spin;
+       GtkWidget       *layout1_dx_spin;
+       GtkWidget       *layout1_dy_spin;
+       GtkWidget       *layout2_head_label;
+       GtkWidget       *layout2_nx_spin;
+       GtkWidget       *layout2_ny_spin;
+       GtkWidget       *layout2_x0_spin;
+       GtkWidget       *layout2_y0_spin;
+       GtkWidget       *layout2_dx_spin;
+       GtkWidget       *layout2_dy_spin;
+       GtkWidget       *layout_x0_units_label;
+       GtkWidget       *layout_y0_units_label;
+       GtkWidget       *layout_dx_units_label;
+       GtkWidget       *layout_dy_units_label;
+       GtkWidget       *layout_mini_preview;
+       GtkWidget       *layout_test_button;
+
+       /* Units related stuff */
+       const gchar     *units_string;
+       gdouble          units_per_point;
+       gdouble          climb_rate;
+       gint             digits;
+
+        /* Prevent recursion */
+       gboolean    stop_signals;
+};
+
+/* Page numbers for traversing GtkAssistant */
+enum {
+        START_PAGE_NUM = 0,
+        NAME_PAGE_NUM,
+        PG_SIZE_PAGE_NUM,
+        SHAPE_PAGE_NUM,
+        RECT_SIZE_PAGE_NUM,
+        ROUND_SIZE_PAGE_NUM,
+        CD_SIZE_PAGE_NUM,
+        NLAYOUTS_PAGE_NUM,
+        LAYOUT_PAGE_NUM,
+        FINISH_PAGE_NUM
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void gl_template_designer_finalize        (GObject                 *object);
+static void gl_template_designer_construct        (glTemplateDesigner      *dialog);
+
+static void     construct_start_page              (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     construct_name_page               (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     construct_pg_size_page            (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     construct_shape_page              (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     construct_rect_size_page          (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     construct_round_size_page         (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     construct_cd_size_page            (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     construct_nlayouts_page           (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     construct_layout_page             (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     construct_finish_page             (glTemplateDesigner      *dialog,
+                                                  GdkPixbuf               *logo);
+
+static void     cancel_cb                         (glTemplateDesigner      *dialog);
+static void     apply_cb                          (glTemplateDesigner      *dialog);
+static void     close_cb                          (glTemplateDesigner      *dialog);
+static void     prepare_cb                        (glTemplateDesigner      *dialog,
+                                                   GtkWidget               *page);
+
+static gint     forward_page_function             (gint                     current_page,
+                                                   gpointer                 data);
+
+static void     name_page_changed_cb              (glTemplateDesigner      *dialog);
+
+static void     pg_size_page_changed_cb           (glTemplateDesigner      *dialog);
+
+static void     rect_size_page_prepare_cb         (glTemplateDesigner      *dialog);
+
+static void     round_size_page_prepare_cb        (glTemplateDesigner      *dialog);
+
+static void     cd_size_page_prepare_cb           (glTemplateDesigner      *dialog);
+
+static void     layout_page_prepare_cb            (glTemplateDesigner      *dialog);
+
+static void     layout_page_changed_cb            (glTemplateDesigner      *dialog);
+
+static void     print_test_cb                     (glTemplateDesigner      *dialog);
+
+static lglTemplate *build_template                (glTemplateDesigner      *dialog);
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glTemplateDesigner, gl_template_designer, GTK_TYPE_ASSISTANT);
+
+static void
+gl_template_designer_class_init (glTemplateDesignerClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_TEMPLATE, "");
+       
+       gl_template_designer_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_template_designer_finalize;         
+}
+
+static void
+gl_template_designer_init (glTemplateDesigner *dialog)
+{
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+       dialog->priv = g_new0 (glTemplateDesignerPrivate, 1);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
+
+        return;
+}
+
+static void 
+gl_template_designer_finalize (GObject *object)
+{
+       glTemplateDesigner* dialog = GL_TEMPLATE_DESIGNER (object);
+       
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_TEMPLATE_DESIGNER (dialog));
+       g_return_if_fail (dialog->priv != NULL);
+
+       g_free (dialog->priv);
+
+       G_OBJECT_CLASS (gl_template_designer_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_TEMPLATE, "END");
+}
+
+/*****************************************************************************/
+/* NEW preferences dialog.                                                   */
+/*****************************************************************************/
+GtkWidget*
+gl_template_designer_new (GtkWindow *parent)
+{
+       GtkWidget *dialog;
+
+       gl_debug (DEBUG_TEMPLATE, "START");
+
+       dialog = GTK_WIDGET (g_object_new (GL_TYPE_TEMPLATE_DESIGNER, NULL));
+
+       if (parent)
+               gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+       
+       gl_template_designer_construct (GL_TEMPLATE_DESIGNER(dialog));
+
+
+       gl_debug (DEBUG_TEMPLATE, "END");
+
+       return dialog;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Construct composite widget.                                     */
+/*---------------------------------------------------------------------------*/
+static void
+gl_template_designer_construct (glTemplateDesigner *dialog)
+{
+       GdkPixbuf  *logo;
+
+       g_return_if_fail (dialog && GL_IS_TEMPLATE_DESIGNER (dialog));
+       g_return_if_fail (dialog->priv != NULL);
+
+       /* Initialize units stuff from prefs */
+       dialog->priv->units_string    = gl_prefs_get_units_string ();
+        dialog->priv->units_per_point = gl_prefs_get_units_per_point ();
+        dialog->priv->climb_rate      = gl_prefs_get_units_step_size ();
+        dialog->priv->digits          = gl_prefs_get_units_precision ();
+
+       gtk_window_set_title (GTK_WINDOW(dialog), _("gLabels Template Designer"));
+
+       logo = gdk_pixbuf_new_from_file (ICON_PIXMAP, NULL);
+
+        /* Costruct and append pages (must be same order as PAGE_NUM enums. */
+       construct_start_page (dialog, logo);
+       construct_name_page (dialog, logo);
+       construct_pg_size_page (dialog, logo);
+       construct_shape_page (dialog, logo);
+       construct_rect_size_page (dialog, logo);
+       construct_round_size_page (dialog, logo);
+       construct_cd_size_page (dialog, logo);
+       construct_nlayouts_page (dialog, logo);
+       construct_layout_page (dialog, logo);
+       construct_finish_page (dialog, logo);
+
+        gtk_assistant_set_forward_page_func (GTK_ASSISTANT (dialog),
+                                             forward_page_function,
+                                             dialog,
+                                             NULL);
+
+       /* signals */
+       g_signal_connect_swapped (G_OBJECT(dialog), "cancel",
+                                 G_CALLBACK(cancel_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog), "apply",
+                                 G_CALLBACK(apply_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog), "close",
+                                 G_CALLBACK(close_cb), dialog);
+       g_signal_connect (G_OBJECT(dialog), "prepare",
+                          G_CALLBACK(prepare_cb), NULL);
+
+        gtk_widget_show_all (GTK_WIDGET(dialog));   
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct start page.                                          */
+/*--------------------------------------------------------------------------*/
+static void
+construct_start_page (glTemplateDesigner      *dialog,
+                     GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "start_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->start_page = glade_xml_get_widget (gui, "start_page");
+
+        g_object_unref (gui);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->start_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->start_page,
+                                      _("Welcome"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->start_page,
+                                             logo);
+        gtk_assistant_set_page_type (GTK_ASSISTANT (dialog),
+                                     dialog->priv->start_page,
+                                     GTK_ASSISTANT_PAGE_INTRO);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->start_page,
+                                         TRUE);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct name page.                                           */
+/*--------------------------------------------------------------------------*/
+static void
+construct_name_page (glTemplateDesigner      *dialog,
+                    GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "name_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->name_page          = glade_xml_get_widget (gui, "name_page");
+       dialog->priv->brand_entry        = glade_xml_get_widget (gui, "brand_entry");
+       dialog->priv->part_num_entry     = glade_xml_get_widget (gui, "part_num_entry");
+       dialog->priv->name_warning_image = glade_xml_get_widget (gui, "name_warning_image");
+       dialog->priv->name_warning_label = glade_xml_get_widget (gui, "name_warning_label");
+       dialog->priv->description_entry  = glade_xml_get_widget (gui, "description_entry");
+
+        g_object_unref (gui);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->name_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->name_page,
+                                      _("Name and Description"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->name_page,
+                                             logo);
+
+       /* Connect a handler that listens for changes in these widgets */
+       /* This controls whether we can progress to the next page. */
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->brand_entry), "changed",
+                                 G_CALLBACK(name_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->part_num_entry), "changed",
+                                 G_CALLBACK(name_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->description_entry), "changed",
+                                 G_CALLBACK(name_page_changed_cb), dialog);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE. Construct page size page.                                       */
+/*--------------------------------------------------------------------------*/
+static void
+construct_pg_size_page (glTemplateDesigner      *dialog,
+                       GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+       GList           *page_sizes;
+       const gchar     *default_page_size_id;
+       gchar           *default_page_size_name;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "pg_size_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->pg_size_page     = glade_xml_get_widget (gui, "pg_size_page");
+       dialog->priv->pg_size_combo    = glade_xml_get_widget (gui, "pg_size_combo");
+       dialog->priv->pg_w_spin        = glade_xml_get_widget (gui, "pg_w_spin");
+       dialog->priv->pg_h_spin        = glade_xml_get_widget (gui, "pg_h_spin");
+       dialog->priv->pg_w_units_label = glade_xml_get_widget (gui, "pg_w_units_label");
+       dialog->priv->pg_h_units_label = glade_xml_get_widget (gui, "pg_h_units_label");
+
+        g_object_unref (gui);
+
+
+       gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->pg_size_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->pg_size_page,
+                                      _("Page Size"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->pg_size_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->pg_size_page,
+                                         TRUE);
+
+       /* Load page size combo */
+       page_sizes = lgl_db_get_paper_name_list ();
+       gl_util_combo_box_set_strings (GTK_COMBO_BOX (dialog->priv->pg_size_combo), page_sizes);
+       lgl_db_free_paper_name_list (page_sizes);
+       default_page_size_id = gl_prefs_get_page_size ();
+       default_page_size_name = lgl_db_lookup_paper_name_from_id (default_page_size_id);
+       gl_util_combo_box_set_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo), default_page_size_name);
+       g_free (default_page_size_name);
+
+       /* Apply units to spinbuttons and units labels. */
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->pg_w_units_label),
+                           dialog->priv->units_string);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->pg_w_spin),
+                                   0.0, MAX_PAGE_DIM_POINTS*dialog->priv->units_per_point);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->pg_h_units_label),
+                           dialog->priv->units_string);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->pg_h_spin),
+                                   0.0, MAX_PAGE_DIM_POINTS*dialog->priv->units_per_point);
+
+       /* Connect a handler that listens for changes in these widgets */
+       /* This controls sensitivity of related widgets. */
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->pg_size_combo), "changed",
+                                 G_CALLBACK(pg_size_page_changed_cb), dialog);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct shape page.                                          */
+/*--------------------------------------------------------------------------*/
+static void
+construct_shape_page (glTemplateDesigner      *dialog,
+                     GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "shape_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->shape_page        = glade_xml_get_widget (gui, "shape_page");
+       dialog->priv->shape_rect_radio  = glade_xml_get_widget (gui, "shape_rect_radio");
+       dialog->priv->shape_round_radio = glade_xml_get_widget (gui, "shape_round_radio");
+       dialog->priv->shape_cd_radio    = glade_xml_get_widget (gui, "shape_cd_radio");
+
+        g_object_unref (gui);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->shape_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->shape_page,
+                                      _("Label or Card Shape"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->shape_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->shape_page,
+                                         TRUE);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct rect size page.                                      */
+/*--------------------------------------------------------------------------*/
+static void
+construct_rect_size_page (glTemplateDesigner      *dialog,
+                         GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+       GdkPixbuf       *pixbuf;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "rect_size_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->rect_size_page           = glade_xml_get_widget (gui, "rect_size_page");
+       dialog->priv->rect_image               = glade_xml_get_widget (gui, "rect_image");
+       dialog->priv->rect_w_spin              = glade_xml_get_widget (gui, "rect_w_spin");
+       dialog->priv->rect_h_spin              = glade_xml_get_widget (gui, "rect_h_spin");
+       dialog->priv->rect_r_spin              = glade_xml_get_widget (gui, "rect_r_spin");
+       dialog->priv->rect_x_waste_spin        = glade_xml_get_widget (gui, "rect_x_waste_spin");
+       dialog->priv->rect_y_waste_spin        = glade_xml_get_widget (gui, "rect_y_waste_spin");
+       dialog->priv->rect_margin_spin         = glade_xml_get_widget (gui, "rect_margin_spin");
+       dialog->priv->rect_w_units_label       = glade_xml_get_widget (gui, "rect_w_units_label");
+       dialog->priv->rect_h_units_label       = glade_xml_get_widget (gui, "rect_h_units_label");
+       dialog->priv->rect_r_units_label       = glade_xml_get_widget (gui, "rect_r_units_label");
+       dialog->priv->rect_x_waste_units_label = glade_xml_get_widget (gui, "rect_x_waste_units_label");
+       dialog->priv->rect_y_waste_units_label = glade_xml_get_widget (gui, "rect_y_waste_units_label");
+       dialog->priv->rect_margin_units_label  = glade_xml_get_widget (gui, "rect_margin_units_label");
+
+        g_object_unref (gui);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->rect_size_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->rect_size_page,
+                                      _("Label or Card Size"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->rect_size_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->rect_size_page,
+                                         TRUE);
+
+       /* Initialize illustration. */
+       pixbuf = gdk_pixbuf_new_from_file (EX_RECT_IMAGE, NULL);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->rect_image), pixbuf);
+
+       /* Apply units to spinbuttons and units labels. */
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_w_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_h_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_r_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_x_waste_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_y_waste_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->rect_margin_units_label),
+                           dialog->priv->units_string);
+
+       /* Load some realistic defaults. */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin),
+                                  DEFAULT_RECT_W * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin),
+                                  DEFAULT_RECT_H * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin),
+                                  DEFAULT_RECT_R * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin),
+                                  DEFAULT_RECT_WASTE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin),
+                                  DEFAULT_RECT_WASTE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin),
+                                  DEFAULT_MARGIN * dialog->priv->units_per_point);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct round size page.                                     */
+/*--------------------------------------------------------------------------*/
+static void
+construct_round_size_page (glTemplateDesigner      *dialog,
+                          GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+       GdkPixbuf       *pixbuf;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "round_size_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->round_size_page          = glade_xml_get_widget (gui, "round_size_page");
+       dialog->priv->round_image              = glade_xml_get_widget (gui, "round_image");
+       dialog->priv->round_r_spin             = glade_xml_get_widget (gui, "round_r_spin");
+       dialog->priv->round_waste_spin         = glade_xml_get_widget (gui, "round_waste_spin");
+       dialog->priv->round_margin_spin        = glade_xml_get_widget (gui, "round_margin_spin");
+       dialog->priv->round_r_units_label      = glade_xml_get_widget (gui, "round_r_units_label");
+       dialog->priv->round_waste_units_label  = glade_xml_get_widget (gui, "round_waste_units_label");
+       dialog->priv->round_margin_units_label = glade_xml_get_widget (gui, "round_margin_units_label");
+
+        g_object_unref (gui);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->round_size_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->round_size_page,
+                                      _("Label Size (round)"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->round_size_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->round_size_page,
+                                         TRUE);
+
+       /* Initialize illustration. */
+       pixbuf = gdk_pixbuf_new_from_file (EX_ROUND_IMAGE, NULL);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->round_image), pixbuf);
+
+       /* Apply units to spinbuttons and units labels. */
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->round_r_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->round_r_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->round_r_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->round_waste_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->round_margin_units_label),
+                           dialog->priv->units_string);
+
+       /* Load some realistic defaults. */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin),
+                                  DEFAULT_ROUND_R * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin),
+                                  DEFAULT_ROUND_WASTE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin),
+                                  DEFAULT_MARGIN * dialog->priv->units_per_point);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct CD/DVD size page.                                    */
+/*--------------------------------------------------------------------------*/
+static void
+construct_cd_size_page (glTemplateDesigner      *dialog,
+                       GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+       GdkPixbuf       *pixbuf;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "cd_size_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->cd_size_page = glade_xml_get_widget (gui, "cd_size_page");
+       dialog->priv->cd_image     = glade_xml_get_widget (gui, "cd_image");
+       dialog->priv->cd_radius_spin = glade_xml_get_widget (gui, "cd_radius_spin");
+       dialog->priv->cd_hole_spin   = glade_xml_get_widget (gui, "cd_hole_spin");
+       dialog->priv->cd_w_spin      = glade_xml_get_widget (gui, "cd_w_spin");
+       dialog->priv->cd_h_spin      = glade_xml_get_widget (gui, "cd_h_spin");
+       dialog->priv->cd_waste_spin  = glade_xml_get_widget (gui, "cd_waste_spin");
+       dialog->priv->cd_margin_spin = glade_xml_get_widget (gui, "cd_margin_spin");
+       dialog->priv->cd_radius_units_label = glade_xml_get_widget (gui, "cd_radius_units_label");
+       dialog->priv->cd_hole_units_label   = glade_xml_get_widget (gui, "cd_hole_units_label");
+       dialog->priv->cd_w_units_label      = glade_xml_get_widget (gui, "cd_w_units_label");
+       dialog->priv->cd_h_units_label      = glade_xml_get_widget (gui, "cd_h_units_label");
+       dialog->priv->cd_waste_units_label  = glade_xml_get_widget (gui, "cd_waste_units_label");
+       dialog->priv->cd_margin_units_label = glade_xml_get_widget (gui, "cd_margin_units_label");
+
+        g_object_unref (gui);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->cd_size_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->cd_size_page,
+                                      _("Label Size (CD/DVD)"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->cd_size_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->cd_size_page,
+                                         TRUE);
+
+       /* Initialize illustration. */
+       pixbuf = gdk_pixbuf_new_from_file (EX_CD_IMAGE, NULL);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->cd_image), pixbuf);
+
+       /* Apply units to spinbuttons and units labels. */
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_radius_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_hole_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_w_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_h_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_waste_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->cd_margin_units_label),
+                           dialog->priv->units_string);
+
+       /* Load some realistic defaults. */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin),
+                                  DEFAULT_CD_RADIUS * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin),
+                                  DEFAULT_CD_HOLE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin),
+                                  DEFAULT_CD_WASTE * dialog->priv->units_per_point);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin),
+                                  DEFAULT_MARGIN * dialog->priv->units_per_point);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct number of layouts page.                              */
+/*--------------------------------------------------------------------------*/
+static void
+construct_nlayouts_page (glTemplateDesigner      *dialog,
+                        GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+       GdkPixbuf       *pixbuf;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "nlayouts_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->nlayouts_page   = glade_xml_get_widget (gui, "nlayouts_page");
+       dialog->priv->nlayouts_image1 = glade_xml_get_widget (gui, "nlayouts_image1");
+       dialog->priv->nlayouts_image2 = glade_xml_get_widget (gui, "nlayouts_image2");
+       dialog->priv->nlayouts_spin   = glade_xml_get_widget (gui, "nlayouts_spin");
+
+        g_object_unref (gui);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->nlayouts_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->nlayouts_page,
+                                      _("Number of Layouts"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->nlayouts_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->nlayouts_page,
+                                         TRUE);
+
+       /* Initialize illustrations. */
+       pixbuf = gdk_pixbuf_new_from_file (EX_NLAYOUTS_IMAGE1, NULL);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->nlayouts_image1), pixbuf);
+       pixbuf = gdk_pixbuf_new_from_file (EX_NLAYOUTS_IMAGE2, NULL);
+       gtk_image_set_from_pixbuf (GTK_IMAGE(dialog->priv->nlayouts_image2), pixbuf);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct layout page.                                         */
+/*--------------------------------------------------------------------------*/
+static void
+construct_layout_page (glTemplateDesigner      *dialog,
+                      GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "layout_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->layout_page           = glade_xml_get_widget (gui, "layout_page");
+       dialog->priv->layout1_head_label    = glade_xml_get_widget (gui, "layout1_head_label");
+       dialog->priv->layout1_nx_spin       = glade_xml_get_widget (gui, "layout1_nx_spin");
+       dialog->priv->layout1_ny_spin       = glade_xml_get_widget (gui, "layout1_ny_spin");
+       dialog->priv->layout1_x0_spin       = glade_xml_get_widget (gui, "layout1_x0_spin");
+       dialog->priv->layout1_y0_spin       = glade_xml_get_widget (gui, "layout1_y0_spin");
+       dialog->priv->layout1_dx_spin       = glade_xml_get_widget (gui, "layout1_dx_spin");
+       dialog->priv->layout1_dy_spin       = glade_xml_get_widget (gui, "layout1_dy_spin");
+       dialog->priv->layout2_head_label    = glade_xml_get_widget (gui, "layout2_head_label");
+       dialog->priv->layout2_nx_spin       = glade_xml_get_widget (gui, "layout2_nx_spin");
+       dialog->priv->layout2_ny_spin       = glade_xml_get_widget (gui, "layout2_ny_spin");
+       dialog->priv->layout2_x0_spin       = glade_xml_get_widget (gui, "layout2_x0_spin");
+       dialog->priv->layout2_y0_spin       = glade_xml_get_widget (gui, "layout2_y0_spin");
+       dialog->priv->layout2_dx_spin       = glade_xml_get_widget (gui, "layout2_dx_spin");
+       dialog->priv->layout2_dy_spin       = glade_xml_get_widget (gui, "layout2_dy_spin");
+       dialog->priv->layout_x0_units_label = glade_xml_get_widget (gui, "layout_x0_units_label");
+       dialog->priv->layout_y0_units_label = glade_xml_get_widget (gui, "layout_y0_units_label");
+       dialog->priv->layout_dx_units_label = glade_xml_get_widget (gui, "layout_dx_units_label");
+       dialog->priv->layout_dy_units_label = glade_xml_get_widget (gui, "layout_dy_units_label");
+       dialog->priv->layout_mini_preview   = glade_xml_get_widget (gui, "layout_mini_preview");
+       dialog->priv->layout_test_button    = glade_xml_get_widget (gui, "layout_test_button");
+
+        g_object_unref (gui);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->layout_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->layout_page,
+                                      _("Layout(s)"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->layout_page,
+                                             logo);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->layout_page,
+                                         TRUE);
+
+       /* Apply units to spinbuttons and units labels. */
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->layout_x0_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->layout_y0_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->layout_dx_units_label),
+                           dialog->priv->units_string);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_spin_button_set_digits (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin),
+                                   dialog->priv->digits);
+        gtk_spin_button_set_increments (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin),
+                                        dialog->priv->climb_rate, 10.0*dialog->priv->climb_rate);
+        gtk_label_set_text (GTK_LABEL(dialog->priv->layout_dy_units_label),
+                           dialog->priv->units_string);
+
+       /* Connect a handler that listens for changes in these widgets */
+       /* This controls sensitivity of related widgets. */
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_nx_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_ny_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_x0_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_y0_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_dx_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout1_dy_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_nx_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_ny_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_x0_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_y0_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_dx_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout2_dy_spin), "changed",
+                                 G_CALLBACK(layout_page_changed_cb), dialog);
+
+
+       /* Print button */
+       g_signal_connect_swapped (G_OBJECT(dialog->priv->layout_test_button), "clicked",
+                                 G_CALLBACK(print_test_cb), dialog);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct finish page.                                         */
+/*--------------------------------------------------------------------------*/
+static void
+construct_finish_page (glTemplateDesigner      *dialog,
+                      GdkPixbuf               *logo)
+{
+       GladeXML        *gui;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "template-designer.glade",
+                             "finish_page", NULL);
+       if (!gui)
+        {
+                g_critical ("Could not open template-designer.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+       dialog->priv->finish_page = glade_xml_get_widget (gui, "finish_page");
+
+        g_object_unref (gui);
+
+
+        gtk_assistant_append_page (GTK_ASSISTANT (dialog),
+                                   dialog->priv->finish_page);
+
+        gtk_assistant_set_page_title (GTK_ASSISTANT (dialog),
+                                      dialog->priv->finish_page,
+                                      _("Design Completed"));
+        gtk_assistant_set_page_header_image (GTK_ASSISTANT (dialog),
+                                             dialog->priv->finish_page,
+                                             logo);
+        gtk_assistant_set_page_type (GTK_ASSISTANT (dialog),
+                                     dialog->priv->finish_page,
+                                     GTK_ASSISTANT_PAGE_CONFIRM);
+        gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                         dialog->priv->finish_page,
+                                         TRUE);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  cancel callback.                                               */
+/*--------------------------------------------------------------------------*/
+static void
+cancel_cb (glTemplateDesigner *dialog)
+{
+                                                                               
+       gtk_widget_destroy (GTK_WIDGET(dialog));
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  apply callback                                                 */
+/*--------------------------------------------------------------------------*/
+static void
+apply_cb (glTemplateDesigner *dialog)
+{
+       lglTemplate *template;
+        gchar       *name;
+       
+       template = build_template (dialog);
+       lgl_db_register_template (template);
+        name = lgl_template_get_name (template);
+        gl_mini_preview_pixbuf_cache_add_by_name (name);
+        g_free (name);
+}
+                         
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  close callback                                                 */
+/*--------------------------------------------------------------------------*/
+static void
+close_cb (glTemplateDesigner *dialog)
+{
+                                                                               
+       gtk_widget_destroy (GTK_WIDGET(dialog));
+
+}
+                         
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  prepare page callback                                          */
+/*--------------------------------------------------------------------------*/
+static void
+prepare_cb (glTemplateDesigner      *dialog,
+            GtkWidget               *page)
+{
+        gint page_num;
+
+        page_num = gtk_assistant_get_current_page (GTK_ASSISTANT (dialog));
+
+        switch (page_num)
+        {
+
+        case NAME_PAGE_NUM:
+                name_page_changed_cb (dialog); /* Use to prepare */
+                break;
+
+        case PG_SIZE_PAGE_NUM:
+                pg_size_page_changed_cb (dialog); /* Use to prepare */
+                break;
+
+        case RECT_SIZE_PAGE_NUM:
+                rect_size_page_prepare_cb (dialog);
+                break;
+
+        case ROUND_SIZE_PAGE_NUM:
+                round_size_page_prepare_cb (dialog);
+                break;
+
+        case CD_SIZE_PAGE_NUM:
+                cd_size_page_prepare_cb (dialog);
+                break;
+
+        case LAYOUT_PAGE_NUM:
+                layout_page_prepare_cb (dialog);
+                break;
+
+        default:
+                /* No preparation needed */
+                break;
+
+        }
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Handle non-linear forward traversal.                           */
+/*--------------------------------------------------------------------------*/
+static gint
+forward_page_function (gint     current_page,
+                       gpointer data)
+{
+        glTemplateDesigner *dialog = GL_TEMPLATE_DESIGNER (data);
+
+        switch (current_page)
+        {
+        case START_PAGE_NUM:
+                return NAME_PAGE_NUM;
+
+        case NAME_PAGE_NUM:
+                return PG_SIZE_PAGE_NUM;
+
+        case PG_SIZE_PAGE_NUM:
+                return SHAPE_PAGE_NUM;
+
+        case SHAPE_PAGE_NUM:
+               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
+                        return RECT_SIZE_PAGE_NUM;
+               }
+               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
+                        return ROUND_SIZE_PAGE_NUM;
+               }
+               if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_cd_radio))) {
+                        return CD_SIZE_PAGE_NUM;
+               }
+                break;
+
+        case RECT_SIZE_PAGE_NUM:
+        case ROUND_SIZE_PAGE_NUM:
+        case CD_SIZE_PAGE_NUM:
+                return NLAYOUTS_PAGE_NUM;
+
+        case NLAYOUTS_PAGE_NUM:
+                return LAYOUT_PAGE_NUM;
+
+        case LAYOUT_PAGE_NUM:
+                return FINISH_PAGE_NUM;
+
+        case FINISH_PAGE_NUM:
+        default:
+                return -1;
+        }
+
+        return -1;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Widget on name page "changed" callback.                        */
+/*--------------------------------------------------------------------------*/
+static void
+name_page_changed_cb (glTemplateDesigner *dialog)
+{
+       gchar *brand, *part_num, *desc;
+
+       brand    = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->brand_entry), 0, -1));
+       part_num = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->part_num_entry), 0, -1));
+       desc     = gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->description_entry), 0, -1);
+
+
+       if (brand && brand[0] && part_num && part_num[0] &&
+            lgl_db_does_template_exist (brand, part_num))
+        {
+                gtk_image_set_from_stock (GTK_IMAGE (dialog->priv->name_warning_image),
+                                          GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_BUTTON);
+                gtk_label_set_markup (GTK_LABEL (dialog->priv->name_warning_label),
+                                    _("<span foreground='red' weight='bold'>Brand and part# match an existing template!</span>"));
+        }
+        else
+        {
+                gtk_image_clear (GTK_IMAGE (dialog->priv->name_warning_image));
+                gtk_label_set_text (GTK_LABEL (dialog->priv->name_warning_label), "");
+        }
+
+       if (brand && brand[0] && part_num && part_num[0] && desc && desc[0] &&
+            !lgl_db_does_template_exist (brand, part_num))
+        {
+
+                gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                                 dialog->priv->name_page,
+                                                 TRUE);
+       }
+        else
+        {
+
+                gtk_assistant_set_page_complete (GTK_ASSISTANT (dialog),
+                                                 dialog->priv->name_page,
+                                                 FALSE);
+       }
+
+       g_free (brand);
+       g_free (part_num);
+       g_free (desc);
+}
+                                                                               
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Widget on page size page "changed" callback.                   */
+/*--------------------------------------------------------------------------*/
+static void
+pg_size_page_changed_cb (glTemplateDesigner *dialog)
+{
+       gchar    *page_size_name;
+       lglPaper *paper;
+       
+
+       page_size_name =
+               gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
+
+       if (page_size_name && strlen(page_size_name)) {
+
+               paper = lgl_db_lookup_paper_from_name (page_size_name);
+       
+
+               if ( g_strcasecmp (paper->id, "Other") == 0 ) {
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_spin), TRUE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_spin), TRUE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_units_label),
+                                                 TRUE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_units_label),
+                                                 TRUE);
+
+               } else {
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_spin), FALSE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_spin), FALSE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_w_units_label),
+                                                 FALSE);
+                       gtk_widget_set_sensitive (GTK_WIDGET(dialog->priv->pg_h_units_label),
+                                                 FALSE);
+
+                       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin),
+                                                  paper->width * dialog->priv->units_per_point);
+                       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin),
+                                                  paper->height * dialog->priv->units_per_point);
+               }
+
+               lgl_paper_free (paper);
+       }
+
+       g_free (page_size_name);
+
+}
+                                                                               
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare rectangular size page.                                 */
+/*--------------------------------------------------------------------------*/
+static void
+rect_size_page_prepare_cb (glTemplateDesigner *dialog)
+{
+       gdouble max_w, max_h;
+       gdouble w, h, r, x_waste, y_waste, margin;
+
+       /* Limit label size based on already chosen page size. */
+       max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
+       max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
+
+       w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin));
+       h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin));
+       r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin));
+       x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin));
+       y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin));
+       margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin));
+
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_w_spin),
+                                   dialog->priv->climb_rate, max_w);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_h_spin),
+                                   dialog->priv->climb_rate, max_h);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_r_spin),
+                                   0.0, MIN(max_w, max_h)/2.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_x_waste_spin),
+                                   0.0, MIN(max_w, max_h)/4.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_y_waste_spin),
+                                   0.0, MIN(max_w, max_h)/4.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->rect_margin_spin),
+                                   0.0, MIN(max_w, max_h)/4.0);
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin), w);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin), h);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin), r);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin), x_waste);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin), y_waste);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin), margin);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare round size page.                                       */
+/*--------------------------------------------------------------------------*/
+static void
+round_size_page_prepare_cb (glTemplateDesigner *dialog)
+{
+       gdouble max_w, max_h;
+       gdouble r, waste, margin;
+
+       /* Limit label size based on already chosen page size. */
+       max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
+       max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
+
+       r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin));
+       waste  = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin));
+       margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin));
+
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->round_r_spin),
+                                   dialog->priv->climb_rate, MIN(max_w, max_h)/2.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->round_waste_spin),
+                                   0.0, MIN(max_w, max_h)/4.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->round_margin_spin),
+                                   0.0, MIN(max_w, max_h)/4.0);
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin), r);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin), waste);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin), margin);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare cd/dvd size page.                                      */
+/*--------------------------------------------------------------------------*/
+static void
+cd_size_page_prepare_cb (glTemplateDesigner *dialog)
+{
+       gdouble max_w, max_h;
+       gdouble radius, hole, w, h, waste, margin;
+
+       /* Limit label size based on already chosen page size. */
+       max_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
+       max_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
+
+       radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin));
+       hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin));
+       w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin));
+       h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin));
+       waste  = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin));
+       margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin));
+
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_radius_spin),
+                                   dialog->priv->climb_rate, MIN(max_w, max_h)/2.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_hole_spin),
+                                   dialog->priv->climb_rate, MIN(max_w, max_h)/2.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_w_spin),
+                                   0.0, max_w);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_h_spin),
+                                   0.0, max_h);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_waste_spin),
+                                   0.0, MIN(max_w, max_h)/4.0);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->cd_margin_spin),
+                                   0.0, MIN(max_w, max_h)/4.0);
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin), radius);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin), hole);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin), w);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin), h);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin), waste);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin), margin);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Prepare Layout page cb.                                        */
+/*--------------------------------------------------------------------------*/
+static void
+layout_page_prepare_cb (glTemplateDesigner *dialog)
+{
+       gdouble page_w, page_h;
+       gdouble w=0, h=0, x_waste=0, y_waste=0;
+       gint    max_nx, max_ny;
+       gint    nlayouts;
+       gdouble nx_1, ny_1, x0_1, y0_1, dx_1, dy_1;
+       gdouble nx_2, ny_2, x0_2, y0_2, dx_2, dy_2;
+       lglTemplate *template;
+
+       if (dialog->priv->stop_signals) return;
+       dialog->priv->stop_signals = TRUE;
+
+
+       /* Limit ranges based on already chosen page and label sizes. */
+       page_w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin));
+       page_h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin));
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
+               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin));
+               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin));
+               x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin));
+               y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin));
+       }
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
+               w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin));
+               h = w;
+               x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin));
+               y_waste = x_waste;
+       }
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_cd_radio))) {
+               w = 2*gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin));
+               h = w;
+               x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin));
+               y_waste = x_waste;
+       }
+       max_nx = MAX (floor (page_w/(w + 2*x_waste) + DELTA), 1.0);
+       max_ny = MAX (floor (page_h/(h + 2*y_waste) + DELTA), 1.0);
+
+       nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_nx_spin));
+       ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_ny_spin));
+       x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin));
+       y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin));
+       dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin));
+       dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin));
+       nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_nx_spin));
+       ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_ny_spin));
+       x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin));
+       y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin));
+       dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin));
+       dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin));
+
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_nx_spin),
+                                   1, max_nx);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_ny_spin),
+                                   1, max_ny);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_x0_spin),
+                                   x_waste, page_w - w - x_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_y0_spin),
+                                   y_waste, page_h - h - y_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_dx_spin),
+                                   w + 2*x_waste, page_w - w - 2*x_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout1_dy_spin),
+                                   h + 2*y_waste, page_h - h - 2*y_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_nx_spin),
+                                   1, max_nx);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_ny_spin),
+                                   1, max_ny);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_x0_spin),
+                                   x_waste, page_w - w - x_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_y0_spin),
+                                   y_waste, page_h - h - y_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_dx_spin),
+                                   w + 2*x_waste, page_w - w - 2*x_waste);
+       gtk_spin_button_set_range (GTK_SPIN_BUTTON (dialog->priv->layout2_dy_spin),
+                                   h + 2*y_waste, page_h - h - 2*y_waste);
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_nx_spin), nx_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_ny_spin), ny_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin), x0_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin), y0_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin), dx_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin), dy_1);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_nx_spin), nx_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_ny_spin), ny_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin), x0_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin), y0_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin), dx_2);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin), dy_2);
+
+       /* Set visibility of layout2 widgets as appropriate. */
+       nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin));
+       if ( nlayouts == 1 )
+        {
+               gtk_widget_hide (dialog->priv->layout1_head_label);
+               gtk_widget_hide (dialog->priv->layout2_head_label);
+               gtk_widget_hide (dialog->priv->layout2_nx_spin);
+               gtk_widget_hide (dialog->priv->layout2_ny_spin);
+               gtk_widget_hide (dialog->priv->layout2_x0_spin);
+               gtk_widget_hide (dialog->priv->layout2_y0_spin);
+               gtk_widget_hide (dialog->priv->layout2_dx_spin);
+               gtk_widget_hide (dialog->priv->layout2_dy_spin);
+       }
+        else
+        {
+               gtk_widget_show (dialog->priv->layout1_head_label);
+               gtk_widget_show (dialog->priv->layout2_head_label);
+               gtk_widget_show (dialog->priv->layout2_nx_spin);
+               gtk_widget_show (dialog->priv->layout2_ny_spin);
+               gtk_widget_show (dialog->priv->layout2_x0_spin);
+               gtk_widget_show (dialog->priv->layout2_y0_spin);
+               gtk_widget_show (dialog->priv->layout2_dx_spin);
+               gtk_widget_show (dialog->priv->layout2_dy_spin);
+       }
+
+       template = build_template (dialog);
+       gl_wdgt_mini_preview_set_template (GL_WDGT_MINI_PREVIEW(dialog->priv->layout_mini_preview),
+                                          template);
+       lgl_template_free (template);
+
+
+       dialog->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Layout page widget changed cb.                                 */
+/*--------------------------------------------------------------------------*/
+static void
+layout_page_changed_cb (glTemplateDesigner *dialog)
+{
+       lglTemplate *template;
+
+       if (dialog->priv->stop_signals) return;
+       dialog->priv->stop_signals = TRUE;
+
+       template = build_template (dialog);
+
+       gl_wdgt_mini_preview_set_template (GL_WDGT_MINI_PREVIEW(dialog->priv->layout_mini_preview),
+                                          template);
+
+       lgl_template_free (template);
+
+       dialog->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Print test sheet callback.                                     */
+/*--------------------------------------------------------------------------*/
+static void
+print_test_cb (glTemplateDesigner      *dialog)
+{
+       GObject     *label;
+       lglTemplate *template;
+       glPrintOp   *print_op;
+
+       label = gl_label_new ();
+
+       template = build_template (dialog);
+       gl_label_set_template (GL_LABEL(label), template);
+
+       print_op = gl_print_op_new (GL_LABEL(label));
+       gl_print_op_force_outline_flag (print_op);
+        gtk_print_operation_run (GTK_PRINT_OPERATION (print_op),
+                                 GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
+                                 GTK_WINDOW (dialog),
+                                 NULL);
+
+       lgl_template_free (template);
+       g_object_unref (G_OBJECT(label));
+}
+
+/*--------------------------------------------------------------------------*/
+/* Build a template based on current assistant settings.                    */
+/*--------------------------------------------------------------------------*/
+static lglTemplate *
+build_template (glTemplateDesigner      *dialog)
+{
+       gdouble               upp;
+       gchar                *brand, *part_num, *desc;
+       gchar                *page_size_name;
+       lglPaper             *paper;
+       lglTemplateFrameShape shape;
+       lglTemplateFrame     *frame=NULL;
+       gdouble               w=0, h=0, r=0, radius=0, hole=0, waste=0, x_waste=0, y_waste=0, margin=0;
+       gint                  nlayouts;
+       gdouble               nx_1, ny_1, x0_1, y0_1, dx_1, dy_1;
+       gdouble               nx_2, ny_2, x0_2, y0_2, dx_2, dy_2;
+       lglTemplate          *template;
+
+       upp = dialog->priv->units_per_point;
+
+       brand    = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->brand_entry), 0, -1));
+       part_num = g_strstrip (gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->part_num_entry), 0, -1));
+       desc     = gtk_editable_get_chars (GTK_EDITABLE(dialog->priv->description_entry), 0, -1);
+
+       page_size_name =
+               gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->pg_size_combo));
+       paper = lgl_db_lookup_paper_from_name (page_size_name);
+       if ( g_strcasecmp (paper->id, "Other") == 0 ) {
+               paper->width =
+                       gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_w_spin))
+                       / upp;
+               paper->height =
+                       gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->pg_h_spin))
+                        / upp;
+       }
+
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_rect_radio))) {
+               shape = LGL_TEMPLATE_FRAME_SHAPE_RECT;
+               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_w_spin));
+               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_h_spin));
+               r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_r_spin));
+               x_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_x_waste_spin));
+               y_waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_y_waste_spin));
+               margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->rect_margin_spin));
+       }
+
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_round_radio))) {
+               shape = LGL_TEMPLATE_FRAME_SHAPE_ROUND;
+               r = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_r_spin));
+               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_waste_spin));
+               margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->round_margin_spin));
+       }
+
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->priv->shape_cd_radio))) {
+               shape = LGL_TEMPLATE_FRAME_SHAPE_CD;
+               radius = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_radius_spin));
+               hole = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_hole_spin));
+               w = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_w_spin));
+               h = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_h_spin));
+               waste = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_waste_spin));
+               margin = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->cd_margin_spin));
+       }
+
+       nlayouts = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dialog->priv->nlayouts_spin));
+       nx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_nx_spin));
+       ny_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_ny_spin));
+       x0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_x0_spin));
+       y0_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_y0_spin));
+       dx_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dx_spin));
+       dy_1 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout1_dy_spin));
+       nx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_nx_spin));
+       ny_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_ny_spin));
+       x0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_x0_spin));
+       y0_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_y0_spin));
+       dx_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dx_spin));
+       dy_2 = gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->layout2_dy_spin));
+
+
+       template = lgl_template_new (brand, part_num, desc, paper->id, paper->width, paper->height);
+
+       switch (shape) {
+       case LGL_TEMPLATE_FRAME_SHAPE_RECT:
+               frame = lgl_template_frame_rect_new ("0",
+                                                    w/upp, h/upp, r/upp,
+                                                    x_waste/upp, y_waste/upp);
+               break;
+       case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
+               frame = lgl_template_frame_round_new ("0", r/upp, waste/upp);
+               break;
+       case LGL_TEMPLATE_FRAME_SHAPE_CD:
+               frame = lgl_template_frame_cd_new ("0",
+                                                  radius/upp, hole/upp,
+                                                  w/upp, h/upp,
+                                                  waste/upp);
+               break;
+       }
+       lgl_template_add_frame (template, frame);
+
+       lgl_template_frame_add_markup (frame,
+                                       lgl_template_markup_margin_new (margin/upp));
+
+       lgl_template_frame_add_layout (frame,
+                                       lgl_template_layout_new (nx_1, ny_1,
+                                                                x0_1/upp,
+                                                                y0_1/upp,
+                                                                dx_1/upp,
+                                                                dy_1/upp));
+       if (nlayouts > 1) {
+               lgl_template_frame_add_layout (frame,
+                                               lgl_template_layout_new (nx_2, ny_2,
+                                                                        x0_2/upp,
+                                                                        y0_2/upp,
+                                                                        dx_2/upp,
+                                                                        dy_2/upp));
+       }
+
+       g_free (brand);
+       g_free (part_num);
+       g_free (desc);
+
+       g_free (page_size_name);
+       lgl_paper_free (paper);
+
+       return template;
+}
+
+/*****************************************************************************/
+/* Construct mini preview widget.                                            */
+/*****************************************************************************/
+GtkWidget *
+gl_template_designer_construct_mini_preview (gchar *name,
+                                            gchar *string1,
+                                            gchar *string2,
+                                            gint   int1,
+                                            gint   int2)
+{
+       gint width  = int1;
+       gint height = int2;
+
+       return gl_wdgt_mini_preview_new (height, width);
+}
+
diff --git a/src/template-designer.h b/src/template-designer.h
new file mode 100644 (file)
index 0000000..bf5086a
--- /dev/null
@@ -0,0 +1,73 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  template-designer.h:  Template designer module header file
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __TEMPLATE_DESIGNER_H__
+#define __TEMPLATE_DESIGNER_H__
+
+#include <gtk/gtkassistant.h>
+#include <gtk/gtkwindow.h>
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_TEMPLATE_DESIGNER            (gl_template_designer_get_type ())
+#define GL_TEMPLATE_DESIGNER(obj)            (GTK_CHECK_CAST ((obj), GL_TYPE_TEMPLATE_DESIGNER, glTemplateDesigner))
+#define GL_TEMPLATE_DESIGNER_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_TEMPLATE_DESIGNER, glTemplateDesignerClass))
+#define GL_IS_TEMPLATE_DESIGNER(obj)         (GTK_CHECK_TYPE ((obj), GL_TYPE_TEMPLATE_DESIGNER))
+#define GL_IS_TEMPLATE_DESIGNER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_TEMPLATE_DESIGNER))
+#define GL_TEMPLATE_DESIGNER_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), GL_TYPE_TEMPLATE_DESIGNER, glTemplateDesignerClass))
+
+
+typedef struct _glTemplateDesigner              glTemplateDesigner;
+typedef struct _glTemplateDesignerClass         glTemplateDesignerClass;
+
+typedef struct _glTemplateDesignerPrivate       glTemplateDesignerPrivate;
+
+struct _glTemplateDesigner
+{
+        GtkAssistant               parent_instance;
+
+        glTemplateDesignerPrivate *priv;
+
+};
+
+struct  _glTemplateDesignerClass
+{
+        GtkAssistantClass          parent_class;
+};
+
+GType           gl_template_designer_get_type               (void) G_GNUC_CONST;
+
+GtkWidget      *gl_template_designer_new                    (GtkWindow *parent);
+
+/* Semi-public, for use by libglade: */
+GtkWidget      *gl_template_designer_construct_mini_preview (gchar *name,
+                                                             gchar *string1,
+                                                             gchar *string2,
+                                                             gint   int1,
+                                                             gint   int2);
+
+
+G_END_DECLS
+
+#endif /* __TEMPLATE_DESIGNER_H__ */
diff --git a/src/text-node.c b/src/text-node.c
new file mode 100644 (file)
index 0000000..7a77fbd
--- /dev/null
@@ -0,0 +1,356 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  text_node.c:  text node module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "text-node.h"
+
+#include <string.h>
+
+#include "merge.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static glTextNode *extract_text_node  (gchar          *text,
+                                      gint           *n);
+
+static gboolean    is_empty_field     (glTextNode     *text_node,
+                                      glMergeRecord  *record);
+
+\f
+/****************************************************************************/
+/* Expand single node into representative string.                           */
+/****************************************************************************/
+gchar *
+gl_text_node_expand (glTextNode    *text_node,
+                    glMergeRecord *record)
+{
+       gchar *text;
+
+       if (text_node->field_flag) {
+               if (record == NULL) {
+                       return g_strdup_printf ("${%s}", text_node->data);
+               } else {
+                       text = gl_merge_eval_key (record, text_node->data);
+                       if (text != NULL) {
+                               return text;
+                       } else {
+                               return g_strdup_printf ("%s", "");
+                       }
+               }
+       } else {
+               return g_strdup (text_node->data);
+       }
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Is node a field that evaluates empty?                          */
+/*--------------------------------------------------------------------------*/
+static gboolean
+is_empty_field (glTextNode    *text_node,
+               glMergeRecord *record)
+{
+       gchar    *text;
+       gboolean  ret = FALSE;
+
+       if ( (record != NULL) && text_node->field_flag) {
+               text = gl_merge_eval_key (record, text_node->data);
+               if ( (text == NULL) || (text[0] == 0) ) {
+                       ret = TRUE;
+               }
+               g_free (text);
+       }
+
+       return ret;
+}
+
+/****************************************************************************/
+/* Create a single text node from given text.                               */
+/****************************************************************************/
+glTextNode *
+gl_text_node_new_from_text (gchar *text)
+{
+       gint n;
+
+       return extract_text_node (text, &n);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Create a single text node from given text. n = characters used */
+/*--------------------------------------------------------------------------*/
+static glTextNode *
+extract_text_node (gchar *text,
+                  gint  *n)
+{
+       glTextNode *text_node;
+       gchar      *p;
+       gint        m;
+
+       text_node = g_new0 (glTextNode, 1);
+
+       if (strncmp (text, "${", strlen ("${")) == 0) {
+               /* We are at the beginning of a "FIELD" node */
+               text_node->field_flag = TRUE;
+               *n = strlen ("${");
+               text += *n;
+               for (p = text, m = 0; *p != 0; p++, m++, (*n)++) {
+                       if (*p == '}') {
+                               (*n)++;
+                               break;
+                       }
+               }
+               text_node->data = g_strndup (text, m);
+       } else {
+               /* We are at the beginning of a literal node */
+               text_node->field_flag = FALSE;
+               for (p = text, *n = 0; *p != 0; p++, (*n)++) {
+                       if (strncmp (p, "${", strlen ("${")) == 0)
+                               break;
+                       if (*p == '\n')
+                               break;
+               }
+               text_node->data = g_strndup (text, *n);
+       }
+
+       return text_node;
+}
+
+/****************************************************************************/
+/* Copy a single text node.                                                 */
+/****************************************************************************/
+glTextNode *
+gl_text_node_dup (glTextNode *src)
+{
+       glTextNode *dst;
+
+       if ( src == NULL ) return NULL;
+
+       dst = g_new0 (glTextNode, 1);
+
+       dst->field_flag = src->field_flag;
+       dst->data = g_strdup (src->data);
+
+       return dst;
+}
+
+/****************************************************************************/
+/* Free a single text node.                                                 */
+/****************************************************************************/
+void
+gl_text_node_free (glTextNode **text_node)
+{
+       if ( *text_node == NULL ) return;
+
+       g_free ((*text_node)->data);
+       (*text_node)->data = NULL;
+       g_free (*text_node);
+       *text_node = NULL;
+}
+
+/****************************************************************************/
+/* Compare 2 text nodes for equality.                                       */
+/****************************************************************************/
+gboolean
+gl_text_node_equal (glTextNode     *text_node1,
+                   glTextNode     *text_node2)
+{
+       /* First take care of the case of either or both being NULL. */
+       if ( text_node1 == NULL ) {
+               return ( text_node2 == NULL );
+       } else {
+               if ( text_node2 == NULL ) {
+                       return FALSE;
+               }
+       }
+
+       /* Bail if field flags differ. */
+       if ( text_node1->field_flag != text_node2->field_flag ) {
+               return FALSE;
+       }
+
+       /* Now take care of the case of either or both data fields being NULL. */
+       if ( text_node1->data == NULL ) {
+               return ( text_node2->data == NULL );
+       } else {
+               if ( text_node2->data == NULL ) {
+                       return FALSE;
+               }
+       }
+
+       /* Field flags are identical, so now compare the data. */
+       return (strcmp (text_node1->data, text_node2->data) == 0);
+}
+
+/****************************************************************************/
+/* Expand text lines into single string.                                    */
+/****************************************************************************/
+gchar *
+gl_text_node_lines_expand (GList         *lines,
+                          glMergeRecord *record)
+{
+       GList      *p_line, *p_node;
+       glTextNode *text_node;
+       gchar       *text, *old_text, *expanded_node;
+
+       text = g_strdup ("");   /* prime pointer for concatenation */
+       for (p_line = lines; p_line != NULL; p_line = p_line->next) {
+
+               /* special case: something like ${ADDRESS2} = "" on line by itself. */ 
+               /*               in such circumstances ignore the line completely.  */
+               p_node = (GList *)p_line->data;
+               if (p_node && p_node->next == NULL) {
+                       text_node = (glTextNode *) p_node->data;
+                       if ( is_empty_field (text_node, record) ) {
+                               continue;
+                       }
+               }
+
+               /* expand each node */
+               for (p_node = (GList *) p_line->data; p_node != NULL;
+                    p_node = p_node->next) {
+                       text_node = (glTextNode *) p_node->data;
+                       old_text = text;
+                       expanded_node = gl_text_node_expand (text_node, record);
+                       text = g_strconcat (text, expanded_node, NULL);
+                       g_free (old_text);
+                       g_free (expanded_node);
+               }
+
+               /* append newline to each line, except last. */
+               if ( p_line->next != NULL ) {
+                       old_text = text;
+                       text = g_strconcat (text, "\n", NULL);
+                       g_free (old_text);
+               }
+       }
+
+       return text;
+}
+
+/****************************************************************************/
+/* Parse a string back into text lines.                                     */
+/****************************************************************************/
+GList *
+gl_text_node_lines_new_from_text (gchar *text)
+{
+       GList      *lines, *nodes;
+       glTextNode *text_node;
+       gchar      *p;
+       gint        n;
+
+       lines = NULL;
+       nodes = NULL;
+       for (p = text; *p != 0; p += n) {
+               if (*p != '\n') {
+                       text_node = extract_text_node (p, &n);
+                       nodes = g_list_append (nodes, text_node);
+               } else {
+                       n = 1;
+                       lines = g_list_append (lines, nodes);
+                       nodes = NULL;
+               }
+       }
+       if (*(p - 1) != '\n') {
+               lines = g_list_append (lines, nodes);
+       }
+
+       return lines;
+}
+
+/****************************************************************************/
+/* Copy a list of text lines.                                               */
+/****************************************************************************/
+GList *
+gl_text_node_lines_dup (GList *src_lines)
+{
+       GList      *dst_lines=NULL;
+       GList      *p_line, *line, *p_node;
+       glTextNode *node;
+
+       for (p_line = src_lines; p_line != NULL; p_line = p_line->next)
+        {
+               line = NULL;
+               for (p_node = (GList *) p_line->data; p_node != NULL; p_node = p_node->next)
+                {
+                       node = gl_text_node_dup ((glTextNode *)p_node->data);
+                       line = g_list_append (line, node);
+               }
+               dst_lines = g_list_append (dst_lines, line);
+       }
+
+       return dst_lines;
+}
+
+/****************************************************************************/
+/* Free a list of text lines.                                               */
+/****************************************************************************/
+void
+gl_text_node_lines_free (GList **lines)
+{
+       GList *p_line, *p_node;
+        glTextNode     *text_node;
+
+       for (p_line = *lines; p_line != NULL; p_line = p_line->next)
+        {
+               for (p_node = (GList *) p_line->data; p_node != NULL; p_node = p_node->next)
+                {
+                        text_node = (glTextNode *)p_node->data;
+                        p_node->data = NULL;
+                       gl_text_node_free ( &text_node );
+               }
+               g_list_free ((GList *) p_line->data);
+               p_line->data = NULL;
+       }
+
+       g_list_free (*lines);
+       *lines = NULL;
+}
+
+/****************************************************************************/
+/* For debugging:  descend and print lines list.                            */
+/****************************************************************************/
+void
+gl_text_node_lines_print (GList * lines )
+{
+       GList *p_line, *p_node;
+       glTextNode *text_node;
+       gint i_line, i_node;
+
+       for (p_line=lines, i_line=0; p_line != NULL; p_line=p_line->next, i_line++) {
+               for (p_node = (GList *) p_line->data, i_node=0; p_node != NULL;
+                    p_node = p_node->next, i_node++) {
+                       text_node = (glTextNode *) p_node->data;
+                       g_print( "LINE[%d], NODE[%d] = { %d, \"%s\" }\n",
+                                i_line, i_node,
+                                text_node->field_flag, text_node->data );
+
+               }
+       }
+
+}
+
diff --git a/src/text-node.h b/src/text-node.h
new file mode 100644 (file)
index 0000000..4a9bd22
--- /dev/null
@@ -0,0 +1,58 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  text_node.h:  text node module header file
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __TEXT_NODE_H__
+#define __TEXT_NODE_H__
+
+#include <glib/gtypes.h>
+#include <glib/glist.h>
+#include "merge.h"
+
+G_BEGIN_DECLS
+
+typedef struct {
+       gboolean field_flag;
+       gchar *data;
+} glTextNode;
+
+gchar      *gl_text_node_expand              (glTextNode     *text_node,
+                                             glMergeRecord  *record);
+glTextNode *gl_text_node_new_from_text       (gchar          *text);
+glTextNode *gl_text_node_dup                 (glTextNode     *text_node);
+void        gl_text_node_free                (glTextNode    **text_node);
+
+gboolean    gl_text_node_equal               (glTextNode     *text_node1,
+                                             glTextNode     *text_node2);
+
+gchar      *gl_text_node_lines_expand        (GList          *lines,
+                                             glMergeRecord  *record);
+GList      *gl_text_node_lines_new_from_text (gchar          *text);
+GList      *gl_text_node_lines_dup           (GList          *lines);
+void        gl_text_node_lines_free          (GList         **lines);
+
+/* debug function */
+void        gl_text_node_lines_print         (GList          *lines);
+
+G_END_DECLS
+
+#endif
diff --git a/src/ui-commands.c b/src/ui-commands.c
new file mode 100644 (file)
index 0000000..9a06936
--- /dev/null
@@ -0,0 +1,1168 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  ui-commands.c:  GLabels UI commands module
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "ui-commands.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkaboutdialog.h>
+#include <libgnome/gnome-help.h>
+
+#include "view.h"
+#include "file.h"
+#include "template-designer.h"
+#include "print-op.h"
+#include "prefs.h"
+#include "prefs-dialog.h"
+#include "recent.h"
+#include "debug.h"
+
+
+\f
+/****************************************************************************/
+/** File/New command.                                                       */
+/****************************************************************************/
+void 
+gl_ui_cmd_file_new (GtkAction *action,
+                    glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_file_new (window);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** File/Properties command.                                                */
+/****************************************************************************/
+void 
+gl_ui_cmd_file_properties (GtkAction *action,
+                           glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_file_properties (GL_VIEW(window->view)->label, window);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** File/Template-Designer command.                                         */
+/****************************************************************************/
+void
+gl_ui_cmd_file_template_designer (GtkAction *action,
+                                  glWindow  *window)
+{
+        GtkWidget *dialog;
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        dialog = gl_template_designer_new (GTK_WINDOW(window));
+
+        gtk_widget_show (dialog);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** File/Open command.                                                      */
+/****************************************************************************/
+void 
+gl_ui_cmd_file_open (GtkAction *action,
+                     glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_file_open (window);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** File/Open-Recent command.                                               */
+/****************************************************************************/
+void 
+gl_ui_cmd_file_open_recent (GtkRecentChooser *chooser,
+                            glWindow         *window)
+{
+        GtkRecentInfo *item;
+        gchar         *utf8_filename;
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (chooser && GTK_IS_RECENT_CHOOSER(chooser));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        item = gtk_recent_chooser_get_current_item (chooser);
+        if (!item)
+                return;
+
+        utf8_filename = gl_recent_get_utf8_filename (item);
+
+        gl_debug (DEBUG_COMMANDS, "Selected %s\n", utf8_filename);
+        gl_file_open_recent (utf8_filename, window);
+
+        gtk_recent_info_unref (item);
+        
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** File/Save command.                                                      */
+/****************************************************************************/
+void 
+gl_ui_cmd_file_save (GtkAction *action,
+                     glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_file_save (GL_VIEW(window->view)->label, window);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** File/Save-as command.                                                   */
+/****************************************************************************/
+void 
+gl_ui_cmd_file_save_as (GtkAction *action,
+                        glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_file_save_as (GL_VIEW(window->view)->label, window);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** File/Print command.                                                     */
+/****************************************************************************/
+void
+gl_ui_cmd_file_print (GtkAction *action,
+                      glWindow  *window)
+{
+        glPrintOp               *op;
+        GtkPrintOperationResult  result;
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        op = gl_print_op_new (GL_VIEW(window->view)->label);
+
+        if (window->print_settings)
+        {
+                gl_print_op_set_settings (op, window->print_settings);
+        }
+
+        result = gtk_print_operation_run (GTK_PRINT_OPERATION (op),
+                                          GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
+                                          GTK_WINDOW (window),
+                                          NULL);
+
+        if ( result == GTK_PRINT_OPERATION_RESULT_APPLY )
+        {
+                gl_print_op_free_settings (window->print_settings);
+                window->print_settings = gl_print_op_get_settings (op);
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** File/Close command.                                                     */
+/****************************************************************************/
+void 
+gl_ui_cmd_file_close (GtkAction *action,
+                      glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_file_close (window);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** File/Quit command.                                                      */
+/****************************************************************************/
+void 
+gl_ui_cmd_file_quit (GtkAction *action,
+                     glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_file_exit ();
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+
+/****************************************************************************/
+/** Edit/Cut command.                                                       */
+/****************************************************************************/
+void 
+gl_ui_cmd_edit_cut (GtkAction *action,
+                    glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_view_cut (GL_VIEW(window->view)); 
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** Edit/Copy command.                                                      */
+/****************************************************************************/
+void 
+gl_ui_cmd_edit_copy (GtkAction *action,
+                     glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_view_copy (GL_VIEW(window->view)); 
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** Edit/Paste command.                                                     */
+/****************************************************************************/
+void 
+gl_ui_cmd_edit_paste (GtkAction *action,
+                      glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_view_paste (GL_VIEW(window->view)); 
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+
+/****************************************************************************/
+/** Edit/Delete command.                                                    */
+/****************************************************************************/
+void 
+gl_ui_cmd_edit_delete (GtkAction *action,
+                       glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_view_delete_selection (GL_VIEW(window->view)); 
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+
+/****************************************************************************/
+/** Edit/Select-all command.                                                */
+/****************************************************************************/
+void
+gl_ui_cmd_edit_select_all (GtkAction *action,
+                           glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_view_select_all (GL_VIEW(window->view)); 
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** Edit/Unselect-all command.                                              */
+/****************************************************************************/
+void
+gl_ui_cmd_edit_unselect_all (GtkAction *action,
+                             glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gl_view_unselect_all (GL_VIEW(window->view)); 
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** Edit/Preferences command.                                               */
+/****************************************************************************/
+void
+gl_ui_cmd_edit_preferences (GtkAction *action,
+                            glWindow  *window)
+{
+        static GtkWidget *dialog = NULL;
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (dialog != NULL)
+        {
+                gtk_window_present (GTK_WINDOW (dialog));
+                gtk_window_set_transient_for (GTK_WINDOW (dialog),        
+                                              GTK_WINDOW(window));
+
+        } else {
+                
+                dialog = gl_prefs_dialog_new (GTK_WINDOW(window));
+
+                g_signal_connect (G_OBJECT (dialog), "destroy",
+                                  G_CALLBACK (gtk_widget_destroyed), &dialog);
+        
+                gtk_widget_show (dialog);
+
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** View/Property-bar-toggle command.                                        */
+/*****************************************************************************/
+void
+gl_ui_cmd_view_property_bar_toggle (GtkToggleAction *action,
+                                    glWindow        *window)
+{
+        gboolean     state;
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_TOGGLE_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        state =  gtk_toggle_action_get_active (action);
+
+        gl_prefs->property_toolbar_visible = state;
+        if (state) {
+                gtk_widget_show (GTK_WIDGET (window->property_bar));
+        } else {
+                gtk_widget_hide (GTK_WIDGET (window->property_bar));
+        }
+        gl_prefs_model_save_settings (gl_prefs);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** View/Property-bar-tooltips-toggle command.                               */
+/*****************************************************************************/
+void
+gl_ui_cmd_view_property_bar_tips_toggle (GtkToggleAction *action,
+                                         glWindow        *window)
+{
+        gboolean     state;
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_TOGGLE_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        state =  gtk_toggle_action_get_active (action);
+
+        gl_prefs->property_toolbar_view_tooltips = state;
+        gl_ui_property_bar_set_tooltips (window->property_bar, state);
+        gl_prefs_model_save_settings (gl_prefs);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** View/Grid-toggle command.                                                */
+/*****************************************************************************/
+void
+gl_ui_cmd_view_grid_toggle (GtkToggleAction *action,
+                            glWindow        *window)
+{
+        gboolean     state;
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_TOGGLE_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        state =  gtk_toggle_action_get_active (action);
+
+        if (window->view != NULL)
+        {
+                if (state) {
+                        gl_view_show_grid (GL_VIEW(window->view));
+                } else {
+                        gl_view_hide_grid (GL_VIEW(window->view));
+                }
+        }
+
+        gl_prefs->grid_visible = state;
+        gl_prefs_model_save_settings (gl_prefs);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** View/Markup-toggle command.                                              */
+/*****************************************************************************/
+void
+gl_ui_cmd_view_markup_toggle (GtkToggleAction *action,
+                              glWindow        *window)
+{
+        gboolean     state;
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_TOGGLE_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        state =  gtk_toggle_action_get_active (action);
+
+        if (window->view != NULL)
+        {
+                if (state) {
+                        gl_view_show_markup (GL_VIEW(window->view));
+                } else {
+                        gl_view_hide_markup (GL_VIEW(window->view));
+                }
+        }
+
+        gl_prefs->markup_visible = state;
+        gl_prefs_model_save_settings (gl_prefs);
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** View/Zoom-in command.                                                    */
+/*****************************************************************************/
+void
+gl_ui_cmd_view_zoomin (GtkAction *action,
+                       glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_zoom_in (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** View/Zoom-out command.                                                   */
+/*****************************************************************************/
+void
+gl_ui_cmd_view_zoomout (GtkAction *action,
+                        glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_zoom_out (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** View/Zoom-1:1 command.                                                   */
+/*****************************************************************************/
+void
+gl_ui_cmd_view_zoom1to1 (GtkAction *action,
+                         glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_set_zoom (GL_VIEW(window->view), 1.0);
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** View/Zoom-to-fit command.                                                */
+/*****************************************************************************/
+void
+gl_ui_cmd_view_zoom_to_fit (GtkAction *action,
+                            glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_zoom_to_fit (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Arrow-mode command.                                              */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_arrow_mode (GtkAction *action,
+                              glWindow  *window)
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_arrow_mode (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Create-text object command.                                      */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_create_text (GtkAction *action,
+                               glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_object_create_mode (GL_VIEW(window->view),
+                                            GL_LABEL_OBJECT_TEXT);
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Create-box object command.                                       */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_create_box (GtkAction *action,
+                              glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_object_create_mode (GL_VIEW(window->view),
+                                            GL_LABEL_OBJECT_BOX);
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Create-line object command.                                      */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_create_line (GtkAction *action,
+                               glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_object_create_mode (GL_VIEW(window->view),
+                                            GL_LABEL_OBJECT_LINE);
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Create-ellipse object command.                                   */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_create_ellipse (GtkAction *action,
+                                  glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_object_create_mode (GL_VIEW(window->view),
+                                            GL_LABEL_OBJECT_ELLIPSE);
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Create-image object command.                                     */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_create_image (GtkAction *action,
+                                glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_object_create_mode (GL_VIEW(window->view),
+                                            GL_LABEL_OBJECT_IMAGE);
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Create-barcode object command.                                   */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_create_barcode (GtkAction *action,
+                                  glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_object_create_mode (GL_VIEW(window->view),
+                                            GL_LABEL_OBJECT_BARCODE);
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Raise command.                                                   */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_raise (GtkAction *action,
+                         glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_raise_selection (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Lower command.                                                   */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_lower (GtkAction *action,
+                         glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_lower_selection (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Rotate-left-90-degrees command.                                  */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_rotate_left (GtkAction *action,
+                               glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_rotate_selection_left (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Rotate-right-90-degrees command.                                 */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_rotate_right (GtkAction *action,
+                                glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_rotate_selection_right (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Flip-horizontally command.                                       */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_flip_horiz (GtkAction *action,
+                              glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_flip_selection_horiz (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Flip-vertically command.                                         */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_flip_vert (GtkAction *action,
+                             glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_flip_selection_vert (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Align-left command.                                              */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_align_left (GtkAction *action,
+                              glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_align_selection_left (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Align-right command.                                             */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_align_right (GtkAction *action,
+                               glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_align_selection_right (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Align-horizontal-center command.                                 */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_align_hcenter (GtkAction *action,
+                                 glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_align_selection_hcenter (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Align-top command.                                               */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_align_top (GtkAction *action,
+                             glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_align_selection_top (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Align-bottom command.                                            */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_align_bottom (GtkAction *action,
+                                glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_align_selection_bottom (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Align-vertical center command.                                   */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_align_vcenter (GtkAction *action,
+                                 glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_align_selection_vcenter (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Center-horizontally command.                                     */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_center_horiz (GtkAction *action,
+                                glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_center_selection_horiz (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Center-vertically command.                                       */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_center_vert (GtkAction *action,
+                               glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->view != NULL) {
+                gl_view_center_selection_vert (GL_VIEW(window->view));
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/*****************************************************************************/
+/** Objects/Edit- merge-properties command.                                  */
+/*****************************************************************************/
+void
+gl_ui_cmd_objects_merge_properties (GtkAction *action,
+                                    glWindow  *window)
+
+{
+        gl_debug (DEBUG_COMMANDS, "START");
+        
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (window->merge_dialog) {
+
+                gtk_window_present (GTK_WINDOW(window->merge_dialog));
+                gtk_window_set_transient_for (GTK_WINDOW (window->merge_dialog),
+                                              GTK_WINDOW (window));
+
+        } else {
+
+                window->merge_dialog =
+                        g_object_ref (
+                                gl_merge_properties_dialog_new (GL_VIEW(window->view)->label,
+                                                                GTK_WINDOW(window)) );
+
+                g_signal_connect (G_OBJECT(window->merge_dialog), "destroy",
+                                  G_CALLBACK (gtk_widget_destroyed),
+                                  &window->merge_dialog);
+
+                gtk_widget_show (GTK_WIDGET (window->merge_dialog));
+
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+/****************************************************************************/
+/** Help/Contents command.                                                  */
+/****************************************************************************/
+void 
+gl_ui_cmd_help_contents (GtkAction *action,
+                         glWindow  *window)
+{
+        GError *error = NULL;
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        gnome_help_display_with_doc_id (NULL, NULL, "glabels.xml", NULL, &error);
+        
+        if (error != NULL)
+        {
+                g_message ("%s", error->message);
+
+                g_error_free (error);
+        }
+
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
+
+/****************************************************************************/
+/** Help/About command.                                                     */
+/****************************************************************************/
+void 
+gl_ui_cmd_help_about (GtkAction *action,
+                      glWindow  *window)
+{
+        static GtkWidget *about = NULL;
+
+        GdkPixbuf        *pixbuf = NULL;
+        
+        const gchar *authors[] = {
+                "Jim Evins",
+                " ",
+                _("Glabels includes contributions from:"),
+                "Frederic Ruaudel",
+                "Wayne Schuller",
+                "Emmanuel Pacaud",
+                "Austin Henry",
+                " ",
+                _("See the file AUTHORS for additional credits,"),
+                _("or visit http://glabels.sourceforge.net/"),
+                NULL
+        };
+        
+        const gchar *artists[] = {
+                "Nestor Di",
+                "Jim Evins",
+                NULL
+        };
+        
+        const gchar *copy_text = "Copyright \xc2\xa9 2001-2009 Jim Evins";
+
+        const gchar *about_text = _("A label and business card creation program.\n");
+
+        const gchar *url = "http://glabels.sourceforge.net";
+
+        const gchar *translator_credits = _("translator-credits");
+
+        const gchar *license = _(
+              "Glabels is free software; you can redistribute it and/or modify it\n"
+              "under the terms of the GNU General Public License as published by\n"
+              "the Free Software Foundation; either version 2 of the License, or\n"
+              "(at your option) any later version.\n" "\n"
+              "This program is distributed in the hope that it will be useful, but\n"
+              "WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+              "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See\n"
+              "the GNU General Public License for more details.\n");
+
+        gl_debug (DEBUG_COMMANDS, "START");
+
+        g_return_if_fail (action && GTK_IS_ACTION(action));
+        g_return_if_fail (window && GL_IS_WINDOW(window));
+
+        if (about != NULL)
+        {
+
+                gtk_window_present (GTK_WINDOW (about));
+                gtk_window_set_transient_for (GTK_WINDOW (about),
+                                              GTK_WINDOW (window));
+
+        } else {
+        
+                pixbuf = gdk_pixbuf_new_from_file (GLABELS_PIXMAP_DIR "glabels-splash.png", NULL);
+
+                about = gtk_about_dialog_new ();
+                gtk_about_dialog_set_name      (GTK_ABOUT_DIALOG(about), _("glabels"));
+                gtk_about_dialog_set_version   (GTK_ABOUT_DIALOG(about), VERSION);
+                gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG(about), copy_text);
+                gtk_about_dialog_set_comments  (GTK_ABOUT_DIALOG(about), about_text);
+                gtk_about_dialog_set_website   (GTK_ABOUT_DIALOG(about), url);
+                gtk_about_dialog_set_logo      (GTK_ABOUT_DIALOG(about), pixbuf);
+
+                gtk_about_dialog_set_authors   (GTK_ABOUT_DIALOG(about), authors);
+                gtk_about_dialog_set_artists   (GTK_ABOUT_DIALOG(about), artists);
+                gtk_about_dialog_set_translator_credits (GTK_ABOUT_DIALOG(about),
+                                                         translator_credits);
+                gtk_about_dialog_set_license   (GTK_ABOUT_DIALOG(about), license);
+        
+                gtk_window_set_destroy_with_parent (GTK_WINDOW (about), TRUE);
+
+                g_signal_connect (G_OBJECT (about), "response",
+                                  G_CALLBACK (gtk_widget_destroy), NULL);
+                g_signal_connect (G_OBJECT (about), "destroy",
+                                  G_CALLBACK (gtk_widget_destroyed), &about);
+
+                gtk_window_set_transient_for (GTK_WINDOW (about),
+                                              GTK_WINDOW (window));
+
+                gtk_window_present (GTK_WINDOW (about));
+
+                if (pixbuf != NULL)
+                        g_object_unref (pixbuf);
+
+        }
+        
+        gl_debug (DEBUG_COMMANDS, "END");
+}
+
diff --git a/src/ui-commands.h b/src/ui-commands.h
new file mode 100644 (file)
index 0000000..fc8a3db
--- /dev/null
@@ -0,0 +1,203 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  ui-commands.h:  GLabels UI commands module header file
+ *
+ *  Copyright (C) 2001-2005  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __COMMANDS_H__
+#define __COMMANDS_H__
+
+#include <gtk/gtkaction.h>
+#include <gtk/gtkrecentchooser.h>
+#include <gtk/gtktoggleaction.h>
+#include "window.h"
+
+G_BEGIN_DECLS
+
+void gl_ui_cmd_file_new                 (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_file_properties          (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_file_template_designer   (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_file_open                (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_file_open_recent         (GtkRecentChooser *chooser,
+                                        glWindow         *window);
+
+void gl_ui_cmd_file_save                (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_file_save_as             (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_file_print               (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_file_print_preview       (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_file_close               (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_file_quit                (GtkAction   *action,
+                                        glWindow    *window);
+
+
+
+void gl_ui_cmd_edit_undo                (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_edit_redo                (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_edit_cut                 (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_edit_copy                (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_edit_paste               (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_edit_delete              (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_edit_select_all          (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_edit_unselect_all        (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_edit_preferences         (GtkAction   *action,
+                                        glWindow    *window);
+
+
+
+void gl_ui_cmd_view_property_bar_toggle      (GtkToggleAction *action,
+                                             glWindow        *window);
+
+void gl_ui_cmd_view_property_bar_tips_toggle (GtkToggleAction *action,
+                                             glWindow        *window);
+
+void gl_ui_cmd_view_grid_toggle              (GtkToggleAction *action,
+                                             glWindow        *window);
+
+void gl_ui_cmd_view_markup_toggle            (GtkToggleAction *action,
+                                             glWindow        *window);
+
+
+
+void gl_ui_cmd_view_zoomin              (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_view_zoomout             (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_view_zoom1to1            (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_view_zoom_to_fit         (GtkAction   *action,
+                                        glWindow    *window);
+
+
+
+void gl_ui_cmd_objects_arrow_mode       (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_create_text      (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_create_box       (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_create_line      (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_create_ellipse   (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_create_image     (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_create_barcode   (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_raise            (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_lower            (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_rotate_left      (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_rotate_right     (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_flip_horiz       (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_flip_vert        (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_align_left       (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_align_right      (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_align_hcenter    (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_align_top        (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_align_bottom     (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_align_vcenter    (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_center_horiz     (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_center_vert      (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_objects_merge_properties (GtkAction   *action,
+                                        glWindow    *window);
+
+
+
+void gl_ui_cmd_help_contents            (GtkAction   *action,
+                                        glWindow    *window);
+
+void gl_ui_cmd_help_about              (GtkAction   *action,
+                                        glWindow    *window);
+
+G_END_DECLS
+
+#endif /* __COMMANDS_H__ */ 
diff --git a/src/ui-property-bar.c b/src/ui-property-bar.c
new file mode 100644 (file)
index 0000000..005c838
--- /dev/null
@@ -0,0 +1,1331 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/**
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  property-bar.c:  gLabels property bar
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "ui-property-bar.h"
+
+#include <glib/gi18n.h>
+#include <glade/glade-xml.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtktoolbar.h>
+#include <gtk/gtktoggletoolbutton.h>
+#include <gtk/gtktooltips.h>
+#include <string.h>
+
+#include "util.h"
+#include "mygal/widget-color-combo.h"
+#include "stock-pixmaps/stockpixbufs.h"
+#include "prefs.h"
+#include "color.h"
+
+#include "debug.h"
+
+/*===========================================================================*/
+/* Private macros and constants.                                             */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Private data types                                                        */
+/*===========================================================================*/
+
+struct _glUIPropertyBarPrivate {
+
+       glView     *view;
+
+       GladeXML   *gui;
+
+       GtkWidget  *tool_bar;
+
+       /* Font selection */
+       GtkWidget  *font_family_combo;
+       GtkWidget  *font_size_spin;
+       GtkWidget  *font_bold_toggle;
+       GtkWidget  *font_italic_toggle;
+
+       /* Text alignemnt radios */
+       GtkWidget  *text_align_left_radio;
+       GtkWidget  *text_align_center_radio;
+       GtkWidget  *text_align_right_radio;
+
+       /* Color combos */
+       GtkWidget  *text_color_combo;
+       GtkWidget  *fill_color_combo;
+       GtkWidget  *line_color_combo;
+
+       /* Line width */
+       GtkWidget  *line_width_spin;
+
+        /* Prevent recursion */
+       gboolean    stop_signals;
+};
+
+
+/*===========================================================================*/
+/* Private globals                                                           */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Local function prototypes                                                 */
+/*===========================================================================*/
+
+static void     gl_ui_property_bar_finalize      (GObject              *object);
+
+static void     gl_ui_property_bar_construct     (glUIPropertyBar      *property_bar);
+
+static void     selection_changed_cb             (glUIPropertyBar      *property_bar);
+
+static void     font_family_changed_cb           (GtkComboBox          *combo,
+                                                 glUIPropertyBar      *property_bar);
+
+static void     font_size_changed_cb             (GtkSpinButton        *spin,
+                                                 glUIPropertyBar      *property_bar);
+
+static void     text_color_changed_cb            (ColorCombo           *cc,
+                                                 GdkColor             *gdk_color,
+                                                 gboolean              custom,
+                                                 gboolean              by_user,
+                                                 gboolean              is_default,
+                                                 glUIPropertyBar      *property_bar);
+
+static void     fill_color_changed_cb            (ColorCombo           *cc,
+                                                 GdkColor             *gdk_color,
+                                                 gboolean              custom,
+                                                 gboolean              by_user,
+                                                 gboolean              is_default,
+                                                 glUIPropertyBar      *property_bar);
+
+static void     line_color_changed_cb            (ColorCombo           *cc,
+                                                 GdkColor             *gdk_color,
+                                                 gboolean              custom,
+                                                 gboolean              by_user,
+                                                 gboolean              is_default,
+                                                 glUIPropertyBar      *property_bar);
+
+static void     line_width_changed_cb            (GtkSpinButton        *spin,
+                                                 glUIPropertyBar      *property_bar);
+
+static void     font_bold_toggled_cb             (GtkToggleToolButton  *toggle,
+                                                 glUIPropertyBar      *property_bar);
+                                                 
+static void     font_italic_toggled_cb           (GtkToggleToolButton  *toggle,
+                                                 glUIPropertyBar      *property_bar);
+                                                 
+static void     text_align_toggled_cb            (GtkToggleToolButton  *toggle,
+                                                 glUIPropertyBar      *property_bar);
+                                                 
+static void     set_doc_items_sensitive          (glUIPropertyBar      *property_bar,
+                                                 gboolean              state);
+
+static void     set_text_items_sensitive         (glUIPropertyBar      *property_bar,
+                                                 gboolean              state);
+
+static void     set_fill_items_sensitive         (glUIPropertyBar      *property_bar,
+                                                 gboolean              state);
+
+static void     set_line_color_items_sensitive   (glUIPropertyBar      *property_bar,
+                                                 gboolean              state);
+
+static void     set_line_width_items_sensitive   (glUIPropertyBar      *property_bar,
+                                                 gboolean              state);
+
+\f
+/****************************************************************************/
+/* Boilerplate Object stuff.                                                */
+/****************************************************************************/
+G_DEFINE_TYPE (glUIPropertyBar, gl_ui_property_bar, GTK_TYPE_HBOX);
+
+static void
+gl_ui_property_bar_class_init (glUIPropertyBarClass *class)
+{
+       GObjectClass   *object_class     = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       gl_ui_property_bar_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_ui_property_bar_finalize;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+}
+
+static void
+gl_ui_property_bar_init (glUIPropertyBar *property_bar)
+{
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       property_bar->priv = g_new0 (glUIPropertyBarPrivate, 1);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+}
+
+static void
+gl_ui_property_bar_finalize (GObject *object)
+{
+       glUIPropertyBar *property_bar = GL_UI_PROPERTY_BAR (object);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_UI_PROPERTY_BAR (object));
+
+       if (property_bar->priv->view)
+        {
+               g_object_unref (G_OBJECT(property_bar->priv->view));
+       }
+        if (property_bar->priv->gui)
+        {
+                g_object_unref (G_OBJECT(property_bar->priv->gui));
+        }
+       g_free (property_bar->priv);
+
+       G_OBJECT_CLASS (gl_ui_property_bar_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+}
+
+/****************************************************************************/
+/* Create a NEW property_bar.                                               */
+/****************************************************************************/
+GtkWidget *
+gl_ui_property_bar_new (void)
+{
+       glUIPropertyBar *property_bar;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       property_bar = g_object_new (GL_TYPE_UI_PROPERTY_BAR, NULL);
+
+       gl_ui_property_bar_construct (property_bar);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       return GTK_WIDGET (property_bar);
+}
+
+/******************************************************************************/
+/* Initialize property toolbar.                                               */
+/******************************************************************************/
+static void
+gl_ui_property_bar_construct (glUIPropertyBar   *property_bar)
+{
+       GladeXML   *gui;
+       GList      *family_names = NULL;
+       GList      *family_node;
+       GdkColor   *gdk_color;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       property_bar->priv->stop_signals = TRUE;
+
+       gui = glade_xml_new (GLABELS_GLADE_DIR "property-bar.glade",
+                             "property_toolbar", NULL);
+
+       if (!gui)
+        {
+               g_critical ("Could not open property-bar.glade. gLabels may not be installed correctly!");
+               return;
+       }
+
+       property_bar->priv->tool_bar = glade_xml_get_widget (gui, "property_toolbar");
+       gtk_container_add (GTK_CONTAINER (property_bar), property_bar->priv->tool_bar);
+
+       property_bar->priv->font_family_combo =
+               glade_xml_get_widget (gui, "font_family_combo");
+       property_bar->priv->font_size_spin =
+               glade_xml_get_widget (gui, "font_size_spin");
+       property_bar->priv->font_bold_toggle =
+               glade_xml_get_widget (gui, "font_bold_toggle");
+       property_bar->priv->font_italic_toggle =
+               glade_xml_get_widget (gui, "font_italic_toggle");
+       property_bar->priv->text_align_left_radio =
+               glade_xml_get_widget (gui, "text_align_left_radio");
+       property_bar->priv->text_align_center_radio =
+               glade_xml_get_widget (gui, "text_align_center_radio");
+       property_bar->priv->text_align_right_radio =
+               glade_xml_get_widget (gui, "text_align_right_radio");
+       property_bar->priv->text_color_combo =
+               glade_xml_get_widget (gui, "text_color_combo");
+       property_bar->priv->fill_color_combo =
+               glade_xml_get_widget (gui, "fill_color_combo");
+       property_bar->priv->line_color_combo =
+               glade_xml_get_widget (gui, "line_color_combo");
+       property_bar->priv->line_width_spin =
+               glade_xml_get_widget (gui, "line_width_spin");
+
+        /* Save reference to gui tree so we don't lose tooltips */
+        property_bar->priv->gui = gui;
+
+       set_doc_items_sensitive (property_bar, FALSE);
+
+       /* Font family entry widget */
+       gl_util_combo_box_add_text_model (GTK_COMBO_BOX (property_bar->priv->font_family_combo));
+       family_names = gl_util_get_font_family_list ();
+       gl_util_combo_box_set_strings (GTK_COMBO_BOX (property_bar->priv->font_family_combo),
+                                      family_names);
+       gtk_widget_set_size_request (property_bar->priv->font_family_combo, 200, -1);
+
+       /* Make sure we have a valid font.  if not provide a good default. */
+       family_node = g_list_find_custom (family_names,
+                                         gl_prefs->default_font_family,
+                                         (GCompareFunc)g_utf8_collate);
+       if (family_node)
+        {
+               gtk_combo_box_set_active (GTK_COMBO_BOX (property_bar->priv->font_family_combo),
+                                         g_list_position (family_names,
+                                                          family_node));
+       }
+        else
+        {
+               gtk_combo_box_set_active (GTK_COMBO_BOX (property_bar->priv->font_family_combo), 0);
+       }
+
+       g_signal_connect (G_OBJECT (property_bar->priv->font_family_combo),
+                         "changed", G_CALLBACK (font_family_changed_cb), property_bar);
+
+       /* Font size entry widget */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(property_bar->priv->font_size_spin),
+                                  gl_prefs->default_font_size);
+
+       g_signal_connect (G_OBJECT (property_bar->priv->font_size_spin),
+                         "changed", G_CALLBACK (font_size_changed_cb), property_bar);
+
+
+       /* Bold and Italic toggles */
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->font_bold_toggle),
+                                          (gl_prefs->default_font_weight == PANGO_WEIGHT_BOLD));
+       g_signal_connect (G_OBJECT (property_bar->priv->font_bold_toggle),
+                         "toggled", G_CALLBACK (font_bold_toggled_cb), property_bar);
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->font_italic_toggle),
+                                          gl_prefs->default_font_italic_flag);
+       g_signal_connect (G_OBJECT (property_bar->priv->font_italic_toggle),
+                         "toggled", G_CALLBACK (font_italic_toggled_cb), property_bar);
+
+
+       /* Text alignment radio group */
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_left_radio),
+                                          (gl_prefs->default_text_alignment == PANGO_ALIGN_LEFT));
+       g_signal_connect (G_OBJECT (property_bar->priv->text_align_left_radio),
+                         "toggled", G_CALLBACK (text_align_toggled_cb), property_bar);
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_center_radio),
+                                          (gl_prefs->default_text_alignment == PANGO_ALIGN_CENTER));
+       g_signal_connect (G_OBJECT (property_bar->priv->text_align_center_radio),
+                         "toggled", G_CALLBACK (text_align_toggled_cb), property_bar);
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_right_radio),
+                                          (gl_prefs->default_text_alignment == PANGO_ALIGN_RIGHT));
+       g_signal_connect (G_OBJECT (property_bar->priv->text_align_right_radio),
+                         "toggled", G_CALLBACK (text_align_toggled_cb), property_bar);
+
+       /* Text color widget */
+       gdk_color = gl_color_to_gdk_color (gl_prefs->default_text_color);
+       color_combo_set_color (COLOR_COMBO (property_bar->priv->text_color_combo), gdk_color);
+       g_free (gdk_color);
+       g_signal_connect (G_OBJECT (property_bar->priv->text_color_combo),
+                         "color_changed",
+                         G_CALLBACK (text_color_changed_cb), property_bar);
+
+       /* Fill color widget */
+       gdk_color = gl_color_to_gdk_color (gl_prefs->default_fill_color);
+       color_combo_set_color (COLOR_COMBO (property_bar->priv->fill_color_combo), gdk_color);
+       g_free (gdk_color);
+       g_signal_connect (G_OBJECT (property_bar->priv->fill_color_combo),
+                         "color_changed",
+                         G_CALLBACK (fill_color_changed_cb), property_bar);
+
+       /* Line color widget */
+       gdk_color = gl_color_to_gdk_color (gl_prefs->default_line_color);
+       color_combo_set_color (COLOR_COMBO (property_bar->priv->line_color_combo), gdk_color);
+       g_free (gdk_color);
+       g_signal_connect (G_OBJECT (property_bar->priv->line_color_combo),
+                         "color_changed",
+                         G_CALLBACK (line_color_changed_cb), property_bar);
+
+       /* Line width entry widget */
+       g_signal_connect (G_OBJECT (property_bar->priv->line_width_spin),
+                         "changed",
+                         G_CALLBACK (line_width_changed_cb), property_bar);
+
+       property_bar->priv->stop_signals = FALSE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+}
+
+/****************************************************************************/
+/* Fill widgets with default values.                                        */
+/****************************************************************************/
+static void
+reset_to_default_properties (glView *view,
+                            glUIPropertyBar *property_bar)
+{
+       GList     *family_names;
+       gchar     *good_font_family;
+       GdkColor  *gdk_color;
+
+       /* Make sure we have a valid font.  if not provide a good default. */
+       family_names = gl_util_get_font_family_list ();
+       if (g_list_find_custom (family_names,
+                               view->default_font_family,
+                               (GCompareFunc)g_utf8_collate))
+        {
+               good_font_family = g_strdup (view->default_font_family);
+       }
+        else
+        {
+               if (family_names != NULL)
+                {
+                       good_font_family = g_strdup (family_names->data); /* 1st entry */
+               }
+                else
+                {
+                       good_font_family = NULL;
+               }
+       }
+       gl_util_combo_box_set_active_text (GTK_COMBO_BOX (property_bar->priv->font_family_combo),
+                                          good_font_family);
+       g_free (good_font_family);
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(property_bar->priv->font_size_spin),
+                                  view->default_font_size);
+
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->font_bold_toggle),
+                                          (view->default_font_weight == PANGO_WEIGHT_BOLD));
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->font_italic_toggle),
+                                          view->default_font_italic_flag);
+
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_left_radio),
+                                          (view->default_text_alignment == PANGO_ALIGN_LEFT));
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_center_radio),
+                                          (view->default_text_alignment == PANGO_ALIGN_CENTER));
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_right_radio),
+                                          (view->default_text_alignment == PANGO_ALIGN_RIGHT));
+
+       gdk_color = gl_color_to_gdk_color (view->default_text_color);
+       color_combo_set_color (COLOR_COMBO(property_bar->priv->text_color_combo), gdk_color);
+       g_free (gdk_color);
+
+       gdk_color = gl_color_to_gdk_color (view->default_fill_color);
+       color_combo_set_color (COLOR_COMBO(property_bar->priv->fill_color_combo), gdk_color);
+       g_free (gdk_color);
+
+       gdk_color = gl_color_to_gdk_color (view->default_line_color);
+       color_combo_set_color (COLOR_COMBO(property_bar->priv->line_color_combo), gdk_color);
+       g_free (gdk_color);
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON(property_bar->priv->line_width_spin),
+                                  view->default_line_width);
+}
+
+/****************************************************************************/
+/* Set view associated with property_bar.                                   */
+/****************************************************************************/
+void
+gl_ui_property_bar_set_view (glUIPropertyBar *property_bar,
+                            glView          *view)
+{
+       glLabel   *label;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       label = view->label;
+       g_return_if_fail (label && GL_IS_LABEL (label));
+
+       set_doc_items_sensitive (property_bar, TRUE);
+
+       property_bar->priv->view = GL_VIEW (g_object_ref (G_OBJECT (view)));
+
+       reset_to_default_properties (view, property_bar);
+
+       g_signal_connect_swapped (G_OBJECT(view), "selection_changed",
+                                 G_CALLBACK(selection_changed_cb), property_bar);
+
+       g_signal_connect_swapped (G_OBJECT(view->label), "changed",
+                                 G_CALLBACK(selection_changed_cb), property_bar);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+}
+
+/****************************************************************************/
+/** Set visiblity of property bar's tooltips.                               */
+/****************************************************************************/
+void
+gl_ui_property_bar_set_tooltips (glUIPropertyBar *property_bar,
+                                gboolean         state)
+{
+       GtkTooltipsData *data;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       g_return_if_fail (property_bar && GL_IS_UI_PROPERTY_BAR(property_bar));
+
+       /* HACK: peek into one of our widgets to get the tooltips group created by libglade. */
+       data = gtk_tooltips_data_get (property_bar->priv->font_size_spin);
+       g_return_if_fail (data);
+
+       if (state)
+        {
+               gtk_tooltips_enable (data->tooltips);
+       }
+        else
+        {
+               gtk_tooltips_disable (data->tooltips);
+       }
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  View "selection state changed" callback.                        */
+/*---------------------------------------------------------------------------*/
+static void
+update_text_properties (glView *view,
+                       glUIPropertyBar *property_bar)
+{
+       gboolean        can_text, is_first_object;
+       gboolean        is_same_font_family, is_same_font_size;
+       gboolean        is_same_text_color, is_same_is_italic;
+       gboolean        is_same_is_bold, is_same_align;
+       GList          *p;
+       glLabelObject  *object;
+       gchar          *selection_font_family, *font_family;
+       gdouble         selection_font_size, font_size;
+       guint           selection_text_color, text_color;
+       glColorNode    *text_color_node;
+       gboolean        selection_is_italic, is_italic;
+       gboolean        selection_is_bold, is_bold;
+       PangoAlignment  selection_align, align;
+       GdkColor       *gdk_color;
+
+       can_text = gl_view_can_selection_text (view);
+       set_text_items_sensitive (property_bar, can_text);
+
+       if (!can_text) 
+               return;
+
+       is_same_is_italic =
+       is_same_is_bold =
+       is_same_align =
+       is_same_text_color =
+       is_same_font_size =
+       is_same_font_family = TRUE;
+       selection_font_family = NULL;
+       selection_font_size = -1;
+        selection_align = PANGO_ALIGN_LEFT;
+        selection_is_italic = TRUE;
+        selection_is_bold = TRUE;
+        selection_text_color = 0;
+        
+       is_first_object = TRUE;
+       
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               if (!gl_label_object_can_text (object)) 
+                       continue;
+
+               font_family = gl_label_object_get_font_family (object);
+               if (font_family != NULL)
+                {
+                       if (selection_font_family == NULL)
+                        {
+                               selection_font_family = g_strdup (font_family);
+                        }
+                       else 
+                        {
+                               if (strcmp (font_family, selection_font_family) != 0)
+                                {
+                                       is_same_font_family = FALSE;
+                                }
+                        }
+                       g_free (font_family);
+               }       
+
+               font_size = gl_label_object_get_font_size (object);
+               
+               text_color_node = gl_label_object_get_text_color (object);
+               if (text_color_node->field_flag)
+                {
+                       /* If a merge field is set we use the default color for merged color*/
+                       text_color = GL_COLOR_MERGE_DEFAULT;
+                       
+               }
+                else
+                {
+                       text_color = text_color_node->color;
+               }
+               gl_color_node_free (&text_color_node);
+               
+               is_italic = gl_label_object_get_font_italic_flag (object);
+               is_bold = gl_label_object_get_font_weight (object) == PANGO_WEIGHT_BOLD;
+               align = gl_label_object_get_text_alignment (object);
+
+               if (is_first_object)
+                {
+                       selection_font_size = font_size;
+                       selection_text_color = text_color;
+                       selection_is_italic = is_italic;
+                       selection_is_bold = is_bold;
+                       selection_align = align;
+               }
+                else
+                {
+                       if (font_size != selection_font_size) 
+                               is_same_font_size = FALSE;
+                       if (text_color != selection_text_color)
+                               is_same_text_color = FALSE;
+                       if (is_italic != selection_is_italic)
+                               is_same_is_italic = FALSE;
+                       if (is_bold != selection_is_bold)
+                               is_same_is_bold = FALSE;
+                       if (align != selection_align)
+                               is_same_align = FALSE;
+               }
+               is_first_object = FALSE;
+       }
+
+       if (is_same_font_family && (selection_font_family != NULL)) 
+               gl_debug (DEBUG_PROPERTY_BAR, "same font family = %s", 
+                         selection_font_family);
+       gl_util_combo_box_set_active_text (GTK_COMBO_BOX (property_bar->priv->font_family_combo),
+                                          is_same_font_family?selection_font_family:"");
+       g_free (selection_font_family);
+
+       if (is_same_font_size)
+        {
+               gl_debug (DEBUG_PROPERTY_BAR, "same font size = %g", 
+                         selection_font_size);
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (property_bar->priv->font_size_spin),
+                                          selection_font_size);
+       }
+        else
+        {
+               gtk_entry_set_text (GTK_ENTRY (property_bar->priv->font_size_spin), "");
+       }
+
+       if (is_same_text_color)
+        {
+               gl_debug (DEBUG_PROPERTY_BAR, "same text color = %08x", selection_text_color);
+               gdk_color = gl_color_to_gdk_color (selection_text_color);
+               color_combo_set_color (COLOR_COMBO (property_bar->priv->text_color_combo),
+                                      gdk_color);
+               g_free (gdk_color);
+       }
+
+       if (is_same_is_italic)
+        {
+               gl_debug (DEBUG_PROPERTY_BAR, "same italic flag = %d", 
+                         selection_is_italic);
+        }
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->font_italic_toggle),
+                                          selection_is_italic && is_same_is_italic);
+
+       if (is_same_is_bold)
+        {
+               gl_debug (DEBUG_PROPERTY_BAR, "same bold flag = %d",
+                         selection_is_bold);
+        }
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->font_bold_toggle),
+                                          selection_is_bold && is_same_is_bold);
+
+       if (is_same_align) 
+               gl_debug (DEBUG_PROPERTY_BAR, "same align");
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_left_radio),
+                                          (selection_align == PANGO_ALIGN_LEFT) &&
+                                          is_same_align);
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_center_radio),
+                                          (selection_align == PANGO_ALIGN_CENTER) &&
+                                          is_same_align);
+       gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_right_radio),
+                                          (selection_align == PANGO_ALIGN_RIGHT) &&
+                                          is_same_align);
+}
+
+static void
+update_fill_color (glView *view,
+                  glUIPropertyBar *property_bar)
+{
+       gboolean can, is_first_object;
+       gboolean is_same_fill_color;
+       GList *p;
+       glLabelObject *object;
+       guint selection_fill_color, fill_color;
+       GdkColor *gdk_color;
+       glColorNode *fill_color_node;
+
+       can = gl_view_can_selection_fill (view);
+       set_fill_items_sensitive (property_bar, can);
+
+       if (!can) 
+               return;
+
+       is_same_fill_color = TRUE;
+       is_first_object = TRUE;
+        selection_fill_color = 0;
+       
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               if (!gl_label_object_can_fill (object)) 
+                       continue;
+
+               fill_color_node = gl_label_object_get_fill_color (object);
+               if (fill_color_node->field_flag)
+                {
+                       /* If a merge field is set we use the default color for merged color*/
+                       fill_color = GL_COLOR_FILL_MERGE_DEFAULT;
+                       
+               }
+                else
+                {
+                       fill_color = fill_color_node->color;
+               }
+               gl_color_node_free (&fill_color_node);
+
+               if (is_first_object)
+                {
+                       selection_fill_color = fill_color;
+               }
+                else
+                {
+                       if (fill_color != selection_fill_color)
+                        {
+                               is_same_fill_color = FALSE;
+                        }
+               }
+               is_first_object = FALSE;
+       }
+
+       if (is_same_fill_color)
+        {
+               gl_debug (DEBUG_PROPERTY_BAR, "same fill color = %08x", selection_fill_color);
+               gdk_color = gl_color_to_gdk_color (selection_fill_color);
+               color_combo_set_color (COLOR_COMBO (property_bar->priv->fill_color_combo),
+                                      gdk_color);
+               g_free (gdk_color);
+       }
+}
+
+static void
+update_line_color (glView *view,
+                  glUIPropertyBar *property_bar)
+{
+       gboolean can, is_first_object;
+       gboolean is_same_line_color;
+       GList *p;
+       glLabelObject *object;
+       guint selection_line_color, line_color;
+       glColorNode *line_color_node;
+       GdkColor *gdk_color;
+
+       can = gl_view_can_selection_line_color (view);
+       set_line_color_items_sensitive (property_bar, can);
+
+       if (!can) 
+               return;
+
+       is_same_line_color = TRUE;
+       is_first_object = TRUE;
+        selection_line_color = 0;
+       
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               if (!gl_label_object_can_line_color (object)) 
+                       continue;
+
+               line_color_node = gl_label_object_get_line_color (object);
+               if (line_color_node->field_flag)
+                {
+                       /* If a merge field is set we use the default color for merged color*/
+                       line_color = GL_COLOR_MERGE_DEFAULT;
+                       
+               }
+                else
+                {
+                       line_color = line_color_node->color;
+               }
+               gl_color_node_free (&line_color_node);
+
+               if (is_first_object)
+                {
+                       selection_line_color = line_color;
+               }
+                else
+                {
+                       if (line_color != selection_line_color)
+                        {
+                               is_same_line_color = FALSE;
+                        }
+               }
+               is_first_object = FALSE;
+       }
+
+       if (is_same_line_color)
+        {
+               gl_debug (DEBUG_PROPERTY_BAR, "same line color = %08x", selection_line_color);
+               gdk_color = gl_color_to_gdk_color (selection_line_color);
+               color_combo_set_color (COLOR_COMBO (property_bar->priv->line_color_combo),
+                                      gdk_color);
+               g_free (gdk_color);
+       }
+}
+
+static void
+update_line_width (glView *view,
+                  glUIPropertyBar *property_bar)
+{
+       gboolean can, is_first_object;
+       gboolean is_same_line_width;
+       GList *p;
+       glLabelObject *object;
+       gdouble selection_line_width, line_width;
+
+       can = gl_view_can_selection_line_width (view);
+       set_line_width_items_sensitive (property_bar, can);
+
+       if (!can) 
+               return;
+
+       is_same_line_width = TRUE;
+       is_first_object = TRUE;
+        selection_line_width = 0;
+       
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               if (!gl_label_object_can_line_width (object)) 
+                       continue;
+
+               line_width = gl_label_object_get_line_width (object);
+
+               if (is_first_object)
+                {
+                       selection_line_width = line_width;
+               }
+                else
+                {
+                       if (line_width != selection_line_width)
+                        {
+                               is_same_line_width = FALSE;
+                        }
+               }
+               is_first_object = FALSE;
+       }
+
+       if (is_same_line_width)
+        {
+               gl_debug (DEBUG_PROPERTY_BAR, "same line width = %g", selection_line_width);
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (property_bar->priv->line_width_spin),
+                                          selection_line_width);
+       }
+        else
+        {
+               gtk_entry_set_text (GTK_ENTRY (property_bar->priv->line_width_spin), "");
+       }
+}
+
+static void 
+selection_changed_cb (glUIPropertyBar *property_bar)
+{
+       glView *view = property_bar->priv->view;
+       
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (property_bar && GL_IS_UI_PROPERTY_BAR (property_bar));
+
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       if (gl_view_is_selection_empty (view))
+        {
+               /* No selection: make all controls active. */
+               reset_to_default_properties (view, property_bar);
+               set_doc_items_sensitive (property_bar, TRUE);
+       }
+        else
+        {
+               update_text_properties (view, property_bar);
+               update_fill_color (view, property_bar);
+               update_line_color (view, property_bar);
+               update_line_width (view, property_bar);
+       }
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Font family entry changed.                                     */
+/*--------------------------------------------------------------------------*/
+static void
+font_family_changed_cb (GtkComboBox     *combo,
+                       glUIPropertyBar *property_bar)
+{
+       gchar *font_family;
+
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       font_family = gtk_combo_box_get_active_text (GTK_COMBO_BOX (combo));
+       if ( strlen(font_family) )
+        {
+               gl_view_set_selection_font_family (property_bar->priv->view,
+                                                  font_family);
+               gl_view_set_default_font_family   (property_bar->priv->view,
+                                                  font_family);
+       }
+       g_free (font_family);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Font size spin button changed.                                 */
+/*--------------------------------------------------------------------------*/
+static void
+font_size_changed_cb (GtkSpinButton        *spin,
+                     glUIPropertyBar      *property_bar)
+{
+       gdouble font_size;
+
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       font_size = gtk_spin_button_get_value (spin);
+
+       gl_view_set_selection_font_size (property_bar->priv->view,
+                                        font_size);
+       gl_view_set_default_font_size   (property_bar->priv->view,
+                                        font_size);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Text color combo changed.                                      */
+/*--------------------------------------------------------------------------*/
+static void
+text_color_changed_cb (ColorCombo           *cc,
+                      GdkColor             *gdk_color,
+                      gboolean              custom,
+                      gboolean              by_user,
+                      gboolean              is_default,
+                      glUIPropertyBar      *property_bar)
+{
+       glColorNode *text_color_node;
+
+       g_return_if_fail (property_bar && GL_IS_UI_PROPERTY_BAR (property_bar));
+
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       text_color_node = gl_color_node_new_default ();
+       text_color_node->color = gl_color_from_gdk_color (gdk_color);
+       
+       gl_debug (DEBUG_PROPERTY_BAR, "Color=%08x, Custom=%d, By_User=%d, Is_default=%d",
+                 text_color_node->color, custom, by_user, is_default);
+
+       if (is_default)
+        {
+               text_color_node->color = gl_prefs->default_text_color;
+               gl_view_set_selection_text_color (property_bar->priv->view,
+                                                 text_color_node);
+               gl_view_set_default_text_color   (property_bar->priv->view,
+                                                 gl_prefs->default_text_color);
+       }
+        else
+        {
+               gl_view_set_selection_text_color (property_bar->priv->view,
+                                                 text_color_node);
+               gl_view_set_default_text_color   (property_bar->priv->view,
+                                                 text_color_node->color);
+       }
+
+       gl_color_node_free (&text_color_node);
+       
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Fill color combo changed.                                      */
+/*--------------------------------------------------------------------------*/
+static void
+fill_color_changed_cb (ColorCombo           *cc,
+                      GdkColor             *gdk_color,
+                      gboolean              custom,
+                      gboolean              by_user,
+                      gboolean              is_default,
+                      glUIPropertyBar      *property_bar)
+{
+       glColorNode *fill_color_node;
+
+       g_return_if_fail (property_bar && GL_IS_UI_PROPERTY_BAR (property_bar));
+
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       fill_color_node = gl_color_node_new_default ();
+
+       fill_color_node->color = gl_color_from_gdk_color (gdk_color);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "Color=%08x, Custom=%d, By_User=%d, Is_default=%d",
+                 fill_color_node->color, custom, by_user, is_default);
+
+       if (is_default)
+        {
+
+               fill_color_node->color = GL_COLOR_NONE;
+               gl_view_set_selection_fill_color (property_bar->priv->view,
+                                                 fill_color_node);
+               gl_view_set_default_fill_color   (property_bar->priv->view,
+                                                 fill_color_node->color);
+       }
+        else
+        {
+               gl_view_set_selection_fill_color (property_bar->priv->view,
+                                                 fill_color_node);
+               gl_view_set_default_fill_color   (property_bar->priv->view,
+                                                 fill_color_node->color);
+       }
+       gl_color_node_free (&fill_color_node);
+       
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Line color combo changed.                                      */
+/*--------------------------------------------------------------------------*/
+static void
+line_color_changed_cb (ColorCombo           *cc,
+                      GdkColor             *gdk_color,
+                      gboolean              custom,
+                      gboolean              by_user,
+                      gboolean              is_default,
+                      glUIPropertyBar      *property_bar)
+{
+       glColorNode *line_color_node;
+
+       g_return_if_fail (property_bar && GL_IS_UI_PROPERTY_BAR (property_bar));
+
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       line_color_node = gl_color_node_new_default ();
+       line_color_node->color = gl_color_from_gdk_color (gdk_color);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "Color=%08x, Custom=%d, By_User=%d, Is_default=%d",
+                 line_color_node->color, custom, by_user, is_default);
+
+       if (is_default)
+        {
+               line_color_node->color = GL_COLOR_NONE;
+               gl_view_set_selection_line_color (property_bar->priv->view,
+                                                 line_color_node);
+               gl_view_set_default_line_color   (property_bar->priv->view,
+                                                 line_color_node->color);
+       }
+        else
+        {
+               gl_view_set_selection_line_color (property_bar->priv->view,
+                                                 line_color_node);
+               gl_view_set_default_line_color   (property_bar->priv->view,
+                                                 line_color_node->color);
+       }
+       gl_color_node_free (&line_color_node);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Line width spin button changed.                                */
+/*--------------------------------------------------------------------------*/
+static void
+line_width_changed_cb (GtkSpinButton        *spin,
+                      glUIPropertyBar      *property_bar)
+{
+       gdouble line_width;
+
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       if (property_bar->priv->view)
+        {
+               line_width = gtk_spin_button_get_value (spin);
+
+               gl_view_set_selection_line_width (property_bar->priv->view,
+                                                 line_width);
+               gl_view_set_default_line_width   (property_bar->priv->view,
+                                                 line_width);
+       }
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Font bold toggled callback.                                     */
+/*---------------------------------------------------------------------------*/
+static void
+font_bold_toggled_cb (GtkToggleToolButton  *toggle,
+                     glUIPropertyBar      *property_bar)
+{
+       gboolean        state;
+       PangoWeight     weight;
+
+
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       state = gtk_toggle_tool_button_get_active (toggle);
+
+       weight = state ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL;
+
+       gl_view_set_selection_font_weight (property_bar->priv->view, weight);
+       gl_view_set_default_font_weight   (property_bar->priv->view, weight);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+                                                 
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Font italic toggled callback.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+font_italic_toggled_cb (GtkToggleToolButton  *toggle,
+                       glUIPropertyBar      *property_bar)
+{
+       gboolean state;
+
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       state = gtk_toggle_tool_button_get_active (toggle);
+
+       gl_view_set_selection_font_italic_flag (property_bar->priv->view, state);
+       gl_view_set_default_font_italic_flag   (property_bar->priv->view, state);
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+                                                 
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Text align toggled callback.                                    */
+/*---------------------------------------------------------------------------*/
+static void
+text_align_toggled_cb (GtkToggleToolButton  *toggle,
+                      glUIPropertyBar      *property_bar)
+{
+       if (property_bar->priv->stop_signals) return;
+       property_bar->priv->stop_signals = TRUE;
+
+       gl_debug (DEBUG_PROPERTY_BAR, "START");
+
+       if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_left_radio)))
+       {               
+               gl_view_set_selection_text_alignment (property_bar->priv->view,
+                                                     PANGO_ALIGN_LEFT);
+               gl_view_set_default_text_alignment   (property_bar->priv->view,
+                                                     PANGO_ALIGN_LEFT);
+       }
+
+       if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_center_radio)))
+       {               
+               gl_view_set_selection_text_alignment (property_bar->priv->view,
+                                                     PANGO_ALIGN_CENTER);
+               gl_view_set_default_text_alignment   (property_bar->priv->view,
+                                                     PANGO_ALIGN_CENTER);
+       }
+
+       if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (property_bar->priv->text_align_right_radio)))
+       {
+               gl_view_set_selection_text_alignment (property_bar->priv->view,
+                                                     PANGO_ALIGN_RIGHT);
+               gl_view_set_default_text_alignment   (property_bar->priv->view,
+                                                     PANGO_ALIGN_RIGHT);
+       }
+
+       gl_debug (DEBUG_PROPERTY_BAR, "END");
+
+       property_bar->priv->stop_signals = FALSE;
+}
+
+
+/*****************************************************************************/
+/* Construct color combo "Custom widget".                                    */
+/*****************************************************************************/
+GtkWidget *
+gl_ui_property_bar_construct_color_combo (gchar *name,
+                                         gchar *string1,
+                                         gchar *string2,
+                                         gint   int1,
+                                         gint   int2)
+{
+       GtkWidget  *color_combo;
+       ColorGroup *cg;
+       gchar      *cg_name;
+       GdkColor   *gdk_color;
+       gchar      *no_color;
+       GdkPixbuf  *pixbuf = NULL;
+
+       switch (int1) {
+
+       case 0:
+               cg_name  = "text_color_group";
+                gdk_color = gl_color_to_gdk_color (gl_prefs->default_text_color);
+               no_color = _("Default");
+               pixbuf = gdk_pixbuf_new_from_inline (-1, stock_text_24, FALSE, NULL);
+               break;
+
+       case 2:
+               cg_name  = "line_color_group";
+                gdk_color = NULL;
+               no_color = _("No line");
+               pixbuf = gdk_pixbuf_new_from_inline (-1, stock_pencil_24, FALSE, NULL);
+               break;
+
+       case 1:
+       default:
+               cg_name  = "fill_color_group";
+                gdk_color = NULL;
+               no_color = _("No fill");
+               pixbuf = gdk_pixbuf_new_from_inline (-1, stock_bucket_fill_24, FALSE, NULL);
+               break;
+
+       }
+
+       cg = color_group_fetch (cg_name, NULL);
+       color_combo = color_combo_new (pixbuf, no_color, gdk_color, cg);
+        g_free (gdk_color);
+
+       color_combo_box_set_preview_relief (COLOR_COMBO(color_combo), GTK_RELIEF_NORMAL);
+
+       g_object_unref (G_OBJECT (pixbuf));
+
+       return color_combo;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set sensitivity of doc controls.                                */
+/*---------------------------------------------------------------------------*/
+static void
+set_doc_items_sensitive (glUIPropertyBar      *property_bar,
+                        gboolean              state)
+{
+       gtk_widget_set_sensitive (property_bar->priv->font_family_combo,       state);
+       gtk_widget_set_sensitive (property_bar->priv->font_size_spin,          state);
+       gtk_widget_set_sensitive (property_bar->priv->font_bold_toggle,        state);
+       gtk_widget_set_sensitive (property_bar->priv->font_italic_toggle,      state);
+       gtk_widget_set_sensitive (property_bar->priv->text_align_left_radio,   state);
+       gtk_widget_set_sensitive (property_bar->priv->text_align_center_radio, state);
+       gtk_widget_set_sensitive (property_bar->priv->text_align_right_radio,  state);
+       gtk_widget_set_sensitive (property_bar->priv->text_color_combo,        state);
+       gtk_widget_set_sensitive (property_bar->priv->fill_color_combo,        state);
+       gtk_widget_set_sensitive (property_bar->priv->line_color_combo,        state);
+       gtk_widget_set_sensitive (property_bar->priv->line_width_spin,         state);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set sensitivity of text related controls.                       */
+/*---------------------------------------------------------------------------*/
+static void
+set_text_items_sensitive (glUIPropertyBar      *property_bar,
+                         gboolean              state)
+{
+       gtk_widget_set_sensitive (property_bar->priv->font_family_combo,       state);
+       gtk_widget_set_sensitive (property_bar->priv->font_size_spin,          state);
+       gtk_widget_set_sensitive (property_bar->priv->font_bold_toggle,        state);
+       gtk_widget_set_sensitive (property_bar->priv->font_italic_toggle,      state);
+       gtk_widget_set_sensitive (property_bar->priv->text_align_left_radio,   state);
+       gtk_widget_set_sensitive (property_bar->priv->text_align_center_radio, state);
+       gtk_widget_set_sensitive (property_bar->priv->text_align_right_radio,  state);
+       gtk_widget_set_sensitive (property_bar->priv->text_color_combo,        state);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set sensitivity of fill related controls.                       */
+/*---------------------------------------------------------------------------*/
+static void
+set_fill_items_sensitive (glUIPropertyBar      *property_bar,
+                         gboolean              state)
+{
+       gtk_widget_set_sensitive (property_bar->priv->fill_color_combo,        state);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set sensitivity of line color related controls.                 */
+/*---------------------------------------------------------------------------*/
+static void
+set_line_color_items_sensitive (glUIPropertyBar      *property_bar,
+                               gboolean              state)
+{
+       gtk_widget_set_sensitive (property_bar->priv->line_color_combo,        state);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set sensitivity of line width related controls.                 */
+/*---------------------------------------------------------------------------*/
+static void
+set_line_width_items_sensitive (glUIPropertyBar      *property_bar,
+                               gboolean              state)
+{
+       gtk_widget_set_sensitive (property_bar->priv->line_width_spin,         state);
+}
+
+
diff --git a/src/ui-property-bar.h b/src/ui-property-bar.h
new file mode 100644 (file)
index 0000000..e2af191
--- /dev/null
@@ -0,0 +1,74 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/**
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  ui-property-bar.h:  Property toolbar header file
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __UI_PROPERTY_BAR_H__
+#define __UI_PROPERTY_BAR_H__
+
+#include <gtk/gtkhbox.h>
+
+#include "view.h"
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_UI_PROPERTY_BAR (gl_ui_property_bar_get_type ())
+#define GL_UI_PROPERTY_BAR(obj) \
+        (GTK_CHECK_CAST((obj), GL_TYPE_UI_PROPERTY_BAR, glUIPropertyBar ))
+#define GL_UI_PROPERTY_BAR_CLASS(klass) \
+        (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_UI_PROPERTY_BAR, glUIPropertyBarClass))
+#define GL_IS_UI_PROPERTY_BAR(obj) \
+        (GTK_CHECK_TYPE ((obj), GL_TYPE_UI_PROPERTY_BAR))
+#define GL_IS_UI_PROPERTY_BAR_CLASS(klass) \
+        (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_UI_PROPERTY_BAR))
+
+typedef struct _glUIPropertyBar        glUIPropertyBar;
+typedef struct _glUIPropertyBarClass   glUIPropertyBarClass;
+
+typedef struct _glUIPropertyBarPrivate glUIPropertyBarPrivate;
+
+struct _glUIPropertyBar {
+       GtkHBox                 parent_widget;
+
+       glUIPropertyBarPrivate *priv;
+
+};
+
+struct _glUIPropertyBarClass {
+       GtkHBoxClass            parent_class;
+};
+
+GType        gl_ui_property_bar_get_type          (void) G_GNUC_CONST;
+
+GtkWidget   *gl_ui_property_bar_new               (void);
+
+void         gl_ui_property_bar_set_view          (glUIPropertyBar *property_bar,
+                                                  glView          *view);
+
+void         gl_ui_property_bar_set_tooltips      (glUIPropertyBar *property_bar,
+                                                  gboolean         state);
+
+
+
+G_END_DECLS
+
+#endif /* __UI_PROPERTY_BAR_H__ */
diff --git a/src/ui-sidebar.c b/src/ui-sidebar.c
new file mode 100644 (file)
index 0000000..f8c398f
--- /dev/null
@@ -0,0 +1,217 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/**
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  ui-sidebar.c:  Object property sidebar
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "ui-sidebar.h"
+
+#include <glib/gi18n.h>
+
+#include "ui-util.h"
+#include "object-editor.h"
+#include "stock.h"
+
+#include "debug.h"
+
+/*===========================================================================*/
+/* Private macros and constants.                                             */
+/*===========================================================================*/
+
+#define DEFAULT_SIDEBAR_WIDTH 340
+
+/*===========================================================================*/
+/* Private data types                                                        */
+/*===========================================================================*/
+
+struct _glUISidebarPrivate {
+
+       glView              *view;
+
+       GtkWidget           *child;
+       GtkWidget           *empty_child;
+};
+
+/*===========================================================================*/
+/* Private globals                                                           */
+/*===========================================================================*/
+
+
+/*===========================================================================*/
+/* Local function prototypes                                                 */
+/*===========================================================================*/
+
+static void     gl_ui_sidebar_finalize      (GObject              *object);
+
+static void     gl_ui_sidebar_construct     (glUISidebar          *sidebar);
+
+static void     selection_changed_cb        (glView               *view,
+                                            glUISidebar          *sidebar);
+
+
+\f
+/****************************************************************************/
+/* Boilerplate Object stuff.                                                */
+/****************************************************************************/
+G_DEFINE_TYPE (glUISidebar, gl_ui_sidebar, GTK_TYPE_VBOX);
+
+static void
+gl_ui_sidebar_class_init (glUISidebarClass *class)
+{
+       GObjectClass   *object_class     = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_UI, "START");
+
+       gl_ui_sidebar_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_ui_sidebar_finalize;
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+static void
+gl_ui_sidebar_init (glUISidebar *sidebar)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       sidebar->priv = g_new0 (glUISidebarPrivate, 1);
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+static void
+gl_ui_sidebar_finalize (GObject *object)
+{
+       glUISidebar *sidebar = GL_UI_SIDEBAR (object);
+
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_UI_SIDEBAR (object));
+
+       if (sidebar->priv->view) {
+               g_object_unref (G_OBJECT(sidebar->priv->view));
+       }
+       g_free (sidebar->priv);
+
+       G_OBJECT_CLASS (gl_ui_sidebar_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/****************************************************************************/
+/* Create a NEW sidebar.                                                    */
+/****************************************************************************/
+GtkWidget *
+gl_ui_sidebar_new (void)
+{
+       glUISidebar *sidebar;
+
+       gl_debug (DEBUG_UI, "START");
+
+       sidebar = g_object_new (gl_ui_sidebar_get_type (), NULL);
+
+       gtk_widget_set_size_request (GTK_WIDGET (sidebar), DEFAULT_SIDEBAR_WIDTH, -1);
+
+       gl_ui_sidebar_construct (sidebar);
+
+       gl_debug (DEBUG_UI, "END");
+
+       return GTK_WIDGET(sidebar);
+}
+
+/******************************************************************************/
+/* Initialize property toolbar.                                               */
+/******************************************************************************/
+static void
+gl_ui_sidebar_construct (glUISidebar       *sidebar)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       sidebar->priv->empty_child = gl_object_editor_new (GL_STOCK_PROPERTIES,
+                                                          _("Object properties"),
+                                                           NULL,
+                                                          GL_OBJECT_EDITOR_EMPTY,
+                                                          NULL);
+
+       sidebar->priv->child = gtk_widget_ref (sidebar->priv->empty_child);
+       gtk_widget_show (sidebar->priv->child);
+       gtk_container_add (GTK_CONTAINER(sidebar), sidebar->priv->child);
+
+       gtk_widget_set_sensitive (GTK_WIDGET (sidebar), FALSE);
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/****************************************************************************/
+/* Set view associated with sidebar.                                        */
+/****************************************************************************/
+void
+gl_ui_sidebar_set_view (glUISidebar *sidebar,
+                       glView      *view)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       gtk_widget_set_sensitive (GTK_WIDGET (sidebar), TRUE);
+
+       sidebar->priv->view = GL_VIEW (g_object_ref (G_OBJECT (view)));
+
+       g_signal_connect (G_OBJECT(view), "selection_changed",
+                         G_CALLBACK(selection_changed_cb), sidebar);
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  View "selection state changed" callback.                        */
+/*---------------------------------------------------------------------------*/
+static void 
+selection_changed_cb (glView      *view,
+                     glUISidebar *sidebar)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (sidebar && GL_IS_UI_SIDEBAR (sidebar));
+
+       gtk_container_remove (GTK_CONTAINER(sidebar), sidebar->priv->child);
+
+       if (gl_view_is_selection_empty (view) || !gl_view_is_selection_atomic (view)) {
+
+               sidebar->priv->child = gtk_widget_ref (sidebar->priv->empty_child);
+               
+       } else {
+
+               sidebar->priv->child = gtk_widget_ref (gl_view_get_editor (view));
+
+       }
+
+       gtk_widget_show (sidebar->priv->child);
+
+       gtk_box_pack_start (GTK_BOX(sidebar), sidebar->priv->child, TRUE, TRUE, 0);
+
+       gl_debug (DEBUG_UI, "END");
+}
+
diff --git a/src/ui-sidebar.h b/src/ui-sidebar.h
new file mode 100644 (file)
index 0000000..9ec1264
--- /dev/null
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/**
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  ui-sidebar.h:  Object property sidebar header file
+ *
+ *  Copyright (C) 2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __UI_SIDEBAR_H__
+#define __UI_SIDEBAR_H__
+
+#include <gtk/gtkvbox.h>
+
+#include "view.h"
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_UI_SIDEBAR (gl_ui_sidebar_get_type ())
+#define GL_UI_SIDEBAR(obj) \
+        (GTK_CHECK_CAST((obj), GL_TYPE_UI_SIDEBAR, glUISidebar ))
+#define GL_UI_SIDEBAR_CLASS(klass) \
+        (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_UI_SIDEBAR, glUISidebarClass))
+#define GL_IS_UI_SIDEBAR(obj) \
+        (GTK_CHECK_TYPE ((obj), GL_TYPE_UI_SIDEBAR))
+#define GL_IS_UI_SIDEBAR_CLASS(klass) \
+        (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_UI_SIDEBAR))
+
+typedef struct _glUISidebar        glUISidebar;
+typedef struct _glUISidebarClass   glUISidebarClass;
+
+typedef struct _glUISidebarPrivate glUISidebarPrivate;
+
+struct _glUISidebar {
+       GtkVBox              parent_widget;
+
+       glUISidebarPrivate  *priv;
+};
+
+struct _glUISidebarClass {
+       GtkVBoxClass         parent_class;
+};
+
+GType        gl_ui_sidebar_get_type          (void) G_GNUC_CONST;
+
+GtkWidget   *gl_ui_sidebar_new               (void);
+
+void         gl_ui_sidebar_set_view          (glUISidebar       *sidebar,
+                                             glView            *view);
+
+
+G_END_DECLS
+
+#endif /* __UI_SIDEBAR_H__ */
diff --git a/src/ui-util.c b/src/ui-util.c
new file mode 100644 (file)
index 0000000..3a0539d
--- /dev/null
@@ -0,0 +1,126 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  ui-util.c:  GLabels ui utilities module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "ui-util.h"
+
+#include <gtk/gtkaction.h>
+#include <gtk/gtktoggleaction.h>
+
+#include "debug.h"
+
+/*==========================================================================*/
+/* Private macros and constants.                                            */
+/*==========================================================================*/
+
+/*==========================================================================*/
+/* Private types.                                                           */
+/*==========================================================================*/
+
+/*==========================================================================*/
+/* Private globals                                                          */
+/*==========================================================================*/
+
+/*==========================================================================*/
+/* Local function prototypes                                                */
+/*==========================================================================*/
+
+
+\f
+/*****************************************************************************/
+/** Set sensitivity of verb.                                                 */
+/*****************************************************************************/
+void
+gl_ui_util_set_verb_sensitive (GtkUIManager  *ui,
+                              gchar         *cname,
+                              gboolean       sensitive)
+{
+       GtkAction *action;
+
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (cname != NULL);
+       g_return_if_fail (GTK_IS_UI_MANAGER (ui));
+
+       action = gtk_ui_manager_get_action (ui, cname);
+
+       if (action) {
+               gl_debug (DEBUG_UI, "Set action \"%s\" sensitive = %d", cname, sensitive);
+               gtk_action_set_sensitive (action, sensitive);
+       }
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*****************************************************************************/
+/** Set sensitivity of a list of verbs.                                      */
+/*****************************************************************************/
+void
+gl_ui_util_set_verb_list_sensitive (GtkUIManager  *ui,
+                                   gchar        **vlist,
+                                   gboolean       sensitive)
+{
+       GtkAction *action;
+
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (vlist != NULL);
+       g_return_if_fail (GTK_IS_UI_MANAGER (ui));
+
+       for ( ; *vlist; ++vlist)
+       {
+               action = gtk_ui_manager_get_action (ui, *vlist);
+
+               if (action) {
+                       gtk_action_set_sensitive (action, sensitive);
+               }
+       }
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*****************************************************************************/
+/** Set state of a verb.                                                     */
+/*****************************************************************************/
+void
+gl_ui_util_set_verb_state (GtkUIManager  *ui,
+                          gchar         *cname,
+                          gboolean       state)
+{
+       GtkToggleAction *action;
+
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (cname != NULL);
+       g_return_if_fail (GTK_IS_UI_MANAGER (ui));
+
+       action = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (ui, cname));
+
+       if (action) {
+               gtk_toggle_action_set_active (action, state);
+       }
+
+       gl_debug (DEBUG_UI, "END");
+}
+
diff --git a/src/ui-util.h b/src/ui-util.h
new file mode 100644 (file)
index 0000000..ffa2653
--- /dev/null
@@ -0,0 +1,45 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  ui-util.h:  GLabels UI utilities module header file
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __GL_UI_UTIL_H__
+#define __GL_UI_UTIL_H__
+
+#include <gtk/gtkuimanager.h>
+
+G_BEGIN_DECLS
+
+void       gl_ui_util_set_verb_sensitive      (GtkUIManager  *ui,
+                                              gchar         *cname,
+                                              gboolean       sensitive);
+
+void       gl_ui_util_set_verb_list_sensitive (GtkUIManager  *ui,
+                                              gchar        **vlist,
+                                              gboolean       sensitive);
+
+void       gl_ui_util_set_verb_state          (GtkUIManager  *ui,
+                                              gchar         *cname,
+                                              gboolean       state);
+
+G_END_DECLS
+
+#endif /* __GL_UI_UTIL_H__ */
diff --git a/src/ui.c b/src/ui.c
new file mode 100644 (file)
index 0000000..f8cbd12
--- /dev/null
+++ b/src/ui.c
@@ -0,0 +1,1179 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  ui.c:  GLabels ui module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "ui.h"
+
+#include <glib/gi18n.h>
+#include <gconf/gconf-client.h>
+#include <gtk/gtkrecentchoosermenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkstock.h>
+#include <gtk/gtktoolbar.h>
+#include <gtk/gtkstatusbar.h>
+#include <string.h>
+
+#include "ui-util.h"
+#include "ui-commands.h"
+#include "file.h"
+#include "prefs.h"
+#include "stock.h"
+#include "window.h"
+#include "recent.h" 
+
+#include "debug.h"
+
+/*==========================================================================*/
+/* Private macros and constants.                                            */
+/*==========================================================================*/
+
+/*==========================================================================*/
+/* Private types.                                                           */
+/*==========================================================================*/
+
+
+/*==========================================================================*/
+/* Local function prototypes                                                */
+/*==========================================================================*/
+
+static void view_ui_item_toggled_cb        (GtkToggleAction *action,
+                                           GtkUIManager    *ui);
+
+static void set_app_main_toolbar_style            (GtkUIManager    *ui);
+
+static void set_app_drawing_toolbar_style  (GtkUIManager    *ui);
+
+static void set_view_style                 (GtkUIManager    *ui);
+
+static void connect_proxy_cb               (GtkUIManager    *ui,
+                                           GtkAction       *action,
+                                           GtkWidget       *proxy,
+                                           glWindow        *window);
+
+static void disconnect_proxy_cb            (GtkUIManager    *ui,
+                                           GtkAction       *action,
+                                           GtkWidget       *proxy,
+                                           glWindow        *window);
+
+static void menu_item_select_cb            (GtkMenuItem     *proxy,
+                                           glWindow        *window);
+
+static void menu_item_deselect_cb          (GtkMenuItem     *proxy,
+                                           glWindow        *window);
+
+
+/*==========================================================================*/
+/* Private globals                                                          */
+/*==========================================================================*/
+
+static GtkActionEntry entries[] = {
+
+       /* Menu entries. */
+       { "FileMenu",                NULL, N_("_File") },
+       { "FileRecentsMenu",         NULL, N_("Open Recent _Files") },
+       { "EditMenu",                NULL, N_("_Edit") },
+       { "ViewMenu",                NULL, N_("_View") },
+       { "ViewMainToolBarMenu",     NULL, N_("Customize Main Toolbar") },
+       { "ViewDrawingToolBarMenu",  NULL, N_("Customize Drawing Toolbar") },
+       { "ViewPropertyToolBarMenu", NULL, N_("Customize Properties Toolbar") },
+       { "ObjectsMenu",             NULL, N_("_Objects") },
+       { "ObjectsCreateMenu",       NULL, N_("_Create") },
+       { "ObjectsOrderMenu",        NULL, N_("_Order") },
+       { "ObjectsRotateFlipMenu",   NULL, N_("_Rotate/Flip") },
+       { "ObjectsAlignHorizMenu",   NULL, N_("Align _Horizontal") },
+       { "ObjectsAlignVertMenu",    NULL, N_("Align _Vertical") },
+       { "HelpMenu",                NULL, N_("_Help") },
+
+       /* Popup entries. */
+       { "ContextMenu", NULL, N_("Context Menu") },
+       { "EmptySelectionContextMenu", NULL, N_("Context Menu") },
+
+       /* File action entries. */
+       { "FileNew",
+         GTK_STOCK_NEW,
+         N_("_New"),
+         "<control>N",
+         N_("Create a new file"),
+         G_CALLBACK (gl_ui_cmd_file_new) },
+
+       { "FileOpen",
+         GTK_STOCK_OPEN,
+         N_("_Open..."),
+         "<control>O",
+         N_("Open a file"),
+         G_CALLBACK (gl_ui_cmd_file_open) },
+
+       { "FileSave",
+         GTK_STOCK_SAVE,
+         N_("_Save"),
+         "<control>S",
+         N_("Save current file"),
+         G_CALLBACK (gl_ui_cmd_file_save) },
+
+       { "FileSaveAs",
+         GTK_STOCK_SAVE,
+         N_("Save _As..."),
+         "<shift><control>S",
+         N_("Save the current file to a different name"),
+         G_CALLBACK (gl_ui_cmd_file_save_as) },
+
+       { "FilePrint",
+         GTK_STOCK_PRINT,
+         N_("_Print..."),
+         "<control>P",
+         N_("Print the current file"),
+         G_CALLBACK (gl_ui_cmd_file_print) },
+
+       { "FileProperties",
+         GTK_STOCK_PROPERTIES,
+         N_("Properties..."),
+         NULL,
+         N_("Modify document properties"),
+         G_CALLBACK (gl_ui_cmd_file_properties) },
+
+       { "FileTemplateDesigner",
+         NULL,
+         N_("Template _Designer..."),
+         NULL,
+         N_("Create a custom template"),
+         G_CALLBACK (gl_ui_cmd_file_template_designer) },
+
+       { "FileClose",
+         GTK_STOCK_CLOSE,
+         N_("_Close"),
+         "<alt>F4",
+         N_("Close the current file"),
+         G_CALLBACK (gl_ui_cmd_file_close) },
+
+       { "FileQuit",
+         GTK_STOCK_QUIT,
+         N_("_Quit"),
+         "<control>Q",
+         N_("Quit the program"),
+         G_CALLBACK (gl_ui_cmd_file_quit) },
+
+
+       /* Edit action entries. */
+       { "EditCut",
+         GTK_STOCK_CUT,
+         N_("Cut"),
+         "<control>X",
+         N_("Cut the selection"),
+         G_CALLBACK (gl_ui_cmd_edit_cut) },
+
+       { "EditCopy",
+         GTK_STOCK_COPY,
+         N_("Copy"),
+         "<control>C",
+         N_("Copy the selection"),
+         G_CALLBACK (gl_ui_cmd_edit_copy) },
+
+       { "EditPaste",
+         GTK_STOCK_PASTE,
+         N_("Paste"),
+         "<control>V",
+         N_("Paste the clipboard"),
+         G_CALLBACK (gl_ui_cmd_edit_paste) },
+
+       { "EditDelete",
+         NULL,
+         N_("Delete"),
+         NULL,
+         N_("Delete the selected objects"),
+         G_CALLBACK (gl_ui_cmd_edit_delete) },
+
+       { "EditSelectAll",
+         NULL,
+         N_("Select All"),
+         "<control>A",
+         N_("Select all objects"),
+         G_CALLBACK (gl_ui_cmd_edit_select_all) },
+
+       { "EditUnSelectAll",
+         NULL,
+         N_("Un-select All"),
+         NULL,
+         N_("Remove all selections"),
+         G_CALLBACK (gl_ui_cmd_edit_unselect_all) },
+
+       { "EditPreferences",
+         GTK_STOCK_PREFERENCES,
+         N_("Preferences"),
+         NULL,
+         N_("Configure the application"),
+         G_CALLBACK (gl_ui_cmd_edit_preferences) },
+
+
+       /* View action entries. */
+       { "ViewZoomIn",
+         GTK_STOCK_ZOOM_IN,
+         N_("Zoom in"),
+         NULL,
+         N_("Increase magnification"),
+         G_CALLBACK (gl_ui_cmd_view_zoomin) },
+
+       { "ViewZoomOut",
+         GTK_STOCK_ZOOM_OUT,
+         N_("Zoom out"),
+         NULL,
+         N_("Decrease magnification"),
+         G_CALLBACK (gl_ui_cmd_view_zoomout) },
+
+       { "ViewZoom1to1",
+         GTK_STOCK_ZOOM_100,
+         N_("Zoom 1 to 1"),
+         NULL,
+         N_("Restore scale to 100%"),
+         G_CALLBACK (gl_ui_cmd_view_zoom1to1) },
+
+       { "ViewZoomToFit",
+         GTK_STOCK_ZOOM_FIT,
+         N_("Zoom to fit"),
+         NULL,
+         N_("Set scale to fit window"),
+         G_CALLBACK (gl_ui_cmd_view_zoom_to_fit) },
+
+
+       /* Objects action entries. */
+       { "ObjectsArrowMode",
+         GL_STOCK_ARROW,
+         N_("Select Mode"),
+         NULL,
+         N_("Select, move and modify objects"),
+         G_CALLBACK (gl_ui_cmd_objects_arrow_mode) },
+
+       { "ObjectsCreateText",
+         GL_STOCK_TEXT,
+         N_("Text"),
+         NULL,
+         N_("Create text object"),
+         G_CALLBACK (gl_ui_cmd_objects_create_text) },
+
+       { "ObjectsCreateBox",
+         GL_STOCK_BOX,
+         N_("Box"),
+         NULL,
+         N_("Create box/rectangle object"),
+         G_CALLBACK (gl_ui_cmd_objects_create_box) },
+
+       { "ObjectsCreateLine",
+         GL_STOCK_LINE,
+         N_("Line"),
+         NULL,
+         N_("Create line object"),
+         G_CALLBACK (gl_ui_cmd_objects_create_line) },
+
+       { "ObjectsCreateEllipse",
+         GL_STOCK_ELLIPSE,
+         N_("Ellipse"),
+         NULL,
+         N_("Create ellipse/circle object"),
+         G_CALLBACK (gl_ui_cmd_objects_create_ellipse) },
+
+       { "ObjectsCreateImage",
+         GL_STOCK_IMAGE,
+         N_("Image"),
+         NULL,
+         N_("Create image object"),
+         G_CALLBACK (gl_ui_cmd_objects_create_image) },
+
+       { "ObjectsCreateBarcode",
+         GL_STOCK_BARCODE,
+         N_("Barcode"),
+         NULL,
+         N_("Create barcode object"),
+         G_CALLBACK (gl_ui_cmd_objects_create_barcode) },
+       
+       { "ObjectsRaise",
+         GL_STOCK_ORDER_TOP,
+         N_("Bring to front"),
+         NULL,
+         N_("Raise object to top"),
+         G_CALLBACK (gl_ui_cmd_objects_raise) },
+
+       { "ObjectsLower",
+         GL_STOCK_ORDER_BOTTOM,
+         N_("Send to back"),
+         NULL,
+         N_("Lower object to bottom"),
+         G_CALLBACK (gl_ui_cmd_objects_lower) },
+
+       { "ObjectsRotateLeft",
+         GL_STOCK_ROTATE_LEFT,
+         N_("Rotate left"),
+         NULL,
+         N_("Rotate object 90 degrees counter-clockwise"),
+         G_CALLBACK (gl_ui_cmd_objects_rotate_left) },
+
+       { "ObjectsRotateRight",
+         GL_STOCK_ROTATE_RIGHT,
+         N_("Rotate right"),
+         NULL,
+         N_("Rotate object 90 degrees clockwise"),
+         G_CALLBACK (gl_ui_cmd_objects_rotate_right) },
+
+       { "ObjectsFlipHorizontal",
+         GL_STOCK_FLIP_HORIZ,
+         N_("Flip horizontally"),
+         NULL,
+         N_("Flip object horizontally"),
+         G_CALLBACK (gl_ui_cmd_objects_flip_horiz) },
+
+       { "ObjectsFlipVertical",
+         GL_STOCK_FLIP_VERT,
+         N_("Flip vertically"),
+         NULL,
+         N_("Flip object vertically"),
+         G_CALLBACK (gl_ui_cmd_objects_flip_vert) },
+
+       { "ObjectsAlignLeft",
+         GL_STOCK_ALIGN_LEFT,
+         N_("Align left"),
+         NULL,
+         N_("Align objects to left edges"),
+         G_CALLBACK (gl_ui_cmd_objects_align_left) },
+
+       { "ObjectsAlignRight",
+         GL_STOCK_ALIGN_RIGHT,
+         N_("Align right"),
+         NULL,
+         N_("Align objects to right edges"),
+         G_CALLBACK (gl_ui_cmd_objects_align_right) },
+
+       { "ObjectsAlignHCenter",
+         GL_STOCK_ALIGN_HCENTER,
+         N_("Align horizontal center"),
+         NULL,
+         N_("Align objects to horizontal centers"),
+         G_CALLBACK (gl_ui_cmd_objects_align_hcenter) },
+
+       { "ObjectsAlignTop",
+         GL_STOCK_ALIGN_TOP,
+         N_("Align tops"),
+         NULL,
+         N_("Align objects to top edges"),
+         G_CALLBACK (gl_ui_cmd_objects_align_top) },
+
+       { "ObjectsAlignBottom",
+         GL_STOCK_ALIGN_BOTTOM,
+         N_("Align bottoms"),
+         NULL,
+         N_("Align objects to bottom edges"),
+         G_CALLBACK (gl_ui_cmd_objects_align_bottom) },
+
+       { "ObjectsAlignVCenter",
+         GL_STOCK_ALIGN_VCENTER,
+         N_("Align vertical center"),
+         NULL,
+         N_("Align objects to vertical centers"),
+         G_CALLBACK (gl_ui_cmd_objects_align_vcenter) },
+
+       { "ObjectsCenterHorizontal",
+         GL_STOCK_CENTER_HORIZ,
+         N_("Center horizontally"),
+         NULL,
+         N_("Center objects to horizontal label center"),
+         G_CALLBACK (gl_ui_cmd_objects_center_horiz) },
+
+       { "ObjectsCenterVertical",
+         GL_STOCK_CENTER_VERT,
+         N_("Center vertically"),
+         NULL,
+         N_("Center objects to vertical label center"),
+         G_CALLBACK (gl_ui_cmd_objects_center_vert) },
+
+       { "ObjectsMergeProperties",
+         GL_STOCK_MERGE,
+         N_("Merge properties"),
+         NULL,
+         N_("Edit merge properties"),
+         G_CALLBACK (gl_ui_cmd_objects_merge_properties) },
+
+
+       /* Help actions entries. */
+       { "HelpContents",
+         GTK_STOCK_HELP,
+         N_("Contents"),
+         "F1",
+         N_("Open glabels manual"),
+         G_CALLBACK (gl_ui_cmd_help_contents) },
+
+       { "HelpAbout",
+         GTK_STOCK_ABOUT,
+         N_("About..."),
+         NULL,
+         N_("About glabels"),
+         G_CALLBACK (gl_ui_cmd_help_about) },
+
+};
+static guint n_entries = G_N_ELEMENTS (entries);
+
+static GtkToggleActionEntry toggle_entries[] = {
+
+       { "ViewPropertyToolBar",
+         NULL,
+         N_("Property toolbar"),
+         NULL,
+         N_("Change the visibility of the property toolbar in the current window"),
+         G_CALLBACK (gl_ui_cmd_view_property_bar_toggle),
+         TRUE },
+
+       { "ViewPropertyToolBarToolTips",
+         NULL,
+         N_("Show tooltips"),
+         NULL,
+         N_("Show tooltips for property toolbar"),
+         G_CALLBACK (gl_ui_cmd_view_property_bar_tips_toggle),
+         TRUE },
+
+       { "ViewGrid",
+         NULL,
+         N_("Grid"),
+         NULL,
+         N_("Change the visibility of the grid in the current window"),
+         G_CALLBACK (gl_ui_cmd_view_grid_toggle),
+         TRUE },
+
+       { "ViewMarkup",
+         NULL,
+         N_("Markup"),
+         NULL,
+         N_("Change the visibility of markup lines in the current window"),
+         G_CALLBACK (gl_ui_cmd_view_markup_toggle),
+         TRUE },
+
+};
+static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
+
+static GtkToggleActionEntry ui_toggle_entries[] = {
+
+       { "ViewMainToolBar",
+         NULL,
+         N_("Main toolbar"),
+         NULL,
+         N_("Change the visibility of the main toolbar in the current window"),
+         G_CALLBACK (view_ui_item_toggled_cb),
+         TRUE },
+
+       { "ViewDrawingToolBar",
+         NULL,
+         N_("Drawing toolbar"),
+         NULL,
+         N_("Change the visibility of the drawing toolbar in the current window"),
+         G_CALLBACK (view_ui_item_toggled_cb),
+         TRUE },
+
+       { "ViewMainToolBarToolTips",
+         NULL,
+         N_("Show tooltips"),
+         NULL,
+         N_("Show tooltips for main toolbar"),
+         G_CALLBACK (view_ui_item_toggled_cb),
+         TRUE },
+
+       { "ViewDrawingToolBarToolTips",
+         NULL,
+         N_("Show tooltips"),
+         NULL,
+         N_("Show tooltips for drawing toolbar"),
+         G_CALLBACK (view_ui_item_toggled_cb),
+         TRUE },
+
+};
+static guint n_ui_toggle_entries = G_N_ELEMENTS (ui_toggle_entries);
+
+static const gchar *ui_info = 
+"<ui>"
+""
+"      <menubar name='MenuBar'>"
+"              <menu action='FileMenu'>"
+"                      <menuitem action='FileNew' />"
+"                      <menuitem action='FileOpen' />"
+"                      <menuitem action='FileRecentsMenu' />"
+"                      <separator />"
+"                      <menuitem action='FileSave' />"
+"                      <menuitem action='FileSaveAs' />"
+"                      <separator />"
+"                      <menuitem action='FilePrint' />"
+"                      <separator />"
+"                      <menuitem action='FileProperties' />"
+"                      <menuitem action='FileTemplateDesigner' />"
+"                      <separator />"
+"                      <menuitem action='FileClose' />"
+"                      <menuitem action='FileQuit' />"
+"              </menu>"
+"              <menu action='EditMenu'>"
+"                      <menuitem action='EditCut' />"
+"                      <menuitem action='EditCopy' />"
+"                      <menuitem action='EditPaste' />"
+"                      <menuitem action='EditDelete' />"
+"                      <separator />"
+"                      <menuitem action='EditSelectAll' />"
+"                      <menuitem action='EditUnSelectAll' />"
+"                      <separator />"
+"                      <menuitem action='EditPreferences' />"
+"              </menu>"
+"              <menu action='ViewMenu'>"
+"                      <menuitem action='ViewMainToolBar' />"
+"                      <menuitem action='ViewDrawingToolBar' />"
+"                      <menuitem action='ViewPropertyToolBar' />"
+"                      <separator />"
+"                      <menu action='ViewMainToolBarMenu'>"
+"                              <menuitem action='ViewMainToolBarToolTips' />"
+"                      </menu>"
+"                      <menu action='ViewDrawingToolBarMenu'>"
+"                              <menuitem action='ViewDrawingToolBarToolTips' />"
+"                      </menu>"
+"                      <menu action='ViewPropertyToolBarMenu'>"
+"                              <menuitem action='ViewPropertyToolBarToolTips' />"
+"                      </menu>"
+"                      <separator />"
+"                      <menuitem action='ViewGrid' />"
+"                      <menuitem action='ViewMarkup' />"
+"                      <separator />"
+"                      <menuitem action='ViewZoomIn' />"
+"                      <menuitem action='ViewZoomOut' />"
+"                      <menuitem action='ViewZoom1to1' />"
+"                      <menuitem action='ViewZoomToFit' />"
+"              </menu>"
+"              <menu action='ObjectsMenu'>"
+"                      <menuitem action='ObjectsArrowMode' />"
+"                      <menu action='ObjectsCreateMenu'>"
+"                              <menuitem action='ObjectsCreateText' />"
+"                              <menuitem action='ObjectsCreateBox' />"
+"                              <menuitem action='ObjectsCreateLine' />"
+"                              <menuitem action='ObjectsCreateEllipse' />"
+"                              <menuitem action='ObjectsCreateImage' />"
+"                              <menuitem action='ObjectsCreateBarcode' />"
+"                      </menu>"
+"                      <separator />"
+"                      <menu action='ObjectsOrderMenu'>"
+"                              <menuitem action='ObjectsRaise' />"
+"                              <menuitem action='ObjectsLower' />"
+"                      </menu>"
+"                      <menu action='ObjectsRotateFlipMenu'>"
+"                              <menuitem action='ObjectsRotateLeft' />"
+"                              <menuitem action='ObjectsRotateRight' />"
+"                              <menuitem action='ObjectsFlipHorizontal' />"
+"                              <menuitem action='ObjectsFlipVertical' />"
+"                      </menu>"
+"                      <menu action='ObjectsAlignHorizMenu'>"
+"                              <menuitem action='ObjectsAlignLeft' />"
+"                              <menuitem action='ObjectsAlignHCenter' />"
+"                              <menuitem action='ObjectsAlignRight' />"
+"                              <menuitem action='ObjectsCenterHorizontal' />"
+"                      </menu>"
+"                      <menu action='ObjectsAlignVertMenu'>"
+"                              <menuitem action='ObjectsAlignTop' />"
+"                              <menuitem action='ObjectsAlignVCenter' />"
+"                              <menuitem action='ObjectsAlignBottom' />"
+"                              <menuitem action='ObjectsCenterVertical' />"
+"                      </menu>"
+"                      <separator />"
+"                      <menuitem action='ObjectsMergeProperties' />"
+"              </menu>"
+"              <menu action='HelpMenu'>"
+"                      <menuitem action='HelpContents' />"
+"                      <menuitem action='HelpAbout' />"
+"              </menu>"
+"      </menubar>"
+""
+"      <toolbar name='MainToolBar'>"
+"              <toolitem action='FileNew' />"
+"              <toolitem action='FileOpen' />"
+"              <toolitem action='FileSave' />"
+"              <separator />"
+"              <toolitem action='FilePrint' />"
+"              <separator />"
+"              <toolitem action='EditCut' />"
+"              <toolitem action='EditCopy' />"
+"              <toolitem action='EditPaste' />"
+"      </toolbar>"
+""
+"      <toolbar name='DrawingToolBar'>"
+"              <toolitem action='ObjectsArrowMode' />"
+"              <separator />"
+"              <toolitem action='ObjectsCreateText' />"
+"              <toolitem action='ObjectsCreateBox' />"
+"              <toolitem action='ObjectsCreateLine' />"
+"              <toolitem action='ObjectsCreateEllipse' />"
+"              <toolitem action='ObjectsCreateImage' />"
+"              <toolitem action='ObjectsCreateBarcode' />"
+"              <separator />"
+"              <toolitem action='ViewZoomIn' />"
+"              <toolitem action='ViewZoomOut' />"
+"              <toolitem action='ViewZoom1to1' />"
+"              <toolitem action='ViewZoomToFit' />"
+"              <separator />"
+"              <toolitem action='ObjectsMergeProperties' />"
+"      </toolbar>"
+""
+"      <popup action='ContextMenu'>"
+"              <menu action='ObjectsOrderMenu'>"
+"                      <menuitem action='ObjectsRaise' />"
+"                      <menuitem action='ObjectsLower' />"
+"              </menu>"
+"              <menu action='ObjectsRotateFlipMenu'>"
+"                      <menuitem action='ObjectsRotateLeft' />"
+"                      <menuitem action='ObjectsRotateRight' />"
+"                      <menuitem action='ObjectsFlipHorizontal' />"
+"                      <menuitem action='ObjectsFlipVertical' />"
+"              </menu>"
+"              <menu action='ObjectsAlignHorizMenu'>"
+"                      <menuitem action='ObjectsAlignLeft' />"
+"                      <menuitem action='ObjectsAlignHCenter' />"
+"                      <menuitem action='ObjectsAlignRight' />"
+"                      <menuitem action='ObjectsCenterHorizontal' />"
+"              </menu>"
+"              <menu action='ObjectsAlignVertMenu'>"
+"                      <menuitem action='ObjectsAlignTop' />"
+"                      <menuitem action='ObjectsAlignVCenter' />"
+"                      <menuitem action='ObjectsAlignBottom' />"
+"                      <menuitem action='ObjectsCenterVertical' />"
+"              </menu>"
+"              <separator />"
+"              <menuitem action='EditCut' />"
+"              <menuitem action='EditCopy' />"
+"              <menuitem action='EditPaste' />"
+"              <menuitem action='EditDelete' />"
+"      </popup>"
+""
+"      <popup action='EmptySelectionContextMenu'>"
+"              <menuitem action='EditPaste' />"
+"      </popup>"
+""
+"</ui>";
+
+
+static gchar* doc_verbs [] = {
+       "/ui/MenuBar/FileMenu/FileProperties",
+       "/ui/MenuBar/FileMenu/FileSave",
+       "/ui/MenuBar/FileMenu/FileSaveAs",
+       "/ui/MenuBar/FileMenu/FilePrint",
+       "/ui/MenuBar/FileMenu/FileClose",
+       "/ui/MenuBar/EditMenu/EditCut",
+       "/ui/MenuBar/EditMenu/EditCopy",
+       "/ui/MenuBar/EditMenu/EditPaste",
+       "/ui/MenuBar/EditMenu/EditDelete",
+       "/ui/MenuBar/EditMenu/EditSelectAll",
+       "/ui/MenuBar/EditMenu/EditUnSelectAll",
+       "/ui/MenuBar/ViewMenu/ViewZoomIn",
+       "/ui/MenuBar/ViewMenu/ViewZoomOut",
+       "/ui/MenuBar/ViewMenu/ViewZoom1to1",
+       "/ui/MenuBar/ViewMenu/ViewZoomToFit",
+       "/ui/MenuBar/ViewMenu/ViewGrid",
+       "/ui/MenuBar/ViewMenu/ViewMarkup",
+       "/ui/MenuBar/ObjectsMenu/ObjectsArrowMode",
+       "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateText",
+       "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateLine",
+       "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateBox",
+       "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateEllipse",
+       "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateImage",
+       "/ui/MenuBar/ObjectsMenu/ObjectsCreateMenu/ObjectsCreateBarcode",
+       "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsRaise",
+       "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsLower",
+       "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateLeft",
+       "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateRight",
+       "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipHorizontal",
+       "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipVertical",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignLeft",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignRight",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignHCenter",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsCenterHorizontal",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignTop",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignBottom",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignVCenter",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsCenterVertical",
+       "/ui/MenuBar/ObjectsMenu/ObjectsMergeProperties",
+
+       NULL
+};
+
+static gchar* doc_modified_verbs [] = {
+       "/ui/MenuBar/FileMenu/FileSave",
+
+       NULL
+};
+
+static gchar* selection_verbs [] = {
+       "/ui/MenuBar/EditMenu/EditCut",
+       "/ui/MenuBar/EditMenu/EditCopy",
+       "/ui/MenuBar/EditMenu/EditDelete",
+       "/ui/MenuBar/EditMenu/EditUnSelectAll",
+       "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsRaise",
+       "/ui/MenuBar/ObjectsMenu/ObjectsOrderMenu/ObjectsLower",
+       "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateLeft",
+       "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsRotateRight",
+       "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipHorizontal",
+       "/ui/MenuBar/ObjectsMenu/ObjectsRotateFlipMenu/ObjectsFlipVertical",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsCenterHorizontal",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsCenterVertical",
+
+       NULL
+};
+
+static gchar* atomic_selection_verbs [] = {
+
+       NULL
+};
+
+static gchar* multi_selection_verbs [] = {
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignLeft",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignRight",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignHorizMenu/ObjectsAlignHCenter",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignTop",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignBottom",
+       "/ui/MenuBar/ObjectsMenu/ObjectsAlignVertMenu/ObjectsAlignVCenter",
+
+       NULL
+};
+
+
+/*****************************************************************************/
+/** Initialize UI component for given window.                                */
+/*****************************************************************************/
+GtkUIManager *
+gl_ui_new (glWindow *window)
+{
+       GtkUIManager            *ui;
+       GtkActionGroup          *actions;
+       GError                  *error = NULL;
+       GtkWidget               *recent_menu;
+
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_val_if_fail (window && GL_IS_WINDOW (window), NULL);
+
+       gl_debug (DEBUG_UI, "window = %p", window);
+
+       ui = gtk_ui_manager_new ();
+
+       g_signal_connect (ui, "connect_proxy",
+                         G_CALLBACK (connect_proxy_cb), window);
+       g_signal_connect (ui, "disconnect_proxy",
+                         G_CALLBACK (disconnect_proxy_cb), window);
+
+       actions = gtk_action_group_new ("Actions");
+        gtk_action_group_set_translation_domain (actions, NULL);
+       gtk_action_group_add_actions (actions, entries, n_entries, GTK_WINDOW (window));
+       gtk_action_group_add_toggle_actions (actions, 
+                                            toggle_entries, n_toggle_entries, 
+                                            window);
+       gtk_action_group_add_toggle_actions (actions, 
+                                            ui_toggle_entries, n_ui_toggle_entries, 
+                                            ui);
+
+       gtk_ui_manager_insert_action_group (ui, actions, 0);
+       gtk_window_add_accel_group (GTK_WINDOW (window), gtk_ui_manager_get_accel_group (ui));
+
+       gl_debug (DEBUG_UI, "Creating ui from string");
+       if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, strlen (ui_info), &error)) {
+               g_message ("building menus failed: %s", error->message);
+               g_error_free (error);
+       }
+
+       /* Set the toolbar styles according to prefs */
+       set_app_main_toolbar_style (ui);
+       set_app_drawing_toolbar_style (ui);
+               
+       /* Set view grid and markup visibility according to prefs */
+       set_view_style (ui);
+               
+       /* add an Open Recents Submenu */
+        recent_menu  = gl_recent_create_menu ();
+       g_signal_connect (G_OBJECT (recent_menu), "item-activated",
+                         G_CALLBACK (gl_ui_cmd_file_open_recent), window);
+       gtk_menu_item_set_submenu (GTK_MENU_ITEM (gtk_ui_manager_get_widget (ui, "/MenuBar/FileMenu/FileRecentsMenu")),
+                                  recent_menu);
+
+
+       gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, FALSE);
+
+       gl_debug (DEBUG_UI, "END");
+
+       return ui;
+}
+
+/*****************************************************************************/
+/** Unref wrapper.                                                           */
+/*****************************************************************************/
+void
+gl_ui_unref (GtkUIManager *ui)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       g_object_unref(ui);
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*****************************************************************************/
+/** Update all verbs of given UI component.                                  */
+/*****************************************************************************/
+void
+gl_ui_update_all (GtkUIManager *ui,
+                 glView       *view)
+{
+       glLabel *label;
+
+       gl_debug (DEBUG_UI, "START");
+
+       gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, TRUE);
+
+       label = view->label;
+       g_return_if_fail (label != NULL);
+
+       gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditUndo",
+                                      gl_label_can_undo (label));
+       gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditRedo",
+                                      gl_label_can_redo (label));
+
+       gl_ui_util_set_verb_list_sensitive (ui, doc_modified_verbs,
+                                           gl_label_is_modified (label));
+
+       gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomIn",
+                                      !gl_view_is_zoom_max (view));
+       gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomOut",
+                                      !gl_view_is_zoom_min (view));
+
+       gl_ui_util_set_verb_list_sensitive (ui, selection_verbs,
+                                           !gl_view_is_selection_empty (view));
+
+       gl_ui_util_set_verb_list_sensitive (ui, atomic_selection_verbs,
+                                           gl_view_is_selection_atomic (view));
+
+       gl_ui_util_set_verb_list_sensitive (ui, multi_selection_verbs,
+                                           !gl_view_is_selection_empty (view)
+                                           && !gl_view_is_selection_atomic (view));
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*****************************************************************************/
+/** Update all verbs of given UI component to "no document" state.           */
+/*****************************************************************************/
+void
+gl_ui_update_nodoc (GtkUIManager *ui)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       gl_ui_util_set_verb_list_sensitive (ui, doc_verbs, FALSE);
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*****************************************************************************/
+/** Update label modified verbs of given UI component.                       */
+/*****************************************************************************/
+void
+gl_ui_update_modified_verbs (GtkUIManager *ui,
+                            glLabel      *label)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       gl_ui_util_set_verb_list_sensitive (ui, 
+                                           doc_modified_verbs,
+                                           gl_label_is_modified (label));
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*****************************************************************************/
+/** Update verbs associated with selection state of given UI component.      */
+/*****************************************************************************/
+void
+gl_ui_update_selection_verbs (GtkUIManager *ui,
+                             glView       *view)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       gl_ui_util_set_verb_list_sensitive (ui, selection_verbs,
+                                           !gl_view_is_selection_empty (view));
+
+       gl_ui_util_set_verb_list_sensitive (ui, atomic_selection_verbs,
+                                           gl_view_is_selection_atomic (view));
+
+       gl_ui_util_set_verb_list_sensitive (ui, multi_selection_verbs,
+                                           !gl_view_is_selection_empty (view)
+                                           && !gl_view_is_selection_atomic (view));
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*****************************************************************************/
+/** Update verbs associated with zoom level of given UI component.           */
+/*****************************************************************************/
+void
+gl_ui_update_zoom_verbs (GtkUIManager *ui,
+                        glView       *view)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomIn",
+                                      !gl_view_is_zoom_max (view));
+       gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewZoomOut",
+                                      !gl_view_is_zoom_min (view));
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*****************************************************************************/
+/** Update undo/redo verbs of given UI component.                            */
+/*****************************************************************************/
+void
+gl_ui_update_undo_redo_verbs (GtkUIManager *ui,
+                             glLabel      *label)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditUndo",
+                                      gl_label_can_undo (label));
+
+       gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/EditMenu/EditRedo",
+                                      gl_label_can_redo (label));
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  View menu item toggled callback.                               */
+/*---------------------------------------------------------------------------*/
+static void
+view_ui_item_toggled_cb (GtkToggleAction *action,
+                        GtkUIManager    *ui)
+{
+       const gchar *name;
+       gboolean     state;
+
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (action && GTK_IS_TOGGLE_ACTION (action));
+
+       name  = gtk_action_get_name (GTK_ACTION (action));
+       state = gtk_toggle_action_get_active (action);
+
+       gl_debug (DEBUG_UI, "Action = %s, State = %d", name, state);
+
+       if (strcmp (name, "ViewMainToolBar") == 0)
+       {
+               gl_prefs->main_toolbar_visible = state;
+               set_app_main_toolbar_style (ui);
+               gl_prefs_model_save_settings (gl_prefs);
+       }
+
+       if (strcmp (name, "ViewMainToolBarToolTips") == 0)
+       {
+               gl_prefs->main_toolbar_view_tooltips = state;
+               set_app_main_toolbar_style (ui);
+               gl_prefs_model_save_settings (gl_prefs);
+       }
+
+       if (strcmp (name, "ViewDrawingToolBar") == 0)
+       {
+               gl_prefs->drawing_toolbar_visible = state;
+               set_app_drawing_toolbar_style (ui);
+               gl_prefs_model_save_settings (gl_prefs);
+       }
+
+       if (strcmp (name, "ViewDrawingToolBarToolTips") == 0)
+       {
+               gl_prefs->drawing_toolbar_view_tooltips = state;
+               set_app_drawing_toolbar_style (ui);
+               gl_prefs_model_save_settings (gl_prefs);
+       }
+
+       gl_debug (DEBUG_UI, "");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Set main toolbar style.                                        */
+/*---------------------------------------------------------------------------*/
+static void
+set_app_main_toolbar_style (GtkUIManager *ui)
+{
+       GtkWidget *toolbar;
+
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (ui && GTK_IS_UI_MANAGER (ui));
+                       
+       /* Updated view menu */
+       gl_ui_util_set_verb_state (ui, "/ui/ViewMenu/ViewMainToolBar",
+                                  gl_prefs->main_toolbar_visible);
+
+       gl_ui_util_set_verb_sensitive (ui, "/ui/ViewMenu/ViewMainToolBarToolTips",
+                                      gl_prefs->main_toolbar_visible);
+
+       gl_ui_util_set_verb_state (ui, "/ui/ViewMenu/ViewMainToolBarToolTips",
+                                  gl_prefs->main_toolbar_view_tooltips);
+
+       
+       toolbar = gtk_ui_manager_get_widget (ui, "/MainToolBar");
+
+       gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar),
+                                 gl_prefs->main_toolbar_view_tooltips);
+
+       if (gl_prefs->main_toolbar_visible) {
+               gtk_widget_show_all (toolbar);
+       } else {
+               gtk_widget_hide (toolbar);
+       }
+       
+       gl_debug (DEBUG_UI, "END");
+}
+
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Set drawing toolbar style.                                     */
+/*---------------------------------------------------------------------------*/
+static void
+set_app_drawing_toolbar_style (GtkUIManager *ui)
+{
+       GtkWidget *toolbar;
+
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (ui && GTK_IS_UI_MANAGER (ui));
+                       
+       /* Updated view menu */
+       gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewDrawingToolBar",
+                                  gl_prefs->drawing_toolbar_visible);
+
+       gl_ui_util_set_verb_sensitive (ui, "/ui/MenuBar/ViewMenu/ViewDrawingToolBarToolTips",
+                                      gl_prefs->drawing_toolbar_visible);
+
+       gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenuDrawingToolBarToolTips",
+                                  gl_prefs->drawing_toolbar_view_tooltips);
+
+       
+       toolbar = gtk_ui_manager_get_widget (ui, "/DrawingToolBar");
+
+       gtk_toolbar_set_tooltips (GTK_TOOLBAR (toolbar),
+                                 gl_prefs->drawing_toolbar_view_tooltips);
+
+       gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
+
+       if (gl_prefs->drawing_toolbar_visible) {
+               gtk_widget_show_all (toolbar);
+       } else {
+               gtk_widget_hide (toolbar);
+       }
+       
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Set visibility of grid and markup.                             */
+/*---------------------------------------------------------------------------*/
+static void
+set_view_style (GtkUIManager *ui)
+{
+       gl_debug (DEBUG_UI, "START");
+
+       g_return_if_fail (ui && GTK_IS_UI_MANAGER(ui));
+                       
+       gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewGrid",
+                                  gl_prefs->grid_visible);
+
+       gl_ui_util_set_verb_state (ui, "/ui/MenuBar/ViewMenu/ViewMarkup",
+                                  gl_prefs->markup_visible);
+
+       gl_debug (DEBUG_UI, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Connect proxy callback.                                        */
+/*---------------------------------------------------------------------------*/
+static void
+connect_proxy_cb (GtkUIManager *ui,
+                 GtkAction    *action,
+                 GtkWidget    *proxy,
+                 glWindow     *window)
+{
+       if (GTK_IS_MENU_ITEM (proxy))
+       {
+               g_signal_connect (proxy, "select",
+                                 G_CALLBACK (menu_item_select_cb), window);
+               g_signal_connect (proxy, "deselect",
+                                 G_CALLBACK (menu_item_deselect_cb), window);
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Disconnect proxy callback.                                     */
+/*---------------------------------------------------------------------------*/
+static void
+disconnect_proxy_cb (GtkUIManager *ui,
+                    GtkAction    *action,
+                    GtkWidget    *proxy,
+                    glWindow     *window)
+{
+       if (GTK_IS_MENU_ITEM (proxy))
+       {
+               g_signal_handlers_disconnect_by_func
+                       (proxy, G_CALLBACK (menu_item_select_cb), window);
+               g_signal_handlers_disconnect_by_func
+                       (proxy, G_CALLBACK (menu_item_deselect_cb), window);
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Menu item select callback.                                     */
+/*---------------------------------------------------------------------------*/
+static void
+menu_item_select_cb (GtkMenuItem *proxy,
+                    glWindow    *window)
+{
+       GtkAction *action;
+       char      *message;
+
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+       g_return_if_fail (window->status_bar && GTK_IS_STATUSBAR (window->status_bar));
+
+       action = g_object_get_data (G_OBJECT (proxy),  "gtk-action");
+       g_return_if_fail (action != NULL);
+       
+       g_object_get (G_OBJECT (action), "tooltip", &message, NULL);
+       if (message)
+       {
+               gtk_statusbar_push (GTK_STATUSBAR (window->status_bar),
+                                   window->menu_tips_context_id, message);
+               g_free (message);
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Menu item deselect callback.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+menu_item_deselect_cb (GtkMenuItem *proxy,
+                      glWindow    *window)
+{
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+       g_return_if_fail (window->status_bar && GTK_IS_STATUSBAR (window->status_bar));
+
+       gtk_statusbar_pop (GTK_STATUSBAR (window->status_bar),
+                          window->menu_tips_context_id);
+}
+
diff --git a/src/ui.h b/src/ui.h
new file mode 100644 (file)
index 0000000..19135d5
--- /dev/null
+++ b/src/ui.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  ui.h:  GLabels UI module header file
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __GL_UI_H__
+#define __GL_UI_H__
+
+#include <gtk/gtkuimanager.h>
+
+#include "window.h"
+#include "view.h"
+
+G_BEGIN_DECLS
+
+GtkUIManager *gl_ui_new                    (glWindow          *window);
+
+void          gl_ui_unref                  (GtkUIManager      *ui);
+
+void          gl_ui_update_all             (GtkUIManager      *ui,
+                                           glView            *view);
+
+void          gl_ui_update_nodoc           (GtkUIManager      *ui);
+
+void          gl_ui_update_modified_verbs  (GtkUIManager      *ui,
+                                           glLabel           *label);
+
+void          gl_ui_update_selection_verbs (GtkUIManager      *ui,
+                                           glView            *view);
+
+void          gl_ui_update_zoom_verbs      (GtkUIManager      *ui,
+                                           glView            *view);
+
+void          gl_ui_update_undo_redo_verbs (GtkUIManager      *ui,
+                                           glLabel           *label);
+
+G_END_DECLS
+
+#endif /* __GL_UI_H__ */
diff --git a/src/util.c b/src/util.c
new file mode 100644 (file)
index 0000000..1e852ec
--- /dev/null
@@ -0,0 +1,345 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  util.c:  various small utility functions
+ *
+ *  Copyright (C) 2001  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "util.h"
+
+#include <string.h>
+#include <glib.h>
+#include <math.h>
+#include <gtk/gtkliststore.h>
+#include <gtk/gtkcellrenderertext.h>
+#include <gtk/gtkcelllayout.h>
+#include <libglabels/str.h>
+
+#define FRAC_EPSILON 0.00005
+
+\f
+/****************************************************************************/
+/* Append ".glabels" extension to filename if needed.                       */
+/****************************************************************************/
+gchar *
+gl_util_add_extension (const gchar *orig_filename)
+{
+       gchar *new_filename, *extension;
+
+       extension = strrchr (orig_filename, '.');
+       if (extension == NULL) {
+               new_filename = g_strconcat (orig_filename, ".glabels", NULL);
+       } else {
+               if (g_strcasecmp (extension, ".glabels") != 0) {
+                       new_filename =
+                           g_strconcat (orig_filename, ".glabels", NULL);
+               } else {
+                       new_filename = g_strdup (orig_filename);
+               }
+       }
+
+       return new_filename;
+}
+
+/****************************************************************************/
+/* Remove ".glabels" extension from filename if needed.                     */
+/****************************************************************************/
+gchar *
+gl_util_remove_extension (const gchar *orig_filename)
+{
+       gchar *new_filename, *extension;
+
+       new_filename = g_strdup (orig_filename);
+
+       extension = strrchr (new_filename, '.');
+       if (extension != NULL) {
+               if (g_strcasecmp (extension, ".glabels") == 0) {
+                       *extension = 0; /* truncate string, rm extension */
+               }
+       }
+
+       return new_filename;
+}
+
+/****************************************************************************/
+/* Make sure we have an absolute path to filename.                          */
+/****************************************************************************/
+gchar *
+gl_util_make_absolute (const gchar *filename)
+{
+       gchar *pwd, *absolute_filename;
+
+       if (g_path_is_absolute (filename)) {
+               absolute_filename = g_strdup (filename);
+       } else {
+               pwd = g_get_current_dir ();
+               absolute_filename = g_build_filename (pwd, filename, NULL);
+               g_free (pwd);
+       }
+
+       return absolute_filename;
+}
+
+/****************************************************************************/
+/* Create fractional representation of number, if possible.                 */
+/****************************************************************************/
+gchar *
+gl_util_fraction (gdouble x)
+{
+       static gdouble denom[] = { 1., 2., 3., 4., 8., 16., 32., 0. };
+       gint i;
+       gdouble product, remainder;
+       gint n, d;
+
+       for ( i=0; denom[i] != 0.0; i++ ) {
+               product = x * denom[i];
+               remainder = fabs(product - ((gint)(product+0.5)));
+               if ( remainder < FRAC_EPSILON ) break;
+       }
+
+       if ( denom[i] == 0.0 ) {
+               /* None of our denominators work. */
+               return g_strdup_printf ("%.5g", x);
+       }
+       if ( denom[i] == 1.0 ) {
+               /* Simple integer. */
+               return g_strdup_printf ("%d", (gint)x);
+       }
+       n = (gint)( x * denom[i] + 0.5 );
+       d = (gint)denom[i];
+       if ( n > d ) {
+               return g_strdup_printf ("%d_%d/%d", (n/d), (n%d), d);
+       } else {
+               return g_strdup_printf ("%d/%d", (n%d), d);
+       }
+}
+
+/****************************************************************************/
+/* Utilities to deal with PangoAlignment types.                             */
+/****************************************************************************/
+const gchar *
+gl_util_align_to_string (PangoAlignment align)
+{
+       switch (align) {
+       case PANGO_ALIGN_LEFT:
+               return "Left";
+       case PANGO_ALIGN_CENTER:
+               return "Center";
+       case PANGO_ALIGN_RIGHT:
+               return "Right";
+       default:
+               return "?";
+       }
+}
+
+PangoAlignment
+gl_util_string_to_align (const gchar *string)
+{
+
+       if (g_strcasecmp (string, "Left") == 0) {
+               return PANGO_ALIGN_LEFT;
+       } else if (g_strcasecmp (string, "Center") == 0) {
+               return PANGO_ALIGN_CENTER;
+       } else if (g_strcasecmp (string, "Right") == 0) {
+               return PANGO_ALIGN_RIGHT;
+       } else {
+               return PANGO_ALIGN_LEFT;
+       }
+
+}
+
+/****************************************************************************/
+/* Utilities to deal with PangoWeight types                                 */
+/****************************************************************************/
+const gchar *
+gl_util_weight_to_string (PangoWeight weight)
+{
+       switch (weight) {
+       case PANGO_WEIGHT_NORMAL:
+               return "Regular";
+       case PANGO_WEIGHT_BOLD:
+               return "Bold";
+       default:
+               return "?";
+       }
+}
+
+PangoWeight
+gl_util_string_to_weight (const gchar *string)
+{
+
+       if (g_strcasecmp (string, "Regular") == 0) {
+               return PANGO_WEIGHT_NORMAL;
+       } else if (g_strcasecmp (string, "Bold") == 0) {
+               return PANGO_WEIGHT_BOLD;
+       } else {
+               return PANGO_WEIGHT_NORMAL;
+       }
+
+}
+
+/****************************************************************************/
+/* Convienience function to set strings in a text combo_box from a GList    */
+/****************************************************************************/
+void
+gl_util_combo_box_set_strings (GtkComboBox       *combo,
+                              GList             *list)
+{
+       GtkTreeModel *model;
+       GList        *p;
+
+       g_return_if_fail (list);
+
+       model = gtk_combo_box_get_model(combo);
+       gtk_list_store_clear (GTK_LIST_STORE (model));
+
+       for (p=list; p!=NULL; p=p->next) {
+               if (p->data) {
+                       gtk_combo_box_append_text (combo, p->data);
+               }
+       }
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  gl_util_combo_box_set_active_text support.                      */
+/*---------------------------------------------------------------------------*/
+
+typedef struct {
+  const gchar *text;
+  GtkTreeIter  iter;
+  gboolean     found;
+} TextSearchData;
+
+static gboolean
+search_text_func (GtkTreeModel *model,
+                 GtkTreePath  *path,
+                 GtkTreeIter  *iter,
+                 gpointer      data)
+{
+  TextSearchData *search_data = (TextSearchData *)data;
+  gchar          *text = NULL;
+
+  gtk_tree_model_get (model, iter, 0, &text, -1);
+
+  if (strcmp (text,search_data->text) == 0) {
+    search_data->found = TRUE;
+    search_data->iter  = *iter;
+  }
+
+  g_free (text);
+  
+  return FALSE;
+}
+
+/****************************************************************************/
+/* Convienience function to set active text in a text combo_box from text   */
+/****************************************************************************/
+void
+gl_util_combo_box_set_active_text (GtkComboBox       *combo,
+                                  const gchar       *text)
+{
+       GtkTreeModel   *model = gtk_combo_box_get_model(combo);
+
+       g_return_if_fail (GTK_IS_LIST_STORE (model));
+
+       if (!text) {
+
+               gtk_combo_box_set_active (combo, -1);
+
+       } else {
+               TextSearchData  search_data;
+
+               search_data.text        = text;
+               search_data.found       = FALSE;
+
+               gtk_tree_model_foreach (model, search_text_func, &search_data);
+               if (search_data.found) {
+                       gtk_combo_box_set_active_iter (combo,
+                                                      &search_data.iter);
+               } else {
+                       gtk_combo_box_set_active (combo, -1);
+               }    
+
+       }
+
+}
+
+/****************************************************************************/
+/* Convienience function to add a simple text model to an existing          */
+/* combo_box.  This is needed since combo_boxes created with glade do not   */
+/* use the gtk_combo_box_new_text() constructor.                            */
+/****************************************************************************/
+void
+gl_util_combo_box_add_text_model (GtkComboBox       *combo)
+{
+       GtkCellRenderer *cell;
+       GtkListStore *store;
+
+       store = gtk_list_store_new (1, G_TYPE_STRING);
+       gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
+       g_object_unref (store);
+
+       cell = gtk_cell_renderer_text_new ();
+       gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
+       gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell,
+                                       "text", 0,
+                                       NULL);
+}
+
+
+/****************************************************************************/
+/* Get list of available font families.                                     */
+/****************************************************************************/
+GList  *
+gl_util_get_font_family_list (void)
+{
+       static GList         *list = NULL;
+       PangoFontMap         *fontmap;
+       PangoContext         *context;
+       PangoFontFamily     **families;
+       gint                  n;
+       gint                  i;
+       gchar                *name;
+
+        if ( !list )
+        {
+                fontmap = pango_cairo_font_map_new ();
+                context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
+
+                pango_context_list_families (context, &families, &n);
+
+                for ( i=0; i<n; i++ )
+                {
+                        name = g_strdup (pango_font_family_get_name (families[i]));
+                        list = g_list_insert_sorted (list, name,
+                                                     (GCompareFunc)lgl_str_utf8_casecmp);
+                }
+
+                g_free (families);
+
+                g_object_unref (context);
+                g_object_unref (fontmap);
+        }
+
+       return list;
+}
+
diff --git a/src/util.h b/src/util.h
new file mode 100644 (file)
index 0000000..bed0112
--- /dev/null
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  util.h:  various small utility functions
+ *
+ *  Copyright (C) 2001-2003  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __UTIL_H__
+#define __UTIL_H__
+
+#include <glib/glist.h>
+#include <gtk/gtkcombobox.h>
+#include <pango/pango.h>
+
+G_BEGIN_DECLS
+
+gchar              *gl_util_add_extension         (const gchar       *orig_filename);
+gchar              *gl_util_remove_extension      (const gchar       *orig_filename);
+
+gchar              *gl_util_make_absolute         (const gchar       *filename);
+
+gchar              *gl_util_fraction              (gdouble            x);
+
+const gchar        *gl_util_align_to_string       (PangoAlignment     align);
+PangoAlignment      gl_util_string_to_align       (const gchar       *string);
+
+const gchar        *gl_util_weight_to_string      (PangoWeight        weight);
+PangoWeight         gl_util_string_to_weight      (const gchar       *string);
+
+void gl_util_combo_box_set_strings     (GtkComboBox       *combo,
+                                       GList             *list);
+void gl_util_combo_box_set_active_text (GtkComboBox       *combo,
+                                       const gchar       *text);
+void gl_util_combo_box_add_text_model  (GtkComboBox       *combo);
+
+GList  *gl_util_get_font_family_list (void);
+
+G_END_DECLS
+
+#endif /* __UTIL_H__ */
diff --git a/src/view-barcode.c b/src/view-barcode.c
new file mode 100644 (file)
index 0000000..02b8f9f
--- /dev/null
@@ -0,0 +1,425 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_barcode.c:  GLabels label barcode object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "view-barcode.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+
+#include "color.h"
+#include "object-editor.h"
+#include "stock.h"
+
+#include "pixmaps/cursor_barcode.xbm"
+#include "pixmaps/cursor_barcode_mask.xbm"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glViewBarcodePrivate {
+        int place_holder; /* Place holder for future private data. */
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void       gl_view_barcode_finalize          (GObject          *object);
+
+static GtkWidget *construct_properties_editor       (glViewObject     *view_object);
+
+static void       update_object_from_editor_cb      (glObjectEditor   *editor,
+                                                    glLabelObject    *object);
+
+static void       update_editor_from_object_cb      (glLabelObject    *object,
+                                                    glObjectEditor   *editor);
+
+static void       update_editor_from_move_cb        (glLabelObject    *object,
+                                                    gdouble           dx,
+                                                    gdouble           dy,
+                                                    glObjectEditor   *editor);
+
+static gboolean   object_at                         (glViewObject     *view_object,
+                                                     cairo_t          *cr,
+                                                     gdouble           x,
+                                                     gdouble           y);
+
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glViewBarcode, gl_view_barcode, GL_TYPE_VIEW_OBJECT);
+
+
+static void
+gl_view_barcode_class_init (glViewBarcodeClass *class)
+{
+       GObjectClass      *object_class      = G_OBJECT_CLASS (class);
+       glViewObjectClass *view_object_class = GL_VIEW_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_view_barcode_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_view_barcode_finalize;
+
+       view_object_class->construct_editor = construct_properties_editor;
+       view_object_class->object_at        = object_at;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_barcode_init (glViewBarcode *view_barcode)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       view_barcode->priv = g_new0 (glViewBarcodePrivate, 1);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_barcode_finalize (GObject *object)
+{
+        glViewBarcode *view_barcode = GL_VIEW_BARCODE (object);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (object && GL_IS_VIEW_BARCODE (object));
+
+        g_free (view_barcode->priv);
+
+       G_OBJECT_CLASS (gl_view_barcode_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* NEW barcode object view.                                                  */
+/*****************************************************************************/
+glViewObject *
+gl_view_barcode_new (glLabelBarcode *object,
+                     glView         *view)
+{
+       glViewBarcode         *view_barcode;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_BARCODE (object), NULL);
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+       
+       view_barcode = g_object_new (gl_view_barcode_get_type(), NULL);
+
+       gl_view_object_set_object (GL_VIEW_OBJECT(view_barcode),
+                                  GL_LABEL_OBJECT(object),
+                                  GL_VIEW_OBJECT_HANDLES_BOX);
+       gl_view_object_set_view (GL_VIEW_OBJECT(view_barcode), view);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return GL_VIEW_OBJECT (view_barcode);
+}
+
+/*****************************************************************************/
+/* Create a properties dialog for a barcode object.                          */
+/*****************************************************************************/
+static GtkWidget *
+construct_properties_editor (glViewObject *view_object)
+{
+       GtkWidget          *editor;
+       glViewBarcode      *view_bc = (glViewBarcode *)view_object;
+       glLabelObject      *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       object = gl_view_object_get_object (GL_VIEW_OBJECT(view_bc));
+
+       /* Build editor. */
+       editor = gl_object_editor_new (GL_STOCK_BARCODE, _("Barcode object properties"),
+                                       object->parent,
+                                      GL_OBJECT_EDITOR_POSITION_PAGE,
+                                      GL_OBJECT_EDITOR_SIZE_PAGE,
+                                      GL_OBJECT_EDITOR_BC_PAGE,
+                                      GL_OBJECT_EDITOR_DATA_PAGE,
+                                      0);
+
+       /* Update */
+       update_editor_from_object_cb (object, GL_OBJECT_EDITOR(editor));
+       update_editor_from_move_cb (object, 0, 0, GL_OBJECT_EDITOR(editor));
+
+       /* Connect signals. */
+       g_signal_connect (G_OBJECT (editor), "changed",
+                         G_CALLBACK(update_object_from_editor_cb), object);
+       g_signal_connect (G_OBJECT (object), "changed",
+                         G_CALLBACK (update_editor_from_object_cb), editor);
+       g_signal_connect (G_OBJECT (object), "moved",
+                         G_CALLBACK (update_editor_from_move_cb), editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return editor;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  editor "changed" callback.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+update_object_from_editor_cb (glObjectEditor *editor,
+                             glLabelObject  *object)
+{
+       gdouble            x, y, w, h;
+       glTextNode        *text_node;
+       gchar             *id;
+       gboolean           text_flag, cs_flag;
+       glColorNode       *color_node;
+       guint              format_digits;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_object_cb,
+                                        editor);
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_move_cb,
+                                        editor);
+
+
+       gl_object_editor_get_position (editor, &x, &y);
+       gl_label_object_set_position (object, x, y);
+
+       gl_object_editor_get_size (editor, &w, &h);
+       gl_label_object_set_size (object, w, h);
+
+       text_node = gl_object_editor_get_data (editor);
+       gl_label_barcode_set_data (GL_LABEL_BARCODE(object), text_node);
+       gl_text_node_free (&text_node);
+
+       gl_object_editor_get_bc_style (editor, &id, &text_flag, &cs_flag, &format_digits);
+       color_node = gl_object_editor_get_bc_color (editor);
+       gl_label_barcode_set_props (GL_LABEL_BARCODE(object),
+                                   id, text_flag, cs_flag, format_digits);
+       gl_label_object_set_line_color (object, color_node);
+       gl_color_node_free (&color_node);
+       g_free (id);
+
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_object_cb,
+                                          editor);
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_move_cb,
+                                          editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "changed" callback.                                 */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_object_cb (glLabelObject  *object,
+                             glObjectEditor *editor)
+{
+       gdouble            w, h;
+       glTextNode        *text_node;
+       gchar             *id;
+       gboolean           text_flag, cs_flag;
+       glColorNode       *color_node;
+       glMerge           *merge;
+       guint              format_digits;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_size (object, &w, &h);
+       gl_object_editor_set_size (editor, w, h);
+       
+       merge = gl_label_get_merge (GL_LABEL(object->parent));
+
+       gl_label_barcode_get_props (GL_LABEL_BARCODE(object),
+                                   &id, &text_flag, &cs_flag, &format_digits);
+       color_node = gl_label_object_get_line_color (object);
+       gl_object_editor_set_bc_style (editor, id, text_flag, cs_flag, format_digits);
+       gl_object_editor_set_bc_color (editor, (merge != NULL), color_node);
+       gl_color_node_free (&color_node);
+       g_free (id);
+
+       text_node = gl_label_barcode_get_data (GL_LABEL_BARCODE(object));
+       gl_object_editor_set_data (editor, (merge != NULL), text_node);
+       gl_text_node_free (&text_node);
+
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "moved" callback.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_move_cb (glLabelObject    *object,
+                           gdouble           dx,
+                           gdouble           dy,
+                           glObjectEditor   *editor)
+{
+       gdouble            x, y;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_position (object, &x, &y);
+       gl_object_editor_set_position (editor, x, y);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Is object at (x,y)?                                                       */
+/*****************************************************************************/
+static gboolean
+object_at (glViewObject  *view_object,
+           cairo_t       *cr,
+           gdouble        x,
+           gdouble        y)
+{
+       glLabelObject    *object;
+        gdouble           w, h;
+
+        object = gl_view_object_get_object (view_object);
+
+        gl_label_object_get_size (object, &w, &h);
+
+        cairo_rectangle (cr, 0.0, 0.0, w, h);
+
+        if (cairo_in_fill (cr, x, y))
+        {
+                return TRUE;
+        }
+
+        return FALSE;
+}
+
+
+/*****************************************************************************/
+/* Return apropos cursor for create object mode.                             */
+/*****************************************************************************/
+GdkCursor *
+gl_view_barcode_get_create_cursor (void)
+{
+       GdkCursor       *cursor = NULL;
+       GdkPixmap       *pixmap_data, *pixmap_mask;
+       GdkColor         fg = { 0, 0, 0, 0 };
+       GdkColor         bg = { 0, 65535, 65535, 65535 };
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        pixmap_data = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_barcode_bits,
+                                                   cursor_barcode_width,
+                                                   cursor_barcode_height);
+        pixmap_mask = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_barcode_mask_bits,
+                                                   cursor_barcode_mask_width,
+                                                   cursor_barcode_mask_height);
+        cursor = gdk_cursor_new_from_pixmap (pixmap_data, pixmap_mask, &fg,
+                                             &bg, cursor_barcode_x_hot,
+                                             cursor_barcode_y_hot);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return cursor;
+}
+
+/*****************************************************************************/
+/* Object creation handler: button press event.                              */
+/*****************************************************************************/
+void
+gl_view_barcode_create_button_press_event   (glView *view,
+                                             gdouble x,
+                                             gdouble y)
+{
+       GObject             *object;
+        glTextNode          *text_node;
+       glColorNode         *line_color_node;
+
+        gl_view_unselect_all (view);
+
+        line_color_node = gl_color_node_new_default ();
+               
+        object = gl_label_barcode_new (view->label);
+        gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+        text_node = gl_text_node_new_from_text ("123456789");
+        gl_label_barcode_set_data (GL_LABEL_BARCODE(object), text_node);
+        line_color_node->color = gl_color_set_opacity (gl_view_get_default_line_color(view), 0.5);
+        gl_label_object_set_line_color (GL_LABEL_OBJECT(object),
+                                        line_color_node);
+
+        gl_color_node_free (&line_color_node);
+
+        view->create_object = GL_LABEL_OBJECT (object);
+        view->create_x0 = x;
+        view->create_y0 = y;
+}
+
+/*****************************************************************************/
+/* Object creation handler: motion event.                                    */
+/*****************************************************************************/
+void
+gl_view_barcode_create_motion_event         (glView *view,
+                                             gdouble x,
+                                             gdouble y)
+{
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object), x, y);
+}
+
+/*****************************************************************************/
+/* Object creation handler: button relesase event.                           */
+/*****************************************************************************/
+void
+gl_view_barcode_create_button_release_event (glView *view,
+                                             gdouble x,
+                                             gdouble y)
+{
+       glColorNode         *line_color_node;
+
+        line_color_node = gl_color_node_new_default ();
+               
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object), x, y);
+        line_color_node->color = gl_view_get_default_line_color(view);
+        gl_label_object_set_line_color (GL_LABEL_OBJECT(view->create_object), line_color_node);
+        gl_color_node_free (&line_color_node);
+}
+
diff --git a/src/view-barcode.h b/src/view-barcode.h
new file mode 100644 (file)
index 0000000..1587f19
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_barcode.h:  GLabels label barcode object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __VIEW_BARCODE_H__
+#define __VIEW_BARCODE_H__
+
+#include "view-object.h"
+#include "label-barcode.h"
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_VIEW_BARCODE            (gl_view_barcode_get_type ())
+#define GL_VIEW_BARCODE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_VIEW_BARCODE, glViewBarcode))
+#define GL_VIEW_BARCODE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_VIEW_BARCODE, glViewBarcodeClass))
+#define GL_IS_VIEW_BARCODE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_VIEW_BARCODE))
+#define GL_IS_VIEW_BARCODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_VIEW_BARCODE))
+
+typedef struct _glViewBarcode          glViewBarcode;
+typedef struct _glViewBarcodeClass     glViewBarcodeClass;
+
+typedef struct _glViewBarcodePrivate   glViewBarcodePrivate;
+
+struct _glViewBarcode {
+       glViewObject              parent_object;
+
+       glViewBarcodePrivate     *priv;
+};
+
+struct _glViewBarcodeClass {
+       glViewObjectClass         parent_class;
+};
+
+
+GType          gl_view_barcode_get_type (void) G_GNUC_CONST;
+
+glViewObject  *gl_view_barcode_new      (glLabelBarcode *object,
+                                         glView         *view);
+
+
+/* cursor for creating barcode objects */
+GdkCursor *gl_view_barcode_get_create_cursor (void);
+
+/* Object creation handlers. */
+void       gl_view_barcode_create_button_press_event   (glView *view,
+                                                        gdouble x,
+                                                        gdouble y);
+
+void       gl_view_barcode_create_motion_event         (glView *view,
+                                                        gdouble x,
+                                                        gdouble y);
+
+void       gl_view_barcode_create_button_release_event (glView *view,
+                                                        gdouble x,
+                                                        gdouble y);
+
+
+G_END_DECLS
+
+#endif /* __VIEW_BARCODE_H__ */
diff --git a/src/view-box.c b/src/view-box.c
new file mode 100644 (file)
index 0000000..4d0941f
--- /dev/null
@@ -0,0 +1,487 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_box.c:  GLabels label box object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "view-box.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+
+#include "color.h"
+#include "object-editor.h"
+#include "stock.h"
+
+#include "pixmaps/cursor_box.xbm"
+#include "pixmaps/cursor_box_mask.xbm"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glViewBoxPrivate {
+        int place_holder; /* Place holder for future private data. */
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void       gl_view_box_finalize              (GObject          *object);
+
+static GtkWidget *construct_properties_editor       (glViewObject     *view_object);
+
+static void       update_object_from_editor_cb      (glObjectEditor   *editor,
+                                                    glLabelObject    *object);
+
+static void       update_editor_from_object_cb      (glLabelObject    *object,
+                                                    glObjectEditor   *editor);
+
+static void       update_editor_from_move_cb        (glLabelObject    *object,
+                                                    gdouble           dx,
+                                                    gdouble           dy,
+                                                    glObjectEditor   *editor);
+
+static gboolean   object_at                         (glViewObject     *view_object,
+                                                     cairo_t          *cr,
+                                                     gdouble           x,
+                                                     gdouble           y);
+
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glViewBox, gl_view_box, GL_TYPE_VIEW_OBJECT);
+
+
+static void
+gl_view_box_class_init (glViewBoxClass *class)
+{
+       GObjectClass      *object_class      = G_OBJECT_CLASS (class);
+       glViewObjectClass *view_object_class = GL_VIEW_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_view_box_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_view_box_finalize;
+
+       view_object_class->construct_editor = construct_properties_editor;
+       view_object_class->object_at        = object_at;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_box_init (glViewBox *view_box)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       view_box->priv = g_new0 (glViewBoxPrivate, 1);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_box_finalize (GObject *object)
+{
+        glViewBox *view_box = GL_VIEW_BOX (object);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (object && GL_IS_VIEW_BOX (object));
+
+        g_free (view_box->priv);
+
+       G_OBJECT_CLASS (gl_view_box_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* NEW box object view.                                                      */
+/*****************************************************************************/
+glViewObject *
+gl_view_box_new (glLabelBox *object,
+                glView     *view)
+{
+       glViewBox         *view_box;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_BOX (object), NULL);
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+       
+       view_box = g_object_new (gl_view_box_get_type(), NULL);
+
+       gl_view_object_set_object (GL_VIEW_OBJECT(view_box),
+                                  GL_LABEL_OBJECT(object),
+                                  GL_VIEW_OBJECT_HANDLES_BOX);
+       gl_view_object_set_view (GL_VIEW_OBJECT(view_box), view);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return GL_VIEW_OBJECT (view_box);
+}
+
+/*****************************************************************************/
+/* Create a properties dialog for a box object.                              */
+/*****************************************************************************/
+static GtkWidget *
+construct_properties_editor (glViewObject *view_object)
+{
+       GtkWidget          *editor;
+       glViewBox          *view_box = (glViewBox *)view_object;
+       glLabelObject      *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       object = gl_view_object_get_object (GL_VIEW_OBJECT(view_box));
+
+       /* Build editor. */
+       editor = gl_object_editor_new (GL_STOCK_BOX, _("Box object properties"),
+                                       object->parent,
+                                      GL_OBJECT_EDITOR_SHADOW_PAGE,
+                                      GL_OBJECT_EDITOR_POSITION_PAGE,
+                                      GL_OBJECT_EDITOR_SIZE_PAGE,
+                                      GL_OBJECT_EDITOR_FILL_PAGE,
+                                      GL_OBJECT_EDITOR_LINE_PAGE,
+                                      0);
+       
+       /* Update */
+       update_editor_from_object_cb (object, GL_OBJECT_EDITOR(editor));
+       update_editor_from_move_cb (object, 0, 0, GL_OBJECT_EDITOR(editor));
+
+       /* Connect signals. */
+       g_signal_connect (G_OBJECT (editor), "changed",
+                         G_CALLBACK(update_object_from_editor_cb), object);
+       g_signal_connect (G_OBJECT (object), "changed",
+                         G_CALLBACK (update_editor_from_object_cb), editor);
+       g_signal_connect (G_OBJECT (object), "moved",
+                         G_CALLBACK (update_editor_from_move_cb), editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return editor;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  editor "changed" callback.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+update_object_from_editor_cb (glObjectEditor *editor,
+                             glLabelObject  *object)
+{
+       gdouble            x, y, w, h;
+       glColorNode       *line_color_node;
+       gdouble            line_width;
+       glColorNode       *fill_color_node;
+       gboolean           shadow_state;
+       gdouble            shadow_x, shadow_y;
+       glColorNode       *shadow_color_node;
+       gdouble            shadow_opacity;
+       
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_object_cb,
+                                        editor);
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_move_cb,
+                                        editor);
+
+       gl_object_editor_get_position (editor, &x, &y);
+       gl_label_object_set_position (object, x, y);
+
+       gl_object_editor_get_size (editor, &w, &h);
+       gl_label_object_set_size (object, w, h);
+
+       fill_color_node = gl_object_editor_get_fill_color (editor);
+       gl_label_object_set_fill_color (object, fill_color_node);
+       gl_color_node_free (&fill_color_node);
+
+       line_color_node = gl_object_editor_get_line_color (editor);
+       gl_label_object_set_line_color (object, line_color_node);
+       gl_color_node_free (&line_color_node);
+
+       line_width = gl_object_editor_get_line_width (editor);
+       gl_label_object_set_line_width (object, line_width);
+
+       shadow_state = gl_object_editor_get_shadow_state (editor);
+       gl_label_object_set_shadow_state (object, shadow_state);
+
+       gl_object_editor_get_shadow_offset (editor, &shadow_x, &shadow_y);
+       gl_label_object_set_shadow_offset (object, shadow_x, shadow_y);
+
+       shadow_color_node = gl_object_editor_get_shadow_color (editor);
+       gl_label_object_set_shadow_color (object, shadow_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       shadow_opacity = gl_object_editor_get_shadow_opacity (editor);
+       gl_label_object_set_shadow_opacity (object, shadow_opacity);
+
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_object_cb,
+                                          editor);
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_move_cb,
+                                          editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "changed" callback.                                 */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_object_cb (glLabelObject  *object,
+                             glObjectEditor *editor)
+{
+       gdouble            w, h;
+       glColorNode       *line_color_node;
+       gdouble            line_width;
+       glColorNode       *fill_color_node;
+       gboolean           shadow_state;
+       gdouble            shadow_x, shadow_y;
+       glColorNode       *shadow_color_node;
+       gdouble            shadow_opacity;
+       glMerge           *merge;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_size (object, &w, &h);
+       gl_object_editor_set_size (editor, w, h);
+       merge = gl_label_get_merge (GL_LABEL(object->parent));
+       
+       fill_color_node = gl_label_object_get_fill_color (GL_LABEL_OBJECT(object));
+       gl_object_editor_set_fill_color (editor, (merge != NULL), fill_color_node);
+       gl_color_node_free (&fill_color_node);
+
+       line_color_node = gl_label_object_get_line_color (GL_LABEL_OBJECT(object));
+       gl_object_editor_set_line_color (editor, (merge != NULL), line_color_node);
+       gl_color_node_free (&line_color_node);
+
+       line_width = gl_label_object_get_line_width (GL_LABEL_OBJECT(object));
+       gl_object_editor_set_line_width (editor, line_width);
+
+       shadow_state = gl_label_object_get_shadow_state (object);
+       gl_object_editor_set_shadow_state (editor, shadow_state);
+
+       gl_label_object_get_shadow_offset (object, &shadow_x, &shadow_y);
+       gl_object_editor_set_shadow_offset (editor, shadow_x, shadow_y);
+
+       shadow_color_node = gl_label_object_get_shadow_color (object);
+       gl_object_editor_set_shadow_color (editor, (merge != NULL), shadow_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       shadow_opacity = gl_label_object_get_shadow_opacity (object);
+       gl_object_editor_set_shadow_opacity (editor, shadow_opacity);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "moved" callback.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_move_cb (glLabelObject    *object,
+                           gdouble           dx,
+                           gdouble           dy,
+                           glObjectEditor   *editor)
+{
+       gdouble            x, y;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_position (object, &x, &y);
+       gl_object_editor_set_position (editor, x, y);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Is object at (x,y)?                                                       */
+/*****************************************************************************/
+static gboolean
+object_at (glViewObject  *view_object,
+           cairo_t       *cr,
+           gdouble        x,
+           gdouble        y)
+{
+       glLabelObject    *object;
+        gdouble           w, h;
+        gdouble           line_width;
+
+        object = gl_view_object_get_object (view_object);
+
+        gl_label_object_get_size (object, &w, &h);
+
+        cairo_rectangle (cr, 0.0, 0.0, w, h);
+
+        if (cairo_in_fill (cr, x, y))
+        {
+                return TRUE;
+        }
+
+        line_width = gl_label_object_get_line_width (object);
+        cairo_set_line_width (cr, line_width);
+        if (cairo_in_stroke (cr, x, y))
+        {
+                return TRUE;
+        }
+
+        return FALSE;
+}
+
+
+/*****************************************************************************/
+/* Return apropos cursor for create object mode.                             */
+/*****************************************************************************/
+GdkCursor *
+gl_view_box_get_create_cursor (void)
+{
+       GdkCursor       *cursor = NULL;
+       GdkPixmap       *pixmap_data, *pixmap_mask;
+       GdkColor         fg = { 0, 0, 0, 0 };
+       GdkColor         bg = { 0, 65535, 65535, 65535 };
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        pixmap_data = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_box_bits,
+                                                   cursor_box_width,
+                                                   cursor_box_height);
+        pixmap_mask = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_box_mask_bits,
+                                                   cursor_box_mask_width,
+                                                   cursor_box_mask_height);
+        cursor = gdk_cursor_new_from_pixmap (pixmap_data, pixmap_mask, &fg,
+                                             &bg, cursor_box_x_hot,
+                                             cursor_box_y_hot);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return cursor;
+}
+
+/*****************************************************************************/
+/* Object creation handler: button press event.                              */
+/*****************************************************************************/
+void
+gl_view_box_create_button_press_event   (glView *view,
+                                         gdouble x,
+                                         gdouble y)
+{
+       GObject             *object;
+       glColorNode         *fill_color_node;
+       glColorNode         *line_color_node;
+
+        gl_view_unselect_all (view);
+
+        fill_color_node = gl_color_node_new_default ();
+        line_color_node = gl_color_node_new_default ();
+               
+        object = gl_label_box_new (view->label);
+        gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+        gl_label_object_set_size (GL_LABEL_OBJECT(object), 0.0, 0.0);
+        line_color_node->color = gl_color_set_opacity (gl_view_get_default_line_color(view), 0.5);
+        fill_color_node->color = gl_color_set_opacity (gl_view_get_default_fill_color(view), 0.5);
+        gl_label_object_set_line_width (GL_LABEL_OBJECT(object),
+                                        gl_view_get_default_line_width(view));
+        gl_label_object_set_line_color (GL_LABEL_OBJECT(object),
+                                        line_color_node);
+        gl_label_object_set_fill_color (GL_LABEL_OBJECT(object),
+                                        fill_color_node);
+
+        gl_color_node_free (&fill_color_node);
+        gl_color_node_free (&line_color_node);
+                       
+        view->create_object = GL_LABEL_OBJECT (object);
+        view->create_x0 = x;
+        view->create_y0 = y;
+}
+
+/*****************************************************************************/
+/* Object creation handler: motion event.                                    */
+/*****************************************************************************/
+void
+gl_view_box_create_motion_event         (glView *view,
+                                         gdouble x,
+                                         gdouble y)
+{
+        gdouble w, h;
+
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object),
+                                      MIN (x, view->create_x0), MIN (y, view->create_y0));
+        w = MAX (x, view->create_x0) - MIN (x, view->create_x0);
+        h = MAX (y, view->create_y0) - MIN (y, view->create_y0);
+        gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h);
+}
+
+/*****************************************************************************/
+/* Object creation handler: button relesase event.                           */
+/*****************************************************************************/
+void
+gl_view_box_create_button_release_event (glView *view,
+                                         gdouble x,
+                                         gdouble y)
+{
+       glColorNode         *fill_color_node;
+       glColorNode         *line_color_node;
+        gdouble              w, h;
+
+        fill_color_node = gl_color_node_new_default ();
+        line_color_node = gl_color_node_new_default ();
+               
+        if ((view->create_x0 == x) && (view->create_y0 == y)) {
+                x = view->create_x0 + 36.0;
+                y = view->create_y0 + 36.0;
+        }
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object),
+                                      MIN (x, view->create_x0), MIN (y, view->create_y0));
+        w = MAX (x, view->create_x0) - MIN (x, view->create_x0);
+        h = MAX (y, view->create_y0) - MIN (y, view->create_y0);
+        gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h);
+        line_color_node->color = gl_view_get_default_line_color(view);
+        gl_label_object_set_line_color (GL_LABEL_OBJECT(view->create_object), line_color_node);
+        fill_color_node->color = gl_view_get_default_fill_color(view);
+        gl_label_object_set_fill_color (GL_LABEL_OBJECT(view->create_object), fill_color_node);
+        gl_color_node_free (&fill_color_node);
+        gl_color_node_free (&line_color_node);
+}
+
diff --git a/src/view-box.h b/src/view-box.h
new file mode 100644 (file)
index 0000000..f2ebb05
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_box.h:  GLabels label box object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __VIEW_BOX_H__
+#define __VIEW_BOX_H__
+
+#include "view-object.h"
+#include "label-box.h"
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_VIEW_BOX            (gl_view_box_get_type ())
+#define GL_VIEW_BOX(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_VIEW_BOX, glViewBox))
+#define GL_VIEW_BOX_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_VIEW_BOX, glViewBoxClass))
+#define GL_IS_VIEW_BOX(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_VIEW_BOX))
+#define GL_IS_VIEW_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_VIEW_BOX))
+
+typedef struct _glViewBox          glViewBox;
+typedef struct _glViewBoxClass     glViewBoxClass;
+
+typedef struct _glViewBoxPrivate   glViewBoxPrivate;
+
+struct _glViewBox {
+       glViewObject          parent_object;
+
+       glViewBoxPrivate     *priv;
+};
+
+struct _glViewBoxClass {
+       glViewObjectClass     parent_class;
+};
+
+
+GType          gl_view_box_get_type (void) G_GNUC_CONST;
+
+glViewObject  *gl_view_box_new      (glLabelBox *object,
+                                    glView     *view);
+
+
+/* cursor for creating box objects */
+GdkCursor *gl_view_box_get_create_cursor (void);
+
+/* Object creation handlers. */
+void       gl_view_box_create_button_press_event   (glView *view,
+                                                    gdouble x,
+                                                    gdouble y);
+
+void       gl_view_box_create_motion_event         (glView *view,
+                                                    gdouble x,
+                                                    gdouble y);
+
+void       gl_view_box_create_button_release_event (glView *view,
+                                                    gdouble x,
+                                                    gdouble y);
+
+
+G_END_DECLS
+
+#endif /* __VIEW_BOX_H__ */
diff --git a/src/view-ellipse.c b/src/view-ellipse.c
new file mode 100644 (file)
index 0000000..6d86b5a
--- /dev/null
@@ -0,0 +1,487 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_ellipse.c:  GLabels label ellipse object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "view-ellipse.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+#include <math.h>
+
+#include "cairo-ellipse-path.h"
+#include "color.h"
+#include "object-editor.h"
+#include "stock.h"
+
+#include "pixmaps/cursor_ellipse.xbm"
+#include "pixmaps/cursor_ellipse_mask.xbm"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glViewEllipsePrivate {
+        int place_holder; /* Place holder for future private data. */
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void       gl_view_ellipse_finalize          (GObject          *object);
+
+static GtkWidget *construct_properties_editor       (glViewObject     *view_object);
+
+static void       update_object_from_editor_cb      (glObjectEditor   *editor,
+                                                    glLabelObject    *object);
+
+static void       update_editor_from_object_cb      (glLabelObject    *object,
+                                                    glObjectEditor   *editor);
+
+static void       update_editor_from_move_cb        (glLabelObject    *object,
+                                                    gdouble           dx,
+                                                    gdouble           dy,
+                                                    glObjectEditor   *editor);
+
+static gboolean   object_at                         (glViewObject     *view_object,
+                                                     cairo_t          *cr,
+                                                     gdouble           x,
+                                                     gdouble           y);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glViewEllipse, gl_view_ellipse, GL_TYPE_VIEW_OBJECT);
+
+
+static void
+gl_view_ellipse_class_init (glViewEllipseClass *class)
+{
+       GObjectClass      *object_class      = G_OBJECT_CLASS (class);
+       glViewObjectClass *view_object_class = GL_VIEW_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_view_ellipse_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_view_ellipse_finalize;
+
+       view_object_class->construct_editor = construct_properties_editor;
+       view_object_class->object_at        = object_at;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_ellipse_init (glViewEllipse *view_ellipse)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       view_ellipse->priv = g_new0 (glViewEllipsePrivate, 1);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_ellipse_finalize (GObject *object)
+{
+        glViewEllipse *view_ellipse = GL_VIEW_ELLIPSE (object);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (object && GL_IS_VIEW_ELLIPSE (object));
+
+        g_free (view_ellipse->priv);
+
+       G_OBJECT_CLASS (gl_view_ellipse_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* NEW ellipse object view.                                                  */
+/*****************************************************************************/
+glViewObject *
+gl_view_ellipse_new (glLabelEllipse *object,
+                     glView         *view)
+{
+       glViewEllipse         *view_ellipse;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_ELLIPSE (object), NULL);
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+       
+       view_ellipse = g_object_new (gl_view_ellipse_get_type(), NULL);
+
+       gl_view_object_set_object (GL_VIEW_OBJECT(view_ellipse),
+                                  GL_LABEL_OBJECT(object),
+                                  GL_VIEW_OBJECT_HANDLES_BOX);
+       gl_view_object_set_view (GL_VIEW_OBJECT(view_ellipse), view);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return GL_VIEW_OBJECT (view_ellipse);
+}
+
+/*****************************************************************************/
+/* Create a properties dialog for a ellipse object.                          */
+/*****************************************************************************/
+static GtkWidget *
+construct_properties_editor (glViewObject *view_object)
+{
+       GtkWidget          *editor;
+       glViewEllipse      *view_ellipse = (glViewEllipse *)view_object;
+       glLabelObject      *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       object = gl_view_object_get_object (GL_VIEW_OBJECT(view_ellipse));
+
+       /* Build editor. */
+       editor = gl_object_editor_new (GL_STOCK_ELLIPSE, _("Ellipse object properties"),
+                                       object->parent,
+                                      GL_OBJECT_EDITOR_SHADOW_PAGE,
+                                      GL_OBJECT_EDITOR_POSITION_PAGE,
+                                      GL_OBJECT_EDITOR_SIZE_PAGE,
+                                      GL_OBJECT_EDITOR_FILL_PAGE,
+                                      GL_OBJECT_EDITOR_LINE_PAGE,
+                                      0);
+       
+       /* Update */
+       update_editor_from_object_cb (object, GL_OBJECT_EDITOR(editor));
+       update_editor_from_move_cb (object, 0, 0, GL_OBJECT_EDITOR(editor));
+
+       /* Connect signals. */
+       g_signal_connect (G_OBJECT (editor), "changed",
+                         G_CALLBACK(update_object_from_editor_cb), object);
+       g_signal_connect (G_OBJECT (object), "changed",
+                         G_CALLBACK (update_editor_from_object_cb), editor);
+       g_signal_connect (G_OBJECT (object), "moved",
+                         G_CALLBACK (update_editor_from_move_cb), editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return editor;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  editor "changed" callback.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+update_object_from_editor_cb (glObjectEditor *editor,
+                             glLabelObject  *object)
+{
+       gdouble            x, y, w, h;
+       glColorNode       *line_color_node;
+       gdouble            line_width;
+       glColorNode       *fill_color_node;
+       gboolean           shadow_state;
+       gdouble            shadow_x, shadow_y;
+       glColorNode       *shadow_color_node;
+       gdouble            shadow_opacity;
+       
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_object_cb,
+                                        editor);
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_move_cb,
+                                        editor);
+
+       gl_object_editor_get_position (editor, &x, &y);
+       gl_label_object_set_position (object, x, y);
+
+       gl_object_editor_get_size (editor, &w, &h);
+       gl_label_object_set_size (object, w, h);
+
+       fill_color_node = gl_object_editor_get_fill_color (editor);
+       gl_label_object_set_fill_color (object, fill_color_node);
+       gl_color_node_free (&fill_color_node);
+
+       line_color_node = gl_object_editor_get_line_color (editor);
+       gl_label_object_set_line_color (object, line_color_node);
+       gl_color_node_free (&line_color_node);
+
+       line_width = gl_object_editor_get_line_width (editor);
+       gl_label_object_set_line_width (object, line_width);
+
+       shadow_state = gl_object_editor_get_shadow_state (editor);
+       gl_label_object_set_shadow_state (object, shadow_state);
+
+       gl_object_editor_get_shadow_offset (editor, &shadow_x, &shadow_y);
+       gl_label_object_set_shadow_offset (object, shadow_x, shadow_y);
+
+       shadow_color_node = gl_object_editor_get_shadow_color (editor);
+       gl_label_object_set_shadow_color (object, shadow_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       shadow_opacity = gl_object_editor_get_shadow_opacity (editor);
+       gl_label_object_set_shadow_opacity (object, shadow_opacity);
+
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_object_cb,
+                                          editor);
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_move_cb,
+                                          editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "changed" callback.                                 */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_object_cb (glLabelObject  *object,
+                             glObjectEditor *editor)
+{
+       gdouble            w, h;
+       glColorNode       *line_color_node;
+       gdouble            line_width;
+       glColorNode       *fill_color_node;
+       gboolean           shadow_state;
+       gdouble            shadow_x, shadow_y;
+       glColorNode       *shadow_color_node;
+       gdouble            shadow_opacity;
+       glMerge           *merge;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_size (object, &w, &h);
+       gl_object_editor_set_size (editor, w, h);
+       merge = gl_label_get_merge (GL_LABEL(object->parent));
+       
+       fill_color_node = gl_label_object_get_fill_color (GL_LABEL_OBJECT(object));
+       gl_object_editor_set_fill_color (editor, (merge != NULL), fill_color_node);
+       gl_color_node_free (&fill_color_node);
+
+       line_color_node = gl_label_object_get_line_color (GL_LABEL_OBJECT(object));
+       gl_object_editor_set_line_color (editor, (merge != NULL), line_color_node);
+       gl_color_node_free (&line_color_node);
+
+       line_width = gl_label_object_get_line_width (GL_LABEL_OBJECT(object));
+       gl_object_editor_set_line_width (editor, line_width);
+
+       shadow_state = gl_label_object_get_shadow_state (object);
+       gl_object_editor_set_shadow_state (editor, shadow_state);
+
+       gl_label_object_get_shadow_offset (object, &shadow_x, &shadow_y);
+       gl_object_editor_set_shadow_offset (editor, shadow_x, shadow_y);
+
+       shadow_color_node = gl_label_object_get_shadow_color (object);
+       gl_object_editor_set_shadow_color (editor, (merge != NULL), shadow_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       shadow_opacity = gl_label_object_get_shadow_opacity (object);
+       gl_object_editor_set_shadow_opacity (editor, shadow_opacity);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "moved" callback.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_move_cb (glLabelObject    *object,
+                           gdouble           dx,
+                           gdouble           dy,
+                           glObjectEditor   *editor)
+{
+       gdouble            x, y;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_position (object, &x, &y);
+       gl_object_editor_set_position (editor, x, y);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Is object at (x,y)?                                                       */
+/*****************************************************************************/
+static gboolean
+object_at (glViewObject  *view_object,
+           cairo_t       *cr,
+           gdouble        x,
+           gdouble        y)
+{
+       glLabelObject    *object;
+        gdouble           w, h;
+        gdouble           line_width;
+
+        object = gl_view_object_get_object (view_object);
+
+        gl_label_object_get_size (object, &w, &h);
+
+        gl_cairo_ellipse_path (cr, w/2, h/2);
+
+        if (cairo_in_fill (cr, x, y))
+        {
+                return TRUE;
+        }
+
+        line_width = gl_label_object_get_line_width (object);
+        cairo_set_line_width (cr, line_width);
+        if (cairo_in_stroke (cr, x, y))
+        {
+                return TRUE;
+        }
+
+        return FALSE;
+}
+
+
+/*****************************************************************************/
+/* Return apropos cursor for create object mode.                             */
+/*****************************************************************************/
+GdkCursor *
+gl_view_ellipse_get_create_cursor (void)
+{
+       GdkCursor       *cursor = NULL;
+       GdkPixmap       *pixmap_data, *pixmap_mask;
+       GdkColor         fg = { 0, 0, 0, 0 };
+       GdkColor         bg = { 0, 65535, 65535, 65535 };
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        pixmap_data = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_ellipse_bits,
+                                                   cursor_ellipse_width,
+                                                   cursor_ellipse_height);
+        pixmap_mask = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_ellipse_mask_bits,
+                                                   cursor_ellipse_mask_width,
+                                                   cursor_ellipse_mask_height);
+        cursor = gdk_cursor_new_from_pixmap (pixmap_data, pixmap_mask, &fg,
+                                             &bg, cursor_ellipse_x_hot,
+                                             cursor_ellipse_y_hot);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return cursor;
+}
+
+/*****************************************************************************/
+/* Object creation handler: button press event.                              */
+/*****************************************************************************/
+void
+gl_view_ellipse_create_button_press_event   (glView *view,
+                                             gdouble x,
+                                             gdouble y)
+{
+       GObject             *object;
+       glColorNode         *fill_color_node;
+       glColorNode         *line_color_node;
+
+        gl_view_unselect_all (view);
+
+        fill_color_node = gl_color_node_new_default ();
+        line_color_node = gl_color_node_new_default ();
+               
+        object = gl_label_ellipse_new (view->label);
+        gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+        gl_label_object_set_size (GL_LABEL_OBJECT(object), 0.0, 0.0);
+        line_color_node->color = gl_color_set_opacity (gl_view_get_default_line_color(view), 0.5);
+        fill_color_node->color = gl_color_set_opacity (gl_view_get_default_fill_color(view), 0.5);
+        gl_label_object_set_line_width (GL_LABEL_OBJECT(object),
+                                        gl_view_get_default_line_width(view));
+        gl_label_object_set_line_color (GL_LABEL_OBJECT(object),
+                                        line_color_node);
+        gl_label_object_set_fill_color (GL_LABEL_OBJECT(object),
+                                        fill_color_node);
+
+        gl_color_node_free (&fill_color_node);
+        gl_color_node_free (&line_color_node);
+
+        view->create_object = GL_LABEL_OBJECT (object);
+        view->create_x0 = x;
+        view->create_y0 = y;
+}
+
+/*****************************************************************************/
+/* Object creation handler: motion event.                                    */
+/*****************************************************************************/
+void
+gl_view_ellipse_create_motion_event     (glView *view,
+                                         gdouble x,
+                                         gdouble y)
+{
+        gdouble w, h;
+
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object),
+                                      MIN (x, view->create_x0), MIN (y, view->create_y0));
+        w = MAX (x, view->create_x0) - MIN (x, view->create_x0);
+        h = MAX (y, view->create_y0) - MIN (y, view->create_y0);
+        gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h);
+}
+
+/*****************************************************************************/
+/* Object creation handler: button relesase event.                           */
+/*****************************************************************************/
+void
+gl_view_ellipse_create_button_release_event (glView *view,
+                                             gdouble x,
+                                             gdouble y)
+{
+       glColorNode         *fill_color_node;
+       glColorNode         *line_color_node;
+        gdouble              w, h;
+
+        fill_color_node = gl_color_node_new_default ();
+        line_color_node = gl_color_node_new_default ();
+               
+        if ((view->create_x0 == x) && (view->create_y0 == y)) {
+                x = view->create_x0 + 36.0;
+                y = view->create_y0 + 36.0;
+        }
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object),
+                                      MIN (x, view->create_x0), MIN (y, view->create_y0));
+        w = MAX (x, view->create_x0) - MIN (x, view->create_x0);
+        h = MAX (y, view->create_y0) - MIN (y, view->create_y0);
+        gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h);
+        line_color_node->color = gl_view_get_default_line_color(view);
+        gl_label_object_set_line_color (GL_LABEL_OBJECT(view->create_object), line_color_node);
+        fill_color_node->color = gl_view_get_default_fill_color(view);
+        gl_label_object_set_fill_color (GL_LABEL_OBJECT(view->create_object), fill_color_node);
+        gl_color_node_free (&fill_color_node);
+        gl_color_node_free (&line_color_node);
+}
+
diff --git a/src/view-ellipse.h b/src/view-ellipse.h
new file mode 100644 (file)
index 0000000..b6d6aae
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_ellipse.h:  GLabels label ellipse object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __VIEW_ELLIPSE_H__
+#define __VIEW_ELLIPSE_H__
+
+#include "view-object.h"
+#include "label-ellipse.h"
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_VIEW_ELLIPSE            (gl_view_ellipse_get_type ())
+#define GL_VIEW_ELLIPSE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_VIEW_ELLIPSE, glViewEllipse))
+#define GL_VIEW_ELLIPSE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_VIEW_ELLIPSE, glViewEllipseClass))
+#define GL_IS_VIEW_ELLIPSE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_VIEW_ELLIPSE))
+#define GL_IS_VIEW_ELLIPSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_VIEW_ELLIPSE))
+
+typedef struct _glViewEllipse          glViewEllipse;
+typedef struct _glViewEllipseClass     glViewEllipseClass;
+
+typedef struct _glViewEllipsePrivate   glViewEllipsePrivate;
+
+struct _glViewEllipse {
+       glViewObject          parent_object;
+
+       glViewEllipsePrivate *priv;
+};
+
+struct _glViewEllipseClass {
+       glViewObjectClass     parent_class;
+};
+
+
+GType          gl_view_ellipse_get_type (void) G_GNUC_CONST;
+
+glViewObject  *gl_view_ellipse_new      (glLabelEllipse *object,
+                                         glView     *view);
+
+
+/* cursor for creating ellipse objects */
+GdkCursor *gl_view_ellipse_get_create_cursor (void);
+
+/* Object creation handlers. */
+void       gl_view_ellipse_create_button_press_event   (glView *view,
+                                                        gdouble x,
+                                                        gdouble y);
+
+void       gl_view_ellipse_create_motion_event         (glView *view,
+                                                        gdouble x,
+                                                        gdouble y);
+
+void       gl_view_ellipse_create_button_release_event (glView *view,
+                                                        gdouble x,
+                                                        gdouble y);
+
+
+G_END_DECLS
+
+#endif /* __VIEW_ELLIPSE_H__ */
diff --git a/src/view-image.c b/src/view-image.c
new file mode 100644 (file)
index 0000000..b546baf
--- /dev/null
@@ -0,0 +1,421 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_image.c:  GLabels label image object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "view-image.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+
+#include "color.h"
+#include "object-editor.h"
+#include "stock.h"
+
+#include "pixmaps/cursor_image.xbm"
+#include "pixmaps/cursor_image_mask.xbm"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glViewImagePrivate {
+        int place_holder; /* Place holder for future private data. */
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void       gl_view_image_finalize            (GObject          *object);
+
+static GtkWidget *construct_properties_editor       (glViewObject     *view_object);
+
+static void       update_object_from_editor_cb      (glObjectEditor   *editor,
+                                                    glLabelObject    *object);
+
+static void       update_editor_from_object_cb      (glLabelObject    *object,
+                                                    glObjectEditor   *editor);
+
+static void       update_editor_from_move_cb        (glLabelObject    *object,
+                                                    gdouble           dx,
+                                                    gdouble           dy,
+                                                    glObjectEditor   *editor);
+
+static gboolean   object_at                         (glViewObject     *view_object,
+                                                     cairo_t          *cr,
+                                                     gdouble           x,
+                                                     gdouble           y);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glViewImage, gl_view_image, GL_TYPE_VIEW_OBJECT);
+
+
+static void
+gl_view_image_class_init (glViewImageClass *class)
+{
+       GObjectClass      *object_class      = G_OBJECT_CLASS (class);
+       glViewObjectClass *view_object_class = GL_VIEW_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_view_image_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_view_image_finalize;
+
+       view_object_class->construct_editor = construct_properties_editor;
+       view_object_class->object_at        = object_at;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_image_init (glViewImage *view_image)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       view_image->priv = g_new0 (glViewImagePrivate, 1);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_image_finalize (GObject *object)
+{
+        glViewImage *view_image = GL_VIEW_IMAGE (object);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (object && GL_IS_VIEW_IMAGE (object));
+
+        g_free (view_image->priv);
+
+       G_OBJECT_CLASS (gl_view_image_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* NEW image object view.                                                    */
+/*****************************************************************************/
+glViewObject *
+gl_view_image_new (glLabelImage *object,
+                   glView       *view)
+{
+       glViewImage         *view_image;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_IMAGE (object), NULL);
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+       
+       view_image = g_object_new (gl_view_image_get_type(), NULL);
+
+       gl_view_object_set_object (GL_VIEW_OBJECT(view_image),
+                                  GL_LABEL_OBJECT(object),
+                                  GL_VIEW_OBJECT_HANDLES_BOX);
+       gl_view_object_set_view (GL_VIEW_OBJECT(view_image), view);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return GL_VIEW_OBJECT (view_image);
+}
+
+/*****************************************************************************/
+/* Create a properties dialog for a image object.                            */
+/*****************************************************************************/
+static GtkWidget *
+construct_properties_editor (glViewObject *view_object)
+{
+       GtkWidget          *editor;
+       glViewImage        *view_image = (glViewImage *)view_object;
+       glLabelObject      *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       object = gl_view_object_get_object (GL_VIEW_OBJECT(view_image));
+
+       /* Build editor. */
+       editor = gl_object_editor_new (GL_STOCK_IMAGE, _("Image object properties"),
+                                       object->parent,
+                                      GL_OBJECT_EDITOR_POSITION_PAGE,
+                                      GL_OBJECT_EDITOR_SIZE_IMAGE_PAGE,
+                                      GL_OBJECT_EDITOR_IMAGE_PAGE,
+                                      0);
+       
+       /* Update */
+       update_editor_from_object_cb (object, GL_OBJECT_EDITOR(editor));
+       update_editor_from_move_cb (object, 0, 0, GL_OBJECT_EDITOR(editor));
+
+       /* Connect signals. */
+       g_signal_connect (G_OBJECT (editor), "changed",
+                         G_CALLBACK(update_object_from_editor_cb), object);
+       g_signal_connect (G_OBJECT (object), "changed",
+                         G_CALLBACK (update_editor_from_object_cb), editor);
+       g_signal_connect (G_OBJECT (object), "moved",
+                         G_CALLBACK (update_editor_from_move_cb), editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return editor;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  editor "changed" callback.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+update_object_from_editor_cb (glObjectEditor *editor,
+                             glLabelObject  *object)
+{
+       gdouble            x, y, w, h;
+       glTextNode        *filename;
+       const GdkPixbuf   *pixbuf;
+       gdouble            image_w, image_h;
+       gdouble            new_w, new_h;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_object_cb,
+                                        editor);
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_move_cb,
+                                        editor);
+
+
+       gl_object_editor_get_position (editor, &x, &y);
+       gl_label_object_set_position (object, x, y);
+
+       gl_object_editor_get_size (editor, &w, &h);
+       gl_label_object_set_size (object, w, h);
+
+       filename = gl_object_editor_get_image (editor);
+       gl_label_image_set_filename (GL_LABEL_IMAGE(object), filename);
+       gl_text_node_free (&filename);
+
+       /* Setting filename may have modified the size. */
+       gl_label_object_get_size (object, &new_w, &new_h);
+        if ( (new_w != w) || (new_h != h) )
+        {
+                gl_object_editor_set_size (editor, new_w, new_h);
+        }
+
+       /* It may also have a new base size. */
+        pixbuf = gl_label_image_get_pixbuf (GL_LABEL_IMAGE(object), NULL);
+        image_w = gdk_pixbuf_get_width (pixbuf);
+        image_h = gdk_pixbuf_get_height (pixbuf);
+       gl_object_editor_set_base_size (editor, image_w, image_h);
+
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_object_cb,
+                                          editor);
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_move_cb,
+                                          editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "changed" callback.                                 */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_object_cb (glLabelObject  *object,
+                             glObjectEditor *editor)
+{
+       gdouble            w, h;
+       const GdkPixbuf   *pixbuf;
+       gdouble            image_w, image_h;
+       glTextNode        *filename;
+       glMerge           *merge;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_size (object, &w, &h);
+       gl_object_editor_set_size (editor, w, h);
+
+        pixbuf = gl_label_image_get_pixbuf (GL_LABEL_IMAGE(object), NULL);
+        image_w = gdk_pixbuf_get_width (pixbuf);
+        image_h = gdk_pixbuf_get_height (pixbuf);
+       gl_object_editor_set_base_size (editor, image_w, image_h);
+
+       filename = gl_label_image_get_filename (GL_LABEL_IMAGE(object));
+       merge = gl_label_get_merge (GL_LABEL(object->parent));
+       if ( filename != NULL ) {
+               gl_object_editor_set_image (editor, (merge != NULL), filename);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "moved" callback.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_move_cb (glLabelObject    *object,
+                           gdouble           dx,
+                           gdouble           dy,
+                           glObjectEditor   *editor)
+{
+       gdouble            x, y;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_position (object, &x, &y);
+       gl_object_editor_set_position (editor, x, y);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Is object at (x,y)?                                                       */
+/*****************************************************************************/
+static gboolean
+object_at (glViewObject  *view_object,
+           cairo_t       *cr,
+           gdouble        x,
+           gdouble        y)
+{
+       glLabelObject    *object;
+        gdouble           w, h;
+
+        object = gl_view_object_get_object (view_object);
+
+        gl_label_object_get_size (object, &w, &h);
+
+        cairo_rectangle (cr, 0.0, 0.0, w, h);
+
+        if (cairo_in_fill (cr, x, y))
+        {
+                return TRUE;
+        }
+
+        return FALSE;
+}
+
+
+/*****************************************************************************/
+/* Return apropos cursor for create object mode.                             */
+/*****************************************************************************/
+GdkCursor *
+gl_view_image_get_create_cursor (void)
+{
+       GdkCursor       *cursor = NULL;
+       GdkPixmap       *pixmap_data, *pixmap_mask;
+       GdkColor         fg = { 0, 0, 0, 0 };
+       GdkColor         bg = { 0, 65535, 65535, 65535 };
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        pixmap_data = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_image_bits,
+                                                   cursor_image_width,
+                                                   cursor_image_height);
+        pixmap_mask = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_image_mask_bits,
+                                                   cursor_image_mask_width,
+                                                   cursor_image_mask_height);
+        cursor = gdk_cursor_new_from_pixmap (pixmap_data, pixmap_mask, &fg,
+                                             &bg, cursor_image_x_hot,
+                                             cursor_image_y_hot);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return cursor;
+}
+
+/*****************************************************************************/
+/* Object creation handler: button press event.                              */
+/*****************************************************************************/
+void
+gl_view_image_create_button_press_event   (glView *view,
+                                           gdouble x,
+                                           gdouble y)
+{
+       GObject             *object;
+
+        gl_view_unselect_all (view);
+
+        object = gl_label_image_new (view->label);
+        gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+        gl_label_object_set_size (GL_LABEL_OBJECT(object), 0.0, 0.0);
+
+        view->create_object = GL_LABEL_OBJECT (object);
+        view->create_x0 = x;
+        view->create_y0 = y;
+}
+
+/*****************************************************************************/
+/* Object creation handler: motion event.                                    */
+/*****************************************************************************/
+void
+gl_view_image_create_motion_event     (glView *view,
+                                       gdouble x,
+                                       gdouble y)
+{
+        gdouble w, h;
+
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object),
+                                      MIN (x, view->create_x0), MIN (y, view->create_y0));
+        w = MAX (x, view->create_x0) - MIN (x, view->create_x0);
+        h = MAX (y, view->create_y0) - MIN (y, view->create_y0);
+        gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h);
+}
+
+/*****************************************************************************/
+/* Object creation handler: button relesase event.                           */
+/*****************************************************************************/
+void
+gl_view_image_create_button_release_event (glView *view,
+                                           gdouble x,
+                                           gdouble y)
+{
+        gdouble              w, h;
+
+        if ((view->create_x0 == x) && (view->create_y0 == y)) {
+                x = view->create_x0 + 36.0;
+                y = view->create_y0 + 36.0;
+        }
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object),
+                                      MIN (x, view->create_x0), MIN (y, view->create_y0));
+        w = MAX (x, view->create_x0) - MIN (x, view->create_x0);
+        h = MAX (y, view->create_y0) - MIN (y, view->create_y0);
+        gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h);
+}
+
diff --git a/src/view-image.h b/src/view-image.h
new file mode 100644 (file)
index 0000000..7bb3ce1
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_image.h:  GLabels label image object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __VIEW_IMAGE_H__
+#define __VIEW_IMAGE_H__
+
+#include "view-object.h"
+#include "label-image.h"
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_VIEW_IMAGE            (gl_view_image_get_type ())
+#define GL_VIEW_IMAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_VIEW_IMAGE, glViewImage))
+#define GL_VIEW_IMAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_VIEW_IMAGE, glViewImageClass))
+#define GL_IS_VIEW_IMAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_VIEW_IMAGE))
+#define GL_IS_VIEW_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_VIEW_IMAGE))
+
+typedef struct _glViewImage          glViewImage;
+typedef struct _glViewImageClass     glViewImageClass;
+
+typedef struct _glViewImagePrivate   glViewImagePrivate;
+
+struct _glViewImage {
+       glViewObject        parent_object;
+
+       glViewImagePrivate *priv;
+};
+
+struct _glViewImageClass {
+       glViewObjectClass   parent_class;
+};
+
+
+GType          gl_view_image_get_type (void) G_GNUC_CONST;
+
+glViewObject  *gl_view_image_new      (glLabelImage *object,
+                                       glView     *view);
+
+
+/* cursor for creating image objects */
+GdkCursor *gl_view_image_get_create_cursor (void);
+
+/* Object creation handlers. */
+void       gl_view_image_create_button_press_event   (glView *view,
+                                                      gdouble x,
+                                                      gdouble y);
+
+void       gl_view_image_create_motion_event         (glView *view,
+                                                      gdouble x,
+                                                      gdouble y);
+
+void       gl_view_image_create_button_release_event (glView *view,
+                                                      gdouble x,
+                                                      gdouble y);
+
+
+G_END_DECLS
+
+#endif /* __VIEW_IMAGE_H__ */
diff --git a/src/view-line.c b/src/view-line.c
new file mode 100644 (file)
index 0000000..8c39965
--- /dev/null
@@ -0,0 +1,456 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_line.c:  GLabels label line object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "view-line.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+
+#include "color.h"
+#include "object-editor.h"
+#include "stock.h"
+
+#include "pixmaps/cursor_line.xbm"
+#include "pixmaps/cursor_line_mask.xbm"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glViewLinePrivate {
+        int place_holder; /* Place holder for future private data. */
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void       gl_view_line_finalize             (GObject          *object);
+
+static GtkWidget *construct_properties_editor       (glViewObject     *view_object);
+
+static void       update_object_from_editor_cb      (glObjectEditor   *editor,
+                                                    glLabelObject    *object);
+
+static void       update_editor_from_object_cb      (glLabelObject    *object,
+                                                    glObjectEditor   *editor);
+
+static void       update_editor_from_move_cb        (glLabelObject    *object,
+                                                    gdouble           dx,
+                                                    gdouble           dy,
+                                                    glObjectEditor   *editor);
+
+static gboolean   object_at                         (glViewObject     *view_object,
+                                                     cairo_t          *cr,
+                                                     gdouble           x,
+                                                     gdouble           y);
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glViewLine, gl_view_line, GL_TYPE_VIEW_OBJECT);
+
+
+static void
+gl_view_line_class_init (glViewLineClass *class)
+{
+       GObjectClass      *object_class      = G_OBJECT_CLASS (class);
+       glViewObjectClass *view_object_class = GL_VIEW_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_view_line_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_view_line_finalize;
+
+       view_object_class->construct_editor = construct_properties_editor;
+       view_object_class->object_at        = object_at;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_line_init (glViewLine *view_line)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       view_line->priv = g_new0 (glViewLinePrivate, 1);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_line_finalize (GObject *object)
+{
+        glViewLine *view_line = GL_VIEW_LINE (object);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (object && GL_IS_VIEW_LINE (object));
+
+        g_free (view_line->priv);
+
+       G_OBJECT_CLASS (gl_view_line_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* NEW line object view.                                                  */
+/*****************************************************************************/
+glViewObject *
+gl_view_line_new (glLabelLine *object,
+                  glView     *view)
+{
+       glViewLine         *view_line;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_LINE (object), NULL);
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+       
+       view_line = g_object_new (gl_view_line_get_type(), NULL);
+
+       gl_view_object_set_object (GL_VIEW_OBJECT(view_line),
+                                  GL_LABEL_OBJECT(object),
+                                  GL_VIEW_OBJECT_HANDLES_LINE);
+       gl_view_object_set_view (GL_VIEW_OBJECT(view_line), view);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return GL_VIEW_OBJECT (view_line);
+}
+
+/*****************************************************************************/
+/* Create a properties dialog for a line object.                             */
+/*****************************************************************************/
+static GtkWidget *
+construct_properties_editor (glViewObject *view_object)
+{
+       GtkWidget          *editor;
+       glViewLine         *view_line = (glViewLine *)view_object;
+       glLabelObject      *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       object = gl_view_object_get_object (GL_VIEW_OBJECT(view_line));
+
+       /* Build editor. */
+       editor = gl_object_editor_new (GL_STOCK_LINE, _("Line object properties"),
+                                       object->parent,
+                                      GL_OBJECT_EDITOR_SHADOW_PAGE,
+                                      GL_OBJECT_EDITOR_POSITION_PAGE,
+                                      GL_OBJECT_EDITOR_SIZE_LINE_PAGE,
+                                      GL_OBJECT_EDITOR_LINE_PAGE,
+                                      0);
+       
+       /* Update */
+       update_editor_from_object_cb (object, GL_OBJECT_EDITOR(editor));
+       update_editor_from_move_cb (object, 0, 0, GL_OBJECT_EDITOR(editor));
+
+       /* Connect signals. */
+       g_signal_connect (G_OBJECT (editor), "changed",
+                         G_CALLBACK(update_object_from_editor_cb), object);
+       g_signal_connect (G_OBJECT (object), "changed",
+                         G_CALLBACK (update_editor_from_object_cb), editor);
+       g_signal_connect (G_OBJECT (object), "moved",
+                         G_CALLBACK (update_editor_from_move_cb), editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return editor;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  editor "changed" callback.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+update_object_from_editor_cb (glObjectEditor *editor,
+                             glLabelObject  *object)
+{
+       gdouble            x, y, w, h;
+       glColorNode       *line_color_node;
+       gdouble            line_width;
+       gboolean           shadow_state;
+       gdouble            shadow_x, shadow_y;
+       glColorNode       *shadow_color_node;
+       gdouble            shadow_opacity;
+       
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_object_cb,
+                                        editor);
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_move_cb,
+                                        editor);
+
+       gl_object_editor_get_position (editor, &x, &y);
+       gl_label_object_set_position (object, x, y);
+
+       gl_object_editor_get_lsize (editor, &w, &h);
+       gl_label_object_set_size (object, w, h);
+
+       line_color_node = gl_object_editor_get_line_color (editor);
+       gl_label_object_set_line_color (object, line_color_node);
+       gl_color_node_free (&line_color_node);
+
+       line_width = gl_object_editor_get_line_width (editor);
+       gl_label_object_set_line_width (object, line_width);
+
+       shadow_state = gl_object_editor_get_shadow_state (editor);
+       gl_label_object_set_shadow_state (object, shadow_state);
+
+       gl_object_editor_get_shadow_offset (editor, &shadow_x, &shadow_y);
+       gl_label_object_set_shadow_offset (object, shadow_x, shadow_y);
+
+       shadow_color_node = gl_object_editor_get_shadow_color (editor);
+       gl_label_object_set_shadow_color (object, shadow_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       shadow_opacity = gl_object_editor_get_shadow_opacity (editor);
+       gl_label_object_set_shadow_opacity (object, shadow_opacity);
+
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_object_cb,
+                                          editor);
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_move_cb,
+                                          editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "changed" callback.                                 */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_object_cb (glLabelObject  *object,
+                             glObjectEditor *editor)
+{
+       gdouble            w, h;
+       glColorNode       *line_color_node;
+       gdouble            line_width;
+       gboolean           shadow_state;
+       gdouble            shadow_x, shadow_y;
+       glColorNode       *shadow_color_node;
+       gdouble            shadow_opacity;
+       glMerge           *merge;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_size (object, &w, &h);
+       gl_object_editor_set_lsize (editor, w, h);
+       merge = gl_label_get_merge (GL_LABEL(object->parent));
+       
+       line_color_node = gl_label_object_get_line_color (GL_LABEL_OBJECT(object));
+       gl_object_editor_set_line_color (editor, (merge != NULL), line_color_node);
+       gl_color_node_free (&line_color_node);
+
+       line_width = gl_label_object_get_line_width (GL_LABEL_OBJECT(object));
+       gl_object_editor_set_line_width (editor, line_width);
+
+       shadow_state = gl_label_object_get_shadow_state (object);
+       gl_object_editor_set_shadow_state (editor, shadow_state);
+
+       gl_label_object_get_shadow_offset (object, &shadow_x, &shadow_y);
+       gl_object_editor_set_shadow_offset (editor, shadow_x, shadow_y);
+
+       shadow_color_node = gl_label_object_get_shadow_color (object);
+       gl_object_editor_set_shadow_color (editor, (merge != NULL), shadow_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       shadow_opacity = gl_label_object_get_shadow_opacity (object);
+       gl_object_editor_set_shadow_opacity (editor, shadow_opacity);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "moved" callback.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_move_cb (glLabelObject    *object,
+                           gdouble           dx,
+                           gdouble           dy,
+                           glObjectEditor   *editor)
+{
+       gdouble            x, y;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_position (object, &x, &y);
+       gl_object_editor_set_position (editor, x, y);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Is object at (x,y)?                                                       */
+/*****************************************************************************/
+static gboolean
+object_at (glViewObject  *view_object,
+           cairo_t       *cr,
+           gdouble        x,
+           gdouble        y)
+{
+       glLabelObject    *object;
+        gdouble           w, h;
+        gdouble           line_width;
+
+        object = gl_view_object_get_object (view_object);
+
+        gl_label_object_get_size (object, &w, &h);
+
+        cairo_move_to (cr, 0.0, 0.0);
+        cairo_line_to (cr, w, h);
+
+        line_width = gl_label_object_get_line_width (object);
+        cairo_set_line_width (cr, line_width);
+        if (cairo_in_stroke (cr, x, y))
+        {
+                return TRUE;
+        }
+
+        return FALSE;
+}
+
+
+/*****************************************************************************/
+/* Return apropos cursor for create object mode.                             */
+/*****************************************************************************/
+GdkCursor *
+gl_view_line_get_create_cursor (void)
+{
+       GdkCursor       *cursor = NULL;
+       GdkPixmap       *pixmap_data, *pixmap_mask;
+       GdkColor         fg = { 0, 0, 0, 0 };
+       GdkColor         bg = { 0, 65535, 65535, 65535 };
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        pixmap_data = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_line_bits,
+                                                   cursor_line_width,
+                                                   cursor_line_height);
+        pixmap_mask = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_line_mask_bits,
+                                                   cursor_line_mask_width,
+                                                   cursor_line_mask_height);
+        cursor = gdk_cursor_new_from_pixmap (pixmap_data, pixmap_mask, &fg,
+                                             &bg, cursor_line_x_hot,
+                                             cursor_line_y_hot);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return cursor;
+}
+
+/*****************************************************************************/
+/* Object creation handler: button press event.                              */
+/*****************************************************************************/
+void
+gl_view_line_create_button_press_event   (glView *view,
+                                          gdouble x,
+                                          gdouble y)
+{
+       GObject             *object;
+       glColorNode         *line_color_node;
+
+        gl_view_unselect_all (view);
+
+        line_color_node = gl_color_node_new_default ();
+               
+        object = gl_label_line_new (view->label);
+        gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+        gl_label_object_set_size (GL_LABEL_OBJECT(object), 0.0, 0.0);
+        line_color_node->color = gl_color_set_opacity (gl_view_get_default_line_color(view), 0.5);
+        gl_label_object_set_line_width (GL_LABEL_OBJECT(object),
+                                        gl_view_get_default_line_width(view));
+        gl_label_object_set_line_color (GL_LABEL_OBJECT(object),
+                                        line_color_node);
+
+        gl_color_node_free (&line_color_node);
+
+        view->create_object = GL_LABEL_OBJECT (object);
+        view->create_x0 = x;
+        view->create_y0 = y;
+}
+
+/*****************************************************************************/
+/* Object creation handler: motion event.                                    */
+/*****************************************************************************/
+void
+gl_view_line_create_motion_event     (glView *view,
+                                      gdouble x,
+                                      gdouble y)
+{
+        gdouble w, h;
+
+        w = x - view->create_x0;
+        h = y - view->create_y0;
+        gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h);
+}
+
+/*****************************************************************************/
+/* Object creation handler: button relesase event.                           */
+/*****************************************************************************/
+void
+gl_view_line_create_button_release_event (glView *view,
+                                          gdouble x,
+                                          gdouble y)
+{
+       glColorNode         *line_color_node;
+        gdouble              w, h;
+
+        line_color_node = gl_color_node_new_default ();
+               
+        if ((view->create_x0 == x) && (view->create_y0 == y)) {
+                x = view->create_x0 + 36.0;
+                y = view->create_y0 + 36.0;
+        }
+        w = x - view->create_x0;
+        h = y - view->create_y0;
+        gl_label_object_set_size (GL_LABEL_OBJECT(view->create_object), w, h);
+        line_color_node->color = gl_view_get_default_line_color(view);
+        gl_label_object_set_line_color (GL_LABEL_OBJECT(view->create_object), line_color_node);
+        gl_color_node_free (&line_color_node);
+}
+
diff --git a/src/view-line.h b/src/view-line.h
new file mode 100644 (file)
index 0000000..a938a11
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_line.h:  GLabels label line object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __VIEW_LINE_H__
+#define __VIEW_LINE_H__
+
+#include "view-object.h"
+#include "label-line.h"
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_VIEW_LINE            (gl_view_line_get_type ())
+#define GL_VIEW_LINE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_VIEW_LINE, glViewLine))
+#define GL_VIEW_LINE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_VIEW_LINE, glViewLineClass))
+#define GL_IS_VIEW_LINE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_VIEW_LINE))
+#define GL_IS_VIEW_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_VIEW_LINE))
+
+typedef struct _glViewLine          glViewLine;
+typedef struct _glViewLineClass     glViewLineClass;
+
+typedef struct _glViewLinePrivate   glViewLinePrivate;
+
+struct _glViewLine {
+       glViewObject       parent_object;
+
+       glViewLinePrivate *priv;
+};
+
+struct _glViewLineClass {
+       glViewObjectClass  parent_class;
+};
+
+
+GType          gl_view_line_get_type (void) G_GNUC_CONST;
+
+glViewObject  *gl_view_line_new      (glLabelLine *object,
+                                      glView     *view);
+
+
+/* cursor for creating line objects */
+GdkCursor *gl_view_line_get_create_cursor (void);
+
+/* Object creation handlers. */
+void       gl_view_line_create_button_press_event   (glView *view,
+                                                     gdouble x,
+                                                     gdouble y);
+
+void       gl_view_line_create_motion_event         (glView *view,
+                                                     gdouble x,
+                                                     gdouble y);
+
+void       gl_view_line_create_button_release_event (glView *view,
+                                                     gdouble x,
+                                                     gdouble y);
+
+
+G_END_DECLS
+
+#endif /* __VIEW_LINE_H__ */
diff --git a/src/view-object.c b/src/view-object.c
new file mode 100644 (file)
index 0000000..394735a
--- /dev/null
@@ -0,0 +1,765 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_object.c:  GLabels label object base class
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+
+#include "view-object.h"
+
+#include <glib.h>
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private constants and macros.                          */
+/*========================================================*/
+
+#define HANDLE_FILL_RGBA_ARGS      0.0,   0.75,  0.0,   0.4
+#define HANDLE_OUTLINE_RGBA_ARGS   0.0,   0.0,   0.0,   0.8
+
+#define HANDLE_OUTLINE_WIDTH_PIXELS   1.0
+#define HANDLE_PIXELS 7
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glViewObjectPrivate {
+
+       glLabelObject              *object;
+
+       glView                     *view;
+        glViewObjectHandlesStyle    handles_style;
+
+       GtkWidget                  *property_editor;
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void     gl_view_object_finalize      (GObject             *object);
+
+static void     object_removed_cb            (glViewObject        *view_object,
+                                              glLabelObject       *object);
+
+static void     object_top_cb                (glViewObject        *view_object,
+                                              glLabelObject       *object);
+
+static void     object_bottom_cb             (glViewObject        *view_object,
+                                              glLabelObject       *object);
+
+
+
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glViewObject, gl_view_object, G_TYPE_OBJECT);
+
+static void
+gl_view_object_class_init (glViewObjectClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_view_object_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_view_object_finalize;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_object_init (glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       view_object->priv = g_new0 (glViewObjectPrivate, 1);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_object_finalize (GObject *object)
+{
+       glViewObject  *view_object = GL_VIEW_OBJECT (object);
+       glView        *view;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (object && GL_IS_VIEW_OBJECT (object));
+
+       view = view_object->priv->view;
+       view->object_list = g_list_remove (view->object_list, object);
+       view->selected_object_list =
+               g_list_remove (view->selected_object_list, object);
+
+       g_object_unref (view_object->priv->object);
+       if (view_object->priv->property_editor) {
+                gl_debug (DEBUG_VIEW, "Destroy editor");
+               g_object_unref (G_OBJECT(view_object->priv->property_editor));
+       }
+       g_free (view_object->priv);
+
+       G_OBJECT_CLASS (gl_view_object_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* NEW object view.                                                          */
+/*****************************************************************************/
+GObject *
+gl_view_object_new (void)
+{
+       glViewObject *view_object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       view_object = g_object_new (gl_view_object_get_type(), NULL);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return G_OBJECT (view_object);
+}
+
+/*****************************************************************************/
+/* Set parent view to which this object view belongs.                        */
+/*****************************************************************************/
+void
+gl_view_object_set_view       (glViewObject *view_object,
+                              glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object));
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       
+       view_object->priv->view = view;
+
+       view->object_list = g_list_append (view->object_list, view_object);
+
+       g_signal_connect_swapped (G_OBJECT (view_object->priv->object), "changed",
+                                 G_CALLBACK (gl_view_update), view);
+       g_signal_connect_swapped (G_OBJECT (view_object->priv->object), "moved",
+                                 G_CALLBACK (gl_view_update), view);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Set Label object to follow.                                               */
+/*****************************************************************************/
+void
+gl_view_object_set_object     (glViewObject            *view_object,
+                              glLabelObject           *object,
+                              glViewObjectHandlesStyle style)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object));
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+       
+       view_object->priv->object = g_object_ref (G_OBJECT (object));
+       view_object->priv->handles_style = style;
+
+       g_signal_connect_swapped (G_OBJECT (object), "removed",
+                                 G_CALLBACK (object_removed_cb), view_object);
+       g_signal_connect_swapped (G_OBJECT (object), "top",
+                                 G_CALLBACK (object_top_cb), view_object);
+       g_signal_connect_swapped (G_OBJECT (object), "bottom",
+                                 G_CALLBACK (object_bottom_cb), view_object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Handle object "removed" signal.                                 */
+/*---------------------------------------------------------------------------*/
+static void
+object_removed_cb (glViewObject  *view_object,
+                   glLabelObject *object)
+{
+        glView *view;
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object));
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        view = gl_view_object_get_view (view_object);
+        view->object_list = g_list_remove (view->object_list, view_object);
+        g_object_unref (G_OBJECT (view_object));
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. Handle object "top" signal.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+object_top_cb (glViewObject  *view_object,
+               glLabelObject *object)
+{
+        glView *view;
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object));
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        view = gl_view_object_get_view (view_object);
+
+       /* Move to end of list, representing front most object */
+        view->object_list = g_list_remove (view->object_list, view_object);
+        view->object_list = g_list_append (view->object_list, view_object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. Handle object "removed" signal.                                  */
+/*---------------------------------------------------------------------------*/
+static void
+object_bottom_cb (glViewObject  *view_object,
+                  glLabelObject *object)
+{
+        glView *view;
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object));
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        view = gl_view_object_get_view (view_object);
+
+       /* Move to front of list, representing rear most object */
+        view->object_list = g_list_remove (view->object_list, view_object);
+        view->object_list = g_list_prepend (view->object_list, view_object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Return parent view associated with this view.                             */
+/*****************************************************************************/
+glView *
+gl_view_object_get_view   (glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object), NULL);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view_object->priv->view;
+}
+
+/*****************************************************************************/
+/* Return label object that we are following.                                */
+/*****************************************************************************/
+glLabelObject *
+gl_view_object_get_object (glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object), NULL);
+       
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view_object->priv->object;
+}
+
+/*****************************************************************************/
+/* Get property editor.                                                      */
+/*****************************************************************************/
+GtkWidget *
+gl_view_object_get_editor (glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object), NULL);
+
+       if ( GL_VIEW_OBJECT_GET_CLASS(view_object)->construct_editor != NULL ) {
+
+               if (view_object->priv->property_editor == NULL) {
+                       view_object->priv->property_editor =
+                               GL_VIEW_OBJECT_GET_CLASS(view_object)->construct_editor (view_object);
+               }
+               g_signal_connect (G_OBJECT (view_object->priv->property_editor),
+                                 "destroy",
+                                 G_CALLBACK (gtk_widget_destroyed),
+                                 &view_object->priv->property_editor);
+       
+               gtk_widget_show (view_object->priv->property_editor);
+
+       }
+
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view_object->priv->property_editor;
+}
+
+
+/*****************************************************************************/
+/* Select object.                                                            */
+/*****************************************************************************/
+void
+gl_view_object_select (glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_view_select_object(view_object->priv->view, view_object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Is object at (x,y)?                                                       */
+/*****************************************************************************/
+gboolean
+gl_view_object_at (glViewObject  *view_object,
+                   cairo_t       *cr,
+                   gdouble        x,
+                   gdouble        y)
+{
+        glLabelObject *object = view_object->priv->object;
+        gdouble        x0, y0;
+        cairo_matrix_t matrix;
+        gboolean       return_val = FALSE;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object), FALSE);
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), FALSE);
+
+        gl_label_object_get_position (object, &x0, &y0);
+        gl_label_object_get_matrix (object, &matrix);
+
+        cairo_save (cr);
+        cairo_translate (cr, x0, y0);
+        cairo_transform (cr, &matrix);
+
+        cairo_device_to_user (cr, &x, &y);
+
+        if ( GL_VIEW_OBJECT_GET_CLASS(view_object)->object_at != NULL ) {
+
+                return_val = GL_VIEW_OBJECT_GET_CLASS(view_object)->object_at (view_object, cr, x, y);
+
+        }
+
+        cairo_restore (cr);
+
+        return return_val;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* Create handle path                                                       */
+/*--------------------------------------------------------------------------*/
+static void
+create_handle_path (cairo_t                *cr,
+                    glLabelObject          *object,
+                    gdouble                 scale,
+                    gdouble                 x_handle,
+                    gdouble                 y_handle)
+{
+        gl_debug (DEBUG_VIEW, "START");
+
+        cairo_rectangle (cr,
+                         x_handle - HANDLE_PIXELS/scale/2, y_handle - HANDLE_PIXELS/scale/2,
+                         HANDLE_PIXELS/scale, HANDLE_PIXELS/scale);
+
+        gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Draw object handles                                                       */
+/*****************************************************************************/
+void
+gl_view_object_draw_handles (glViewObject *view_object,
+                             cairo_t      *cr)
+{
+        glLabelObject *object = view_object->priv->object;
+        gdouble        x0, y0;
+        cairo_matrix_t matrix;
+        gdouble        scale;
+        gdouble        w, h;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object));
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        scale = view_object->priv->view->home_scale * view_object->priv->view->zoom;
+
+        gl_label_object_get_position (object, &x0, &y0);
+        gl_label_object_get_matrix (object, &matrix);
+
+        gl_label_object_get_size (GL_LABEL_OBJECT(object), &w, &h);
+
+        cairo_save (cr);
+
+        cairo_translate (cr, x0, y0);
+        cairo_transform (cr, &matrix);
+
+        switch (view_object->priv->handles_style)
+        {
+        case GL_VIEW_OBJECT_HANDLES_BOX:
+
+                /* North */
+                cairo_new_path (cr);
+                create_handle_path (cr, object, scale, w/2, 0);
+
+                /* North East */
+                cairo_new_sub_path (cr);
+                create_handle_path (cr, object, scale, w, 0);
+
+                /* East */
+                cairo_new_sub_path (cr);
+                create_handle_path (cr, object, scale, w, h/2);
+
+                /* South East */
+                cairo_new_sub_path (cr);
+                create_handle_path (cr, object, scale, w, h);
+
+                /* South */
+                cairo_new_sub_path (cr);
+                create_handle_path (cr, object, scale, w/2, h);
+
+                /* South West */
+                cairo_new_sub_path (cr);
+                create_handle_path (cr, object, scale, 0, h);
+
+                /* West */
+                cairo_new_sub_path (cr);
+                create_handle_path (cr, object, scale, 0, h/2);
+
+                /* North West */
+                cairo_new_sub_path (cr);
+                create_handle_path (cr, object, scale, 0, 0);
+
+                break;
+
+        case GL_VIEW_OBJECT_HANDLES_LINE:
+                /* P1 */
+                cairo_new_path (cr);
+                create_handle_path (cr, object, scale, 0, 0);
+
+                /* P2 */
+                cairo_new_sub_path (cr);
+                create_handle_path (cr, object, scale, w, h);
+
+                break;
+        }
+
+        cairo_set_source_rgba (cr, HANDLE_FILL_RGBA_ARGS);
+        cairo_fill_preserve (cr);
+                               
+        cairo_set_line_width (cr, HANDLE_OUTLINE_WIDTH_PIXELS/scale);
+        cairo_set_source_rgba (cr, HANDLE_OUTLINE_RGBA_ARGS);
+        cairo_stroke (cr);
+
+        cairo_restore (cr);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Is there an object handle at (x,y).                                       */
+/*****************************************************************************/
+glViewObjectHandle
+gl_view_object_handle_at (glViewObject *view_object,
+                          cairo_t      *cr,
+                          gdouble       x,
+                          gdouble       y)
+{
+        glLabelObject *object = view_object->priv->object;
+        gdouble        x0, y0;
+        cairo_matrix_t matrix;
+        gdouble        scale;
+        gdouble        w, h;
+        glViewObjectHandle handle = GL_VIEW_OBJECT_HANDLE_NONE;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view_object && GL_IS_VIEW_OBJECT (view_object), handle);
+       g_return_val_if_fail (object && GL_IS_LABEL_OBJECT (object), handle);
+
+        scale = view_object->priv->view->home_scale * view_object->priv->view->zoom;
+
+        gl_label_object_get_position (object, &x0, &y0);
+        gl_label_object_get_matrix (object, &matrix);
+
+        gl_label_object_get_size (GL_LABEL_OBJECT(object), &w, &h);
+
+        cairo_save (cr);
+
+        cairo_translate (cr, x0, y0);
+        cairo_transform (cr, &matrix);
+
+        cairo_device_to_user (cr, &x, &y);
+
+        switch (view_object->priv->handles_style)
+        {
+        case GL_VIEW_OBJECT_HANDLES_BOX:
+
+                /* South East */
+                create_handle_path (cr, object, scale, w, h);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_SE; break;}
+
+                /* South West */
+                create_handle_path (cr, object, scale, 0, h);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_SW; break;}
+
+                /* North East */
+                create_handle_path (cr, object, scale, w, 0);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_NE; break;}
+
+                /* North West */
+                create_handle_path (cr, object, scale, 0, 0);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_NW; break;}
+
+                /* East */
+                create_handle_path (cr, object, scale, w, h/2);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_E; break;}
+
+                /* South */
+                create_handle_path (cr, object, scale, w/2, h);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_S; break;}
+
+                /* West */
+                create_handle_path (cr, object, scale, 0, h/2);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_W; break;}
+
+                /* North */
+                create_handle_path (cr, object, scale, w/2, 0);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_N; break;}
+
+                break;
+
+        case GL_VIEW_OBJECT_HANDLES_LINE:
+                /* P2 */
+                create_handle_path (cr, object, scale, w, h);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_P2; break;}
+
+                /* P1 */
+                create_handle_path (cr, object, scale, 0, 0);
+                if (cairo_in_fill (cr, x, y))   {handle = GL_VIEW_OBJECT_HANDLE_P1; break;}
+
+                break;
+
+        }
+
+        cairo_restore (cr);
+
+        return handle;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Resize object.                                                  */
+/*---------------------------------------------------------------------------*/
+void
+gl_view_object_resize_event (glViewObject       *view_object,
+                             glViewObjectHandle  handle,
+                             gboolean            honor_aspect,
+                             cairo_t            *cr,
+                             gdouble             x,
+                             gdouble             y)
+{
+        glLabelObject *object;
+        cairo_matrix_t matrix;
+        gdouble        x0, y0, x1, y1, x2, y2;
+        gdouble        w, h;
+        gdouble        dx=0, dy=0;
+
+       gl_debug (DEBUG_VIEW, "x,y world = %g, %g", x, y);
+
+        object = view_object->priv->object;
+
+        /*
+         * Change to item relative coordinates
+         */
+        cairo_save (cr);
+        gl_label_object_get_position (object, &x0, &y0);
+        cairo_translate (cr, x0, y0);
+        gl_label_object_get_matrix (object, &matrix);
+        cairo_transform (cr, &matrix);
+
+        /*
+         * Initialize origin and 2 corners in object relative coordinates.
+         */
+        x0 = 0.0;
+        y0 = 0.0;
+
+        x1 = 0.0;
+        y1 = 0.0;
+
+        gl_label_object_get_size (object, &x2, &y2);
+
+       gl_debug (DEBUG_VIEW, "x0,y0 object = %g, %g", x0, y0);
+       gl_debug (DEBUG_VIEW, "x1,y1 object = %g, %g", x1, y1);
+       gl_debug (DEBUG_VIEW, "x2,y2 object = %g, %g", x2, y2);
+
+        /*
+         * Translate x,y into object relative coordinates.
+         */
+        cairo_device_to_user (cr, &x, &y);
+
+       gl_debug (DEBUG_VIEW, "x,y object = %g, %g", x, y);
+        
+        /*
+         * Get new size
+         */
+        switch (handle)
+        {
+
+        case GL_VIEW_OBJECT_HANDLE_NW:
+                w = MAX (x2 - x, 0);
+                h = MAX (y2 - y, 0);
+                break;
+
+        case GL_VIEW_OBJECT_HANDLE_N:
+                w = x2 - x1;
+                h = MAX (y2 - y, 0);
+                break;
+
+        case GL_VIEW_OBJECT_HANDLE_NE:
+                w = MAX (x - x1, 0);
+                h = MAX (y2 - y, 0);
+                break;
+
+        case GL_VIEW_OBJECT_HANDLE_E:
+                w = MAX (x - x1, 0);
+                h = y2 - y1;
+                break;
+
+        case GL_VIEW_OBJECT_HANDLE_SE:
+                w = MAX (x - x1, 0);
+                h = MAX (y - y1, 0);
+                break;
+
+        case GL_VIEW_OBJECT_HANDLE_S:
+                w = x2 - x1;
+                h = MAX (y - y1, 0);
+                break;
+
+        case GL_VIEW_OBJECT_HANDLE_SW:
+                w = MAX (x2 - x, 0);
+                h = MAX (y - y1, 0);
+                break;
+
+        case GL_VIEW_OBJECT_HANDLE_W:
+                w = MAX (x2 - x, 0);
+                h = y2 - y1;
+                break;
+        case GL_VIEW_OBJECT_HANDLE_P1:
+                x1 = x;
+                y1 = y;
+                dx = (x2 - x);
+                dy = (y2 - y);
+                x0 = x0 + x1;
+                y0 = y0 + y1;
+                break;
+
+        case GL_VIEW_OBJECT_HANDLE_P2:
+                dx = x - x1;
+                dy = y - y1;
+                x0 = x0 + x1;
+                y0 = y0 + y1;
+                break;
+
+        default:
+                g_print ("Invalid handle.\n");  /* Should not happen! */
+
+        }
+        if ( (handle != GL_VIEW_OBJECT_HANDLE_P1) && (handle != GL_VIEW_OBJECT_HANDLE_P2) )
+        {
+                if ( honor_aspect )
+                {
+                        gl_label_object_set_size_honor_aspect (object, w, h);
+                }
+                else
+                {
+                        gl_label_object_set_size (object, w, h);
+                }
+
+                /*
+                 * Query the new size in case it was constrained.
+                 */
+                gl_label_object_get_size (object, &w, &h);
+
+                /*
+                 * Get new position
+                 */
+                switch (handle)
+                {
+
+                case GL_VIEW_OBJECT_HANDLE_NW:
+                        x0 += x2 - w;
+                        y0 += y2 - h;
+                        break;
+
+                case GL_VIEW_OBJECT_HANDLE_N:
+                case GL_VIEW_OBJECT_HANDLE_NE:
+                        /* x unchanged */
+                        y0 += y2 - h;
+                        break;
+
+                case GL_VIEW_OBJECT_HANDLE_E:
+                case GL_VIEW_OBJECT_HANDLE_SE:
+                case GL_VIEW_OBJECT_HANDLE_S:
+                        /* unchanged */
+                        break;
+
+                case GL_VIEW_OBJECT_HANDLE_SW:
+                case GL_VIEW_OBJECT_HANDLE_W:
+                        x0 += x2 - w;
+                        /* y unchanged */
+                        break;
+
+                default:
+                        g_print ("Invalid handle.\n");  /* Should not happen! */
+                }
+        }
+        else
+        {
+                gl_label_object_set_size (object, dx, dy);
+        }
+
+        /*
+         * Put new origin back into world coordinates and set.
+         */
+        cairo_user_to_device (cr, &x0, &y0);
+        cairo_restore (cr);
+        cairo_device_to_user (cr, &x0, &y0);
+        gl_label_object_set_position (object, x0, y0);
+}
diff --git a/src/view-object.h b/src/view-object.h
new file mode 100644 (file)
index 0000000..2ae9f84
--- /dev/null
@@ -0,0 +1,137 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_object.h:  GLabels canvas item wrapper widget
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __VIEW_OBJECT_H__
+#define __VIEW_OBJECT_H__
+
+#include <glib-object.h>
+#include "label-object.h"
+
+typedef enum {
+       GL_VIEW_OBJECT_HANDLES_BOX,
+       GL_VIEW_OBJECT_HANDLES_LINE,
+} glViewObjectHandlesStyle;
+
+typedef enum {
+        GL_VIEW_OBJECT_HANDLE_NONE = 0,
+       GL_VIEW_OBJECT_HANDLE_N,
+       GL_VIEW_OBJECT_HANDLE_E,
+       GL_VIEW_OBJECT_HANDLE_W,
+       GL_VIEW_OBJECT_HANDLE_S,
+       GL_VIEW_OBJECT_HANDLE_NW,
+       GL_VIEW_OBJECT_HANDLE_NE,
+       GL_VIEW_OBJECT_HANDLE_SE,
+       GL_VIEW_OBJECT_HANDLE_SW,
+       GL_VIEW_OBJECT_HANDLE_P1,
+       GL_VIEW_OBJECT_HANDLE_P2,
+} glViewObjectHandle;
+
+
+#define GL_TYPE_VIEW_OBJECT              (gl_view_object_get_type ())
+#define GL_VIEW_OBJECT(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_VIEW_OBJECT, glViewObject))
+#define GL_VIEW_OBJECT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_VIEW_OBJECT, glViewObjectClass))
+#define GL_IS_VIEW_OBJECT(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_VIEW_OBJECT))
+#define GL_IS_VIEW_OBJECT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_VIEW_OBJECT))
+#define GL_VIEW_OBJECT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GL_TYPE_VIEW_OBJECT, glViewObjectClass))
+
+typedef struct _glViewObject          glViewObject;
+typedef struct _glViewObjectClass     glViewObjectClass;
+
+typedef struct _glViewObjectPrivate   glViewObjectPrivate;
+
+
+#include "view.h"
+
+#include "cairo.h"
+
+struct _glViewObject {
+       GObject               parent_object;
+
+       glViewObjectPrivate  *priv;
+};
+
+struct _glViewObjectClass {
+       GObjectClass          parent_class;
+
+       /*
+        * Methods
+        */
+
+       GtkWidget * (*construct_editor) (glViewObject *view_object);
+
+        gboolean    (*object_at)        (glViewObject *view_object,
+                                         cairo_t      *cr,
+                                         gdouble       x_device,
+                                         gdouble       y_device);
+};
+
+
+
+
+G_BEGIN_DECLS
+
+GType              gl_view_object_get_type          (void) G_GNUC_CONST;
+
+GObject           *gl_view_object_new               (void);
+
+
+void               gl_view_object_set_view          (glViewObject             *view_object,
+                                                     glView                   *view);
+
+void               gl_view_object_set_object        (glViewObject             *view_object,
+                                                     glLabelObject            *object,
+                                                     glViewObjectHandlesStyle  style);
+
+gboolean           gl_view_object_at                (glViewObject             *view_object,
+                                                     cairo_t                  *cr,
+                                                     gdouble                   x,
+                                                     gdouble                   y);
+
+void               gl_view_object_draw_handles      (glViewObject             *view_object,
+                                                     cairo_t                  *cr);
+
+glViewObjectHandle gl_view_object_handle_at         (glViewObject             *view_object,
+                                                     cairo_t                  *cr,
+                                                     gdouble                   x,
+                                                     gdouble                   y);
+
+glView            *gl_view_object_get_view          (glViewObject             *view_object);
+
+glLabelObject     *gl_view_object_get_object        (glViewObject             *view_object);
+
+GtkWidget         *gl_view_object_get_editor        (glViewObject             *view_object);
+
+void               gl_view_object_select            (glViewObject             *view_object);
+
+void               gl_view_object_resize_event      (glViewObject             *view_object,
+                                                     glViewObjectHandle        handle,
+                                                     gboolean                  honor_aspect,
+                                                     cairo_t                  *cr,
+                                                     gdouble                   x,
+                                                     gdouble                   y);
+
+
+G_END_DECLS
+
+#endif /* __VIEW_OBJECT_H__ */
diff --git a/src/view-text.c b/src/view-text.c
new file mode 100644 (file)
index 0000000..527c307
--- /dev/null
@@ -0,0 +1,531 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_text.c:  GLabels label text object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#include <config.h>
+
+#include "view-text.h"
+
+#include <glib/gi18n.h>
+#include <glib/gmem.h>
+
+#include "color.h"
+#include "object-editor.h"
+#include "stock.h"
+
+#include "pixmaps/cursor_text.xbm"
+#include "pixmaps/cursor_text_mask.xbm"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+struct _glViewTextPrivate {
+        int place_holder; /* Place holder for future private data. */
+};
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static void       gl_view_text_finalize             (GObject          *object);
+
+static GtkWidget *construct_properties_editor       (glViewObject     *view_object);
+
+static void       update_object_from_editor_cb      (glObjectEditor   *editor,
+                                                    glLabelObject    *object);
+
+static void       update_object_from_editor_size_cb (glObjectEditor   *editor,
+                                                     glLabelObject    *object);
+
+static void       update_editor_from_object_cb      (glLabelObject    *object,
+                                                    glObjectEditor   *editor);
+
+static void       update_editor_from_move_cb        (glLabelObject    *object,
+                                                    gdouble           dx,
+                                                    gdouble           dy,
+                                                    glObjectEditor   *editor);
+
+static gboolean   object_at                         (glViewObject     *view_object,
+                                                     cairo_t          *cr,
+                                                     gdouble           x,
+                                                     gdouble           y);
+
+
+
+\f
+/*****************************************************************************/
+/* Boilerplate object stuff.                                                 */
+/*****************************************************************************/
+G_DEFINE_TYPE (glViewText, gl_view_text, GL_TYPE_VIEW_OBJECT);
+
+
+static void
+gl_view_text_class_init (glViewTextClass *class)
+{
+       GObjectClass      *object_class      = G_OBJECT_CLASS (class);
+       glViewObjectClass *view_object_class = GL_VIEW_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_view_text_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_view_text_finalize;
+
+       view_object_class->construct_editor = construct_properties_editor;
+       view_object_class->object_at        = object_at;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_text_init (glViewText *view_text)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       view_text->priv = g_new0 (glViewTextPrivate, 1);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_text_finalize (GObject *object)
+{
+        glViewText *view_text = GL_VIEW_TEXT (object);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (object && GL_IS_VIEW_TEXT (object));
+
+        g_free (view_text->priv);
+
+       G_OBJECT_CLASS (gl_view_text_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* NEW text object view.                                                     */
+/*****************************************************************************/
+glViewObject *
+gl_view_text_new (glLabelText *object,
+                  glView      *view)
+{
+       glViewText         *view_text;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (object && GL_IS_LABEL_TEXT (object), NULL);
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+       
+       view_text = g_object_new (gl_view_text_get_type(), NULL);
+
+       gl_view_object_set_object (GL_VIEW_OBJECT(view_text),
+                                  GL_LABEL_OBJECT(object),
+                                  GL_VIEW_OBJECT_HANDLES_BOX);
+       gl_view_object_set_view (GL_VIEW_OBJECT(view_text), view);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return GL_VIEW_OBJECT (view_text);
+}
+
+/*****************************************************************************/
+/* Create a properties dialog for a text object.                             */
+/*****************************************************************************/
+static GtkWidget *
+construct_properties_editor (glViewObject *view_object)
+{
+       GtkWidget          *editor;
+       glViewText          *view_text = (glViewText *)view_object;
+       glLabelObject      *object;
+       GtkTextBuffer      *buffer;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       object = gl_view_object_get_object (GL_VIEW_OBJECT(view_text));
+
+       /* Build editor. */
+       editor = gl_object_editor_new (GL_STOCK_TEXT, _("Text object properties"),
+                                       object->parent,
+                                      GL_OBJECT_EDITOR_SHADOW_PAGE,
+                                      GL_OBJECT_EDITOR_POSITION_PAGE,
+                                      GL_OBJECT_EDITOR_SIZE_PAGE,
+                                      GL_OBJECT_EDITOR_TEXT_PAGE,
+                                      GL_OBJECT_EDITOR_EDIT_PAGE,
+                                      0);
+
+       buffer = gl_label_text_get_buffer (GL_LABEL_TEXT(object));
+       gl_object_editor_set_text_buffer (GL_OBJECT_EDITOR(editor), buffer);
+       
+       /* Update */
+       update_editor_from_object_cb (object, GL_OBJECT_EDITOR(editor));
+       update_editor_from_move_cb (object, 0, 0, GL_OBJECT_EDITOR(editor));
+
+       /* Connect signals. */
+       g_signal_connect (G_OBJECT (editor), "changed",
+                         G_CALLBACK(update_object_from_editor_cb), object);
+       g_signal_connect (G_OBJECT (editor), "size_changed",
+                         G_CALLBACK(update_object_from_editor_size_cb), object);
+       g_signal_connect (G_OBJECT (object), "changed",
+                         G_CALLBACK (update_editor_from_object_cb), editor);
+       g_signal_connect (G_OBJECT (object), "moved",
+                         G_CALLBACK (update_editor_from_move_cb), editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return editor;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  editor "changed" callback.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+update_object_from_editor_cb (glObjectEditor *editor,
+                             glLabelObject  *object)
+{
+       gdouble            x, y;
+       gchar             *font_family;
+       gdouble            font_size;
+       PangoWeight        font_weight;
+       gboolean           font_italic_flag;
+       glColorNode       *color_node;
+       PangoAlignment     align;
+       gdouble            text_line_spacing;
+       gboolean           auto_shrink;
+       gboolean           shadow_state;
+       gdouble            shadow_x, shadow_y;
+       glColorNode       *shadow_color_node;
+       gdouble            shadow_opacity;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_object_cb,
+                                        editor);
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_move_cb,
+                                        editor);
+
+       gl_object_editor_get_position (editor, &x, &y);
+       font_family = gl_object_editor_get_font_family (editor);
+       font_size = gl_object_editor_get_font_size (editor);
+       font_weight = gl_object_editor_get_font_weight (editor);
+       font_italic_flag = gl_object_editor_get_font_italic_flag (editor);
+       color_node = gl_object_editor_get_text_color (editor);
+       align = gl_object_editor_get_text_alignment (editor);
+       text_line_spacing = gl_object_editor_get_text_line_spacing (editor);
+       auto_shrink = gl_object_editor_get_text_auto_shrink (editor);
+
+       gl_label_object_set_position (object, x, y);
+       gl_label_object_set_font_family (object, font_family);
+       gl_label_object_set_font_size (object, font_size);
+       gl_label_object_set_font_weight (object, font_weight);
+       gl_label_object_set_font_italic_flag (object, font_italic_flag);
+       gl_label_object_set_text_color (object, color_node);
+       gl_label_object_set_text_alignment (object, align);
+       gl_label_object_set_text_line_spacing (object, text_line_spacing);
+       gl_label_text_set_auto_shrink (GL_LABEL_TEXT (object), auto_shrink);
+
+       gl_color_node_free (&color_node);
+       g_free (font_family);
+
+       shadow_state = gl_object_editor_get_shadow_state (editor);
+       gl_label_object_set_shadow_state (object, shadow_state);
+
+       gl_object_editor_get_shadow_offset (editor, &shadow_x, &shadow_y);
+       gl_label_object_set_shadow_offset (object, shadow_x, shadow_y);
+
+       shadow_color_node = gl_object_editor_get_shadow_color (editor);
+       gl_label_object_set_shadow_color (object, shadow_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       shadow_opacity = gl_object_editor_get_shadow_opacity (editor);
+       gl_label_object_set_shadow_opacity (object, shadow_opacity);
+
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_object_cb,
+                                          editor);
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_move_cb,
+                                          editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  editor "changed" callback.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+update_object_from_editor_size_cb (glObjectEditor *editor,
+                                  glLabelObject  *object)
+{
+       gdouble            w, h;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_object_cb,
+                                        editor);
+       g_signal_handlers_block_by_func (G_OBJECT(object),
+                                        update_editor_from_move_cb,
+                                        editor);
+
+       gl_object_editor_get_size (editor, &w, &h);
+
+       gl_label_object_set_size (object, w, h);
+
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_object_cb,
+                                          editor);
+       g_signal_handlers_unblock_by_func (G_OBJECT(object),
+                                          update_editor_from_move_cb,
+                                          editor);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "changed" callback.                                 */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_object_cb (glLabelObject  *object,
+                             glObjectEditor *editor)
+{
+       gdouble            w, h;
+       gchar             *font_family;
+       gdouble            font_size;
+       PangoWeight        font_weight;
+       gboolean           font_italic_flag;
+       glColorNode       *color_node;
+       PangoAlignment     align;
+       gdouble            text_line_spacing;
+       gboolean           auto_shrink;
+       gboolean           shadow_state;
+       gdouble            shadow_x, shadow_y;
+       glColorNode       *shadow_color_node;
+       gdouble            shadow_opacity;
+       glMerge           *merge;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_size (object, &w, &h);
+       gl_object_editor_set_size (editor, w, h);
+       merge = gl_label_get_merge (GL_LABEL(object->parent));
+
+       font_family      = gl_label_object_get_font_family (object);
+       font_size        = gl_label_object_get_font_size (object);
+       font_weight      = gl_label_object_get_font_weight (object);
+       font_italic_flag = gl_label_object_get_font_italic_flag (object);
+       color_node       = gl_label_object_get_text_color (object);
+       align             = gl_label_object_get_text_alignment (object);
+       text_line_spacing = gl_label_object_get_text_line_spacing (object);
+       auto_shrink      = gl_label_text_get_auto_shrink (GL_LABEL_TEXT (object));
+
+       gl_object_editor_set_font_family (editor, font_family);
+       gl_object_editor_set_font_size (editor, font_size);
+       gl_object_editor_set_font_weight (editor, font_weight);
+       gl_object_editor_set_font_italic_flag (editor, font_italic_flag);
+       gl_object_editor_set_text_color (editor, (merge != NULL), color_node);
+       gl_object_editor_set_text_alignment (editor, align);
+       gl_object_editor_set_text_line_spacing (editor, text_line_spacing);
+       gl_object_editor_set_text_auto_shrink (editor, auto_shrink);
+
+       gl_color_node_free (&color_node);
+       g_free (font_family);
+
+       shadow_state = gl_label_object_get_shadow_state (object);
+       gl_object_editor_set_shadow_state (editor, shadow_state);
+
+       gl_label_object_get_shadow_offset (object, &shadow_x, &shadow_y);
+       gl_object_editor_set_shadow_offset (editor, shadow_x, shadow_y);
+
+       shadow_color_node = gl_label_object_get_shadow_color (object);
+       gl_object_editor_set_shadow_color (editor, (merge != NULL), shadow_color_node);
+       gl_color_node_free (&shadow_color_node);
+
+       shadow_opacity = gl_label_object_get_shadow_opacity (object);
+       gl_object_editor_set_shadow_opacity (editor, shadow_opacity);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. label object "moved" callback.                                   */
+/*---------------------------------------------------------------------------*/
+static void
+update_editor_from_move_cb (glLabelObject    *object,
+                           gdouble           dx,
+                           gdouble           dy,
+                           glObjectEditor   *editor)
+{
+       gdouble            x, y;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_label_object_get_position (object, &x, &y);
+       gl_object_editor_set_position (editor, x, y);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/*****************************************************************************/
+/* Is object at (x,y)?                                                       */
+/*****************************************************************************/
+static gboolean
+object_at (glViewObject  *view_object,
+           cairo_t       *cr,
+           gdouble        x,
+           gdouble        y)
+{
+       glLabelObject    *object;
+        gdouble           w, h;
+
+        object = gl_view_object_get_object (view_object);
+
+        gl_label_object_get_size (object, &w, &h);
+
+        cairo_rectangle (cr, 0.0, 0.0, w, h);
+
+        if (cairo_in_fill (cr, x, y))
+        {
+                return TRUE;
+        }
+
+        return FALSE;
+}
+
+
+/*****************************************************************************/
+/* Return apropos cursor for create object mode.                             */
+/*****************************************************************************/
+GdkCursor *
+gl_view_text_get_create_cursor (void)
+{
+       GdkCursor       *cursor = NULL;
+       GdkPixmap       *pixmap_data, *pixmap_mask;
+       GdkColor         fg = { 0, 0, 0, 0 };
+       GdkColor         bg = { 0, 65535, 65535, 65535 };
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        pixmap_data = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_text_bits,
+                                                   cursor_text_width,
+                                                   cursor_text_height);
+        pixmap_mask = gdk_bitmap_create_from_data (NULL,
+                                                   (gchar *)cursor_text_mask_bits,
+                                                   cursor_text_mask_width,
+                                                   cursor_text_mask_height);
+        cursor = gdk_cursor_new_from_pixmap (pixmap_data, pixmap_mask, &fg,
+                                             &bg, cursor_text_x_hot,
+                                             cursor_text_y_hot);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return cursor;
+}
+
+/*****************************************************************************/
+/* Object creation handler: button press event.                              */
+/*****************************************************************************/
+void
+gl_view_text_create_button_press_event   (glView *view,
+                                          gdouble x,
+                                          gdouble y)
+{
+       GObject             *object;
+       GList               *lines;
+       gchar               *family;
+       glColorNode         *color_node;
+
+        gl_view_unselect_all (view);
+
+        object = gl_label_text_new (view->label);
+        color_node = gl_color_node_new_default ();
+        gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+        family = gl_view_get_default_font_family (view);
+        gl_label_object_set_font_family (GL_LABEL_OBJECT(object), family);
+        gl_label_object_set_font_size (GL_LABEL_OBJECT(object),
+                                       gl_view_get_default_font_size (view));
+        gl_label_object_set_font_weight (GL_LABEL_OBJECT(object),
+                                         gl_view_get_default_font_weight (view));
+        gl_label_object_set_font_italic_flag (GL_LABEL_OBJECT(object),
+                                              gl_view_get_default_font_italic_flag (view));
+                                                                 
+        color_node->color = gl_color_set_opacity (gl_view_get_default_text_color (view), 0.5);
+        gl_label_object_set_text_color (GL_LABEL_OBJECT(object),
+                                                       color_node);
+        gl_label_object_set_text_alignment (GL_LABEL_OBJECT(object),
+                                            gl_view_get_default_text_alignment (view));
+        gl_label_object_set_text_line_spacing (GL_LABEL_OBJECT(object), gl_view_get_default_text_line_spacing (view));
+                                                      
+        g_free (family);
+        lines = gl_text_node_lines_new_from_text (_("Text"));
+        gl_label_text_set_lines (GL_LABEL_TEXT(object), lines);
+        gl_color_node_free (&color_node);
+
+        view->create_object = GL_LABEL_OBJECT (object);
+        view->create_x0 = x;
+        view->create_y0 = y;
+}
+
+/*****************************************************************************/
+/* Object creation handler: motion event.                                    */
+/*****************************************************************************/
+void
+gl_view_text_create_motion_event     (glView *view,
+                                      gdouble x,
+                                      gdouble y)
+{
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object), x, y);
+}
+
+/*****************************************************************************/
+/* Object creation handler: button relesase event.                           */
+/*****************************************************************************/
+void
+gl_view_text_create_button_release_event (glView *view,
+                                          gdouble x,
+                                          gdouble y)
+{
+       glColorNode         *color_node;
+
+        color_node = gl_color_node_new_default ();
+        gl_label_object_set_position (GL_LABEL_OBJECT(view->create_object), x, y);
+        color_node->color = gl_view_get_default_text_color(view);
+        gl_label_object_set_text_color (GL_LABEL_OBJECT(view->create_object), color_node);
+        gl_color_node_free (&color_node);
+}
+
diff --git a/src/view-text.h b/src/view-text.h
new file mode 100644 (file)
index 0000000..bb28c90
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view_text.h:  GLabels label text object view
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __VIEW_TEXT_H__
+#define __VIEW_TEXT_H__
+
+#include "view-object.h"
+#include "label-text.h"
+
+G_BEGIN_DECLS
+
+
+#define GL_TYPE_VIEW_TEXT            (gl_view_text_get_type ())
+#define GL_VIEW_TEXT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_TYPE_VIEW_TEXT, glViewText))
+#define GL_VIEW_TEXT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_TYPE_VIEW_TEXT, glViewTextClass))
+#define GL_IS_VIEW_TEXT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_TYPE_VIEW_TEXT))
+#define GL_IS_VIEW_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_TYPE_VIEW_TEXT))
+
+typedef struct _glViewText          glViewText;
+typedef struct _glViewTextClass     glViewTextClass;
+
+typedef struct _glViewTextPrivate   glViewTextPrivate;
+
+struct _glViewText {
+       glViewObject       parent_object;
+
+       glViewTextPrivate *priv;
+};
+
+struct _glViewTextClass {
+       glViewObjectClass  parent_class;
+};
+
+
+GType          gl_view_text_get_type (void) G_GNUC_CONST;
+
+glViewObject  *gl_view_text_new      (glLabelText *object,
+                                      glView      *view);
+
+
+/* cursor for creating text objects */
+GdkCursor *gl_view_text_get_create_cursor (void);
+
+/* Object creation handlers. */
+void       gl_view_text_create_button_press_event   (glView *view,
+                                                     gdouble x,
+                                                     gdouble y);
+
+void       gl_view_text_create_motion_event         (glView *view,
+                                                     gdouble x,
+                                                     gdouble y);
+
+void       gl_view_text_create_button_release_event (glView *view,
+                                                     gdouble x,
+                                                     gdouble y);
+
+
+G_END_DECLS
+
+#endif /* __VIEW_TEXT_H__ */
diff --git a/src/view.c b/src/view.c
new file mode 100644 (file)
index 0000000..ffe8c5d
--- /dev/null
@@ -0,0 +1,3642 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view.c:  GLabels View module
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "view.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtklayout.h>
+#include <gtk/gtkselection.h>
+#include <gtk/gtkinvisible.h>
+#include <gdk/gdkkeysyms.h>
+#include <string.h>
+#include <math.h>
+
+#include "label.h"
+#include "cairo-label-path.h"
+#include "cairo-markup-path.h"
+#include "view-object.h"
+#include "view-box.h"
+#include "view-ellipse.h"
+#include "view-line.h"
+#include "view-image.h"
+#include "view-text.h"
+#include "view-barcode.h"
+#include "xml-label.h"
+#include "color.h"
+#include "prefs.h"
+#include "marshal.h"
+
+#include "debug.h"
+
+/*==========================================================================*/
+/* Private macros and constants.                                            */
+/*==========================================================================*/
+
+#define BG_COLOR        GL_COLOR (192, 192, 192)
+
+#define PAPER_RGB_ARGS          1.0,   1.0,   1.0
+#define GRID_RGB_ARGS           0.753, 0.753, 0.753
+#define MARKUP_RGB_ARGS         0.94,  0.39,  0.39
+#define OUTLINE_RGB_ARGS        0.68,  0.85,  0.90
+#define SELECT_LINE_RGBA_ARGS   0.0,   0.0,   1.0,   0.5
+#define SELECT_FILL_RGBA_ARGS   0.75,  0.75,  1.0,   0.5
+
+#define GRID_LINE_WIDTH_PIXELS    1.0
+#define MARKUP_LINE_WIDTH_PIXELS  1.0
+#define OUTLINE_WIDTH_PIXELS      3.0
+#define SELECT_LINE_WIDTH_PIXELS  3.0
+
+#define ZOOMTOFIT_PAD   16
+
+#define POINTS_PER_MM    2.83464566929
+
+/*==========================================================================*/
+/* Private types.                                                           */
+/*==========================================================================*/
+
+enum {
+       SELECTION_CHANGED,
+       CONTEXT_MENU_ACTIVATE,
+       ZOOM_CHANGED,
+       POINTER_MOVED,
+       POINTER_EXIT,
+       MODE_CHANGED,
+       LAST_SIGNAL
+};
+
+
+/*==========================================================================*/
+/* Private globals                                                          */
+/*==========================================================================*/
+
+static guint signals[LAST_SIGNAL] = {0};
+
+/* "CLIPBOARD" selection */
+static GdkAtom clipboard_atom = GDK_NONE;
+
+static gdouble zooms[] = {
+       8.00,
+       6.00,
+       4.00,
+       3.00,
+       2.00,
+       1.50,
+       1.00,
+       0.75,
+       0.67,
+       0.50,
+       0.33,
+       0.25,
+       0.20,
+       0.15,
+       0.10,
+};
+#define N_ZOOMS G_N_ELEMENTS(zooms)
+
+
+/*==========================================================================*/
+/* Local function prototypes                                                */
+/*==========================================================================*/
+
+static void       gl_view_finalize                (GObject        *object);
+
+static void       gl_view_construct               (glView         *view,
+                                                   glLabel        *label);
+
+static gdouble    get_home_scale                  (glView         *view);
+
+static gboolean   expose_cb                       (glView         *view,
+                                                   GdkEventExpose *event);
+
+static void       realize_cb                      (glView         *view);
+
+static void       size_allocate_cb                (glView         *view,
+                                                   GtkAllocation  *allocation);
+
+static void       screen_changed_cb               (glView         *view);
+
+static void       label_changed_cb                (glView         *view);
+
+static void       label_resized_cb                (glView         *view);
+
+static void       label_object_added_cb           (glView         *view,
+                                                   glLabelObject  *object);
+
+static void       draw_layers                     (glView         *view,
+                                                   cairo_t        *cr);
+
+static void       draw_bg_layer                   (glView         *view,
+                                                   cairo_t        *cr);
+static void       draw_grid_layer                 (glView         *view,
+                                                   cairo_t        *cr);
+static void       draw_markup_layer               (glView         *view,
+                                                   cairo_t        *cr);
+static void       draw_objects_layer              (glView         *view,
+                                                   cairo_t        *cr);
+static void       draw_fg_layer                   (glView         *view,
+                                                   cairo_t        *cr);
+static void       draw_highlight_layer            (glView         *view,
+                                                   cairo_t        *cr);
+static void       draw_select_region_layer        (glView         *view,
+                                                   cairo_t        *cr);
+
+static void       select_object_real              (glView         *view,
+                                                  glViewObject   *view_object);
+static void       unselect_object_real            (glView         *view,
+                                                  glViewObject   *view_object);
+
+static glViewObject *view_view_object_at          (glView         *view,
+                                                   cairo_t        *cr,
+                                                  gdouble         x,
+                                                   gdouble         y);
+
+static void       set_zoom_real                   (glView         *view,
+                                                  gdouble         zoom,
+                                                  gboolean        scale_to_fit_flag);
+
+static void       selection_clear_cb              (GtkWidget         *widget,
+                                                   GdkEventSelection *event,
+                                                   glView            *view);
+
+static void       selection_get_cb                (GtkWidget         *widget,
+                                                   GtkSelectionData  *selection_data,
+                                                   guint              info,
+                                                   guint              time,
+                                                   glView            *view);
+
+static void       selection_received_cb           (GtkWidget         *widget,
+                                                   GtkSelectionData  *selection_data,
+                                                   guint              time,
+                                                   glView            *view);
+
+static gboolean   focus_in_event_cb               (glView            *view,
+                                                   GdkEventFocus     *event);
+
+static gboolean   focus_out_event_cb              (glView            *view,
+                                                   GdkEventFocus     *event);
+
+static gboolean   enter_notify_event_cb           (glView            *view,
+                                                   GdkEventCrossing  *event);
+
+static gboolean   leave_notify_event_cb           (glView            *view,
+                                                   GdkEventCrossing  *event);
+
+static gboolean   motion_notify_event_cb          (glView            *view,
+                                                   GdkEventMotion    *event);
+
+static gboolean   button_press_event_cb           (glView            *view,
+                                                   GdkEventButton    *event);
+
+static gboolean   button_release_event_cb         (glView            *view,
+                                                   GdkEventButton    *event);
+
+static gboolean   key_press_event_cb              (glView            *view,
+                                                   GdkEventKey       *event);
+
+\f
+/****************************************************************************/
+/* Boilerplate Object stuff.                                                */
+/****************************************************************************/
+G_DEFINE_TYPE (glView, gl_view, GTK_TYPE_VBOX);
+
+static void
+gl_view_class_init (glViewClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_view_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_view_finalize;
+
+       signals[SELECTION_CHANGED] =
+               g_signal_new ("selection_changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glViewClass, selection_changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+
+       signals[CONTEXT_MENU_ACTIVATE] =
+               g_signal_new ("context_menu_activate",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glViewClass, context_menu_activate),
+                             NULL, NULL,
+                             gl_marshal_VOID__INT_UINT,
+                             G_TYPE_NONE,
+                             2, G_TYPE_INT, G_TYPE_UINT);
+
+       signals[ZOOM_CHANGED] =
+               g_signal_new ("zoom_changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glViewClass, zoom_changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__DOUBLE,
+                             G_TYPE_NONE,
+                             1, G_TYPE_DOUBLE);
+
+       signals[POINTER_MOVED] =
+               g_signal_new ("pointer_moved",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glViewClass, pointer_moved),
+                             NULL, NULL,
+                             gl_marshal_VOID__DOUBLE_DOUBLE,
+                             G_TYPE_NONE,
+                             2, G_TYPE_DOUBLE, G_TYPE_DOUBLE);
+
+       signals[POINTER_EXIT] =
+               g_signal_new ("pointer_exit",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glViewClass, pointer_exit),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+
+       signals[MODE_CHANGED] =
+               g_signal_new ("mode_changed",
+                             G_OBJECT_CLASS_TYPE (object_class),
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (glViewClass, mode_changed),
+                             NULL, NULL,
+                             gl_marshal_VOID__VOID,
+                             G_TYPE_NONE,
+                             0);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_init (glView *view)
+{
+       GtkWidget *wscroll;
+       GdkColor  *bg_color;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       view->label                = NULL;
+       view->grid_visible         = TRUE;
+       view->grid_spacing         = 9;
+       view->markup_visible       = TRUE;
+       view->default_font_family  = NULL;
+       view->mode                 = GL_VIEW_MODE_ARROW;
+       view->object_list          = NULL;
+       view->selected_object_list = NULL;
+       view->zoom                 = 1.0;
+       view->home_scale           = get_home_scale (view);
+
+        /*
+         * Canvas
+         */
+        view->canvas = gtk_layout_new (NULL, NULL);
+        wscroll = gtk_scrolled_window_new (NULL, NULL);
+       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (wscroll),
+                                       GTK_POLICY_AUTOMATIC,
+                                       GTK_POLICY_AUTOMATIC);
+       gtk_box_pack_start (GTK_BOX (view), wscroll, TRUE, TRUE, 0);
+       gtk_container_add (GTK_CONTAINER (wscroll), view->canvas);
+
+       bg_color = gl_color_to_gdk_color (BG_COLOR);
+       gtk_widget_modify_bg (GTK_WIDGET (view->canvas), GTK_STATE_NORMAL, bg_color);
+       g_free (bg_color);
+
+        GTK_WIDGET_SET_FLAGS (GTK_WIDGET (view->canvas), GTK_CAN_FOCUS);
+
+        gtk_widget_add_events (GTK_WIDGET (view->canvas),
+                               (GDK_FOCUS_CHANGE_MASK   |
+                                GDK_ENTER_NOTIFY_MASK   |
+                                GDK_LEAVE_NOTIFY_MASK   |
+                                GDK_POINTER_MOTION_MASK |
+                                GDK_BUTTON_PRESS_MASK   |
+                                GDK_BUTTON_RELEASE_MASK |
+                                GDK_KEY_PRESS_MASK));
+
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "expose-event",
+                                 G_CALLBACK (expose_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "realize",
+                                 G_CALLBACK (realize_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "size-allocate",
+                                 G_CALLBACK (size_allocate_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "screen-changed",
+                                 G_CALLBACK (screen_changed_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "focus-in-event",
+                                 G_CALLBACK (focus_in_event_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "focus-out-event",
+                                 G_CALLBACK (focus_out_event_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "enter-notify-event",
+                                 G_CALLBACK (enter_notify_event_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "leave-notify-event",
+                                 G_CALLBACK (leave_notify_event_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "motion-notify-event",
+                                 G_CALLBACK (motion_notify_event_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "button-press-event",
+                                 G_CALLBACK (button_press_event_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "button-release-event",
+                                 G_CALLBACK (button_release_event_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->canvas), "key-press-event",
+                                 G_CALLBACK (key_press_event_cb), view);
+
+        /*
+         * Clipboard
+         */
+       view->have_selection       = FALSE;
+       view->selection_data       = NULL;
+       view->invisible            = gtk_invisible_new ();
+       if (!clipboard_atom) {
+               clipboard_atom = gdk_atom_intern ("GLABELS_CLIPBOARD", FALSE);
+       }
+       gtk_selection_add_target (view->invisible,
+                                 clipboard_atom, GDK_SELECTION_TYPE_STRING, 1);
+       g_signal_connect (G_OBJECT (view->invisible),
+                         "selection_clear_event",
+                         G_CALLBACK (selection_clear_cb), view);
+       g_signal_connect (G_OBJECT (view->invisible), "selection_get",
+                         G_CALLBACK (selection_get_cb), view);
+       g_signal_connect (G_OBJECT (view->invisible),
+                         "selection_received",
+                         G_CALLBACK (selection_received_cb), view);
+
+        /*
+         * Defaults from preferences
+         */
+       gl_view_set_default_font_family       (view, gl_prefs->default_font_family);
+       gl_view_set_default_font_size         (view, gl_prefs->default_font_size);
+       gl_view_set_default_font_weight       (view, gl_prefs->default_font_weight);
+       gl_view_set_default_font_italic_flag  (view, gl_prefs->default_font_italic_flag);
+       gl_view_set_default_text_color        (view, gl_prefs->default_text_color);
+       gl_view_set_default_text_alignment    (view, gl_prefs->default_text_alignment);
+       gl_view_set_default_text_line_spacing (view, gl_prefs->default_text_line_spacing);
+       gl_view_set_default_line_width        (view, gl_prefs->default_line_width);
+       gl_view_set_default_line_color        (view, gl_prefs->default_line_color);
+       gl_view_set_default_fill_color        (view, gl_prefs->default_fill_color);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+static void
+gl_view_finalize (GObject *object)
+{
+       glView *view = GL_VIEW (object);
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_VIEW (object));
+
+       if (view->default_font_family) {
+               g_free (view->default_font_family);
+       }
+
+       G_OBJECT_CLASS (gl_view_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/****************************************************************************/
+/* NEW view object.                                                         */
+/****************************************************************************/
+GtkWidget *
+gl_view_new (glLabel *label)
+{
+       glView *view;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (label && GL_IS_LABEL (label), NULL);
+
+       view = g_object_new (GL_TYPE_VIEW, NULL);
+
+       gl_view_construct (view, label);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return GTK_WIDGET (view);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Construct composite widget.                                     */
+/*---------------------------------------------------------------------------*/
+static void
+gl_view_construct (glView  *view,
+                   glLabel *label)
+{
+        GList            *p_obj;
+        glLabelObject    *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (GL_IS_VIEW (view));
+
+       view->label = label;
+
+        for (p_obj = label->objects; p_obj != NULL; p_obj = p_obj->next)
+        {
+                object = GL_LABEL_OBJECT (p_obj->data);
+
+                if (GL_IS_LABEL_BOX (object)) {
+                        gl_view_box_new (GL_LABEL_BOX(object), view);
+                } else if (GL_IS_LABEL_ELLIPSE (object)) {
+                        gl_view_ellipse_new (GL_LABEL_ELLIPSE(object), view);
+                } else if (GL_IS_LABEL_LINE (object)) {
+                        gl_view_line_new (GL_LABEL_LINE(object), view);
+                } else if (GL_IS_LABEL_IMAGE (object)) {
+                        gl_view_image_new (GL_LABEL_IMAGE(object), view);
+                } else if (GL_IS_LABEL_TEXT (object)) {
+                        gl_view_text_new (GL_LABEL_TEXT(object), view);
+                } else if (GL_IS_LABEL_BARCODE (object)) {
+                        gl_view_barcode_new (GL_LABEL_BARCODE(object), view);
+                } else {
+                        /* Should not happen! */
+                        g_message ("Invalid label object type.");
+                }
+        }
+
+       g_signal_connect_swapped (G_OBJECT (view->label), "changed",
+                                  G_CALLBACK (label_changed_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->label), "size_changed",
+                                  G_CALLBACK (label_resized_cb), view);
+       g_signal_connect_swapped (G_OBJECT (view->label), "object_added",
+                                  G_CALLBACK (label_object_added_cb), view);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIAVTE.  Calculate 1:1 scale for screen.                                 */
+/*---------------------------------------------------------------------------*/
+static gdouble
+get_home_scale (glView *view)
+{
+       GdkScreen *screen;
+       gdouble    screen_width_pixels;
+       gdouble    screen_width_mm;
+       gdouble    screen_height_pixels;
+       gdouble    screen_height_mm;
+       gdouble    x_pixels_per_mm;
+       gdouble    y_pixels_per_mm;
+       gdouble    scale;
+
+       if (view->canvas == NULL) return 1.0;
+
+       if (!gtk_widget_has_screen (GTK_WIDGET (view->canvas))) return 1.0;
+
+       screen = gtk_widget_get_screen (GTK_WIDGET (view->canvas));
+
+       gl_debug (DEBUG_VIEW, "Screen = %p", screen);
+
+       screen_width_pixels  = gdk_screen_get_width (screen);
+       screen_width_mm      = gdk_screen_get_width_mm (screen);
+       screen_height_pixels = gdk_screen_get_height (screen);
+       screen_height_mm     = gdk_screen_get_height_mm (screen);
+
+       x_pixels_per_mm      = screen_width_pixels / screen_width_mm;
+       y_pixels_per_mm      = screen_height_pixels / screen_height_mm;
+
+       gl_debug (DEBUG_VIEW, "Horizontal dot pitch: %g pixels/mm (%g dpi)",
+                 x_pixels_per_mm, x_pixels_per_mm * 25.4);
+       gl_debug (DEBUG_VIEW, "Vertical dot pitch: %g pixels/mm (%g dpi)",
+                 y_pixels_per_mm, y_pixels_per_mm * 25.4);
+
+       scale = (x_pixels_per_mm + y_pixels_per_mm) / 2.0;
+
+       gl_debug (DEBUG_VIEW, "Average dot pitch: %g pixels/mm (%g dpi)",
+                 scale, scale * 25.4);
+
+       scale /= POINTS_PER_MM;
+
+       gl_debug (DEBUG_VIEW, "Scale = %g pixels/point", scale);
+
+       /* Make sure scale is somewhat sane. */
+       if ( (scale < 0.25) || (scale > 4.0) ) return 1.0;
+
+       return scale;
+}
+
+/*---------------------------------------------------------------------------*/
+/* Schedule canvas update.                                                   */
+/*---------------------------------------------------------------------------*/
+void
+gl_view_update (glView  *view)
+{
+       GtkWidget *widget;
+       GdkRegion *region;
+       
+       gl_debug (DEBUG_VIEW, "START");
+
+       widget = GTK_WIDGET (view->canvas);
+
+       if (!widget->window) return;
+
+        if ( !view->update_scheduled_flag )
+        {
+                view->update_scheduled_flag = TRUE;
+
+                region = gdk_drawable_get_clip_region (widget->window);
+                /* redraw the cairo canvas completely by exposing it */
+                gdk_window_invalidate_region (widget->window, region, TRUE);
+                gdk_region_destroy (region);
+        }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* Schedule canvas region update.                                            */
+/*---------------------------------------------------------------------------*/
+void
+gl_view_update_region (glView        *view,
+                       cairo_t       *cr,
+                       glLabelRegion *region)
+{
+       GtkWidget    *widget;
+       GdkRectangle  rect;
+        gdouble       x, y, w, h;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       widget = GTK_WIDGET (view->canvas);
+
+       if (!widget->window) return;
+
+        x = MIN (region->x1, region->x2);
+        y = MIN (region->y1, region->y2);
+        w = fabs (region->x2 - region->x1);
+        h = fabs (region->y2 - region->y1);
+
+        cairo_user_to_device (cr, &x, &y);
+        cairo_user_to_device_distance (cr, &w, &h);
+
+        rect.x      = x - 3;
+        rect.y      = y - 3;
+        rect.width  = w + 6;
+        rect.height = h + 6;
+
+        gdk_window_invalidate_rect (widget->window, &rect, TRUE);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Expose handler.                                                 */
+/*---------------------------------------------------------------------------*/
+static gboolean
+expose_cb (glView         *view,
+           GdkEventExpose *event)
+{
+       cairo_t *cr;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        view->update_scheduled_flag = FALSE;
+
+       /* get a cairo_t */
+       cr = gdk_cairo_create (GTK_LAYOUT (view->canvas)->bin_window);
+
+       cairo_rectangle (cr,
+                       event->area.x, event->area.y,
+                       event->area.width, event->area.height);
+       cairo_clip (cr);
+       
+       draw_layers (view, cr);
+
+       cairo_destroy (cr);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return FALSE;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Realize handler.                                                */
+/*---------------------------------------------------------------------------*/
+static void
+realize_cb (glView  *view)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. Size allocation changed callback.                                */
+/*---------------------------------------------------------------------------*/
+static void
+size_allocate_cb (glView         *view,
+                  GtkAllocation  *allocation)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+        GTK_LAYOUT (view->canvas)->hadjustment->page_size = allocation->width;
+        GTK_LAYOUT (view->canvas)->hadjustment->page_increment = allocation->width / 2;
+        GTK_LAYOUT (view->canvas)->vadjustment->page_size = allocation->height;
+        GTK_LAYOUT (view->canvas)->vadjustment->page_increment = allocation->height / 2;
+
+        g_signal_emit_by_name (GTK_LAYOUT (view->canvas)->hadjustment, "changed");
+        g_signal_emit_by_name (GTK_LAYOUT (view->canvas)->vadjustment, "changed");
+
+       if (view->zoom_to_fit_flag) {
+               /* Maintain best fit zoom */
+               gl_view_zoom_to_fit (view);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. Screen changed callback.                                         */
+/*---------------------------------------------------------------------------*/
+static void
+screen_changed_cb (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       if (gtk_widget_has_screen (GTK_WIDGET (view->canvas))) {
+
+               view->home_scale = get_home_scale (view);
+
+               if (view->zoom_to_fit_flag) {
+                       /* Maintain best fit zoom */
+                       gl_view_zoom_to_fit (view);
+               }
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Handle label changed event.                                     */
+/*---------------------------------------------------------------------------*/
+static void
+label_changed_cb (glView  *view)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        gl_view_update (view);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Handle label resize event.                                      */
+/*---------------------------------------------------------------------------*/
+static void
+label_resized_cb (glView  *view)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        g_signal_emit_by_name (GTK_LAYOUT (view->canvas)->hadjustment, "changed");
+        g_signal_emit_by_name (GTK_LAYOUT (view->canvas)->vadjustment, "changed");
+
+        gl_view_update (view);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Handle new label object.                                        */
+/*---------------------------------------------------------------------------*/
+static void
+label_object_added_cb (glView         *view,
+                       glLabelObject  *object)
+{
+        glViewObject *view_object;
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (object && GL_IS_LABEL_OBJECT (object));
+
+        if (GL_IS_LABEL_BOX (object)) {
+                view_object = gl_view_box_new (GL_LABEL_BOX(object), view);
+        } else if (GL_IS_LABEL_ELLIPSE (object)) {
+                view_object = gl_view_ellipse_new (GL_LABEL_ELLIPSE(object), view);
+        } else if (GL_IS_LABEL_LINE (object)) {
+                view_object = gl_view_line_new (GL_LABEL_LINE(object), view);
+        } else if (GL_IS_LABEL_IMAGE (object)) {
+                view_object = gl_view_image_new (GL_LABEL_IMAGE(object), view);
+        } else if (GL_IS_LABEL_TEXT (object)) {
+                view_object = gl_view_text_new (GL_LABEL_TEXT(object), view);
+        } else if (GL_IS_LABEL_BARCODE (object)) {
+                view_object = gl_view_barcode_new (GL_LABEL_BARCODE(object), view);
+        } else {
+                /* Should not happen! */
+                view_object = NULL;
+                g_message ("Invalid label object type.");
+        }
+
+        gl_view_select_object (view, view_object);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Create, draw and order layers.                                  */
+/*---------------------------------------------------------------------------*/
+static void
+draw_layers (glView  *view,
+             cairo_t *cr)
+{
+       gdouble                    scale;
+       gdouble                    w, h;
+        gint                       canvas_w, canvas_h;
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (view->label && GL_IS_LABEL (view->label));
+
+       gl_debug (DEBUG_VIEW, "START");
+
+        scale = view->zoom * view->home_scale;
+
+        gl_label_get_size (view->label, &w, &h);
+
+        scale = view->home_scale * view->zoom;
+        gtk_layout_set_size (GTK_LAYOUT (view->canvas), w*scale+8, h*scale+8);
+
+        gdk_drawable_get_size (GTK_LAYOUT (view->canvas)->bin_window, &canvas_w, &canvas_h);
+
+        view->x0 = (canvas_w/scale - w) / 2.0;
+        view->y0 = (canvas_h/scale - h) / 2.0;
+        view->w  = w;
+        view->h  = h;
+
+        cairo_save (cr);
+
+        cairo_scale (cr, scale, scale);
+        cairo_translate (cr, view->x0, view->y0);
+
+       draw_bg_layer (view, cr);
+       draw_grid_layer (view, cr);
+       draw_markup_layer (view, cr);
+       draw_objects_layer (view, cr);
+       draw_fg_layer (view, cr);
+       draw_highlight_layer (view, cr);
+        draw_select_region_layer (view, cr);
+
+        cairo_restore (cr);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw background                                                 */
+/*---------------------------------------------------------------------------*/
+static void
+draw_bg_layer (glView  *view,
+               cairo_t *cr)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (view->label && GL_IS_LABEL (view->label));
+
+        gl_cairo_label_path (cr, view->label->template, view->label->rotate_flag, FALSE);
+
+        cairo_set_source_rgb (cr, PAPER_RGB_ARGS);
+        cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
+        cairo_fill (cr);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw grid lines.                                                */
+/*---------------------------------------------------------------------------*/
+static void
+draw_grid_layer (glView  *view,
+                 cairo_t *cr)
+{
+       gdouble                    w, h;
+       gdouble                    x, y;
+       gdouble                    x0, y0;
+       const lglTemplateFrame    *frame;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (view->label && GL_IS_LABEL(view->label));
+
+        if (view->grid_visible)
+        {
+
+                frame = (lglTemplateFrame *)view->label->template->frames->data;
+
+                gl_label_get_size (view->label, &w, &h);
+       
+                if (frame->shape == LGL_TEMPLATE_FRAME_SHAPE_RECT) {
+                        x0 = 0.0;
+                        y0 = 0.0;
+                } else {
+                        /* round labels, adjust grid to line up with center of label. */
+                        x0 = fmod (w/2.0, view->grid_spacing);
+                        y0 = fmod (h/2.0, view->grid_spacing);
+                }
+
+
+                cairo_save (cr);
+
+                cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+                cairo_set_line_width (cr, GRID_LINE_WIDTH_PIXELS/(view->home_scale * view->zoom));
+                cairo_set_source_rgb (cr, GRID_RGB_ARGS);
+
+                for ( x=x0+view->grid_spacing; x < w; x += view->grid_spacing )
+                {
+                        cairo_move_to (cr, x, 0);
+                        cairo_line_to (cr, x, h);
+                        cairo_stroke (cr);
+                }
+
+                for ( y=y0+view->grid_spacing; y < h; y += view->grid_spacing )
+                {
+                        cairo_move_to (cr, 0, y);
+                        cairo_line_to (cr, w, y);
+                        cairo_stroke (cr);
+                }
+
+                cairo_restore (cr);
+
+        }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw markup layer.                                              */
+/*---------------------------------------------------------------------------*/
+static void
+draw_markup_layer (glView  *view,
+                   cairo_t *cr)
+{
+       glLabel                   *label;
+       const lglTemplateFrame    *frame;
+       GList                     *p;
+       lglTemplateMarkup         *markup;
+        gdouble                    width, height;
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (view->label && GL_IS_LABEL (view->label));
+
+        if (view->markup_visible)
+        {
+
+                label      = view->label;
+                frame = (lglTemplateFrame *)view->label->template->frames->data;
+
+                cairo_save (cr);
+
+                if (label->rotate_flag)
+                {
+                        lgl_template_frame_get_size (frame, &width, &height);
+                        cairo_rotate (cr, -M_PI/2.0);
+                        cairo_translate (cr, -width, 0.0);
+                }
+
+                cairo_set_line_width (cr, MARKUP_LINE_WIDTH_PIXELS/(view->home_scale * view->zoom));
+                cairo_set_source_rgb (cr, MARKUP_RGB_ARGS);
+
+                for ( p=frame->all.markups; p != NULL; p=p->next )
+                {
+                        markup = (lglTemplateMarkup *)p->data;
+
+                        gl_cairo_markup_path (cr, markup, label);
+
+                        cairo_stroke (cr);
+                }
+
+                cairo_restore (cr);
+        }
+
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw objects layer.                                             */
+/*---------------------------------------------------------------------------*/
+static void
+draw_objects_layer (glView  *view,
+                    cairo_t *cr)
+{
+        gl_label_draw (view->label, cr, TRUE, NULL);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw foreground                                                 */
+/*---------------------------------------------------------------------------*/
+static void
+draw_fg_layer (glView  *view,
+               cairo_t *cr)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (view->label && GL_IS_LABEL (view->label));
+
+        gl_cairo_label_path (cr, view->label->template, view->label->rotate_flag, FALSE);
+
+        cairo_set_line_width (cr, OUTLINE_WIDTH_PIXELS/(view->home_scale * view->zoom));
+        cairo_set_source_rgb (cr, OUTLINE_RGB_ARGS);
+        cairo_stroke (cr);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Create highlight layer.                                         */
+/*---------------------------------------------------------------------------*/
+static void
+draw_highlight_layer (glView  *view,
+                      cairo_t *cr)
+{
+       GList            *p_obj;
+       glViewObject     *view_object;
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+        cairo_save (cr);
+
+        cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+
+       for (p_obj = view->selected_object_list; p_obj != NULL; p_obj = p_obj->next)
+        {
+               view_object = GL_VIEW_OBJECT (p_obj->data);
+
+                gl_view_object_draw_handles (view_object, cr);
+       }
+
+        cairo_restore (cr);
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Draw select region layer.                                       */
+/*---------------------------------------------------------------------------*/
+static void
+draw_select_region_layer (glView  *view,
+                          cairo_t *cr)
+{
+        gdouble x1, y1;
+        gdouble w, h;
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+        if (view->select_region_visible)
+        {
+                x1 = MIN (view->select_region.x1, view->select_region.x2);
+                y1 = MIN (view->select_region.y1, view->select_region.y2);
+                w  = fabs (view->select_region.x2 - view->select_region.x1);
+                h  = fabs (view->select_region.y2 - view->select_region.y1);
+
+                cairo_save (cr);
+
+                cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+
+                cairo_rectangle (cr, x1, y1, w, h);
+
+                cairo_set_source_rgba (cr, SELECT_FILL_RGBA_ARGS);
+                cairo_fill_preserve (cr);
+
+                cairo_set_line_width (cr, SELECT_LINE_WIDTH_PIXELS/(view->home_scale * view->zoom));
+                cairo_set_source_rgba (cr, SELECT_LINE_RGBA_ARGS);
+                cairo_stroke (cr);
+
+                cairo_restore (cr);
+        }
+}
+
+/*****************************************************************************/
+/* Show grid.                                                                */
+/*****************************************************************************/
+void
+gl_view_show_grid (glView *view)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+        view->grid_visible = TRUE;
+        gl_view_update (view);
+}
+
+/*****************************************************************************/
+/* Hide grid.                                                                */
+/*****************************************************************************/
+void
+gl_view_hide_grid (glView *view)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+        view->grid_visible = FALSE;
+        gl_view_update (view);
+}
+
+/*****************************************************************************/
+/* Set grid spacing.                                                         */
+/*****************************************************************************/
+void
+gl_view_set_grid_spacing (glView  *view,
+                         gdouble  spacing)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->grid_spacing = spacing;
+        gl_view_update (view);
+}
+
+/*****************************************************************************/
+/* Show markup.                                                              */
+/*****************************************************************************/
+void
+gl_view_show_markup (glView *view)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+        view->markup_visible = TRUE;
+        gl_view_update (view);
+}
+
+/*****************************************************************************/
+/* Hide markup.                                                              */
+/*****************************************************************************/
+void
+gl_view_hide_markup (glView *view)
+{
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+        view->markup_visible = FALSE;
+        gl_view_update (view);
+}
+
+/*****************************************************************************/
+/* Set arrow mode.                                                           */
+/*****************************************************************************/
+void
+gl_view_arrow_mode (glView *view)
+{
+       GdkCursor *cursor;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+        cursor = gdk_cursor_new (GDK_LEFT_PTR);
+       gdk_window_set_cursor (view->canvas->window, cursor);
+        gdk_cursor_unref (cursor);
+
+       view->mode = GL_VIEW_MODE_ARROW;
+        view->state = GL_VIEW_IDLE;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Set create text object mode.                                              */
+/*****************************************************************************/
+void
+gl_view_object_create_mode (glView            *view,
+                           glLabelObjectType  type)
+{
+       GdkCursor *cursor = NULL;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       switch (type)
+        {
+       case GL_LABEL_OBJECT_BOX:
+               cursor = gl_view_box_get_create_cursor ();
+               break;
+       case GL_LABEL_OBJECT_ELLIPSE:
+               cursor = gl_view_ellipse_get_create_cursor ();
+               break;
+       case GL_LABEL_OBJECT_LINE:
+               cursor = gl_view_line_get_create_cursor ();
+               break;
+       case GL_LABEL_OBJECT_IMAGE:
+               cursor = gl_view_image_get_create_cursor ();
+               break;
+       case GL_LABEL_OBJECT_TEXT:
+               cursor = gl_view_text_get_create_cursor ();
+               break;
+       case GL_LABEL_OBJECT_BARCODE:
+               cursor = gl_view_barcode_get_create_cursor ();
+               break;
+       default:
+               g_message ("Invalid label object type.");/*Should not happen!*/
+               break;
+       }
+
+       gdk_window_set_cursor (view->canvas->window, cursor);
+        gdk_cursor_unref (cursor);
+
+       view->mode = GL_VIEW_MODE_OBJECT_CREATE;
+        view->state = GL_VIEW_IDLE;
+       view->create_type = type;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Select given object (adding to current selection).                        */
+/*****************************************************************************/
+void
+gl_view_select_object (glView       *view,
+                      glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       select_object_real (view, view_object);
+
+       g_signal_emit (G_OBJECT(view), signals[SELECTION_CHANGED], 0);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Unselect given object (removing from current selection).                  */
+/*****************************************************************************/
+void
+gl_view_unselect_object (glView       *view,
+                        glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       unselect_object_real (view, view_object);
+
+       g_signal_emit (G_OBJECT(view), signals[SELECTION_CHANGED], 0);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Select all items.                                                         */
+/*****************************************************************************/
+void
+gl_view_select_all (glView *view)
+{
+       GList *p, *p_next;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       /* 1st unselect anything already selected. */
+       for (p = view->selected_object_list; p != NULL; p = p_next) {
+               p_next = p->next;
+               unselect_object_real (view, GL_VIEW_OBJECT (p->data));
+       }
+
+       /* Finally select all objects. */
+       for (p = view->object_list; p != NULL; p = p->next) {
+               select_object_real (view, GL_VIEW_OBJECT (p->data));
+       }
+
+       g_signal_emit (G_OBJECT(view), signals[SELECTION_CHANGED], 0);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Remove all selections                                                     */
+/*****************************************************************************/
+void
+gl_view_unselect_all (glView *view)
+{
+       GList *p;
+       GList *p_next;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p_next) {
+               p_next = p->next;
+               unselect_object_real (view, GL_VIEW_OBJECT (p->data));
+       }
+
+       g_signal_emit (G_OBJECT(view), signals[SELECTION_CHANGED], 0);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Select all objects within given rectangular region (adding to selection). */
+/*****************************************************************************/
+void
+gl_view_select_region (glView        *view,
+                       glLabelRegion *region)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+        gdouble        r_x1, r_y1;
+        gdouble        r_x2, r_y2;
+        glLabelRegion  obj_extent;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+        r_x1 = MIN (region->x1, region->x2);
+        r_y1 = MIN (region->y1, region->y2);
+        r_x2 = MAX (region->x1, region->x2);
+        r_y2 = MAX (region->y1, region->y2);
+
+       for (p = view->object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT(p->data);
+               if (!gl_view_is_object_selected (view, view_object))
+                {
+
+                       object = gl_view_object_get_object (view_object);
+
+                       gl_label_object_get_extent (object, &obj_extent);
+                       if ((obj_extent.x1 >= r_x1) &&
+                            (obj_extent.x2 <= r_x2) &&
+                            (obj_extent.y1 >= r_y1) &&
+                            (obj_extent.y2 <= r_y2))
+                        {
+                               select_object_real (view, view_object);
+                       }
+
+               }
+       }
+
+       g_signal_emit (G_OBJECT(view), signals[SELECTION_CHANGED], 0);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. Select an object.                                                */
+/*---------------------------------------------------------------------------*/
+static void
+select_object_real (glView       *view,
+                   glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (GL_IS_VIEW_OBJECT (view_object));
+
+       if (!gl_view_is_object_selected (view, view_object)) {
+               view->selected_object_list =
+                   g_list_append (view->selected_object_list, view_object);
+       }
+       gtk_widget_grab_focus (GTK_WIDGET (view->canvas));
+
+        gl_view_update (view);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Un-select object.                                               */
+/*---------------------------------------------------------------------------*/
+static void
+unselect_object_real (glView       *view,
+                     glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (GL_IS_VIEW_OBJECT (view_object));
+
+       view->selected_object_list =
+           g_list_remove (view->selected_object_list, view_object);
+
+        gl_view_update (view);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. Return object at (x,y).                                          */
+/*---------------------------------------------------------------------------*/
+static glViewObject *
+view_view_object_at (glView  *view,
+                     cairo_t *cr,
+                     gdouble  x,
+                     gdouble  y)
+{
+       GList            *p_obj;
+       glViewObject     *view_object;
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+
+       for (p_obj = g_list_last (view->object_list); p_obj != NULL; p_obj = p_obj->prev)
+        {
+
+               view_object = GL_VIEW_OBJECT (p_obj->data);
+
+                if (gl_view_object_at (view_object, cr, x, y))
+                {
+                        return view_object;
+                }
+
+       }
+
+        return NULL;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. Return object handle at (x,y).                                   */
+/*---------------------------------------------------------------------------*/
+static glViewObject *
+view_handle_at (glView             *view,
+                cairo_t            *cr,
+                gdouble             x,
+                gdouble             y,
+                glViewObjectHandle *handle)
+{
+       GList            *p_obj;
+       glViewObject     *view_object;
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+
+       for (p_obj = g_list_last (view->selected_object_list); p_obj != NULL; p_obj = p_obj->prev)
+        {
+
+               view_object = GL_VIEW_OBJECT (p_obj->data);
+
+                if ((*handle = gl_view_object_handle_at (view_object, cr, x, y)))
+                {
+                        return view_object;
+                }
+
+       }
+
+        return NULL;
+}
+
+/*****************************************************************************/
+/* Is the object in our current selection?                                   */
+/*****************************************************************************/
+gboolean
+gl_view_is_object_selected (glView       *view,
+                           glViewObject *view_object)
+{
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), FALSE);
+       g_return_val_if_fail (GL_IS_VIEW_OBJECT (view_object), FALSE);
+
+       if (g_list_find (view->selected_object_list, view_object) == NULL) {
+               return FALSE;
+       }
+       return TRUE;
+}
+
+/*****************************************************************************/
+/* Is our current selection empty?                                           */
+/*****************************************************************************/
+gboolean
+gl_view_is_selection_empty (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), FALSE);
+
+       if (view->selected_object_list == NULL) {
+               return TRUE;
+       } else {
+               return FALSE;
+       }
+}
+
+/*****************************************************************************/
+/* Is our current selection atomic?  I.e. only one item selected.            */
+/*****************************************************************************/
+gboolean
+gl_view_is_selection_atomic (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), FALSE);
+
+       if (view->selected_object_list == NULL)
+               return FALSE;
+       if (view->selected_object_list->next == NULL)
+               return TRUE;
+       return FALSE;
+}
+
+/*****************************************************************************/
+/* Delete selected objects. (Bypass clipboard)                               */
+/*****************************************************************************/
+void
+gl_view_delete_selection (glView *view)
+{
+       GList         *object_list;
+       GList         *p;
+       GList         *p_next;
+       glViewObject  *view_object;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       object_list = view->selected_object_list;
+       view->selected_object_list = NULL;
+       g_signal_emit (G_OBJECT(view), signals[SELECTION_CHANGED], 0);
+
+       for (p = object_list; p != NULL; p = p_next) {
+               p_next = p->next;
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+                gl_label_object_remove (object);
+       }
+
+        g_list_free (object_list);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Get object property editor of first selected object.                      */
+/*****************************************************************************/
+GtkWidget *
+gl_view_get_editor (glView *view)
+{
+       glViewObject *view_object;
+       GtkWidget    *editor = NULL;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+
+       if (!gl_view_is_selection_empty (view)) {
+
+               view_object = GL_VIEW_OBJECT(view->selected_object_list->data);
+               editor = gl_view_object_get_editor (view_object);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return editor;
+}
+
+/*****************************************************************************/
+/* Raise selected items to top.                                              */
+/*****************************************************************************/
+void
+gl_view_raise_selection (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_raise_to_top (object);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Lower selected items to bottom.                                           */
+/*****************************************************************************/
+void
+gl_view_lower_selection (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_lower_to_bottom (object);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Rotate selected objects by given angle.                                   */
+/*****************************************************************************/
+void
+gl_view_rotate_selection (glView *view,
+                         gdouble theta_degs)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_rotate (object, theta_degs);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Rotate selected objects 90 degrees left.                                  */
+/*****************************************************************************/
+void
+gl_view_rotate_selection_left (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_rotate (object, -90.0);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Rotate selected objects 90 degrees right.                                 */
+/*****************************************************************************/
+void
+gl_view_rotate_selection_right (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_rotate (object, 90.0);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Flip selected objects horizontally.                                       */
+/*****************************************************************************/
+void
+gl_view_flip_selection_horiz (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_flip_horiz (object);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Flip selected objects vertically.                                         */
+/*****************************************************************************/
+void
+gl_view_flip_selection_vert (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_flip_vert (object);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Align selected objects to left most edge.                                 */
+/*****************************************************************************/
+void
+gl_view_align_selection_left (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+       gdouble        dx, x1_min;
+        glLabelRegion  obj_extent;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       g_return_if_fail (!gl_view_is_selection_empty (view) &&
+                         !gl_view_is_selection_atomic (view));
+
+       /* find left most edge */
+       p = view->selected_object_list;
+       view_object = GL_VIEW_OBJECT (p->data);
+       object = gl_view_object_get_object (view_object);
+       gl_label_object_get_extent (object, &obj_extent);
+        x1_min = obj_extent.x1;
+       for (p = p->next; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               if ( obj_extent.x1 < x1_min ) x1_min = obj_extent.x1;
+       }
+
+       /* now adjust the object positions to line up the left edges */
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               dx = x1_min - obj_extent.x1;
+               gl_label_object_set_position_relative (object, dx, 0.0);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/*****************************************************************************/
+/* Align selected objects to right most edge.                                */
+/*****************************************************************************/
+void
+gl_view_align_selection_right (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+       gdouble        dx, x2_max;
+        glLabelRegion  obj_extent;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       g_return_if_fail (!gl_view_is_selection_empty (view) &&
+                         !gl_view_is_selection_atomic (view));
+
+       /* find right most edge */
+       p = view->selected_object_list;
+       view_object = GL_VIEW_OBJECT (p->data);
+       object = gl_view_object_get_object (view_object);
+       gl_label_object_get_extent (object, &obj_extent);
+        x2_max = obj_extent.x2;
+       for (p = p->next; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               if ( obj_extent.x2 > x2_max ) x2_max = obj_extent.x2;
+       }
+
+       /* now adjust the object positions to line up the right edges */
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               dx = x2_max - obj_extent.x2;
+               gl_label_object_set_position_relative (object, dx, 0.0);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Align selected objects to horizontal center of objects.                   */
+/*****************************************************************************/
+void
+gl_view_align_selection_hcenter (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+       gdouble        dx;
+       gdouble        dxmin;
+       gdouble        xsum, xavg;
+        glLabelRegion  obj_extent;
+       gdouble        xcenter;
+       gint           n;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       g_return_if_fail (!gl_view_is_selection_empty (view) &&
+                         !gl_view_is_selection_atomic (view));
+
+       /* find average center of objects */
+       xsum = 0.0;
+       n = 0;
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               xsum += (obj_extent.x1 + obj_extent.x2) / 2.0;
+               n++;
+       }
+       xavg = xsum / n;
+
+       /* find center of object closest to average center */
+       p = view->selected_object_list;
+       view_object = GL_VIEW_OBJECT (p->data);
+       object = gl_view_object_get_object (view_object);
+       gl_label_object_get_extent (object, &obj_extent);
+       dxmin = fabs (xavg - (obj_extent.x1 + obj_extent.x2)/2.0);
+       xcenter = (obj_extent.x1 + obj_extent.x2)/2.0;
+       for (p = p->next; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               dx = fabs (xavg - (obj_extent.x1 + obj_extent.x2)/2.0);
+               if ( dx < dxmin )
+                {
+                       dxmin = dx;
+                       xcenter = (obj_extent.x1 + obj_extent.x2)/2.0;
+               }
+       }
+
+       /* now adjust the object positions to line up this center */
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               dx = xcenter - (obj_extent.x1 + obj_extent.x2)/2.0;
+               gl_label_object_set_position_relative (object, dx, 0.0);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Align selected objects to top most edge.                                  */
+/*****************************************************************************/
+void
+gl_view_align_selection_top (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+       gdouble        dy, y1_min;
+        glLabelRegion  obj_extent;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       g_return_if_fail (!gl_view_is_selection_empty (view) &&
+                         !gl_view_is_selection_atomic (view));
+
+       /* find top most edge */
+       p = view->selected_object_list;
+       view_object = GL_VIEW_OBJECT (p->data);
+       object = gl_view_object_get_object (view_object);
+       gl_label_object_get_extent (object, &obj_extent);
+        y1_min = obj_extent.y1;
+       for (p = p->next; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               if ( obj_extent.y1 < y1_min ) y1_min = obj_extent.y1;
+       }
+
+       /* now adjust the object positions to line up the top edges */
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               dy = y1_min - obj_extent.y1;
+               gl_label_object_set_position_relative (object, 0.0, dy);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Align selected objects to bottom most edge.                               */
+/*****************************************************************************/
+void
+gl_view_align_selection_bottom (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+       gdouble        dy, y2_max;
+        glLabelRegion  obj_extent;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       g_return_if_fail (!gl_view_is_selection_empty (view) &&
+                         !gl_view_is_selection_atomic (view));
+
+       /* find bottom most edge */
+       p = view->selected_object_list;
+       view_object = GL_VIEW_OBJECT (p->data);
+       object = gl_view_object_get_object (view_object);
+       gl_label_object_get_extent (object, &obj_extent);
+        y2_max = obj_extent.y2;
+       for (p = p->next; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               if ( obj_extent.y2 > y2_max ) y2_max = obj_extent.y2;
+       }
+
+       /* now adjust the object positions to line up the bottom edges */
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               dy = y2_max - obj_extent.y2;
+               gl_label_object_set_position_relative (object, 0.0, dy);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Align selected objects to viertical center of objects.                    */
+/*****************************************************************************/
+void
+gl_view_align_selection_vcenter (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+       gdouble        dy;
+       gdouble        dymin;
+       gdouble        ysum, yavg;
+        glLabelRegion  obj_extent;
+       gdouble        ycenter;
+       gint           n;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       g_return_if_fail (!gl_view_is_selection_empty (view) &&
+                         !gl_view_is_selection_atomic (view));
+
+       /* find average center of objects */
+       ysum = 0.0;
+       n = 0;
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               ysum += (obj_extent.y1 + obj_extent.y2) / 2.0;
+               n++;
+       }
+       yavg = ysum / n;
+
+       /* find center of object closest to average center */
+       p = view->selected_object_list;
+       view_object = GL_VIEW_OBJECT (p->data);
+       object = gl_view_object_get_object (view_object);
+       gl_label_object_get_extent (object, &obj_extent);
+       dymin = fabs (yavg - (obj_extent.y1 + obj_extent.y2)/2.0);
+       ycenter = (obj_extent.y1 + obj_extent.y2)/2.0;
+       for (p = p->next; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               dy = fabs (yavg - (obj_extent.y1 + obj_extent.y2)/2.0);
+               if ( dy < dymin )
+                {
+                       dymin = dy;
+                       ycenter = (obj_extent.y1 + obj_extent.y2)/2.0;
+               }
+       }
+
+       /* now adjust the object positions to line up this center */
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               dy = ycenter - (obj_extent.y1 + obj_extent.y2)/2.0;
+               gl_label_object_set_position_relative (object, 0.0, dy);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Center selected objects to in center of label.                            */
+/*****************************************************************************/
+void
+gl_view_center_selection_horiz (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+       gdouble        dx;
+       gdouble        x_label_center;
+       gdouble        x_obj_center;
+       glLabelRegion  obj_extent;
+       gdouble        w, h;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       g_return_if_fail (!gl_view_is_selection_empty (view));
+
+       gl_label_get_size (view->label, &w, &h);
+       x_label_center = w / 2.0;
+
+       /* adjust the object positions */
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               x_obj_center = (obj_extent.x1 + obj_extent.x2) / 2.0;
+               dx = x_label_center - x_obj_center;
+               gl_label_object_set_position_relative (object, dx, 0.0);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/*****************************************************************************/
+/* Center selected objects to in center of label.                            */
+/*****************************************************************************/
+void
+gl_view_center_selection_vert (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+       gdouble        dy;
+       gdouble        y_label_center;
+       gdouble        y_obj_center;
+       glLabelRegion  obj_extent;
+       gdouble        w, h;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       g_return_if_fail (!gl_view_is_selection_empty (view));
+
+       gl_label_get_size (view->label, &w, &h);
+       y_label_center = h / 2.0;
+
+       /* adjust the object positions */
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+               view_object = GL_VIEW_OBJECT (p->data);
+               object = gl_view_object_get_object (view_object);
+               gl_label_object_get_extent (object, &obj_extent);
+               y_obj_center = (obj_extent.y1 + obj_extent.y2) / 2.0;
+               dy = y_label_center - y_obj_center;
+               gl_label_object_set_position_relative (object, 0.0, dy);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/*****************************************************************************/
+/* Move selected objects                                                     */
+/*****************************************************************************/
+void
+gl_view_move_selection (glView  *view,
+                       gdouble  dx,
+                       gdouble  dy)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_position_relative (object, dx, dy);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Can text properties be set for selection?                                 */
+/*****************************************************************************/
+gboolean
+gl_view_can_selection_text (glView *view)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), FALSE);
+
+       for (p = view->selected_object_list; p != NULL; p = p->next)
+        {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               if (gl_label_object_can_text (object))
+                {
+                       return TRUE;
+               }
+
+       }
+
+       return FALSE;
+}
+
+/*****************************************************************************/
+/* Set font family for all text contained in selected objects.               */
+/*****************************************************************************/
+void
+gl_view_set_selection_font_family (glView      *view,
+                                  const gchar *font_family)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_font_family (object, font_family);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Set font size for all text contained in selected objects.                 */
+/*****************************************************************************/
+void
+gl_view_set_selection_font_size (glView  *view,
+                                gdouble  font_size)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_font_size (object, font_size);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Set font weight for all text contained in selected objects.               */
+/*****************************************************************************/
+void
+gl_view_set_selection_font_weight (glView      *view,
+                                  PangoWeight  font_weight)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_font_weight (object, font_weight);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Set font italic flag for all text contained in selected objects.          */
+/*****************************************************************************/
+void
+gl_view_set_selection_font_italic_flag (glView   *view,
+                                       gboolean  font_italic_flag)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_font_italic_flag (object, font_italic_flag);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Set text alignment for all text contained in selected objects.            */
+/*****************************************************************************/
+void
+gl_view_set_selection_text_alignment (glView            *view,
+                                     PangoAlignment     text_alignment)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_text_alignment (object, text_alignment);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Set text line spacing for all text contained in selected objects.         */
+/*****************************************************************************/
+void
+gl_view_set_selection_text_line_spacing (glView  *view,
+                                        gdouble  text_line_spacing)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_text_line_spacing (object, text_line_spacing);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+/*****************************************************************************/
+/* Set text color for all text contained in selected objects.                */
+/*****************************************************************************/
+void
+gl_view_set_selection_text_color (glView      *view,
+                                 glColorNode *text_color_node)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_text_color (object, text_color_node);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Can fill properties be set for selection?                                 */
+/*****************************************************************************/
+gboolean
+gl_view_can_selection_fill (glView *view)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), FALSE);
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               if (gl_label_object_can_fill (object)) {
+                       return TRUE;
+               }
+
+       }
+
+       return FALSE;
+}
+
+/*****************************************************************************/
+/* Set fill color for all selected objects.                                  */
+/*****************************************************************************/
+void
+gl_view_set_selection_fill_color (glView      *view,
+                                 glColorNode *fill_color_node)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_fill_color (object, fill_color_node);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Can line color properties be set for selection?                           */
+/*****************************************************************************/
+gboolean
+gl_view_can_selection_line_color (glView *view)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), FALSE);
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               if (gl_label_object_can_line_color (object)) {
+                       return TRUE;
+               }
+
+       }
+
+       return FALSE;
+}
+
+/*****************************************************************************/
+/* Set line color for all selected objects.                                  */
+/*****************************************************************************/
+void
+gl_view_set_selection_line_color (glView      *view,
+                                 glColorNode *line_color_node)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_line_color (object, line_color_node);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Can line width properties be set for selection?                           */
+/*****************************************************************************/
+gboolean
+gl_view_can_selection_line_width (glView *view)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), FALSE);
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               if (gl_label_object_can_line_width (object)) {
+                       return TRUE;
+               }
+
+       }
+
+       return FALSE;
+}
+
+/*****************************************************************************/
+/* Set line width for all selected objects.                                  */
+/*****************************************************************************/
+void
+gl_view_set_selection_line_width (glView  *view,
+                                 gdouble  line_width)
+{
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+               object = gl_view_object_get_object(GL_VIEW_OBJECT (p->data));
+               gl_label_object_set_line_width (object, line_width);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* "Cut" selected items and place in clipboard selections.                   */
+/*****************************************************************************/
+void
+gl_view_cut (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       gl_view_copy (view);
+       gl_view_delete_selection (view);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* "Copy" selected items to clipboard selections.                            */
+/*****************************************************************************/
+void
+gl_view_copy (glView *view)
+{
+       GList         *p;
+       glViewObject  *view_object;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       if (view->selected_object_list) {
+
+               if ( view->selection_data ) {
+                       g_object_unref (view->selection_data);
+               }
+               view->selection_data = GL_LABEL(gl_label_new ());
+               gl_label_set_template (view->selection_data, view->label->template);
+               gl_label_set_rotate_flag (view->selection_data, view->label->rotate_flag);
+
+               for (p = view->selected_object_list; p != NULL; p = p->next) {
+
+                       view_object = GL_VIEW_OBJECT (p->data);
+                       object = gl_view_object_get_object (view_object);
+
+                       gl_label_object_dup (object, view->selection_data);
+
+               }
+
+               gtk_selection_owner_set (view->invisible,
+                                        clipboard_atom, GDK_CURRENT_TIME);
+               view->have_selection = TRUE;
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* "Paste" from private clipboard selection.                                 */
+/*****************************************************************************/
+void
+gl_view_paste (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       gtk_selection_convert (GTK_WIDGET (view->invisible),
+                              clipboard_atom, GDK_SELECTION_TYPE_STRING,
+                              GDK_CURRENT_TIME);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Zoom in one "notch"                                                       */
+/*****************************************************************************/
+void
+gl_view_zoom_in (glView *view)
+{
+       gint    i, i_min;
+       gdouble dist, dist_min;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       /* Find index of current scale (or best match) */
+       i_min = 1;              /* start with 2nd largest scale */
+       dist_min = fabs (zooms[1] - view->zoom);
+       for (i = 2; i < N_ZOOMS; i++) {
+               dist = fabs (zooms[i] - view->zoom);
+               if (dist < dist_min) {
+                       i_min = i;
+                       dist_min = dist;
+               }
+       }
+
+       /* zoom in one "notch" */
+       i = MAX (0, i_min - 1);
+       gl_debug (DEBUG_VIEW, "zoom[%d] = %g", i, zooms[i]);
+       set_zoom_real (view, zooms[i], FALSE);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Zoom out one "notch"                                                      */
+/*****************************************************************************/
+void
+gl_view_zoom_out (glView *view)
+{
+       gint    i, i_min;
+       gdouble dist, dist_min;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       /* Find index of current scale (or best match) */
+       i_min = 0;              /* start with largest scale */
+       dist_min = fabs (zooms[0] - view->zoom);
+       for (i = 1; i < N_ZOOMS; i++) {
+               dist = fabs (zooms[i] - view->zoom);
+               if (dist < dist_min) {
+                       i_min = i;
+                       dist_min = dist;
+               }
+       }
+
+       /* zoom out one "notch" */
+       if (i_min >= N_ZOOMS)
+               return;
+       i = i_min + 1;
+       if (i >= N_ZOOMS)
+               return;
+       set_zoom_real (view, zooms[i], FALSE);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*****************************************************************************/
+/* Set zoom to best fit.                                                     */
+/*****************************************************************************/
+void
+gl_view_zoom_to_fit (glView *view)
+{
+       gint    w_view, h_view;
+       gdouble w_label, h_label;
+       gdouble x_scale, y_scale, scale;
+
+       gl_debug (DEBUG_VIEW, "");
+
+       if ( ! GTK_WIDGET_VISIBLE(view)) {
+               set_zoom_real (view, 1.0, TRUE);
+               return;
+       }
+
+       w_view = GTK_WIDGET(view)->allocation.width;
+       h_view = GTK_WIDGET(view)->allocation.height;
+
+       gl_label_get_size (GL_LABEL(view->label), &w_label, &h_label);
+
+       gl_debug (DEBUG_VIEW, "View size: %d, %d", w_view, h_view);
+       gl_debug (DEBUG_VIEW, "Label size: %g, %g", w_label, h_label);
+
+       /* Calculate best scale */
+       x_scale = (double)(w_view - ZOOMTOFIT_PAD) / w_label;
+       y_scale = (double)(h_view - ZOOMTOFIT_PAD) / h_label;
+       scale = MIN (x_scale, y_scale);
+       gl_debug (DEBUG_VIEW, "Candidate zooms: %g, %g => %g", x_scale, y_scale, scale);
+
+       /* Limit */
+       gl_debug (DEBUG_VIEW, "Scale: %g", scale);
+       scale = MIN (scale, zooms[0]*view->home_scale);
+       scale = MAX (scale, zooms[N_ZOOMS-1]*view->home_scale);
+       gl_debug (DEBUG_VIEW, "Limitted scale: %g", scale);
+
+       set_zoom_real (view, scale/view->home_scale, TRUE);
+}
+
+/*****************************************************************************/
+/* Set current zoom factor to explicit value.                                */
+/*****************************************************************************/
+void
+gl_view_set_zoom (glView  *view,
+                 gdouble  zoom)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       set_zoom_real (view, zoom, FALSE);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Set canvas scale.                                               */
+/*---------------------------------------------------------------------------*/
+static void
+set_zoom_real (glView   *view,
+              gdouble   zoom,
+              gboolean  zoom_to_fit_flag)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (zoom > 0.0);
+
+       /* Limit, if needed */
+       gl_debug (DEBUG_VIEW, "Zoom requested: %g", zoom);
+       zoom = MIN (zoom, zooms[0]);
+       zoom = MAX (zoom, zooms[N_ZOOMS-1]);
+       gl_debug (DEBUG_VIEW, "Limitted zoom: %g", zoom);
+
+       if ( zoom != view->zoom ) {
+
+               view->zoom = zoom;
+               view->zoom_to_fit_flag = zoom_to_fit_flag;
+
+                gl_view_update (view);
+
+               g_signal_emit (G_OBJECT(view), signals[ZOOM_CHANGED], 0, zoom);
+
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+
+}
+
+
+/*****************************************************************************/
+/* Get current zoom factor.                                                  */
+/*****************************************************************************/
+gdouble
+gl_view_get_zoom (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), 1.0);
+
+       return view->zoom;
+}
+
+/*****************************************************************************/
+/* Is this the maximum zoom level.                                           */
+/*****************************************************************************/
+gboolean
+gl_view_is_zoom_max (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (GL_IS_VIEW (view), FALSE);
+
+       return view->zoom >= zooms[0];
+}
+
+/*****************************************************************************/
+/* Is this the minimum zoom level.                                           */
+/*****************************************************************************/
+gboolean
+gl_view_is_zoom_min (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), FALSE);
+
+       return view->zoom <= zooms[N_ZOOMS-1];
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Handle "selection-clear" signal.                                */
+/*---------------------------------------------------------------------------*/
+static void
+selection_clear_cb (GtkWidget         *widget,
+                   GdkEventSelection *event,
+                   glView            *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->have_selection = FALSE;
+       g_object_unref (view->selection_data);
+       view->selection_data = NULL;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Handle "selection-get" signal.                                  */
+/*---------------------------------------------------------------------------*/
+static void
+selection_get_cb (GtkWidget        *widget,
+                 GtkSelectionData *selection_data,
+                 guint             info,
+                 guint             time,
+                 glView           *view)
+{
+       gchar            *buffer;
+       glXMLLabelStatus  status;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       if (view->have_selection) {
+
+               buffer = gl_xml_label_save_buffer (view->selection_data,
+                                                  &status);
+               gtk_selection_data_set (selection_data,
+                                       GDK_SELECTION_TYPE_STRING, 8,
+                                       (guchar *)buffer, strlen (buffer));
+               g_free (buffer);
+       }
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Handle "selection-received" signal.  (Result of Paste)          */
+/*---------------------------------------------------------------------------*/
+static void
+selection_received_cb (GtkWidget        *widget,
+                      GtkSelectionData *selection_data,
+                      guint             time,
+                      glView           *view)
+{
+       glLabel          *label = NULL;
+       glXMLLabelStatus  status;
+       GList            *p, *p_next;
+       glLabelObject    *object, *newobject;
+
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       if (selection_data->length < 0) {
+               return;
+       }
+       if (selection_data->type != GDK_SELECTION_TYPE_STRING) {
+               return;
+       }
+
+       gl_view_unselect_all (view);
+
+       label = gl_xml_label_open_buffer ((gchar *)selection_data->data, &status);
+       for (p = label->objects; p != NULL; p = p_next) {
+               p_next = p->next;
+
+               object = (glLabelObject *) p->data;
+               newobject = gl_label_object_dup (object, view->label);
+
+               gl_debug (DEBUG_VIEW, "object pasted");
+       }
+       g_object_unref (label);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/****************************************************************************/
+/* Set default font family.                                                 */
+/****************************************************************************/
+void
+gl_view_set_default_font_family (glView      *view,
+                                const gchar *font_family)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       if (view->default_font_family) {
+               g_free (view->default_font_family);
+       }
+       view->default_font_family = g_strdup (font_family);
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/****************************************************************************/
+/* Set default font size.                                                   */
+/****************************************************************************/
+void
+gl_view_set_default_font_size (glView  *view,
+                              gdouble  font_size)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->default_font_size = font_size;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/****************************************************************************/
+/* Set default font weight.                                                 */
+/****************************************************************************/
+void
+gl_view_set_default_font_weight (glView      *view,
+                                PangoWeight  font_weight)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->default_font_weight = font_weight;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/****************************************************************************/
+/* Set default font italic flag.                                            */
+/****************************************************************************/
+void
+gl_view_set_default_font_italic_flag (glView   *view,
+                                     gboolean  font_italic_flag)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->default_font_italic_flag = font_italic_flag;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/****************************************************************************/
+/* Set default text color.                                                  */
+/****************************************************************************/
+void
+gl_view_set_default_text_color (glView *view,
+                               guint   text_color)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->default_text_color = text_color;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/****************************************************************************/
+/* Set default text alignment.                                              */
+/****************************************************************************/
+void
+gl_view_set_default_text_alignment (glView           *view,
+                                   PangoAlignment    text_alignment)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->default_text_alignment = text_alignment;
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+/****************************************************************************/
+/* Set default text line spacing.                                           */
+/****************************************************************************/
+void
+gl_view_set_default_text_line_spacing (glView  *view,
+                                      gdouble  text_line_spacing)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->default_text_line_spacing = text_line_spacing;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/****************************************************************************/
+/* Set default line width.                                                  */
+/****************************************************************************/
+void
+gl_view_set_default_line_width (glView  *view,
+                               gdouble  line_width)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->default_line_width = line_width;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/****************************************************************************/
+/* Set default line color.                                                  */
+/****************************************************************************/
+void
+gl_view_set_default_line_color (glView *view,
+                               guint   line_color)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->default_line_color = line_color;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+/****************************************************************************/
+/* Set default fill color.                                                  */
+/****************************************************************************/
+void
+gl_view_set_default_fill_color (glView *view,
+                               guint   fill_color)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+
+       view->default_fill_color = fill_color;
+
+       gl_debug (DEBUG_VIEW, "END");
+}
+
+
+
+/****************************************************************************/
+/* Get default font family.                                                 */
+/****************************************************************************/
+gchar *
+gl_view_get_default_font_family (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), NULL);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return g_strdup (view->default_font_family);
+}
+
+
+/****************************************************************************/
+/* Get default font size.                                                   */
+/****************************************************************************/
+gdouble
+gl_view_get_default_font_size (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), 12.0);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view->default_font_size;
+}
+
+
+/****************************************************************************/
+/* Get default font weight.                                                 */
+/****************************************************************************/
+PangoWeight
+gl_view_get_default_font_weight (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), PANGO_WEIGHT_NORMAL);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view->default_font_weight;
+}
+
+
+/****************************************************************************/
+/* Get default font italic flag.                                            */
+/****************************************************************************/
+gboolean
+gl_view_get_default_font_italic_flag (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), FALSE);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view->default_font_italic_flag;
+}
+
+
+/****************************************************************************/
+/* Get default text color.                                                  */
+/****************************************************************************/
+guint
+gl_view_get_default_text_color (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), 0);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view->default_text_color;
+}
+
+
+/****************************************************************************/
+/* Get default text alignment.                                              */
+/****************************************************************************/
+PangoAlignment
+gl_view_get_default_text_alignment (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), PANGO_ALIGN_LEFT);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view->default_text_alignment;
+}
+
+/****************************************************************************/
+/* Get default text line spacing.                                           */
+/****************************************************************************/
+gdouble
+gl_view_get_default_text_line_spacing (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), 1.0);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view->default_text_line_spacing;
+}
+
+
+
+/****************************************************************************/
+/* Get default line width.                                                  */
+/****************************************************************************/
+gdouble
+gl_view_get_default_line_width (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), 1.0);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view->default_line_width;
+}
+
+
+/****************************************************************************/
+/* Get default line color.                                                  */
+/****************************************************************************/
+guint
+gl_view_get_default_line_color (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), 0);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view->default_line_color;
+}
+
+
+/****************************************************************************/
+/* Get default fill color.                                                  */
+/****************************************************************************/
+guint
+gl_view_get_default_fill_color (glView *view)
+{
+       gl_debug (DEBUG_VIEW, "START");
+
+       g_return_val_if_fail (view && GL_IS_VIEW (view), 0);
+
+       gl_debug (DEBUG_VIEW, "END");
+
+       return view->default_fill_color;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Focus in event handler.                                         */
+/*---------------------------------------------------------------------------*/
+static gboolean
+focus_in_event_cb (glView            *view,
+                   GdkEventFocus     *event)
+{
+        GTK_WIDGET_SET_FLAGS (GTK_WIDGET (view->canvas), GTK_HAS_FOCUS);
+
+        return FALSE;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Focus out event handler.                                        */
+/*---------------------------------------------------------------------------*/
+static gboolean
+focus_out_event_cb (glView            *view,
+                    GdkEventFocus     *event)
+{
+        GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (view->canvas), GTK_HAS_FOCUS);
+
+        return FALSE;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Enter notify event handler.                                     */
+/*---------------------------------------------------------------------------*/
+static gboolean
+enter_notify_event_cb (glView            *view,
+                       GdkEventCrossing  *event)
+{
+        return FALSE;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Leave notify event handler.                                     */
+/*---------------------------------------------------------------------------*/
+static gboolean
+leave_notify_event_cb (glView            *view,
+                       GdkEventCrossing  *event)
+{
+
+        g_signal_emit (G_OBJECT(view), signals[POINTER_EXIT], 0);
+
+        return FALSE;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Motion notify event handler.                                    */
+/*---------------------------------------------------------------------------*/
+static gboolean
+motion_notify_event_cb (glView            *view,
+                        GdkEventMotion    *event)
+{
+        gboolean            return_value = FALSE;
+       cairo_t            *cr;
+        gdouble             scale;
+        gdouble             x, y;
+        GdkCursor          *cursor;
+        glViewObjectHandle  handle;
+
+       cr = gdk_cairo_create (GTK_LAYOUT (view->canvas)->bin_window);
+
+        /*
+         * Translate to label coordinates
+         */
+        scale = view->zoom * view->home_scale;
+        cairo_scale (cr, scale, scale);
+        cairo_translate (cr, view->x0, view->y0);
+
+        x = event->x;
+        y = event->y;
+        cairo_device_to_user (cr, &x, &y);
+
+        /*
+         * Emit signal regardless of mode
+         */
+        g_signal_emit (G_OBJECT(view), signals[POINTER_MOVED], 0, x, y);
+
+        /*
+         * Handle event as appropriate for mode
+         */
+        switch (view->mode)
+        {
+
+        case GL_VIEW_MODE_ARROW:
+                switch (view->state)
+                {
+
+                case GL_VIEW_IDLE:
+                        if ( gl_view_is_selection_atomic (view) &&
+                             view_handle_at (view, cr, event->x, event->y, &handle) )
+                        {
+                                cursor = gdk_cursor_new (GDK_CROSSHAIR);
+                        }
+                        else if (view_view_object_at (view, cr, event->x, event->y))
+                        {
+                                cursor = gdk_cursor_new (GDK_FLEUR);
+                        }
+                        else
+                        {
+                                cursor = gdk_cursor_new (GDK_LEFT_PTR);
+                        }
+                        gdk_window_set_cursor (view->canvas->window, cursor);
+                        gdk_cursor_unref (cursor);
+                        break;
+
+                case GL_VIEW_ARROW_SELECT_REGION:
+#ifdef CLIP_UPDATES                                
+                        gl_view_update_region (view, cr, &view->select_region);
+#endif
+                        view->select_region.x2 = x;
+                        view->select_region.y2 = y;
+#ifdef CLIP_UPDATES                                
+                        gl_view_update_region (view, cr, &view->select_region);
+#else
+                        gl_view_update (view);
+#endif
+                        break;
+
+                case GL_VIEW_ARROW_MOVE:
+                        gl_view_move_selection (view,
+                                                (x - view->move_last_x),
+                                                (y - view->move_last_y));
+                        view->move_last_x = x;
+                        view->move_last_y = y;
+                        break;
+
+                case GL_VIEW_ARROW_RESIZE:
+                        gl_view_object_resize_event (view->resize_object,
+                                                     view->resize_handle,
+                                                     view->resize_honor_aspect,
+                                                     cr,
+                                                     event->x,
+                                                     event->y);
+                        break;
+
+                default:
+                        g_message ("Invalid arrow state.");      /*Should not happen!*/
+                }
+                return_value = TRUE;
+                break;
+
+
+        case GL_VIEW_MODE_OBJECT_CREATE:
+                if (view->state != GL_VIEW_IDLE)
+                {
+                        switch (view->create_type)
+                        {
+                        case GL_LABEL_OBJECT_BOX:
+                                gl_view_box_create_motion_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_ELLIPSE:
+                                gl_view_ellipse_create_motion_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_LINE: 
+                                gl_view_line_create_motion_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_IMAGE:
+                                gl_view_image_create_motion_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_TEXT:
+                                gl_view_text_create_motion_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_BARCODE:
+                                gl_view_barcode_create_motion_event (view, x, y);
+                                break;
+                        default:
+                                g_message ("Invalid create type.");   /*Should not happen!*/
+                        }
+                }
+                break;
+
+
+        default:
+                g_message ("Invalid view mode.");      /*Should not happen!*/
+
+        }
+
+       cairo_destroy (cr);
+
+        /*
+         * FIXME: we re-establish grabs here if the grab has been lost.  We seem to be
+         *        losing grabs when we emit signals that lead to the manipulation of
+         *        the GtkUIManager.  Needs more investigation
+         */
+        if (view->grabbed_flag && !gdk_pointer_is_grabbed ())
+        {
+                gdk_pointer_grab (GTK_LAYOUT (view->canvas)->bin_window,
+                                  FALSE,
+                                  (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK),
+                                  NULL,
+                                  NULL,
+                                  event->time);
+        }
+
+        return return_value;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Button press event handler.                                     */
+/*---------------------------------------------------------------------------*/
+static gboolean
+button_press_event_cb (glView            *view,
+                       GdkEventButton    *event)
+{
+        gboolean            return_value = FALSE;
+       cairo_t            *cr;
+        gdouble             scale;
+        gdouble             x, y;
+        glViewObject       *view_object;
+        glViewObjectHandle  handle;
+
+        gtk_widget_grab_focus(GTK_WIDGET (view->canvas));
+
+       cr = gdk_cairo_create (GTK_LAYOUT (view->canvas)->bin_window);
+
+        /*
+         * Translate to label coordinates
+         */
+        scale = view->zoom * view->home_scale;
+        cairo_scale (cr, scale, scale);
+        cairo_translate (cr, view->x0, view->y0);
+
+        x = event->x;
+        y = event->y;
+        cairo_device_to_user (cr, &x, &y);
+
+        switch (event->button)
+        {
+
+        case 1:
+                /*
+                 * Handle event as appropriate for mode
+                 */
+                switch (view->mode)
+                {
+                case GL_VIEW_MODE_ARROW:
+                        if ( gl_view_is_selection_atomic (view) &&
+                             (view_object = view_handle_at (view, cr, event->x, event->y, &handle)) )
+                        {
+                                view->resize_object = view_object;
+                                view->resize_handle = handle;
+                                view->resize_honor_aspect = event->state & GDK_CONTROL_MASK;
+
+                                view->state = GL_VIEW_ARROW_RESIZE;
+                        }
+                        else if ((view_object = view_view_object_at (view, cr, event->x, event->y)))
+                        {
+                                if (event->state & GDK_CONTROL_MASK)
+                                {
+                                        if (gl_view_is_object_selected (view, view_object))
+                                        {
+                                                /* Un-selecting a selected item */
+                                                gl_view_unselect_object (view, view_object);
+                                        } else {
+                                                /* Add to current selection */
+                                                gl_view_select_object (view, view_object);
+                                        }
+                                }
+                                else
+                                {
+                                        if (!gl_view_is_object_selected (view, view_object))
+                                        {
+                                                /* remove any selections before adding */
+                                                gl_view_unselect_all (view);
+                                                /* Add to current selection */
+                                                gl_view_select_object (view, view_object);
+                                        }
+                                }
+                                view->move_last_x = x;
+                                view->move_last_y = y;
+
+                                view->state = GL_VIEW_ARROW_MOVE;
+                        }
+                        else
+                        {
+                                if (!(event->state & GDK_CONTROL_MASK))
+                                {
+                                        gl_view_unselect_all (view);
+                                }
+
+                                view->select_region_visible = TRUE;
+                                view->select_region.x1 = x;
+                                view->select_region.y1 = y;
+                                view->select_region.x2 = x;
+                                view->select_region.y2 = y;
+
+                                view->state = GL_VIEW_ARROW_SELECT_REGION;
+                        }
+
+
+                        return_value = TRUE;
+                        break;
+
+                case GL_VIEW_MODE_OBJECT_CREATE:
+                        switch (view->create_type)
+                        {
+                        case GL_LABEL_OBJECT_BOX:
+                                gl_view_box_create_button_press_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_ELLIPSE:
+                                gl_view_ellipse_create_button_press_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_LINE:
+                                gl_view_line_create_button_press_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_IMAGE:
+                                gl_view_image_create_button_press_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_TEXT:
+                                gl_view_text_create_button_press_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_BARCODE:
+                                gl_view_barcode_create_button_press_event (view, x, y);
+                                break;
+                        default:
+                                g_message ("Invalid create type.");   /*Should not happen!*/
+                        }
+                        view->state = GL_VIEW_CREATE_DRAG;
+                        return_value = TRUE;
+                        break;
+
+                default:
+                        g_message ("Invalid view mode.");      /*Should not happen!*/
+                }
+
+                view->grabbed_flag = TRUE;
+                gdk_pointer_grab (GTK_LAYOUT (view->canvas)->bin_window,
+                                  FALSE,
+                                  (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK),
+                                  NULL,
+                                  NULL,
+                                  event->time);
+                break;
+
+        case 3:
+                g_signal_emit (G_OBJECT (view),
+                               signals[CONTEXT_MENU_ACTIVATE], 0,
+                               event->button, event->time);
+                return_value = TRUE;
+                break;
+
+        }
+
+       cairo_destroy (cr);
+
+        return return_value;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Button release event handler.                                   */
+/*---------------------------------------------------------------------------*/
+static gboolean
+button_release_event_cb (glView            *view,
+                         GdkEventButton    *event)
+{
+        gboolean     return_value = FALSE;
+       cairo_t     *cr;
+        gdouble      scale;
+        gdouble      x, y;
+        GdkCursor   *cursor;
+
+       cr = gdk_cairo_create (GTK_LAYOUT (view->canvas)->bin_window);
+
+        /*
+         * Translate to label coordinates
+         */
+        scale = view->zoom * view->home_scale;
+        cairo_scale (cr, scale, scale);
+        cairo_translate (cr, view->x0, view->y0);
+
+        x = event->x;
+        y = event->y;
+        cairo_device_to_user (cr, &x, &y);
+
+        switch (event->button)
+        {
+
+        case 1:
+                view->grabbed_flag = FALSE;
+                gdk_pointer_ungrab (event->time);
+                /*
+                 * Handle event as appropriate for mode
+                 */
+                switch (view->mode)
+                {
+                case GL_VIEW_MODE_ARROW:
+                        switch (view->state)
+                        {
+                        case GL_VIEW_ARROW_RESIZE:
+                                view->resize_object = NULL;
+
+                                view->state = GL_VIEW_IDLE;
+                                break;
+
+                        case GL_VIEW_ARROW_SELECT_REGION:
+#ifdef CLIP_UPDATES                                
+                                gl_view_update_region (view, cr, &view->select_region);
+#else
+                                gl_view_update (view);
+#endif
+
+                                view->select_region_visible = FALSE;
+                                view->select_region.x2 = x;
+                                view->select_region.y2 = y;
+
+                                gl_view_select_region (view, &view->select_region);
+
+                                view->state = GL_VIEW_IDLE;
+                                break;
+
+                        default:
+                                view->state = GL_VIEW_IDLE;
+                                break;
+                                
+                        }
+
+                        return_value = TRUE;
+                        break;
+
+
+                case GL_VIEW_MODE_OBJECT_CREATE:
+                        switch (view->create_type)
+                        {
+                        case GL_LABEL_OBJECT_BOX:
+                                gl_view_box_create_button_release_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_ELLIPSE:
+                                gl_view_ellipse_create_button_release_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_LINE:
+                                gl_view_line_create_button_release_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_IMAGE:
+                                gl_view_image_create_button_release_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_TEXT:
+                                gl_view_text_create_button_release_event (view, x, y);
+                                break;
+                        case GL_LABEL_OBJECT_BARCODE:
+                                gl_view_barcode_create_button_release_event (view, x, y);
+                                break;
+                        default:
+                                g_message ("Invalid create type.");   /*Should not happen!*/
+                        }
+                        view->mode = GL_VIEW_MODE_ARROW;
+                        view->state = GL_VIEW_IDLE;
+                        cursor = gdk_cursor_new (GDK_LEFT_PTR);
+                        gdk_window_set_cursor (view->canvas->window, cursor);
+                        gdk_cursor_unref (cursor);
+                        break;
+
+
+                default:
+                        g_message ("Invalid view mode.");      /*Should not happen!*/
+                }
+
+        }
+
+       cairo_destroy (cr);
+
+        return return_value;
+}
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE.  Key press event handler.                                        */
+/*---------------------------------------------------------------------------*/
+static gboolean
+key_press_event_cb (glView            *view,
+                    GdkEventKey       *event)
+{
+        GdkCursor *cursor;
+
+        gl_debug (DEBUG_VIEW, "");
+
+        if ( (view->mode == GL_VIEW_MODE_ARROW) &&
+             (view->state == GL_VIEW_IDLE) )
+        {
+                switch (event->keyval) {
+
+                case GDK_Left:
+                case GDK_KP_Left:
+                        gl_view_move_selection (view, -1.0 / (view->zoom), 0.0);
+                        break;
+                case GDK_Up:
+                case GDK_KP_Up:
+                        gl_view_move_selection (view, 0.0, -1.0 / (view->zoom));
+                        break;
+                case GDK_Right:
+                case GDK_KP_Right:
+                        gl_view_move_selection (view, 1.0 / (view->zoom), 0.0);
+                        break;
+                case GDK_Down:
+                case GDK_KP_Down:
+                        gl_view_move_selection (view, 0.0, 1.0 / (view->zoom));
+                        break;
+                case GDK_Delete:
+                case GDK_KP_Delete:
+                        gl_view_delete_selection (view);
+                        cursor = gdk_cursor_new (GDK_LEFT_PTR);
+                        gdk_window_set_cursor (GTK_WIDGET (view->canvas)->window
+, cursor);
+                        gdk_cursor_unref (cursor);
+                        break;
+                default:
+                        return FALSE;
+               }
+        }
+        return TRUE;    /* We handled this or we were dragging. */
+}
+
diff --git a/src/view.h b/src/view.h
new file mode 100644 (file)
index 0000000..38c3ed8
--- /dev/null
@@ -0,0 +1,357 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  view.h:  GLabels View module header file
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __VIEW_H__
+#define __VIEW_H__
+
+#include <gtk/gtkvbox.h>
+
+#include "label-object.h"
+
+typedef enum {
+       GL_VIEW_MODE_ARROW,
+       GL_VIEW_MODE_OBJECT_CREATE
+} glViewMode;
+
+typedef enum {
+        GL_VIEW_IDLE = 0,
+        GL_VIEW_ARROW_SELECT_REGION,
+        GL_VIEW_ARROW_MOVE,
+        GL_VIEW_ARROW_RESIZE,
+        GL_VIEW_CREATE_DRAG,
+} glViewState;
+
+#define GL_TYPE_VIEW            (gl_view_get_type ())
+#define GL_VIEW(obj)            (GTK_CHECK_CAST((obj), GL_TYPE_VIEW, glView ))
+#define GL_VIEW_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_VIEW, glViewClass))
+#define GL_IS_VIEW(obj)         (GTK_CHECK_TYPE ((obj), GL_TYPE_VIEW))
+#define GL_IS_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_VIEW))
+
+typedef struct _glView      glView;
+typedef struct _glViewClass glViewClass;
+
+#include "view-object.h"
+#include "color.h"
+
+struct _glView {
+       GtkVBox            parent_widget;
+
+       glLabel           *label;
+
+       GtkWidget         *canvas;
+       gdouble            zoom;
+       gboolean           zoom_to_fit_flag;
+       gdouble            home_scale;
+        gdouble            x0, y0;
+        gdouble            w, h;
+
+        gboolean           update_scheduled_flag;
+        gboolean           grid_visible;
+       gdouble            grid_spacing;
+
+        gboolean           markup_visible;
+
+       glViewMode         mode;
+       glLabelObjectType  create_type;
+        glViewState        state;
+        gboolean           grabbed_flag;
+
+        /* GL_VIEW_ARROW_MOVE state */
+        gdouble            move_last_x;
+        gdouble            move_last_y;
+
+        /* GL_VIEW_ARROW_SELECT_REGION state */
+        gboolean           select_region_visible;
+        glLabelRegion      select_region;
+
+        /* GL_VIEW_ARROW_RESIZE state */
+        glViewObject      *resize_object;
+        glViewObjectHandle resize_handle;
+        gboolean           resize_honor_aspect;
+
+        /* GL_VIEW_CREATE_DRAG state */
+        glLabelObject     *create_object;
+        gdouble            create_x0;
+        gdouble            create_y0;
+
+       GList             *object_list;           /* glViewObjects */
+       GList             *selected_object_list;  /* glViewObjects */
+
+       /* Clipboard selection stuff */
+       gint               have_selection;
+       glLabel           *selection_data;
+       GtkWidget         *invisible;
+
+       /* Default object text properties */
+       gchar             *default_font_family;
+       gdouble            default_font_size;
+       PangoWeight        default_font_weight;
+       gboolean           default_font_italic_flag;
+       guint              default_text_color;
+       PangoAlignment     default_text_alignment;
+       gdouble            default_text_line_spacing;
+
+       /* Default object line properties */
+       gdouble            default_line_width;
+       guint              default_line_color;
+       
+       /* Default object fill properties */
+       guint              default_fill_color;
+
+};
+
+struct _glViewClass {
+       GtkVBoxClass      parent_class;
+
+       /* Selection changed signal */
+       void (*selection_changed) (glView   *view,
+                                  gpointer  user_data);
+
+       /* Signal to launch a context menu */
+       void (*context_menu_activate) (glView   *view,
+                                      gint      button,
+                                      guint32   activate_time,
+                                      gpointer  user_data);
+
+       /* Signals to support a status bar */
+       void (*zoom_changed)      (glView   *view,
+                                  gdouble   zoom,
+                                  gpointer  user_data);
+       void (*pointer_moved)     (glView   *view,
+                                  gdouble   x,
+                                  gdouble   y,
+                                  gpointer  user_data);
+       void (*pointer_exit)      (glView   *view,
+                                  gpointer  user_data);
+       void (*mode_changed)      (glView   *view,
+                                  gpointer  user_data);
+};
+
+G_BEGIN_DECLS
+
+GType      gl_view_get_type                (void) G_GNUC_CONST;
+
+GtkWidget *gl_view_new                     (glLabel           *label);
+
+
+void       gl_view_update                  (glView            *view);
+
+void       gl_view_update_region           (glView            *view,
+                                            cairo_t           *cr,
+                                            glLabelRegion     *region);
+
+void       gl_view_show_grid               (glView            *view);
+
+void       gl_view_hide_grid               (glView            *view);
+
+void       gl_view_set_grid_spacing        (glView            *view,
+                                           gdouble            spacing);
+
+void       gl_view_show_markup             (glView            *view);
+
+void       gl_view_hide_markup             (glView            *view);
+
+void       gl_view_arrow_mode              (glView            *view);
+
+void       gl_view_object_create_mode      (glView            *view,
+                                           glLabelObjectType  type);
+
+
+void       gl_view_select_object           (glView            *view,
+                                           glViewObject      *view_object);
+
+void       gl_view_unselect_object         (glView            *view,
+                                           glViewObject      *view_object);
+
+void       gl_view_select_all              (glView            *view);
+
+void       gl_view_unselect_all            (glView            *view);
+
+void       gl_view_select_region           (glView            *view,
+                                            glLabelRegion     *region);
+
+gboolean   gl_view_is_object_selected      (glView            *view,
+                                           glViewObject      *view_object);
+
+gboolean   gl_view_is_selection_empty      (glView            *view);
+
+gboolean   gl_view_is_selection_atomic     (glView            *view);
+
+void       gl_view_delete_selection        (glView            *view);
+
+GtkWidget *gl_view_get_editor              (glView            *view);
+
+void       gl_view_raise_selection         (glView            *view);
+
+void       gl_view_lower_selection         (glView            *view);
+
+void       gl_view_rotate_selection        (glView            *view,
+                                           gdouble            theta_degs);
+
+void       gl_view_rotate_selection_left   (glView            *view);
+
+void       gl_view_rotate_selection_right  (glView            *view);
+
+void       gl_view_flip_selection_horiz    (glView            *view);
+
+void       gl_view_flip_selection_vert     (glView            *view);
+
+void       gl_view_align_selection_left    (glView            *view);
+
+void       gl_view_align_selection_right   (glView            *view);
+
+void       gl_view_align_selection_hcenter (glView            *view);
+
+void       gl_view_align_selection_top     (glView            *view);
+
+void       gl_view_align_selection_bottom  (glView            *view);
+
+void       gl_view_align_selection_vcenter (glView            *view);
+
+void       gl_view_center_selection_horiz  (glView            *view);
+
+void       gl_view_center_selection_vert   (glView            *view);
+
+void       gl_view_move_selection          (glView            *view,
+                                           gdouble            dx,
+                                           gdouble            dy);
+
+gboolean   gl_view_can_selection_text             (glView           *view);
+
+void       gl_view_set_selection_font_family      (glView           *view,
+                                                  const gchar      *font_family);
+
+void       gl_view_set_selection_font_size        (glView           *view,
+                                                  gdouble           font_size);
+
+void       gl_view_set_selection_font_weight      (glView           *view,
+                                                  PangoWeight      font_weight);
+
+void       gl_view_set_selection_text_line_spacing (glView           *view,
+                                                  gdouble           text_line_spacing);
+
+void       gl_view_set_selection_font_italic_flag (glView           *view,
+                                                  gboolean          font_italic_flag);
+
+void       gl_view_set_selection_text_alignment   (glView           *view,
+                                                  PangoAlignment    text_alignment);
+
+void       gl_view_set_selection_text_color       (glView           *view,
+                                                  glColorNode      *text_color_node);
+
+gboolean   gl_view_can_selection_fill             (glView           *view);
+
+void       gl_view_set_selection_fill_color       (glView           *view,
+                                                  glColorNode      *fill_color);
+
+gboolean   gl_view_can_selection_line_color       (glView           *view);
+
+void       gl_view_set_selection_line_color       (glView           *view,
+                                                  glColorNode      *line_color_node);
+
+gboolean   gl_view_can_selection_line_width       (glView           *view);
+
+void       gl_view_set_selection_line_width       (glView           *view,
+                                                  gdouble           line_width);
+
+
+void       gl_view_cut                     (glView            *view);
+
+void       gl_view_copy                    (glView            *view);
+
+void       gl_view_paste                   (glView            *view);
+
+
+void       gl_view_zoom_in                 (glView            *view);
+
+void       gl_view_zoom_out                (glView            *view);
+
+void       gl_view_zoom_to_fit             (glView            *view);
+
+void       gl_view_set_zoom                (glView            *view,
+                                           gdouble            zoom);
+
+gdouble    gl_view_get_zoom                (glView            *view);
+
+gboolean   gl_view_is_zoom_max             (glView            *view);
+
+gboolean   gl_view_is_zoom_min             (glView            *view);
+
+
+void       gl_view_set_default_font_family      (glView            *view,
+                                                const gchar       *font_family);
+
+void       gl_view_set_default_font_size        (glView            *view,
+                                                gdouble            font_size);
+
+void       gl_view_set_default_font_weight      (glView            *view,
+                                                PangoWeight        font_weight);
+
+void       gl_view_set_default_font_italic_flag (glView            *view,
+                                                gboolean           font_italic_flag);
+
+void       gl_view_set_default_text_color       (glView            *view,
+                                                guint              text_color);
+
+void       gl_view_set_default_text_alignment   (glView            *view,
+                                                PangoAlignment     text_alignment);
+
+void       gl_view_set_default_line_width       (glView            *view,
+                                                gdouble            line_width);
+
+void       gl_view_set_default_line_color       (glView            *view,
+                                                guint              line_color);
+
+void       gl_view_set_default_fill_color       (glView            *view,
+                                                guint              fill_color);
+void       gl_view_set_default_text_line_spacing (glView            *view,
+                                                gdouble            text_line_spacing);
+
+
+
+gchar           *gl_view_get_default_font_family      (glView            *view);
+
+gdouble          gl_view_get_default_font_size        (glView            *view);
+
+PangoWeight      gl_view_get_default_font_weight      (glView            *view);
+
+gboolean         gl_view_get_default_font_italic_flag (glView            *view);
+
+guint            gl_view_get_default_text_color       (glView            *view);
+
+PangoAlignment   gl_view_get_default_text_alignment   (glView            *view);
+
+gdouble          gl_view_get_default_text_line_spacing (glView            *view);
+
+gdouble          gl_view_get_default_line_width       (glView            *view);
+
+guint            gl_view_get_default_line_color       (glView            *view);
+
+guint            gl_view_get_default_fill_color       (glView            *view);
+
+
+
+G_END_DECLS
+
+#endif
diff --git a/src/warning-handler.c b/src/warning-handler.c
new file mode 100644 (file)
index 0000000..84e3244
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  warning-handler.c:  non-critical error handler
+ *
+ *  Copyright (C) 2005  Jim Evins <evins@snaught.com>.
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include <config.h>
+
+#include "warning-handler.h"
+
+#include <glib/gmessages.h>
+#include <glib/gi18n.h>
+#include <gtk/gtkmessagedialog.h>
+#include <gtk/gtkstock.h>
+#include <stdlib.h>
+
+static void warning_handler (const gchar    *log_domain,
+                             GLogLevelFlags  log_level,
+                             const gchar    *message,
+                             gpointer        user_data);
+
+\f
+/***************************************************************************/
+/* Initialize error handler.                                               */
+/***************************************************************************/
+void
+gl_warning_handler_init (void)
+{
+        g_log_set_handler ("LibGlabels",
+                           G_LOG_LEVEL_WARNING,
+                           warning_handler,
+                           "libglabels");
+
+        g_log_set_handler (G_LOG_DOMAIN,
+                           G_LOG_LEVEL_WARNING,
+                           warning_handler,
+                           "glabels");
+}
+
+/*-------------------------------------------------------------------------*/
+/* PRIVATE.  Actual error handler.                                         */
+/*-------------------------------------------------------------------------*/
+static void
+warning_handler (const gchar    *log_domain,
+                 GLogLevelFlags  log_level,
+                 const gchar    *message,
+                 gpointer        user_data)
+{
+        GtkWidget *dialog;
+
+        dialog = gtk_message_dialog_new (NULL,
+                                         GTK_DIALOG_MODAL,
+                                         GTK_MESSAGE_WARNING,
+                                         GTK_BUTTONS_CLOSE,
+                                         _("gLabels Error!"));
+        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+                                                  "%s", message);
+
+        gtk_dialog_run (GTK_DIALOG (dialog));
+
+       gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
diff --git a/src/warning-handler.h b/src/warning-handler.h
new file mode 100644 (file)
index 0000000..911cc16
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  warning-handler.h:  non-critical error handler header file
+ *
+ *  Copyright (C) 2005  Jim Evins <evins@snaught.com>.
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef __WARNING_HANDLER_H__
+#define __WARNING_HANDLER_H__
+
+#include <glib/gmacros.h>
+
+G_BEGIN_DECLS
+
+void gl_warning_handler_init (void);
+
+G_END_DECLS
+
+#endif
diff --git a/src/wdgt-chain-button.c b/src/wdgt-chain-button.c
new file mode 100644 (file)
index 0000000..7491311
--- /dev/null
@@ -0,0 +1,324 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/* wdgt-chain-button.c
+ * Modified version of gimpchainbutton.c for gLabels:
+ *
+ * LIBGIMP - The GIMP Library
+ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
+ *
+ * gimpchainbutton.c
+ * Copyright (C) 1999-2000 Sven Neumann <sven@gimp.org>
+ *
+ * Modified or gLabels by Jim Evins <evins@snaught.com>
+ *
+ * This library 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 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "wdgt-chain-button.h"
+
+#include <gtk/gtkdrawingarea.h>
+#include <gtk/gtkimage.h>
+#include <gtk/gtkbutton.h>
+
+#include "stock.h"
+
+
+enum
+{
+  TOGGLED,
+  LAST_SIGNAL
+};
+
+
+static void      gl_wdgt_chain_button_clicked_callback (GtkWidget          *widget,
+                                                       glWdgtChainButton  *button);
+static gboolean  gl_wdgt_chain_button_draw_lines       (GtkWidget          *widget,
+                                                       GdkEventExpose     *eevent,
+                                                       glWdgtChainButton  *button);
+
+
+static const gchar *gl_wdgt_chain_stock_items[] =
+{
+  GL_STOCK_HCHAIN,
+  GL_STOCK_HCHAIN_BROKEN,
+  GL_STOCK_VCHAIN,
+  GL_STOCK_VCHAIN_BROKEN
+};
+
+
+static guint gl_wdgt_chain_button_signals[LAST_SIGNAL] = { 0 };
+
+
+
+G_DEFINE_TYPE (glWdgtChainButton, gl_wdgt_chain_button, GTK_TYPE_TABLE);
+
+
+static void
+gl_wdgt_chain_button_class_init (glWdgtChainButtonClass *class)
+{
+       gl_wdgt_chain_button_parent_class = g_type_class_peek_parent (class);
+
+       gl_wdgt_chain_button_signals[TOGGLED] =
+               g_signal_new ("toggled",
+                             G_TYPE_FROM_CLASS (class),
+                             G_SIGNAL_RUN_FIRST,
+                             G_STRUCT_OFFSET (glWdgtChainButtonClass, toggled),
+                             NULL, NULL,
+                             g_cclosure_marshal_VOID__VOID,
+                             G_TYPE_NONE, 0);
+
+       class->toggled = NULL;
+}
+
+static void
+gl_wdgt_chain_button_init (glWdgtChainButton *button)
+{
+       button->position = GL_WDGT_CHAIN_TOP;
+       button->active   = FALSE;
+
+       button->line1    = gtk_drawing_area_new ();
+       button->line2    = gtk_drawing_area_new ();
+       button->image    = gtk_image_new ();
+
+       button->button   = gtk_button_new ();
+
+       gtk_button_set_relief (GTK_BUTTON (button->button), GTK_RELIEF_NONE);
+       gtk_container_add (GTK_CONTAINER (button->button), button->image);
+       gtk_widget_show (button->image);
+
+       g_signal_connect (button->button, "clicked",
+                         G_CALLBACK (gl_wdgt_chain_button_clicked_callback),
+                         button);
+       g_signal_connect (button->line1, "expose_event",
+                         G_CALLBACK (gl_wdgt_chain_button_draw_lines),
+                         button);
+       g_signal_connect (button->line2, "expose_event",
+                         G_CALLBACK (gl_wdgt_chain_button_draw_lines),
+                         button);
+}
+
+
+/**
+ * gl_wdgt_chain_button_new:
+ * @position: The position you are going to use for the button
+ *            with respect to the widgets you want to chain.
+ *
+ * Creates a new #glWdgtChainButton widget.
+ *
+ * This returns a button showing either a broken or a linked chain and
+ * small clamps attached to both sides that visually group the two widgets
+ * you want to connect. This widget looks best when attached
+ * to a table taking up two columns (or rows respectively) next
+ * to the widgets that it is supposed to connect. It may work
+ * for more than two widgets, but the look is optimized for two.
+ *
+ * Returns: Pointer to the new #glWdgtChainButton, which is inactive
+ *          by default. Use gl_wdgt_chain_button_set_active() to
+ *          change its state.
+ */
+GtkWidget *
+gl_wdgt_chain_button_new (glWdgtChainPosition position)
+{
+  glWdgtChainButton *button;
+
+  button = g_object_new (GL_WDGT_TYPE_CHAIN_BUTTON, NULL);
+
+  button->position = position;
+
+  gtk_image_set_from_stock
+    (GTK_IMAGE (button->image),
+     gl_wdgt_chain_stock_items[((position & GL_WDGT_CHAIN_LEFT) << 1) + ! button->active],
+     GTK_ICON_SIZE_BUTTON);
+
+  if (position & GL_WDGT_CHAIN_LEFT) /* are we a vertical chainbutton? */
+    {
+      gtk_table_resize (GTK_TABLE (button), 3, 1);
+      gtk_table_attach (GTK_TABLE (button), button->button, 0, 1, 1, 2,
+                       GTK_SHRINK, GTK_SHRINK, 0, 0);
+      gtk_table_attach_defaults (GTK_TABLE (button),
+                                button->line1, 0, 1, 0, 1);
+      gtk_table_attach_defaults (GTK_TABLE (button),
+                                button->line2, 0, 1, 2, 3);
+    }
+  else
+    {
+      gtk_table_resize (GTK_TABLE (button), 1, 3);
+      gtk_table_attach (GTK_TABLE (button), button->button, 1, 2, 0, 1,
+                       GTK_SHRINK, GTK_SHRINK, 0, 0);
+      gtk_table_attach_defaults (GTK_TABLE (button),
+                                button->line1, 0, 1, 0, 1);
+      gtk_table_attach_defaults (GTK_TABLE (button),
+                                button->line2, 2, 3, 0, 1);
+    }
+
+  gtk_widget_show (button->button);
+  gtk_widget_show (button->line1);
+  gtk_widget_show (button->line2);
+
+  return GTK_WIDGET (button);
+}
+
+/**
+ * gl_wdgt_chain_button_set_active:
+ * @button: Pointer to a #glWdgtChainButton.
+ * @active: The new state.
+ *
+ * Sets the state of the #glWdgtChainButton to be either locked (%TRUE) or
+ * unlocked (%FALSE) and changes the showed pixmap to reflect the new state.
+ */
+void
+gl_wdgt_chain_button_set_active (glWdgtChainButton  *button,
+                             gboolean          active)
+{
+  g_return_if_fail (GL_WDGT_IS_CHAIN_BUTTON (button));
+
+  if (button->active != active)
+    {
+      guint num;
+
+      button->active = active ? TRUE : FALSE;
+
+      num = ((button->position & GL_WDGT_CHAIN_LEFT) << 1) + (active ? 0 : 1);
+
+      gtk_image_set_from_stock (GTK_IMAGE (button->image),
+                                gl_wdgt_chain_stock_items[num],
+                                GTK_ICON_SIZE_BUTTON);
+    }
+}
+
+/**
+ * gl_wdgt_chain_button_get_active
+ * @button: Pointer to a #glWdgtChainButton.
+ *
+ * Checks the state of the #glWdgtChainButton.
+ *
+ * Returns: %TRUE if the #glWdgtChainButton is active (locked).
+ */
+gboolean
+gl_wdgt_chain_button_get_active (glWdgtChainButton *button)
+{
+  g_return_val_if_fail (GL_WDGT_IS_CHAIN_BUTTON (button), FALSE);
+
+  return button->active;
+}
+
+static void
+gl_wdgt_chain_button_clicked_callback (GtkWidget       *widget,
+                                   glWdgtChainButton *button)
+{
+  g_return_if_fail (GL_WDGT_IS_CHAIN_BUTTON (button));
+
+  gl_wdgt_chain_button_set_active (button, ! button->active);
+
+  g_signal_emit (button, gl_wdgt_chain_button_signals[TOGGLED], 0);
+}
+
+static gboolean
+gl_wdgt_chain_button_draw_lines (GtkWidget         *widget,
+                                GdkEventExpose    *eevent,
+                                glWdgtChainButton *button)
+{
+  GdkPoint             points[3];
+  GdkPoint             buf;
+  GtkShadowType               shadow;
+  glWdgtChainPosition  position;
+  gint                 which_line;
+
+#define SHORT_LINE 4
+  /* don't set this too high, there's no check against drawing outside
+     the widgets bounds yet (and probably never will be) */
+
+  g_return_val_if_fail (GL_WDGT_IS_CHAIN_BUTTON (button), FALSE);
+
+  points[0].x = widget->allocation.width / 2;
+  points[0].y = widget->allocation.height / 2;
+
+  which_line = (widget == button->line1) ? 1 : -1;
+
+  position = button->position;
+
+  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
+    switch (position)
+      {
+      case GL_WDGT_CHAIN_LEFT:
+        position = GL_WDGT_CHAIN_RIGHT;
+        break;
+      case GL_WDGT_CHAIN_RIGHT:
+        position = GL_WDGT_CHAIN_LEFT;
+        break;
+      default:
+        break;
+      }
+
+  switch (position)
+    {
+    case GL_WDGT_CHAIN_LEFT:
+      points[0].x += SHORT_LINE;
+      points[1].x = points[0].x - SHORT_LINE;
+      points[1].y = points[0].y;
+      points[2].x = points[1].x;
+      points[2].y = (which_line == 1) ? widget->allocation.height - 1 : 0;
+      shadow = GTK_SHADOW_ETCHED_IN;
+      break;
+    case GL_WDGT_CHAIN_RIGHT:
+      points[0].x -= SHORT_LINE;
+      points[1].x = points[0].x + SHORT_LINE;
+      points[1].y = points[0].y;
+      points[2].x = points[1].x;
+      points[2].y = (which_line == 1) ? widget->allocation.height - 1 : 0;
+      shadow = GTK_SHADOW_ETCHED_OUT;
+      break;
+    case GL_WDGT_CHAIN_TOP:
+      points[0].y += SHORT_LINE;
+      points[1].x = points[0].x;
+      points[1].y = points[0].y - SHORT_LINE;
+      points[2].x = (which_line == 1) ? widget->allocation.width - 1 : 0;
+      points[2].y = points[1].y;
+      shadow = GTK_SHADOW_ETCHED_OUT;
+      break;
+    case GL_WDGT_CHAIN_BOTTOM:
+      points[0].y -= SHORT_LINE;
+      points[1].x = points[0].x;
+      points[1].y = points[0].y + SHORT_LINE;
+      points[2].x = (which_line == 1) ? widget->allocation.width - 1 : 0;
+      points[2].y = points[1].y;
+      shadow = GTK_SHADOW_ETCHED_IN;
+      break;
+    default:
+      return FALSE;
+    }
+
+  if ( ((shadow == GTK_SHADOW_ETCHED_OUT) && (which_line == -1)) ||
+       ((shadow == GTK_SHADOW_ETCHED_IN) && (which_line == 1)) )
+    {
+      buf = points[0];
+      points[0] = points[2];
+      points[2] = buf;
+    }
+
+  gtk_paint_polygon (widget->style,
+                    widget->window,
+                    GTK_STATE_NORMAL,
+                    shadow,
+                    &eevent->area,
+                    widget,
+                    "chainbutton",
+                    points,
+                    3,
+                    FALSE);
+
+  return TRUE;
+}
diff --git a/src/wdgt-chain-button.h b/src/wdgt-chain-button.h
new file mode 100644 (file)
index 0000000..382af2a
--- /dev/null
@@ -0,0 +1,98 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/* wdgt-chain-button.h
+ * Modified version of gimpchainbutton.h for gLabels:
+ *
+ * LIBGIMP - The GIMP Library
+ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
+ *
+ * gimpchainbutton.h
+ * Copyright (C) 1999-2000 Sven Neumann <sven@gimp.org>
+ *
+ * Modified or gLabels by Jim Evins <evins@snaught.com>
+ *
+ * This library 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 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This implements a widget derived from GtkTable that visualizes
+ * it's state with two different pixmaps showing a closed and a
+ * broken chain. It's intented to be used with the GimpSizeEntry
+ * widget. The usage is quite similar to the one the GtkToggleButton
+ * provides.
+ */
+
+#ifndef __WDGT_CHAIN_BUTTON_H__
+#define __WDGT_CHAIN_BUTTON_H__
+
+#include <gtk/gtktable.h>
+
+G_BEGIN_DECLS
+
+
+typedef enum
+{
+  GL_WDGT_CHAIN_TOP,
+  GL_WDGT_CHAIN_LEFT,
+  GL_WDGT_CHAIN_BOTTOM,
+  GL_WDGT_CHAIN_RIGHT
+} glWdgtChainPosition;
+
+
+#define GL_WDGT_TYPE_CHAIN_BUTTON            (gl_wdgt_chain_button_get_type ())
+#define GL_WDGT_CHAIN_BUTTON(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GL_WDGT_TYPE_CHAIN_BUTTON, glWdgtChainButton))
+#define GL_WDGT_CHAIN_BUTTON_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GL_WDGT_TYPE_CHAIN_BUTTON, glWdgtChainButtonClass))
+#define GL_WDGT_IS_CHAIN_BUTTON(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GL_WDGT_TYPE_CHAIN_BUTTON))
+#define GL_WDGT_IS_CHAIN_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GL_WDGT_TYPE_CHAIN_BUTTON))
+#define GL_WDGT_CHAIN_BUTTON_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GL_WDGT_TYPE_CHAIN_BUTTON, glWdgtChainButtonClass))
+
+
+typedef struct _glWdgtChainButton       glWdgtChainButton;
+typedef struct _glWdgtChainButtonClass  glWdgtChainButtonClass;
+
+struct _glWdgtChainButton
+{
+  GtkTable           parent_instance;
+
+  glWdgtChainPosition  position;
+  gboolean           active;
+
+  GtkWidget         *button;
+  GtkWidget         *line1;
+  GtkWidget         *line2;
+  GtkWidget         *image;
+};
+
+struct _glWdgtChainButtonClass
+{
+  GtkTableClass  parent_class;
+
+  void (* toggled)  (glWdgtChainButton *button);
+};
+
+
+GType       gl_wdgt_chain_button_get_type   (void) G_GNUC_CONST;
+
+GtkWidget * gl_wdgt_chain_button_new        (glWdgtChainPosition  position);
+
+void        gl_wdgt_chain_button_set_active (glWdgtChainButton   *button,
+                                            gboolean             active);
+gboolean    gl_wdgt_chain_button_get_active (glWdgtChainButton   *button);
+
+
+G_END_DECLS
+
+#endif /* __WDGT_CHAIN_BUTTON_H__ */
diff --git a/src/wdgt-media-select.c b/src/wdgt-media-select.c
new file mode 100644 (file)
index 0000000..edb469a
--- /dev/null
@@ -0,0 +1,878 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_media_select.c:  media selection widget module
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "wdgt-media-select.h"
+
+#include <glib/gi18n.h>
+#include <glade/glade-xml.h>
+#include <gtk/gtknotebook.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtktreeview.h>
+#include <gtk/gtktreeselection.h>
+#include <gtk/gtkliststore.h>
+#include <gtk/gtkcellrenderertext.h>
+#include <gtk/gtkcellrendererpixbuf.h>
+#include <gtk/gtkstock.h>
+#include <string.h>
+
+#include "mini-preview-pixbuf-cache.h"
+#include "prefs.h"
+#include "util.h"
+#include "color.h"
+#include "marshal.h"
+#include <libglabels/db.h>
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+enum {
+       NAME_COLUMN,
+       PREVIEW_COLUMN,
+       PREVIEW_COLUMN_STOCK,
+       PREVIEW_COLUMN_STOCK_SIZE,
+       DESCRIPTION_COLUMN,
+       N_COLUMNS
+};
+
+struct _glWdgtMediaSelectPrivate {
+
+        GtkWidget    *notebook;
+        guint         current_page_num;
+
+        gint          recent_page_num;
+        GtkWidget    *recent_tab_vbox;
+        GtkWidget    *recent_treeview;
+        GtkListStore *recent_store;
+
+        gint          search_all_page_num;
+        GtkWidget    *search_all_tab_vbox;
+        GtkWidget    *brand_combo;
+        GtkWidget    *page_size_combo;
+        GtkWidget    *category_combo;
+        GtkWidget    *search_all_treeview;
+        GtkListStore *search_all_store;
+
+        /* Prevent recursion */
+       gboolean    stop_signals;
+};
+
+enum {
+        CHANGED,
+        LAST_SIGNAL
+};
+
+typedef void (*glWdgtMediaSelectSignal) (GObject * object, gpointer data);
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+static gint wdgt_media_select_signals[LAST_SIGNAL] = { 0 };
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void gl_wdgt_media_select_finalize      (GObject                *object);
+
+static void gl_wdgt_media_select_construct     (glWdgtMediaSelect      *media_select);
+
+static void filter_changed_cb                  (GtkComboBox            *combo,
+                                                gpointer                user_data);
+static void selection_changed_cb               (GtkTreeSelection       *selection,
+                                                gpointer                user_data);
+static void page_changed_cb                    (GtkNotebook            *notebook,
+                                                GtkNotebookPage        *page,
+                                                guint                   page_num,
+                                                gpointer                user_data);
+
+static gchar *get_layout_desc                  (const lglTemplate      *template);
+static gchar *get_label_size_desc              (const lglTemplate      *template);
+static void   load_recent_list                 (GtkListStore           *store,
+                                                GtkTreeSelection       *selection,
+                                                GSList                 *list);
+static void   load_search_all_list             (GtkListStore           *store,
+                                                GtkTreeSelection       *selection,
+                                                GList                  *list);
+\f
+/****************************************************************************/
+/* Boilerplate Object stuff.                                                */
+/****************************************************************************/
+G_DEFINE_TYPE (glWdgtMediaSelect, gl_wdgt_media_select, GTK_TYPE_VBOX);
+
+
+static void
+gl_wdgt_media_select_class_init (glWdgtMediaSelectClass *class)
+{
+        GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        gl_wdgt_media_select_parent_class = g_type_class_peek_parent (class);
+
+        object_class->finalize = gl_wdgt_media_select_finalize;
+
+        wdgt_media_select_signals[CHANGED] =
+            g_signal_new ("changed",
+                          G_OBJECT_CLASS_TYPE(object_class),
+                          G_SIGNAL_RUN_LAST,
+                          G_STRUCT_OFFSET (glWdgtMediaSelectClass, changed),
+                          NULL, NULL,
+                          gl_marshal_VOID__VOID,
+                          G_TYPE_NONE, 0);
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+static void
+gl_wdgt_media_select_init (glWdgtMediaSelect *media_select)
+{
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        media_select->priv = g_new0 (glWdgtMediaSelectPrivate, 1);
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+static void
+gl_wdgt_media_select_finalize (GObject *object)
+{
+        glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (object);
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        g_return_if_fail (object != NULL);
+        g_return_if_fail (GL_IS_WDGT_MEDIA_SELECT (object));
+
+        g_object_unref (media_select->priv->recent_store);
+        g_object_unref (media_select->priv->search_all_store);
+        g_free (media_select->priv);
+
+        G_OBJECT_CLASS (gl_wdgt_media_select_parent_class)->finalize (object);
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+GtkWidget *
+gl_wdgt_media_select_new (void)
+{
+        glWdgtMediaSelect *media_select;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        media_select = g_object_new (gl_wdgt_media_select_get_type (), NULL);
+
+        gl_wdgt_media_select_construct (media_select);
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+
+        return GTK_WIDGET (media_select);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct composite widget.                                    */
+/*--------------------------------------------------------------------------*/
+static void
+gl_wdgt_media_select_construct (glWdgtMediaSelect *media_select)
+{
+        GladeXML          *gui;
+        GtkWidget         *hbox;
+        GList             *brands = NULL;
+        GList             *page_sizes = NULL;
+        GList             *categories = NULL;
+        GList             *search_all_names = NULL;
+        const gchar       *page_size_id;
+        gchar             *page_size_name;
+        GtkCellRenderer   *renderer;
+        GtkTreeViewColumn *column;
+        GtkTreeSelection  *recent_selection;
+        GtkTreeSelection  *search_all_selection;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        g_return_if_fail (GL_IS_WDGT_MEDIA_SELECT (media_select));
+        g_return_if_fail (media_select->priv != NULL);
+
+        gui = glade_xml_new (GLABELS_GLADE_DIR "wdgt-media-select.glade",
+                             "wdgt_media_select_hbox", NULL);
+
+        if (!gui) {
+                g_critical ("Could not open wdgt-media-select.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+        hbox = glade_xml_get_widget (gui, "wdgt_media_select_hbox");
+        gtk_container_add (GTK_CONTAINER (media_select), hbox);
+
+        media_select->priv->notebook =
+                glade_xml_get_widget (gui, "notebook");
+
+        media_select->priv->recent_tab_vbox =
+                glade_xml_get_widget (gui, "recent_tab_vbox");
+        media_select->priv->recent_treeview =
+                glade_xml_get_widget (gui, "recent_treeview");
+
+        media_select->priv->search_all_tab_vbox =
+                glade_xml_get_widget (gui, "search_all_tab_vbox");
+        media_select->priv->brand_combo =
+                glade_xml_get_widget (gui, "brand_combo");
+        media_select->priv->page_size_combo =
+                glade_xml_get_widget (gui, "page_size_combo");
+        media_select->priv->category_combo =
+                glade_xml_get_widget (gui, "category_combo");
+        media_select->priv->search_all_treeview =
+                glade_xml_get_widget (gui, "search_all_treeview");
+
+        g_object_unref (gui);
+
+        media_select->priv->recent_page_num =
+                gtk_notebook_page_num (GTK_NOTEBOOK (media_select->priv->notebook),
+                                       media_select->priv->recent_tab_vbox);
+        media_select->priv->search_all_page_num =
+                gtk_notebook_page_num (GTK_NOTEBOOK (media_select->priv->notebook),
+                                       media_select->priv->search_all_tab_vbox);
+
+        /* Recent templates treeview */
+        media_select->priv->recent_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING);
+        gtk_tree_view_set_model (GTK_TREE_VIEW (media_select->priv->recent_treeview),
+                                 GTK_TREE_MODEL (media_select->priv->recent_store));
+        renderer = gtk_cell_renderer_pixbuf_new ();
+        column = gtk_tree_view_column_new_with_attributes ("", renderer,
+                                                           "pixbuf", PREVIEW_COLUMN,
+                                                           "stock-id", PREVIEW_COLUMN_STOCK,
+                                                           "stock-size", PREVIEW_COLUMN_STOCK_SIZE,
+                                                           NULL);
+        gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+        gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->recent_treeview), column);
+        renderer = gtk_cell_renderer_text_new ();
+        column = gtk_tree_view_column_new_with_attributes ("", renderer,
+                                                           "markup", DESCRIPTION_COLUMN,
+                                                           NULL);
+        gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+        gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->recent_treeview), column);
+        recent_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->recent_treeview));
+        load_recent_list (media_select->priv->recent_store, recent_selection, gl_prefs->recent_templates);
+
+        page_size_id = gl_prefs_get_page_size ();
+        page_size_name = lgl_db_lookup_paper_name_from_id (page_size_id);
+
+        /* Brand selection control */
+        gl_util_combo_box_add_text_model (GTK_COMBO_BOX (media_select->priv->brand_combo));
+        brands = lgl_db_get_brand_list (NULL, NULL);
+        brands = g_list_prepend (brands, g_strdup (_("Any")));
+        gl_util_combo_box_set_strings (GTK_COMBO_BOX (media_select->priv->brand_combo), brands);
+        lgl_db_free_brand_list (brands);
+        gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->brand_combo),
+                                           _("Any"));
+
+        /* Page size selection control */
+        gl_util_combo_box_add_text_model (GTK_COMBO_BOX (media_select->priv->page_size_combo));
+        page_sizes = lgl_db_get_paper_name_list ();
+        page_sizes = g_list_prepend (page_sizes, g_strdup (_("Any")));
+        gl_util_combo_box_set_strings (GTK_COMBO_BOX (media_select->priv->page_size_combo), page_sizes);
+        lgl_db_free_paper_name_list (page_sizes);
+        gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo),
+                                           page_size_name);
+
+        /* Category selection control */
+        gl_util_combo_box_add_text_model (GTK_COMBO_BOX (media_select->priv->category_combo));
+        categories = lgl_db_get_category_name_list ();
+        categories = g_list_prepend (categories, g_strdup (_("Any")));
+        gl_util_combo_box_set_strings (GTK_COMBO_BOX (media_select->priv->category_combo), categories);
+        gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->category_combo),
+                                           _("Any"));
+        lgl_db_free_category_name_list (categories);
+
+        /* Search all treeview */
+        media_select->priv->search_all_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING);
+        gtk_tree_view_set_model (GTK_TREE_VIEW (media_select->priv->search_all_treeview),
+                                 GTK_TREE_MODEL (media_select->priv->search_all_store));
+        renderer = gtk_cell_renderer_pixbuf_new ();
+        column = gtk_tree_view_column_new_with_attributes ("", renderer,
+                                                           "pixbuf", PREVIEW_COLUMN,
+                                                           "stock-id", PREVIEW_COLUMN_STOCK,
+                                                           "stock-size", PREVIEW_COLUMN_STOCK_SIZE,
+                                                           NULL);
+        gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+        gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->search_all_treeview), column);
+        renderer = gtk_cell_renderer_text_new ();
+        column = gtk_tree_view_column_new_with_attributes ("", renderer,
+                                                           "markup", DESCRIPTION_COLUMN,
+                                                           NULL);
+        gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+        gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->search_all_treeview), column);
+        search_all_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
+        search_all_names = lgl_db_get_template_name_list_all (NULL, page_size_id, NULL);
+        load_search_all_list (media_select->priv->search_all_store, search_all_selection, search_all_names);
+        lgl_db_free_template_name_list (search_all_names);
+
+        /* Connect signals to controls */
+        g_signal_connect (G_OBJECT (media_select->priv->brand_combo), "changed",
+                          G_CALLBACK (filter_changed_cb),
+                          media_select);
+        g_signal_connect (G_OBJECT (media_select->priv->page_size_combo), "changed",
+                          G_CALLBACK (filter_changed_cb),
+                          media_select);
+        g_signal_connect (G_OBJECT (media_select->priv->category_combo), "changed",
+                          G_CALLBACK (filter_changed_cb),
+                          media_select);
+        g_signal_connect (G_OBJECT (recent_selection), "changed",
+                          G_CALLBACK (selection_changed_cb),
+                          media_select);
+        g_signal_connect (G_OBJECT (search_all_selection), "changed",
+                          G_CALLBACK (selection_changed_cb),
+                          media_select);
+        g_signal_connect (G_OBJECT (media_select->priv->notebook), "switch-page",
+                          G_CALLBACK (page_changed_cb),
+                          media_select);
+
+        g_free (page_size_name);
+
+        gtk_widget_show_all (GTK_WIDGET (media_select));
+        if ( gl_prefs->recent_templates )
+        {
+                gtk_notebook_set_current_page (GTK_NOTEBOOK (media_select->priv->notebook),
+                                               media_select->priv->recent_page_num);
+        }
+        else
+        {
+                gtk_notebook_set_current_page (GTK_NOTEBOOK (media_select->priv->notebook),
+                                               media_select->priv->search_all_page_num);
+        }
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  modify widget due to change in selection                       */
+/*--------------------------------------------------------------------------*/
+static void
+filter_changed_cb (GtkComboBox *combo,
+                   gpointer     user_data)
+{
+        glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (user_data);
+        gchar             *brand;
+        gchar             *page_size_name, *page_size_id;
+        gchar             *category_name, *category_id;
+        GList             *search_all_names;
+        GtkTreeSelection  *selection;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+
+       media_select->priv->stop_signals = TRUE;
+
+        /* Update template selections for new filter settings */
+        brand = gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->brand_combo));
+        page_size_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo));
+        category_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->category_combo));
+        if ( brand && strlen(brand) &&
+             page_size_name && strlen(page_size_name) &&
+             category_name && strlen(category_name) )
+        {
+                gl_debug (DEBUG_MEDIA_SELECT, "brand = \"%s\"", brand);
+                gl_debug (DEBUG_MEDIA_SELECT, "page_size_name = \"%s\"", page_size_name);
+                gl_debug (DEBUG_MEDIA_SELECT, "category_name = \"%s\"", category_name);
+                if (!g_utf8_collate (brand, _("Any")))
+                {
+                        g_free (brand);
+                        brand = NULL;
+                }
+                page_size_id = lgl_db_lookup_paper_id_from_name (page_size_name);
+                category_id = lgl_db_lookup_category_id_from_name (category_name);
+                gl_debug (DEBUG_MEDIA_SELECT, "page_size_id = \"%s\"", page_size_id);
+                gl_debug (DEBUG_MEDIA_SELECT, "category_id = \"%s\"", category_id);
+                search_all_names = lgl_db_get_template_name_list_all (brand, page_size_id, category_id);
+                selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
+                load_search_all_list (media_select->priv->search_all_store, selection, search_all_names);
+                lgl_db_free_template_name_list (search_all_names);
+                g_free (page_size_id);
+                g_free (category_id);
+
+                /* Emit our "changed" signal */
+                g_signal_emit (G_OBJECT (user_data),
+                               wdgt_media_select_signals[CHANGED], 0);
+        }
+        g_free (brand);
+        g_free (page_size_name);
+        g_free (category_name);
+
+
+       media_select->priv->stop_signals = FALSE;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  modify widget due to change in selection                       */
+/*--------------------------------------------------------------------------*/
+static void
+selection_changed_cb (GtkTreeSelection       *selection,
+                      gpointer                user_data)
+{
+        glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (user_data);
+
+       if (media_select->priv->stop_signals) return;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (user_data),
+                       wdgt_media_select_signals[CHANGED], 0);
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  modify widget due to change in selection                       */
+/*--------------------------------------------------------------------------*/
+static void
+page_changed_cb (GtkNotebook            *notebook,
+                 GtkNotebookPage        *page,
+                 guint                   page_num,
+                 gpointer                user_data)
+{
+        glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (user_data);
+
+       if (media_select->priv->stop_signals) return;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        /*
+         * Store new current page, because this signal is emitted before the actual page change.
+         */
+       media_select->priv->current_page_num = page_num;
+
+        /* Emit our "changed" signal */
+        g_signal_emit (G_OBJECT (user_data),
+                       wdgt_media_select_signals[CHANGED], 0);
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+/****************************************************************************/
+/* query selected label template name.                                      */
+/****************************************************************************/
+gchar *
+gl_wdgt_media_select_get_name (glWdgtMediaSelect *media_select)
+{
+        gint               page_num;
+        GtkTreeSelection  *selection;
+        GtkTreeIter        iter;
+        GtkTreeModel      *model;        
+        gchar             *name;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        page_num = media_select->priv->current_page_num;
+        if (page_num == media_select->priv->recent_page_num)
+        {
+                selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->recent_treeview));
+        }
+        else if (page_num == media_select->priv->search_all_page_num)
+        {
+                selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
+        }
+        else
+        {
+                g_print ("notebook page = %d\n", page_num);
+                g_assert_not_reached ();
+        }
+
+        if (gtk_tree_selection_get_mode (selection) == GTK_SELECTION_NONE)
+        {
+                name = NULL;
+        }
+        else
+        {
+                gtk_tree_selection_get_selected (selection, &model, &iter);
+                gtk_tree_model_get (model, &iter, NAME_COLUMN, &name, -1);
+        }
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+        return name;
+}
+
+/****************************************************************************/
+/* set selected label template name.                                        */
+/****************************************************************************/
+void
+gl_wdgt_media_select_set_name (glWdgtMediaSelect *media_select,
+                               gchar             *name)
+{
+        GtkTreeSelection  *selection;
+        GtkTreeModel      *model;
+        GtkTreeIter        iter;
+        GtkTreePath       *path;
+        gchar             *name_i;
+        gboolean           flag;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
+        g_return_if_fail (GTK_IS_TREE_SELECTION (selection));
+
+        model = GTK_TREE_MODEL (media_select->priv->search_all_store);
+
+        for ( flag = gtk_tree_model_get_iter_first (model, &iter);
+              flag;
+              flag = gtk_tree_model_iter_next(model, &iter) )
+        {
+                gtk_tree_model_get (model, &iter, NAME_COLUMN, &name_i, -1); 
+                if (strcasecmp(name, name_i) == 0)
+                {
+                        gtk_tree_selection_select_iter (selection, &iter);
+                        path = gtk_tree_model_get_path (model, &iter);
+                        gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (media_select->priv->search_all_treeview),
+                                                      path,
+                                                      NULL,
+                                                      TRUE, 0.5, 0.0);
+                        gtk_tree_path_free (path);
+                        break;
+                }
+        }
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+/****************************************************************************/
+/* query current filter parameters.                                         */
+/****************************************************************************/
+void
+gl_wdgt_media_select_get_filter_parameters (glWdgtMediaSelect *media_select,
+                                            gchar            **page_size_id,
+                                            gchar            **category_id)
+{
+        gchar *page_size_name, *category_name;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "");
+
+        g_free (*page_size_id);
+        g_free (*category_id);
+
+        page_size_name =
+                gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo));
+
+        *page_size_id = lgl_db_lookup_paper_id_from_name (page_size_name);
+
+        category_name =
+                gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->category_combo));
+
+        *category_id = lgl_db_lookup_category_id_from_name (category_name);
+
+        g_free (page_size_name);
+        g_free (category_name);
+}
+
+/****************************************************************************/
+/* set filter parameters.                                                   */
+/****************************************************************************/
+void
+gl_wdgt_media_select_set_filter_parameters (glWdgtMediaSelect *media_select,
+                                            const gchar       *page_size_id,
+                                            const gchar       *category_id)
+{
+        gchar *page_size_name;
+        gchar *category_name;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        page_size_name = lgl_db_lookup_paper_name_from_id (page_size_id);
+        if (page_size_name == NULL)
+        {
+                page_size_name = g_strdup (_("Any"));
+        }
+
+        gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo),
+                                           page_size_name);
+
+        category_name = lgl_db_lookup_category_name_from_id (category_id);
+        if (category_name == NULL)
+        {
+                category_name = g_strdup (_("Any"));
+        }
+
+        gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->category_combo),
+                                           category_name);
+        g_free (page_size_name);
+        g_free (category_name);
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Get a description of the layout and number of labels.          */
+/*--------------------------------------------------------------------------*/
+static gchar *
+get_layout_desc (const lglTemplate *template)
+{
+        const lglTemplateFrame *frame;
+        gint                    n_labels;
+        gchar                  *string;
+
+        frame = (lglTemplateFrame *)template->frames->data;
+
+        n_labels = lgl_template_frame_get_n_labels (frame);
+
+        string = g_strdup_printf (_("%d per sheet"), n_labels);
+
+        return string;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Get label size description.                                    */ 
+/*--------------------------------------------------------------------------*/
+static gchar *
+get_label_size_desc (const lglTemplate *template)
+{
+        lglUnitsType               units;
+        const gchar               *units_string;
+        gdouble                    units_per_point;
+        const lglTemplateFrame    *frame;
+        gchar                     *string = NULL;
+
+        units           = gl_prefs_get_units ();
+        units_string    = gl_prefs_get_units_string ();
+        units_per_point = gl_prefs_get_units_per_point ();
+
+        frame = (lglTemplateFrame *)template->frames->data;
+
+        switch (frame->shape) {
+        case LGL_TEMPLATE_FRAME_SHAPE_RECT:
+                if ( units == LGL_UNITS_INCH ) {
+                        gchar *xstr, *ystr;
+
+                        xstr = gl_util_fraction (frame->rect.w*units_per_point);
+                        ystr = gl_util_fraction (frame->rect.h*units_per_point);
+                        string = g_strdup_printf (_("%s x %s %s"),
+                                                  xstr, ystr, units_string);
+                        g_free (xstr);
+                        g_free (ystr);
+                } else {
+                        string = g_strdup_printf (_("%.5g x %.5g %s"),
+                                                  frame->rect.w*units_per_point,
+                                                  frame->rect.h*units_per_point,
+                                                  units_string);
+                }
+                break;
+        case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
+                if ( units == LGL_UNITS_INCH ) {
+                        gchar *dstr;
+
+                        dstr = gl_util_fraction (2.0*frame->round.r*units_per_point);
+                        string = g_strdup_printf (_("%s %s diameter"),
+                                                  dstr, units_string);
+                        g_free (dstr);
+                } else {
+                        string = g_strdup_printf (_("%.5g %s diameter"),
+                                                  2.0*frame->round.r*units_per_point,
+                                                  units_string);
+                }
+                break;
+        case LGL_TEMPLATE_FRAME_SHAPE_CD:
+                if ( units == LGL_UNITS_INCH ) {
+                        gchar *dstr;
+
+                        dstr = gl_util_fraction (2.0*frame->cd.r1*units_per_point);
+                        string = g_strdup_printf (_("%s %s diameter"),
+                                                  dstr, units_string);
+                        g_free (dstr);
+                } else {
+                        string = g_strdup_printf (_("%.5g %s diameter"),
+                                                  2.0*frame->cd.r1*units_per_point,
+                                                  units_string);
+                }
+                break;
+        default:
+                break;
+        }
+
+        return string;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Load list store from template name list.                       */
+/*--------------------------------------------------------------------------*/
+static void
+load_recent_list (GtkListStore           *store,
+                  GtkTreeSelection       *selection,
+                  GSList                  *list)
+{
+        GSList      *p;
+        GtkTreeIter  iter;
+        lglTemplate *template;
+        GdkPixbuf   *pixbuf;
+        gchar       *size;
+        gchar       *layout;
+        gchar       *description;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        gtk_list_store_clear (store);
+
+        if (list)
+        {
+
+                for ( p=list; p!=NULL; p=p->next )
+                {
+
+                        gl_debug (DEBUG_MEDIA_SELECT, "p->data = \"%s\"", p->data);
+
+                        template = lgl_db_lookup_template_from_name (p->data);
+                        pixbuf = gl_mini_preview_pixbuf_cache_get_pixbuf (p->data);
+
+                        size = get_label_size_desc (template);
+                        layout = get_layout_desc (template);
+                        description = g_strdup_printf ("<b>%s: %s</b>\n%s\n%s",
+                                                       (gchar *)p->data,
+                                                       template->description,
+                                                       size,
+                                                       layout);
+                        g_free (size);
+                        g_free (layout);
+
+                        lgl_template_free (template);
+
+                        gtk_list_store_append (store, &iter);
+                        gtk_list_store_set (store, &iter,
+                                            NAME_COLUMN, p->data,
+                                            PREVIEW_COLUMN, pixbuf,
+                                            DESCRIPTION_COLUMN, description,
+                                            -1);
+
+                        g_object_unref (G_OBJECT (pixbuf));
+                        g_free (description);
+                }
+
+                gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
+                gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
+                gtk_tree_selection_select_iter (selection, &iter);
+
+        }
+        else
+        {
+                gchar *text = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">%s</span>\n%s",
+                                               _("No recent templates found."),
+                                               _("Try selecting a template from the \"Search all templates\" page."));
+                gtk_list_store_append (store, &iter);
+                gtk_list_store_set (store, &iter,
+                                    NAME_COLUMN, "empty",
+                                    PREVIEW_COLUMN_STOCK, GTK_STOCK_DIALOG_WARNING,
+                                    PREVIEW_COLUMN_STOCK_SIZE, GTK_ICON_SIZE_DIALOG,
+                                    DESCRIPTION_COLUMN, text,
+                                    -1);
+                g_free (text);
+
+                gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
+
+        }
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Load list store from template name list.                       */
+/*--------------------------------------------------------------------------*/
+static void
+load_search_all_list (GtkListStore           *store,
+                      GtkTreeSelection       *selection,
+                      GList                  *list)
+{
+        GList       *p;
+        GtkTreeIter  iter;
+        lglTemplate *template;
+        GdkPixbuf   *pixbuf;
+        gchar       *size;
+        gchar       *layout;
+        gchar       *description;
+
+        gl_debug (DEBUG_MEDIA_SELECT, "START");
+
+        gtk_list_store_clear (store);
+
+        if (list)
+        {
+
+                for ( p=list; p!=NULL; p=p->next )
+                {
+
+                        gl_debug (DEBUG_MEDIA_SELECT, "p->data = \"%s\"", p->data);
+
+                        template = lgl_db_lookup_template_from_name (p->data);
+                        pixbuf = gl_mini_preview_pixbuf_cache_get_pixbuf (p->data);
+
+                        size = get_label_size_desc (template);
+                        layout = get_layout_desc (template);
+                        description = g_strdup_printf ("<b>%s: %s</b>\n%s\n%s",
+                                                       (gchar *)p->data,
+                                                       template->description,
+                                                       size,
+                                                       layout);
+                        g_free (size);
+                        g_free (layout);
+
+                        lgl_template_free (template);
+
+                        gtk_list_store_append (store, &iter);
+                        gtk_list_store_set (store, &iter,
+                                            NAME_COLUMN, p->data,
+                                            PREVIEW_COLUMN, pixbuf,
+                                            DESCRIPTION_COLUMN, description,
+                                            -1);
+
+                        g_object_unref (G_OBJECT (pixbuf));
+                        g_free (description);
+                }
+
+                gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
+                gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
+                gtk_tree_selection_select_iter (selection, &iter);
+
+        }
+        else
+        {
+                gchar *text = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">%s</span>\n%s",
+                                               _("No match."),
+                                               _("Try selecting a different brand, page size or category."));
+                gtk_list_store_append (store, &iter);
+                gtk_list_store_set (store, &iter,
+                                    NAME_COLUMN, "empty",
+                                    PREVIEW_COLUMN_STOCK, GTK_STOCK_DIALOG_WARNING,
+                                    PREVIEW_COLUMN_STOCK_SIZE, GTK_ICON_SIZE_DIALOG,
+                                    DESCRIPTION_COLUMN, text,
+                                    -1);
+                g_free (text);
+
+                gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
+
+        }
+
+        gl_debug (DEBUG_MEDIA_SELECT, "END");
+}
+
diff --git a/src/wdgt-media-select.h b/src/wdgt-media-select.h
new file mode 100644 (file)
index 0000000..c8e95fc
--- /dev/null
@@ -0,0 +1,78 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_media_select.h:  media selection widget module header file
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __WDGT_MEDIA_SELECT_H__
+#define __WDGT_MEDIA_SELECT_H__
+
+#include <gtk/gtkvbox.h>
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_WDGT_MEDIA_SELECT (gl_wdgt_media_select_get_type ())
+#define GL_WDGT_MEDIA_SELECT(obj) \
+        (GTK_CHECK_CAST((obj), GL_TYPE_WDGT_MEDIA_SELECT, glWdgtMediaSelect ))
+#define GL_WDGT_MEDIA_SELECT_CLASS(klass) \
+        (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_WDGT_MEDIA_SELECT, glWdgtMediaSelectClass))
+#define GL_IS_WDGT_MEDIA_SELECT(obj) \
+        (GTK_CHECK_TYPE ((obj), GL_TYPE_WDGT_MEDIA_SELECT))
+#define GL_IS_WDGT_MEDIA_SELECT_CLASS(klass) \
+        (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_WDGT_MEDIA_SELECT))
+
+typedef struct _glWdgtMediaSelect         glWdgtMediaSelect;
+typedef struct _glWdgtMediaSelectClass    glWdgtMediaSelectClass;
+
+typedef struct _glWdgtMediaSelectPrivate  glWdgtMediaSelectPrivate;
+
+struct _glWdgtMediaSelect {
+        GtkVBox                    parent_widget;
+
+        glWdgtMediaSelectPrivate  *priv;
+};
+
+struct _glWdgtMediaSelectClass {
+        GtkVBoxClass               parent_class;
+
+        void (*changed) (glWdgtMediaSelect * media_select, gpointer user_data);
+};
+
+GType      gl_wdgt_media_select_get_type      (void) G_GNUC_CONST;
+
+GtkWidget *gl_wdgt_media_select_new           (void);
+
+gchar     *gl_wdgt_media_select_get_name      (glWdgtMediaSelect *media_select);
+
+void       gl_wdgt_media_select_set_name      (glWdgtMediaSelect *media_select,
+                                               gchar             *name);
+
+void       gl_wdgt_media_select_get_filter_parameters (glWdgtMediaSelect *media_select,
+                                                       gchar            **page_size_id,
+                                                       gchar            **category_id);
+
+void       gl_wdgt_media_select_set_filter_parameters (glWdgtMediaSelect *media_select,
+                                                       const gchar       *page_size_id,
+                                                       const gchar       *category_id);
+
+G_END_DECLS
+
+#endif
diff --git a/src/wdgt-mini-preview.c b/src/wdgt-mini-preview.c
new file mode 100644 (file)
index 0000000..c539e6b
--- /dev/null
@@ -0,0 +1,724 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_mini_preview.c:  mini preview widget module
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "wdgt-mini-preview.h"
+
+#include <math.h>
+
+#include "libglabels/db.h"
+#include "cairo-label-path.h"
+#include "marshal.h"
+#include "color.h"
+
+#include "debug.h"
+
+/*===========================================*/
+/* Private macros and constants.             */
+/*===========================================*/
+
+#define PAPER_RGB_ARGS          1.0,   1.0,   1.0
+#define PAPER_OUTLINE_RGB_ARGS  0.0,   0.0,   0.0
+#define LABEL_OUTLINE_RGB_ARGS  0.5,   0.5,   0.5
+
+#define SHADOW_X_OFFSET 5
+#define SHADOW_Y_OFFSET 5
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+enum {
+       CLICKED,
+       PRESSED,
+       LAST_SIGNAL
+};
+
+typedef struct {
+       gdouble x;
+       gdouble y;
+} LabelCenter;
+
+struct _glWdgtMiniPreviewPrivate {
+
+       gint            height;
+       gint            width;
+
+       lglTemplate    *template;
+       gdouble         scale;
+       gdouble         offset_x;
+       gdouble         offset_y;
+       gint            labels_per_sheet;
+       LabelCenter    *centers;
+
+       gint            highlight_first;
+       gint            highlight_last;
+
+       gboolean        dragging;
+       gint            first_i;
+       gint            last_i;
+       gint            prev_i;
+};
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+static gint wdgt_mini_preview_signals[LAST_SIGNAL] = { 0 };
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void gl_wdgt_mini_preview_finalize      (GObject                *object);
+
+static void gl_wdgt_mini_preview_construct     (glWdgtMiniPreview      *preview,
+                                               gint                    height,
+                                               gint                    width);
+
+static gboolean expose_event_cb                (GtkWidget              *widget,
+                                               GdkEventExpose         *event);
+static void style_set_cb                       (GtkWidget              *widget,
+                                               GtkStyle               *previous_style);
+static gboolean button_press_event_cb          (GtkWidget              *widget,
+                                               GdkEventButton         *event);
+static gboolean motion_notify_event_cb         (GtkWidget              *widget,
+                                               GdkEventMotion         *event);
+static gboolean button_release_event_cb        (GtkWidget              *widget,
+                                               GdkEventButton         *event);
+
+
+static void redraw                             (GtkWidget              *widget);
+static void draw                               (glWdgtMiniPreview      *preview,
+                                               cairo_t                *cr);
+
+static void draw_shadow                        (glWdgtMiniPreview      *preview,
+                                               cairo_t                *cr,
+                                               gdouble                      x,
+                                               gdouble                 y,
+                                               gdouble                 width,
+                                               gdouble                 height);
+static void draw_paper                         (glWdgtMiniPreview      *preview,
+                                               cairo_t                *cr,
+                                               gdouble                 width,
+                                               gdouble                 height,
+                                               gdouble                 line_width);
+static void draw_labels                        (glWdgtMiniPreview      *preview,
+                                               cairo_t                *cr,
+                                               lglTemplate            *template,
+                                               gdouble                 line_width);
+
+static gint find_closest_label                 (glWdgtMiniPreview      *preview,
+                                               gdouble                 x,
+                                               gdouble                 y);
+
+
+\f
+/****************************************************************************/
+/* Boilerplate Object stuff.                                                */
+/****************************************************************************/
+G_DEFINE_TYPE (glWdgtMiniPreview, gl_wdgt_mini_preview, GTK_TYPE_DRAWING_AREA);
+
+
+static void
+gl_wdgt_mini_preview_class_init (glWdgtMiniPreviewClass *class)
+{
+       GObjectClass   *object_class = G_OBJECT_CLASS (class);
+       GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       gl_wdgt_mini_preview_parent_class = gtk_type_class (gtk_hbox_get_type ());
+
+       object_class->finalize = gl_wdgt_mini_preview_finalize;
+
+       widget_class->expose_event         = expose_event_cb;
+       widget_class->style_set            = style_set_cb;
+       widget_class->button_press_event   = button_press_event_cb;
+       widget_class->motion_notify_event  = motion_notify_event_cb;
+       widget_class->button_release_event = button_release_event_cb;
+
+       wdgt_mini_preview_signals[CLICKED] =
+           g_signal_new ("clicked",
+                         G_OBJECT_CLASS_TYPE(object_class),
+                         G_SIGNAL_RUN_LAST,
+                         G_STRUCT_OFFSET (glWdgtMiniPreviewClass, clicked),
+                         NULL, NULL,
+                         gl_marshal_VOID__INT,
+                         G_TYPE_NONE, 1, G_TYPE_INT);
+
+       wdgt_mini_preview_signals[PRESSED] =
+           g_signal_new ("pressed",
+                         G_OBJECT_CLASS_TYPE(object_class),
+                         G_SIGNAL_RUN_LAST,
+                         G_STRUCT_OFFSET (glWdgtMiniPreviewClass, pressed),
+                         NULL, NULL,
+                         gl_marshal_VOID__INT_INT,
+                         G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+static void
+gl_wdgt_mini_preview_init (glWdgtMiniPreview *preview)
+{
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       preview->priv = g_new0 (glWdgtMiniPreviewPrivate, 1);
+
+       gtk_widget_add_events (GTK_WIDGET (preview),
+                              GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+                              GDK_POINTER_MOTION_MASK);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+static void
+gl_wdgt_mini_preview_finalize (GObject *object)
+{
+       glWdgtMiniPreview *preview = GL_WDGT_MINI_PREVIEW (object);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_WDGT_MINI_PREVIEW (object));
+
+       lgl_template_free (preview->priv->template);
+       g_free (preview->priv->centers);
+       g_free (preview->priv);
+
+       G_OBJECT_CLASS (gl_wdgt_mini_preview_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+GtkWidget *
+gl_wdgt_mini_preview_new (gint height,
+                         gint width)
+{
+       glWdgtMiniPreview *preview;
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       preview = g_object_new (gl_wdgt_mini_preview_get_type (), NULL);
+
+       gl_wdgt_mini_preview_construct (preview, height, width);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+
+       return GTK_WIDGET (preview);
+}
+
+/*--------------------------------------------------------------------------*/
+/* Construct composite widget.                                              */
+/*--------------------------------------------------------------------------*/
+static void
+gl_wdgt_mini_preview_construct (glWdgtMiniPreview *preview,
+                               gint               height,
+                               gint               width)
+{
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       preview->priv->height = height;
+       preview->priv->width  = width;
+
+       gtk_widget_set_size_request (GTK_WIDGET (preview), width, height);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+/****************************************************************************/
+/* Set label for mini-preview to determine geometry.                        */
+/****************************************************************************/
+void gl_wdgt_mini_preview_set_label_by_name (glWdgtMiniPreview *preview,
+                                            const gchar       *name)
+{
+       lglTemplate *template;
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       /* Fetch template */
+       template = lgl_db_lookup_template_from_name (name);
+
+       gl_wdgt_mini_preview_set_template (preview, template);
+
+       lgl_template_free (template);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+/****************************************************************************/
+/* Set label for mini-preview to determine geometry.                        */
+/****************************************************************************/
+void gl_wdgt_mini_preview_set_template (glWdgtMiniPreview *preview,
+                                       const lglTemplate *template)
+{
+       const lglTemplateFrame    *frame;
+       lglTemplateOrigin         *origins;
+       gdouble                    w, h;
+       gint                       i;
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+        frame = (lglTemplateFrame *)template->frames->data;
+
+       /*
+        * Set template
+        */
+       lgl_template_free (preview->priv->template);
+       preview->priv->template = lgl_template_dup (template);
+
+       /*
+        * Set scale and offsets
+        */
+       w = preview->priv->width - 4 - 2*SHADOW_X_OFFSET;
+       h = preview->priv->height - 4 - 2*SHADOW_Y_OFFSET;
+       if ( (w/template->page_width) > (h/template->page_height) ) {
+               preview->priv->scale = h / template->page_height;
+       } else {
+               preview->priv->scale = w / template->page_width;
+       }
+       preview->priv->offset_x = (preview->priv->width/preview->priv->scale - template->page_width) / 2.0;
+       preview->priv->offset_y = (preview->priv->height/preview->priv->scale - template->page_height) / 2.0;
+
+       /*
+        * Set labels per sheet
+        */
+       preview->priv->labels_per_sheet = lgl_template_frame_get_n_labels (frame);
+
+       /*
+        * Initialize centers
+        */
+       g_free (preview->priv->centers);
+       preview->priv->centers = g_new0 (LabelCenter, preview->priv->labels_per_sheet);
+       origins = lgl_template_frame_get_origins (frame);
+       lgl_template_frame_get_size (frame, &w, &h);
+       for ( i=0; i<preview->priv->labels_per_sheet; i++ )
+       {
+               preview->priv->centers[i].x = origins[i].x + w/2.0;
+               preview->priv->centers[i].y = origins[i].y + h/2.0;
+       }
+       g_free (origins);
+
+       /*
+        * Redraw modified preview
+        */
+       redraw( GTK_WIDGET (preview));
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+/****************************************************************************/
+/* Highlight given label outlines.                                          */
+/****************************************************************************/
+void
+gl_wdgt_mini_preview_highlight_range (glWdgtMiniPreview *preview,
+                                     gint               first_label,
+                                     gint               last_label)
+{
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       preview->priv->highlight_first = first_label;
+       preview->priv->highlight_last =  last_label;
+
+       redraw( GTK_WIDGET (preview));
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* Expose event handler.                                                    */
+/*--------------------------------------------------------------------------*/
+static gboolean
+expose_event_cb (GtkWidget       *widget,
+                GdkEventExpose  *event)
+{
+       cairo_t *cr;
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       cr = gdk_cairo_create (widget->window);
+
+       cairo_rectangle (cr,
+                       event->area.x, event->area.y,
+                       event->area.width, event->area.height);
+       cairo_clip (cr);
+       
+       draw (GL_WDGT_MINI_PREVIEW (widget), cr);
+
+       cairo_destroy (cr);
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+       return FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Button press event handler                                               */
+/*--------------------------------------------------------------------------*/
+static gboolean
+button_press_event_cb (GtkWidget      *widget,
+                      GdkEventButton *event)
+{
+       glWdgtMiniPreview *preview = GL_WDGT_MINI_PREVIEW (widget);
+       cairo_t           *cr;
+       gdouble            x, y;
+       gint               i;
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       if ( event->button == 1 )
+       {
+               cr = gdk_cairo_create (widget->window);
+
+               /* Set transformation. */
+               cairo_identity_matrix (cr);
+               cairo_scale (cr, preview->priv->scale, preview->priv->scale);
+               cairo_translate (cr, preview->priv->offset_x, preview->priv->offset_y);
+
+               x = event->x;
+               y = event->y;
+               cairo_device_to_user (cr, &x, &y);
+
+               i = find_closest_label (preview, x, y);
+
+               g_signal_emit (G_OBJECT(preview),
+                              wdgt_mini_preview_signals[CLICKED],
+                              0, i);
+
+               preview->priv->first_i = i;
+               preview->priv->last_i  = i;
+               g_signal_emit (G_OBJECT(preview),
+                              wdgt_mini_preview_signals[PRESSED],
+                              0, preview->priv->first_i, preview->priv->last_i);
+
+               preview->priv->dragging = TRUE;
+               preview->priv->prev_i   = i;
+
+               cairo_destroy (cr);
+       }
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+       return FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Motion notify event handler                                              */
+/*--------------------------------------------------------------------------*/
+static gboolean
+motion_notify_event_cb (GtkWidget      *widget,
+                       GdkEventMotion *event)
+{
+       glWdgtMiniPreview *preview = GL_WDGT_MINI_PREVIEW (widget);
+       cairo_t           *cr;
+       gdouble            x, y;
+       gint               i;
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       if (preview->priv->dragging)
+       {
+               cr = gdk_cairo_create (widget->window);
+
+               /* Set transformation. */
+               cairo_identity_matrix (cr);
+               cairo_scale (cr, preview->priv->scale, preview->priv->scale);
+               cairo_translate (cr, preview->priv->offset_x, preview->priv->offset_y);
+
+               x = event->x;
+               y = event->y;
+               cairo_device_to_user (cr, &x, &y);
+
+               i = find_closest_label (preview, x, y);
+
+               if ( i != preview->priv->prev_i )
+               {
+                       preview->priv->last_i = i;
+
+                       g_signal_emit (G_OBJECT(preview),
+                                      wdgt_mini_preview_signals[PRESSED],
+                                      0,
+                                      MIN (preview->priv->first_i, preview->priv->last_i),
+                                      MAX (preview->priv->first_i, preview->priv->last_i));
+
+                       preview->priv->prev_i = i;
+               }
+               cairo_destroy (cr);
+       }
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+       return FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Button release event handler                                             */
+/*--------------------------------------------------------------------------*/
+static gboolean
+button_release_event_cb (GtkWidget      *widget,
+                        GdkEventButton *event)
+{
+       glWdgtMiniPreview *preview = GL_WDGT_MINI_PREVIEW (widget);
+       
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       if ( event->button == 1 )
+       {
+               preview->priv->dragging = FALSE;
+
+       }
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+       return FALSE;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Style set handler (updates colors when style/theme changes).             */
+/*--------------------------------------------------------------------------*/
+static void
+style_set_cb (GtkWidget        *widget,
+             GtkStyle         *previous_style)
+{
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       redraw( widget );
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Redraw.                                                                  */
+/*--------------------------------------------------------------------------*/
+static void
+redraw (GtkWidget *widget)
+{
+       GdkRegion *region;
+       
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       if (widget->window)
+       {
+
+               region = gdk_drawable_get_clip_region (widget->window);
+
+               gdk_window_invalidate_region (widget->window, region, TRUE);
+               gdk_window_process_updates (widget->window, TRUE);
+
+               gdk_region_destroy (region);
+       }
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Find index+1 of label closest to given coordinates.                      */
+/*--------------------------------------------------------------------------*/
+static gint
+find_closest_label (glWdgtMiniPreview      *preview,
+                   gdouble                 x,
+                   gdouble                 y)
+{
+       gint    i;
+       gint    min_i;
+       gdouble dx, dy, d2, min_d2;
+
+       dx = x - preview->priv->centers[0].x;
+       dy = y - preview->priv->centers[0].y;
+       min_d2 = dx*dx + dy*dy;
+       min_i = 0;
+
+       for ( i=1; i<preview->priv->labels_per_sheet; i++ )
+       {
+               dx = x - preview->priv->centers[i].x;
+               dy = y - preview->priv->centers[i].y;
+               d2 = dx*dx + dy*dy;
+
+               if ( d2 < min_d2 )
+               {
+                       min_d2 = d2;
+                       min_i  = i;
+               }
+       }
+
+       return min_i + 1;
+}
+
+/*--------------------------------------------------------------------------*/
+/* Draw mini preview.                                                       */
+/*--------------------------------------------------------------------------*/
+static void
+draw (glWdgtMiniPreview  *preview,
+      cairo_t            *cr)
+{
+       lglTemplate *template = preview->priv->template;
+       gdouble      shadow_x, shadow_y;
+
+       gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       if (template)
+       {
+
+               /* Set transformation. */
+               cairo_identity_matrix (cr);
+               cairo_scale (cr, preview->priv->scale, preview->priv->scale);
+               cairo_translate (cr, preview->priv->offset_x, preview->priv->offset_y);
+
+
+               /* update shadow */
+               shadow_x = SHADOW_X_OFFSET/preview->priv->scale;
+               shadow_y = SHADOW_Y_OFFSET/preview->priv->scale;
+
+               draw_shadow (preview, cr,
+                            shadow_x, shadow_y,
+                            template->page_width, template->page_height);
+
+               draw_paper (preview, cr,
+                           template->page_width, template->page_height,
+                           1.0/preview->priv->scale);
+
+               draw_labels (preview, cr, template, 1.0/preview->priv->scale);
+                            
+       }
+
+       gl_debug (DEBUG_MINI_PREVIEW, "END");
+
+}
+
+
+/*--------------------------------------------------------------------------*/
+/* Draw page shadow                                                         */
+/*--------------------------------------------------------------------------*/
+static void
+draw_shadow (glWdgtMiniPreview      *preview,
+            cairo_t                *cr,
+            gdouble                 x,
+            gdouble                 y,
+            gdouble                 width,
+            gdouble                 height)
+{
+       GtkStyle *style;
+       guint     shadow_color;
+
+        gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       cairo_save (cr);
+
+       cairo_rectangle (cr, x, y, width, height);
+
+       style = gtk_widget_get_style (GTK_WIDGET(preview));
+       shadow_color = gl_color_from_gdk_color (&style->bg[GTK_STATE_ACTIVE]);
+       cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (shadow_color));
+
+        cairo_fill (cr);
+
+        cairo_restore (cr);
+
+        gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Draw page                                                                */
+/*--------------------------------------------------------------------------*/
+static void
+draw_paper (glWdgtMiniPreview      *preview,
+           cairo_t                *cr,
+           gdouble                 width,
+           gdouble                 height,
+           gdouble                 line_width)
+{
+       cairo_save (cr);
+
+        gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+       cairo_rectangle (cr, 0.0, 0.0, width, height);
+
+       cairo_set_source_rgb (cr, PAPER_RGB_ARGS);
+        cairo_fill_preserve (cr);
+
+       cairo_set_source_rgb (cr, PAPER_OUTLINE_RGB_ARGS);
+       cairo_set_line_width (cr, line_width);
+        cairo_stroke (cr);
+
+        cairo_restore (cr);
+
+        gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* Draw labels                                                              */
+/*--------------------------------------------------------------------------*/
+static void
+draw_labels (glWdgtMiniPreview *preview,
+            cairo_t           *cr,
+            lglTemplate       *template,
+            gdouble            line_width)
+{
+        const lglTemplateFrame    *frame;
+        gint                       i, n_labels;
+        lglTemplateOrigin         *origins;
+       GtkStyle                  *style;
+       guint                      highlight_color;
+
+        gl_debug (DEBUG_MINI_PREVIEW, "START");
+
+        frame = (lglTemplateFrame *)template->frames->data;
+
+        n_labels = lgl_template_frame_get_n_labels (frame);
+        origins  = lgl_template_frame_get_origins (frame);
+
+       style = gtk_widget_get_style (GTK_WIDGET(preview));
+       highlight_color = gl_color_from_gdk_color (&style->base[GTK_STATE_SELECTED]);
+
+        for ( i=0; i < n_labels; i++ ) {
+
+               cairo_save (cr);
+
+                cairo_translate (cr, origins[i].x, origins[i].y);
+                gl_cairo_label_path (cr, template, FALSE, FALSE);
+
+               if ( ((i+1) >= preview->priv->highlight_first) &&
+                    ((i+1) <= preview->priv->highlight_last) )
+               {
+                       cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (highlight_color));
+               }
+               else
+               {
+                       cairo_set_source_rgb (cr, PAPER_RGB_ARGS);
+               }
+               cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
+               cairo_fill_preserve (cr);
+
+               cairo_set_line_width (cr, line_width);
+               cairo_set_source_rgb (cr, LABEL_OUTLINE_RGB_ARGS);
+               cairo_stroke (cr);
+
+               cairo_restore (cr);
+
+        }
+
+        g_free (origins);
+
+        gl_debug (DEBUG_MINI_PREVIEW, "END");
+}
+
diff --git a/src/wdgt-mini-preview.h b/src/wdgt-mini-preview.h
new file mode 100644 (file)
index 0000000..8754b85
--- /dev/null
@@ -0,0 +1,83 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_mini_preview.h:  mini-preview widget module header file
+ *
+ *  Copyright (C) 2001-2007  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __WDGT_MINI_PREVIEW_H__
+#define __WDGT_MINI_PREVIEW_H__
+
+#include <gtk/gtk.h>
+#include "label.h"
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_WDGT_MINI_PREVIEW (gl_wdgt_mini_preview_get_type ())
+#define GL_WDGT_MINI_PREVIEW(obj) \
+        (GTK_CHECK_CAST((obj), GL_TYPE_WDGT_MINI_PREVIEW, glWdgtMiniPreview ))
+#define GL_WDGT_MINI_PREVIEW_CLASS(klass) \
+        (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_WDGT_MINI_PREVIEW, glWdgtMiniPreviewClass))
+#define GL_IS_WDGT_MINI_PREVIEW(obj) \
+        (GTK_CHECK_TYPE ((obj), GL_TYPE_WDGT_MINI_PREVIEW))
+#define GL_IS_WDGT_MINI_PREVIEW_CLASS(klass) \
+        (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_WDGT_MINI_PREVIEW))
+
+typedef struct _glWdgtMiniPreview        glWdgtMiniPreview;
+typedef struct _glWdgtMiniPreviewPrivate glWdgtMiniPreviewPrivate;
+typedef struct _glWdgtMiniPreviewClass   glWdgtMiniPreviewClass;
+
+struct _glWdgtMiniPreview {
+       GtkDrawingArea            parent_widget;
+
+       glWdgtMiniPreviewPrivate *priv;
+};
+
+struct _glWdgtMiniPreviewClass {
+       GtkDrawingAreaClass       parent_class;
+
+       void (*clicked) (glWdgtMiniPreview *preview,
+                        gint index,
+                        gpointer user_data);
+
+       void (*pressed) (glWdgtMiniPreview *preview,
+                        gint index1,
+                        gint index2,
+                        gpointer user_data);
+};
+
+GType      gl_wdgt_mini_preview_get_type          (void) G_GNUC_CONST;
+
+GtkWidget *gl_wdgt_mini_preview_new               (gint               height,
+                                                  gint               width);
+
+void       gl_wdgt_mini_preview_set_label_by_name (glWdgtMiniPreview *preview,
+                                                  const gchar       *name);
+
+void       gl_wdgt_mini_preview_set_template      (glWdgtMiniPreview *preview,
+                                                  const lglTemplate *template);
+
+void       gl_wdgt_mini_preview_highlight_range   (glWdgtMiniPreview *preview,
+                                                  gint               first_label,
+                                                  gint               last_label);
+
+G_END_DECLS
+
+#endif
diff --git a/src/wdgt-print-copies.c b/src/wdgt-print-copies.c
new file mode 100644 (file)
index 0000000..7d2f35b
--- /dev/null
@@ -0,0 +1,363 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_print_copies.c:  custom print copies widget module
+ *
+ *  Copyright (C) 2001  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "wdgt-print-copies.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtkradiobutton.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkvbox.h>
+
+#include "hig.h"
+#include "wdgt-mini-preview.h"
+#include "marshal.h"
+
+#include "debug.h"
+
+#define WDGT_MINI_PREVIEW_HEIGHT 175
+#define WDGT_MINI_PREVIEW_WIDTH  150
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void gl_wdgt_print_copies_finalize      (GObject * object);
+
+static void gl_wdgt_print_copies_construct     (glWdgtPrintCopies * copies,
+                                               glLabel * label);
+
+static void sheets_radio_cb                    (GtkToggleButton * togglebutton,
+                                               gpointer user_data);
+static void first_spin_cb                      (GtkSpinButton * spinbutton,
+                                               gpointer user_data);
+static void last_spin_cb                       (GtkSpinButton * spinbutton,
+                                               gpointer user_data);
+
+static void
+preview_pressed (glWdgtMiniPreview *mini_preview,
+                gint first, gint last, gpointer user_data);
+
+\f
+/****************************************************************************/
+/* Boilerplate Object stuff.                                                */
+/****************************************************************************/
+G_DEFINE_TYPE (glWdgtPrintCopies, gl_wdgt_print_copies, GTK_TYPE_HBOX);
+
+static void
+gl_wdgt_print_copies_class_init (glWdgtPrintCopiesClass * class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_wdgt_print_copies_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_wdgt_print_copies_finalize;
+}
+
+static void
+gl_wdgt_print_copies_init (glWdgtPrintCopies * copies)
+{
+       copies->labels_per_sheet = 0;
+
+       copies->mini_preview = NULL;
+
+       copies->sheets_radio = NULL;
+       copies->sheets_spin = NULL;
+
+       copies->labels_radio = NULL;
+       copies->first_spin = NULL;
+       copies->last_spin = NULL;
+}
+
+static void
+gl_wdgt_print_copies_finalize (GObject * object)
+{
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_WDGT_PRINT_COPIES (object));
+
+       G_OBJECT_CLASS (gl_wdgt_print_copies_parent_class)->finalize (object);
+}
+
+GtkWidget *
+gl_wdgt_print_copies_new (glLabel * label)
+{
+       glWdgtPrintCopies *copies;
+
+       copies = g_object_new (gl_wdgt_print_copies_get_type (), NULL);
+
+       gl_wdgt_print_copies_construct (copies, label);
+
+       return GTK_WIDGET (copies);
+}
+
+/*--------------------------------------------------------------------------*/
+/* Construct composite widget.                                              */
+/*--------------------------------------------------------------------------*/
+static void
+gl_wdgt_print_copies_construct (glWdgtPrintCopies *copies,
+                               glLabel           *label)
+{
+       const lglTemplateFrame    *frame;
+       GtkWidget                 *whbox, *wvbox, *whbox1;
+       GSList                    *radio_group = NULL;
+       GtkObject                 *adjust;
+
+       whbox = GTK_WIDGET (copies);
+
+        frame = (lglTemplateFrame *)label->template->frames->data;
+
+       copies->labels_per_sheet = lgl_template_frame_get_n_labels (frame);
+
+       /* mini_preview canvas */
+       copies->mini_preview = gl_wdgt_mini_preview_new (WDGT_MINI_PREVIEW_HEIGHT,
+                                                   WDGT_MINI_PREVIEW_WIDTH);
+       gl_wdgt_mini_preview_set_template (GL_WDGT_MINI_PREVIEW(copies->mini_preview),
+                                          label->template);
+       gtk_box_pack_start (GTK_BOX(whbox), copies->mini_preview, FALSE, FALSE, 0);
+
+       wvbox = gtk_vbox_new (FALSE, GL_HIG_PAD1);
+       gtk_box_pack_start (GTK_BOX(whbox), wvbox, FALSE, FALSE, 0);
+
+       /* Sheet controls */
+       whbox1 = gtk_hbox_new (FALSE, GL_HIG_PAD2);
+       gtk_box_pack_start (GTK_BOX(wvbox), whbox1, FALSE, FALSE, 0);
+       copies->sheets_radio =
+           gtk_radio_button_new_with_label (radio_group, _("Sheets:"));
+       gtk_box_pack_start (GTK_BOX(whbox1), copies->sheets_radio, FALSE, FALSE, 0);
+       adjust = gtk_adjustment_new (1, 1.0, 100.0, 1.0, 10.0, 0.0);
+       copies->sheets_spin = gtk_spin_button_new (GTK_ADJUSTMENT (adjust),
+                                                  1.0, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1), copies->sheets_spin, FALSE, FALSE, 0);
+       gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW(copies->mini_preview),
+                                             1, copies->labels_per_sheet);
+
+       /* Blank line */
+       gtk_box_pack_start (GTK_BOX(wvbox), gtk_label_new (""), FALSE, FALSE, 0);
+
+       /* Label controls */
+       whbox1 = gtk_hbox_new (FALSE, GL_HIG_PAD2);
+       gtk_box_pack_start (GTK_BOX(wvbox), whbox1, FALSE, FALSE, 0);
+       radio_group =
+           gtk_radio_button_get_group (GTK_RADIO_BUTTON (copies->sheets_radio));
+       copies->labels_radio =
+           gtk_radio_button_new_with_label (radio_group, _("Labels"));
+       gtk_box_pack_start (GTK_BOX(whbox1), copies->labels_radio, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1), gtk_label_new (_("from:")), FALSE, FALSE, 0);
+       adjust = gtk_adjustment_new (1, 1.0, copies->labels_per_sheet, 1.0, 10.0, 0.0);
+       copies->first_spin = gtk_spin_button_new (GTK_ADJUSTMENT (adjust),
+                                                 1.0, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1), copies->first_spin, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1), gtk_label_new (_("to:")), FALSE, FALSE, 0);
+       adjust = gtk_adjustment_new (copies->labels_per_sheet, 1.0, copies->labels_per_sheet, 1.0, 10.0, 0.0);
+       copies->last_spin = gtk_spin_button_new (GTK_ADJUSTMENT (adjust),
+                                                1.0, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1), copies->last_spin, FALSE, FALSE, 0);
+       gtk_widget_set_sensitive (copies->first_spin, FALSE);
+       gtk_widget_set_sensitive (copies->last_spin, FALSE);
+
+       /* Connect signals to controls */
+       g_signal_connect (G_OBJECT (copies->mini_preview), "pressed",
+                         G_CALLBACK (preview_pressed), copies);
+       g_signal_connect (G_OBJECT (copies->sheets_radio), "toggled",
+                         G_CALLBACK (sheets_radio_cb), copies);
+       g_signal_connect (G_OBJECT (copies->first_spin), "changed",
+                         G_CALLBACK (first_spin_cb), copies);
+       g_signal_connect (G_OBJECT (copies->last_spin), "changed",
+                         G_CALLBACK (last_spin_cb), copies);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Enable/Disable appropriate controls due to radio button toggle.*/
+/*--------------------------------------------------------------------------*/
+static void
+sheets_radio_cb (GtkToggleButton * togglebutton,
+                gpointer user_data)
+{
+       glWdgtPrintCopies *copies = GL_WDGT_PRINT_COPIES (user_data);
+       gint first, last;
+
+       if (gtk_toggle_button_get_active (togglebutton)) {
+
+               gtk_widget_set_sensitive (copies->sheets_spin, TRUE);
+               gtk_widget_set_sensitive (copies->first_spin, FALSE);
+               gtk_widget_set_sensitive (copies->last_spin, FALSE);
+
+               gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW(copies->mini_preview),
+                                       1, copies->labels_per_sheet);
+
+       } else {
+
+               gtk_widget_set_sensitive (copies->sheets_spin, FALSE);
+               gtk_widget_set_sensitive (copies->first_spin, TRUE);
+               gtk_widget_set_sensitive (copies->last_spin, TRUE);
+
+               first =
+                   gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                                     (copies->first_spin));
+               last =
+                   gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                                     (copies->last_spin));
+               gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW(copies->mini_preview),
+                                                first, last);
+
+       }
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  modify widget due to change of first spin button               */
+/*--------------------------------------------------------------------------*/
+static void
+first_spin_cb (GtkSpinButton * spinbutton,
+              gpointer user_data)
+{
+       glWdgtPrintCopies *copies = GL_WDGT_PRINT_COPIES (user_data);
+       gint first, last;
+
+       first =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (copies->first_spin));
+       last =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (copies->last_spin));
+
+       gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (copies->last_spin))->lower = first;
+
+       gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW(copies->mini_preview),
+                                              first, last);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  modify widget due to change of last spin button                */
+/*--------------------------------------------------------------------------*/
+static void
+last_spin_cb (GtkSpinButton * spinbutton,
+             gpointer user_data)
+{
+       glWdgtPrintCopies *copies = GL_WDGT_PRINT_COPIES (user_data);
+       gint first, last;
+
+       first =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (copies->first_spin));
+       last =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (copies->last_spin));
+
+       gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (copies->first_spin))->upper = last;
+
+       gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW(copies->mini_preview),
+                                              first, last);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Canvas event handler, select first and last items.             */
+/*--------------------------------------------------------------------------*/
+static void
+preview_pressed (glWdgtMiniPreview *mini_preview,
+                gint first,
+                gint last,
+                gpointer user_data)
+{
+       glWdgtPrintCopies *copies = GL_WDGT_PRINT_COPIES (user_data);
+
+       gl_wdgt_print_copies_set_range (copies, 1, first, last);
+}
+
+/****************************************************************************/
+/* query selected range of labels within sheet or number of sheets.         */
+/****************************************************************************/
+void
+gl_wdgt_print_copies_get_range (glWdgtPrintCopies * copies,
+                               gint * n_sheets,
+                               gint * first_label,
+                               gint * last_label)
+{
+       gboolean sheets_active;
+
+       sheets_active =
+           gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
+                                         (copies->sheets_radio));
+
+       if (sheets_active) {
+               *n_sheets =
+                   gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                                     (copies->sheets_spin));
+               *first_label = 1;
+               *last_label = copies->labels_per_sheet;
+       } else {
+               *n_sheets = 1;
+               *first_label =
+                   gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                                     (copies->first_spin));
+               *last_label =
+                   gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                                     (copies->last_spin));
+       }
+}
+
+/****************************************************************************/
+/* set range of labels within sheet or number of sheets                     */
+/****************************************************************************/
+void
+gl_wdgt_print_copies_set_range (glWdgtPrintCopies * copies,
+                               gint n_sheets,
+                               gint first_label,
+                               gint last_label)
+{
+       gint old_first_label;
+
+       old_first_label =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (copies->first_spin));
+
+       if (first_label > old_first_label) {
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (copies->last_spin),
+                                          last_label);
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (copies->first_spin),
+                                          first_label);
+       } else {
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (copies->first_spin),
+                                          first_label);
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (copies->last_spin),
+                                          last_label);
+       }
+       if ((first_label == 1) && (last_label == copies->labels_per_sheet)) {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                             (copies->sheets_radio), TRUE);
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON
+                                          (copies->sheets_spin), n_sheets);
+       } else {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                             (copies->labels_radio), TRUE);
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON
+                                          (copies->sheets_spin), 1.0);
+       }
+}
diff --git a/src/wdgt-print-copies.h b/src/wdgt-print-copies.h
new file mode 100644 (file)
index 0000000..7e24dee
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_print_copies.h:  custom print copies widget module header file
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __WDGT_PRINT_COPIES_H__
+#define __WDGT_PRINT_COPIES_H__
+
+#include "label.h"
+#include <gtk/gtkhbox.h>
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_WDGT_PRINT_COPIES (gl_wdgt_print_copies_get_type ())
+#define GL_WDGT_PRINT_COPIES(obj) \
+        (GTK_CHECK_CAST((obj), GL_TYPE_WDGT_PRINT_COPIES, glWdgtPrintCopies ))
+#define GL_WDGT_PRINT_COPIES_CLASS(klass) \
+        (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_WDGT_PRINT_COPIES, glWdgtPrintCopiesClass))
+#define GL_IS_WDGT_PRINT_COPIES(obj) \
+        (GTK_CHECK_TYPE ((obj), GL_TYPE_WDGT_PRINT_COPIES))
+#define GL_IS_WDGT_PRINT_COPIES_CLASS(klass) \
+        (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_WDGT_PRINT_COPIES))
+
+typedef struct _glWdgtPrintCopies      glWdgtPrintCopies;
+typedef struct _glWdgtPrintCopiesClass glWdgtPrintCopiesClass;
+
+struct _glWdgtPrintCopies {
+       GtkHBox   parent_widget;
+
+       gint      labels_per_sheet;
+
+       GtkWidget *mini_preview;
+
+       GtkWidget *sheets_radio;
+       GtkWidget *sheets_spin;
+
+       GtkWidget *labels_radio;
+       GtkWidget *first_spin;
+       GtkWidget *last_spin;
+};
+
+struct _glWdgtPrintCopiesClass {
+       GtkHBoxClass parent_class;
+};
+
+GType      gl_wdgt_print_copies_get_type  (void) G_GNUC_CONST;
+
+GtkWidget *gl_wdgt_print_copies_new       (glLabel           *label);
+
+void       gl_wdgt_print_copies_get_range (glWdgtPrintCopies *copies,
+                                          gint              *n_sheets,
+                                          gint              *first_label,
+                                          gint              *last_label);
+
+void       gl_wdgt_print_copies_set_range (glWdgtPrintCopies *copies,
+                                          gint               n_sheets,
+                                          gint               first_label,
+                                          gint               last_label);
+
+G_END_DECLS
+
+#endif
diff --git a/src/wdgt-print-merge.c b/src/wdgt-print-merge.c
new file mode 100644 (file)
index 0000000..f05d4ed
--- /dev/null
@@ -0,0 +1,313 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_print_merge.c:  print merge widget module
+ *
+ *  Copyright (C) 2001  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "wdgt-print-merge.h"
+
+#include <math.h>
+#include <glib/gi18n.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkspinbutton.h>
+#include <gtk/gtkcheckbutton.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkvbox.h>
+
+#include "hig.h"
+#include "wdgt-mini-preview.h"
+#include "marshal.h"
+
+#include "pixmaps/collate.xpm"
+#include "pixmaps/nocollate.xpm"
+
+#include "debug.h"
+
+#define WDGT_MINI_PREVIEW_HEIGHT 175
+#define WDGT_MINI_PREVIEW_WIDTH  150
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void gl_wdgt_print_merge_finalize      (GObject * object);
+
+static void gl_wdgt_print_merge_construct     (glWdgtPrintMerge * merge,
+                                              glLabel * label);
+
+static void preview_clicked                   (glWdgtMiniPreview *mini_preview,
+                                              gint i_label,
+                                              gpointer user_data);
+
+static void collate_check_cb                  (GtkToggleButton * togglebutton,
+                                              gpointer user_data);
+static void spin_cb                           (GtkSpinButton * spinbutton,
+                                              gpointer user_data);
+
+\f
+/****************************************************************************/
+/* Boilerplate Object stuff.                                                */
+/****************************************************************************/
+G_DEFINE_TYPE (glWdgtPrintMerge, gl_wdgt_print_merge, GTK_TYPE_HBOX);
+
+
+static void
+gl_wdgt_print_merge_class_init (glWdgtPrintMergeClass * class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_wdgt_print_merge_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_wdgt_print_merge_finalize;
+}
+
+static void
+gl_wdgt_print_merge_init (glWdgtPrintMerge * merge)
+{
+       merge->mini_preview = NULL;
+
+       merge->copies_spin = NULL;
+       merge->first_spin = NULL;
+       merge->collate_image = NULL;
+       merge->collate_check = NULL;
+}
+
+static void
+gl_wdgt_print_merge_finalize (GObject * object)
+{
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_WDGT_PRINT_MERGE (object));
+
+       G_OBJECT_CLASS (gl_wdgt_print_merge_parent_class)->finalize (object);
+}
+
+GtkWidget *
+gl_wdgt_print_merge_new (glLabel * label)
+{
+       glWdgtPrintMerge *merge;
+
+       merge = g_object_new (gl_wdgt_print_merge_get_type (), NULL);
+
+       gl_wdgt_print_merge_construct (merge, label);
+
+       return GTK_WIDGET (merge);
+}
+\f
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Construct composite widget.                                    */
+/*--------------------------------------------------------------------------*/
+static void
+gl_wdgt_print_merge_construct (glWdgtPrintMerge * merge,
+                              glLabel * label)
+{
+       const lglTemplateFrame    *frame;
+       GtkWidget                 *whbox, *wvbox, *whbox1;
+       GtkObject                 *adjust;
+       GdkPixbuf                 *pixbuf;
+
+       whbox = GTK_WIDGET (merge);
+
+        frame = (lglTemplateFrame *)label->template->frames->data;
+
+       merge->labels_per_sheet = lgl_template_frame_get_n_labels (frame);
+
+       /* mini_preview canvas */
+       merge->mini_preview = gl_wdgt_mini_preview_new (WDGT_MINI_PREVIEW_HEIGHT,
+                                                       WDGT_MINI_PREVIEW_WIDTH);
+       gl_wdgt_mini_preview_set_template( GL_WDGT_MINI_PREVIEW (merge->mini_preview),
+                                          label->template );
+       gtk_box_pack_start (GTK_BOX(whbox), merge->mini_preview, FALSE, FALSE, 0);
+       gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW(merge->mini_preview),
+                                             1, 1);
+
+       wvbox = gtk_vbox_new (FALSE, GL_HIG_PAD1);
+       gtk_box_pack_start (GTK_BOX(whbox), wvbox, FALSE, FALSE, 0);
+
+       /* First Label controls */
+       whbox1 = gtk_hbox_new (FALSE, GL_HIG_PAD2);
+       gtk_box_pack_start (GTK_BOX(wvbox), whbox1, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1),
+                            gtk_label_new (_("Start on label")), FALSE, FALSE, 0);
+       adjust = gtk_adjustment_new (1, 1.0, merge->labels_per_sheet, 1.0, 10.0, 0.0);
+       merge->first_spin = gtk_spin_button_new (GTK_ADJUSTMENT (adjust), 1.0, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1), merge->first_spin, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1),
+                               gtk_label_new (_("on 1st sheet")), FALSE, FALSE, 0);
+
+       /* Blank line */
+       gtk_box_pack_start (GTK_BOX(wvbox), gtk_label_new (""), FALSE, FALSE, 0);
+
+       /* Copy & collate controls*/
+       whbox1 = gtk_hbox_new (FALSE, GL_HIG_PAD2);
+       gtk_box_pack_start (GTK_BOX(wvbox), whbox1, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1),
+                               gtk_label_new (_("Copies:")), FALSE, FALSE, 0);
+       adjust = gtk_adjustment_new (1, 1.0, 100.0, 1.0, 10.0, 0.0);
+       merge->copies_spin = gtk_spin_button_new (GTK_ADJUSTMENT (adjust), 1.0, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1), merge->copies_spin, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(whbox1), gtk_label_new ("    "), FALSE, FALSE, 0);
+       merge->collate_check = gtk_check_button_new_with_label (_("Collate"));
+       gtk_box_pack_start (GTK_BOX(whbox1), merge->collate_check, FALSE, FALSE, 0);
+       pixbuf = gdk_pixbuf_new_from_xpm_data ( (const char **)nocollate_xpm);
+       merge->collate_image = gtk_image_new_from_pixbuf(pixbuf);
+       gtk_widget_set_sensitive (merge->collate_check, FALSE);
+       gtk_widget_set_sensitive (merge->collate_image, FALSE);
+
+       gtk_box_pack_start (GTK_BOX(whbox1), merge->collate_image, FALSE, FALSE, 0);
+
+       /* Connect signals to controls */
+       g_signal_connect (G_OBJECT (merge->mini_preview), "clicked",
+                         G_CALLBACK (preview_clicked), merge);
+       g_signal_connect (G_OBJECT (merge->collate_check), "toggled",
+                         G_CALLBACK (collate_check_cb), merge);
+       g_signal_connect (G_OBJECT (merge->copies_spin), "changed",
+                         G_CALLBACK (spin_cb), merge);
+       g_signal_connect (G_OBJECT (merge->first_spin), "changed",
+                         G_CALLBACK (spin_cb), merge);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Enable/Disable appropriate controls due to radio button toggle.*/
+/*--------------------------------------------------------------------------*/
+static void
+collate_check_cb (GtkToggleButton * togglebutton,
+                 gpointer user_data)
+{
+       glWdgtPrintMerge *merge = GL_WDGT_PRINT_MERGE (user_data);
+       GdkPixbuf *pixbuf;
+
+       if (gtk_toggle_button_get_active (togglebutton)) {
+
+               pixbuf =
+                 gdk_pixbuf_new_from_xpm_data ( (const char **)collate_xpm);
+
+       } else {
+
+               pixbuf =
+                 gdk_pixbuf_new_from_xpm_data ( (const char **)nocollate_xpm);
+
+       }
+       gtk_image_set_from_pixbuf (GTK_IMAGE (merge->collate_image),
+                                  pixbuf);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  modify widget due to change of first spin button               */
+/*--------------------------------------------------------------------------*/
+static void
+spin_cb (GtkSpinButton * spinbutton,
+        gpointer user_data)
+{
+       glWdgtPrintMerge *merge = GL_WDGT_PRINT_MERGE (user_data);
+       gint first, last, n_copies;
+
+       first =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (merge->first_spin));
+
+       n_copies =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (merge->copies_spin));
+       last = first + (n_copies * merge->n_records) - 1;
+       gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW(merge->mini_preview),
+                                        first, last );
+
+       gtk_widget_set_sensitive (merge->collate_check, (n_copies > 1));
+       gtk_widget_set_sensitive (merge->collate_image, (n_copies > 1));
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Canvas event handler, select first and last items.             */
+/*--------------------------------------------------------------------------*/
+static void
+preview_clicked (glWdgtMiniPreview *mini_preview,
+                gint first,
+                gpointer user_data)
+{
+       glWdgtPrintMerge *merge = GL_WDGT_PRINT_MERGE (user_data);
+       gint n_copies, last;
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (merge->first_spin),
+                                  first);
+
+       n_copies =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (merge->copies_spin));
+       last = first + (n_copies * merge->n_records) - 1;
+       gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW (merge->mini_preview),
+                                        first, last);
+
+}
+
+/****************************************************************************/
+/* query selected range of labels within sheet or number of sheets.         */
+/****************************************************************************/
+void
+gl_wdgt_print_merge_get_copies (glWdgtPrintMerge *merge,
+                               gint             *n_copies,
+                               gint             *first_label,
+                               gboolean         *collate_flag,
+                               gint             *n_sheets)
+{
+       *n_copies =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (merge->copies_spin));
+       *first_label =
+           gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+                                             (merge->first_spin));
+       *collate_flag =
+           gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
+                                         (merge->collate_check));
+
+       *n_sheets = ceil ( (double)(*first_label - 1 + (*n_copies * merge->n_records))/ (double)merge->labels_per_sheet );
+}
+
+/****************************************************************************/
+/* set range of labels within sheet or number of sheets                     */
+/****************************************************************************/
+void
+gl_wdgt_print_merge_set_copies (glWdgtPrintMerge * merge,
+                               gint n_copies,
+                               gint first_label,
+                               gint n_records,
+                               gboolean collate_flag)
+{
+       gint last_label;
+
+       merge->n_records = n_records;
+
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (merge->copies_spin),
+                                  n_copies);
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (merge->first_spin),
+                                  first_label);
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (merge->collate_check),
+                                     collate_flag);
+
+       last_label = first_label + (n_copies * n_records) - 1;
+       gl_wdgt_mini_preview_highlight_range (GL_WDGT_MINI_PREVIEW (merge->mini_preview),
+                                        first_label, last_label );
+}
diff --git a/src/wdgt-print-merge.h b/src/wdgt-print-merge.h
new file mode 100644 (file)
index 0000000..9e3a24d
--- /dev/null
@@ -0,0 +1,82 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_print_merge.h:  print merge widget module header file
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __WDGT_PRINT_MERGE_H__
+#define __WDGT_PRINT_MERGE_H__
+
+#include "label.h"
+#include <gtk/gtkhbox.h>
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_WDGT_PRINT_MERGE (gl_wdgt_print_merge_get_type ())
+#define GL_WDGT_PRINT_MERGE(obj) \
+        (GTK_CHECK_CAST((obj), GL_TYPE_WDGT_PRINT_MERGE, glWdgtPrintMerge ))
+#define GL_WDGT_PRINT_MERGE_CLASS(klass) \
+        (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_WDGT_PRINT_MERGE, glWdgtPrintMergeClass))
+#define GL_IS_WDGT_PRINT_MERGE(obj) \
+        (GTK_CHECK_TYPE ((obj), GL_TYPE_WDGT_PRINT_MERGE))
+#define GL_IS_WDGT_PRINT_MERGE_CLASS(klass) \
+        (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_WDGT_PRINT_MERGE))
+
+typedef struct _glWdgtPrintMerge      glWdgtPrintMerge;
+typedef struct _glWdgtPrintMergeClass glWdgtPrintMergeClass;
+
+struct _glWdgtPrintMerge {
+       GtkHBox   parent_widget;
+
+       gint      labels_per_sheet;
+       GtkWidget *mini_preview;
+
+       gint      n_records;
+
+       GtkWidget *copies_spin;
+       GtkWidget *first_spin;
+       GtkWidget *collate_image;
+       GtkWidget *collate_check;
+};
+
+struct _glWdgtPrintMergeClass {
+       GtkHBoxClass parent_class;
+};
+
+GType      gl_wdgt_print_merge_get_type   (void) G_GNUC_CONST;
+
+GtkWidget *gl_wdgt_print_merge_new        (glLabel          *label);
+
+void       gl_wdgt_print_merge_get_copies (glWdgtPrintMerge *merge,
+                                          gint             *n_copies,
+                                          gint             *first_label,
+                                          gboolean         *collate_flag,
+                                          gint             *n_sheets);
+
+void       gl_wdgt_print_merge_set_copies (glWdgtPrintMerge *merge,
+                                          gint              n_copies,
+                                          gint              first_label,
+                                          gint              n_records,
+                                          gboolean          collate_flag);
+
+G_END_DECLS
+
+#endif
diff --git a/src/wdgt-rotate-label.c b/src/wdgt-rotate-label.c
new file mode 100644 (file)
index 0000000..4edca60
--- /dev/null
@@ -0,0 +1,395 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_rotate_label.c:  label rotate selection widget module
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "wdgt-rotate-label.h"
+
+#include <glib/gi18n.h>
+#include <glade/glade-xml.h>
+#include <gtk/gtktogglebutton.h>
+#include <gtk/gtkcheckbutton.h>
+#include <gtk/gtkdrawingarea.h>
+#include <math.h>
+
+#include "marshal.h"
+#include "color.h"
+#include <libglabels/db.h>
+#include "cairo-label-path.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+#define MINI_PREVIEW_MAX_PIXELS 48
+#define MINI_PREVIEW_CANVAS_PIXELS (MINI_PREVIEW_MAX_PIXELS + 8)
+
+#define LINE_COLOR             GL_COLOR(0,0,0)
+#define FILL_COLOR             GL_COLOR(255,255,255)
+
+#define LINE_WIDTH_PIXELS    1.0
+
+#define SHADOW_X_OFFSET 3
+#define SHADOW_Y_OFFSET 3
+
+
+/*===========================================*/
+/* Private types                             */
+/*===========================================*/
+
+struct _glWdgtRotateLabelPrivate {
+
+        GtkWidget    *rotate_check;
+        GtkWidget    *rotate_drawingarea;
+
+       lglTemplate  *template;
+};
+
+enum {
+       CHANGED,
+       LAST_SIGNAL
+};
+
+/*===========================================*/
+/* Private globals                           */
+/*===========================================*/
+
+static gint wdgt_rotate_label_signals[LAST_SIGNAL] = { 0 };
+
+/*===========================================*/
+/* Local function prototypes                 */
+/*===========================================*/
+
+static void gl_wdgt_rotate_label_finalize      (GObject                *object);
+
+static void gl_wdgt_rotate_label_construct     (glWdgtRotateLabel      *rotate_label);
+
+static void entry_changed_cb                   (GtkToggleButton        *toggle,
+                                               gpointer                user_data);
+
+static void drawingarea_update                 (GtkDrawingArea         *drawing_area,
+                                               lglTemplate            *template,
+                                               gboolean                rotate_flag);
+
+static gboolean expose_cb                      (GtkWidget              *drawingarea,
+                                               GdkEventExpose         *event,
+                                               gpointer                user_data);
+
+
+/****************************************************************************/
+/* Boilerplate Object stuff.                                                */
+/****************************************************************************/
+G_DEFINE_TYPE (glWdgtRotateLabel, gl_wdgt_rotate_label, GTK_TYPE_VBOX);
+
+
+static void
+gl_wdgt_rotate_label_class_init (glWdgtRotateLabelClass *class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+       gl_wdgt_rotate_label_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_wdgt_rotate_label_finalize;
+
+       wdgt_rotate_label_signals[CHANGED] =
+           g_signal_new ("changed",
+                         G_OBJECT_CLASS_TYPE(object_class),
+                         G_SIGNAL_RUN_LAST,
+                         G_STRUCT_OFFSET (glWdgtRotateLabelClass, changed),
+                         NULL, NULL,
+                         gl_marshal_VOID__VOID,
+                         G_TYPE_NONE, 0);
+
+}
+
+static void
+gl_wdgt_rotate_label_init (glWdgtRotateLabel *rotate_label)
+{
+        rotate_label->priv = g_new0 (glWdgtRotateLabelPrivate, 1);
+}
+
+static void
+gl_wdgt_rotate_label_finalize (GObject *object)
+{
+       glWdgtRotateLabel      *rotate_label = GL_WDGT_ROTATE_LABEL (object);
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_WDGT_ROTATE_LABEL (object));
+
+       if (rotate_label->priv->template) {
+               lgl_template_free (rotate_label->priv->template);
+               rotate_label->priv->template = NULL;
+       }
+       g_free (rotate_label->priv);
+
+       G_OBJECT_CLASS (gl_wdgt_rotate_label_parent_class)->finalize (object);
+}
+
+GtkWidget *
+gl_wdgt_rotate_label_new (void)
+{
+       glWdgtRotateLabel *rotate_label;
+
+       rotate_label = g_object_new (gl_wdgt_rotate_label_get_type (), NULL);
+
+       gl_wdgt_rotate_label_construct (rotate_label);
+
+       return GTK_WIDGET (rotate_label);
+}
+
+/*--------------------------------------------------------------------------*/
+/* Construct composite widget.                                              */
+/*--------------------------------------------------------------------------*/
+static void
+gl_wdgt_rotate_label_construct (glWdgtRotateLabel *rotate_label)
+{
+        GladeXML  *gui;
+       GtkWidget *hbox;
+
+        g_return_if_fail (GL_IS_WDGT_ROTATE_LABEL (rotate_label));
+        g_return_if_fail (rotate_label->priv != NULL);
+
+        gui = glade_xml_new (GLABELS_GLADE_DIR "wdgt-rotate-label.glade",
+                             "rotate_hbox", NULL);
+
+        if (!gui) {
+                g_critical ("Could not open wdgt-media-select.glade. gLabels may not be installed correctly!");
+                return;
+        }
+
+        hbox = glade_xml_get_widget (gui, "rotate_hbox");
+        gtk_container_add (GTK_CONTAINER (rotate_label), hbox);
+
+        rotate_label->priv->rotate_check       = glade_xml_get_widget (gui, "rotate_check");
+        rotate_label->priv->rotate_drawingarea = glade_xml_get_widget (gui, "rotate_drawingarea");
+
+        g_object_unref (gui);
+
+
+       gtk_widget_set_size_request (rotate_label->priv->rotate_drawingarea,
+                                     MINI_PREVIEW_CANVAS_PIXELS,
+                                     MINI_PREVIEW_CANVAS_PIXELS);
+
+       /* Connect signals to controls */
+       g_signal_connect (G_OBJECT (rotate_label->priv->rotate_check),
+                         "toggled",
+                         G_CALLBACK (entry_changed_cb), rotate_label);
+       g_signal_connect (G_OBJECT (rotate_label->priv->rotate_drawingarea),
+                         "expose_event",
+                         G_CALLBACK (expose_cb), rotate_label);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  modify widget due to change of check button                    */
+/*--------------------------------------------------------------------------*/
+static void
+entry_changed_cb (GtkToggleButton *toggle,
+                 gpointer         user_data)
+{
+       glWdgtRotateLabel *rotate_label = GL_WDGT_ROTATE_LABEL (user_data);
+
+       if (rotate_label->priv->template != NULL) {
+               /* Update mini_preview canvas & details with template */
+               drawingarea_update (GTK_DRAWING_AREA (rotate_label->priv->rotate_drawingarea),
+                                   rotate_label->priv->template,
+                                   gtk_toggle_button_get_active (toggle));
+       }
+
+       /* Emit our "changed" signal */
+       g_signal_emit (G_OBJECT (user_data),
+                      wdgt_rotate_label_signals[CHANGED], 0);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Update mini-preview from template           .                  */
+/*--------------------------------------------------------------------------*/
+static void
+drawingarea_update (GtkDrawingArea *drawing_area,
+                   lglTemplate    *template,
+                   gboolean        rotate_flag)
+{
+       const lglTemplateFrame    *frame;
+       gdouble                    m, m_canvas, w, h, scale;
+       GtkStyle                  *style;
+       guint                      line_color, fill_color, shadow_color;
+       cairo_t                   *cr;
+
+       if (!GTK_WIDGET_DRAWABLE (GTK_WIDGET (drawing_area)))
+       {
+               return;
+       }
+
+        /* Clear surface */
+       gdk_window_clear (GTK_WIDGET (drawing_area)->window);
+
+       if (template == NULL)
+       {
+               return;
+       }
+
+        frame = (lglTemplateFrame *)template->frames->data;
+
+        if (rotate_flag)
+        {
+                lgl_template_frame_get_size (frame, &h, &w);
+        }
+        else
+        {
+                lgl_template_frame_get_size (frame, &w, &h);
+        }
+       m = MAX (w, h);
+       scale = MINI_PREVIEW_MAX_PIXELS / m;
+       m_canvas = MINI_PREVIEW_CANVAS_PIXELS / scale;
+
+        style = gtk_widget_get_style (GTK_WIDGET (drawing_area));
+
+       /* Adjust sensitivity (should the canvas be grayed?) */
+       if (w != h) {
+               line_color = LINE_COLOR;
+               fill_color = FILL_COLOR;
+       } else {
+               line_color = gl_color_from_gdk_color (&style->text[GTK_STATE_INSENSITIVE]);
+               fill_color = gl_color_from_gdk_color (&style->base[GTK_STATE_INSENSITIVE]);
+       }
+
+       shadow_color = gl_color_from_gdk_color (&style->bg[GTK_STATE_ACTIVE]);
+
+
+       cr = gdk_cairo_create (GTK_WIDGET (drawing_area)->window);
+  
+       cairo_identity_matrix (cr);
+       cairo_translate (cr, MINI_PREVIEW_CANVAS_PIXELS/2, MINI_PREVIEW_CANVAS_PIXELS/2);
+        cairo_scale (cr, scale, scale);
+        cairo_translate (cr, -w/2.0, -h/2.0);
+
+        /*
+         * Shadow
+         */
+        cairo_save (cr);
+        cairo_translate (cr, SHADOW_X_OFFSET/scale, SHADOW_Y_OFFSET/scale);
+        gl_cairo_label_path (cr, template, rotate_flag, FALSE);
+
+       cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (shadow_color));
+        cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
+       cairo_fill (cr);
+        cairo_restore (cr);
+
+        /*
+         * Label + outline
+         */
+        gl_cairo_label_path (cr, template, rotate_flag, FALSE);
+
+       cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (fill_color));
+        cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
+       cairo_fill_preserve (cr);
+
+       cairo_set_line_width (cr, LINE_WIDTH_PIXELS/scale);
+       cairo_set_source_rgb (cr, GL_COLOR_RGB_ARGS (line_color));
+       cairo_stroke (cr);
+
+
+       cairo_destroy (cr);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Expose handler.                                                */
+/*--------------------------------------------------------------------------*/
+static gboolean
+expose_cb (GtkWidget *drawingarea, GdkEventExpose *event, gpointer user_data)
+{
+       glWdgtRotateLabel *rotate_label = GL_WDGT_ROTATE_LABEL (user_data);
+
+       drawingarea_update (GTK_DRAWING_AREA (drawingarea),
+                           rotate_label->priv->template,
+                           gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rotate_label->priv->rotate_check)));
+
+       return FALSE;
+}
+
+/****************************************************************************/
+/* query state of widget.                                                   */
+/****************************************************************************/
+gboolean
+gl_wdgt_rotate_label_get_state (glWdgtRotateLabel *rotate_label)
+{
+       return
+           gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
+                                         (rotate_label->priv->rotate_check));
+}
+
+/****************************************************************************/
+/* set state of widget.                                                     */
+/****************************************************************************/
+void
+gl_wdgt_rotate_label_set_state (glWdgtRotateLabel *rotate_label,
+                               gboolean state)
+{
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                     (rotate_label->priv->rotate_check), state);
+}
+
+/****************************************************************************/
+/* set template for widget.                                                 */
+/****************************************************************************/
+void
+gl_wdgt_rotate_label_set_template_name (glWdgtRotateLabel *rotate_label,
+                                       gchar             *name)
+{
+       lglTemplate               *template;
+       const lglTemplateFrame    *frame;
+       gdouble                    raw_w, raw_h;
+
+       if (name == NULL)
+       {
+               rotate_label->priv->template = NULL;
+
+               gtk_widget_set_sensitive (rotate_label->priv->rotate_check,
+                                         FALSE);
+
+               drawingarea_update (GTK_DRAWING_AREA (rotate_label->priv->rotate_drawingarea),
+                                   NULL,
+                                   FALSE);
+       }
+       else
+       {
+               template = lgl_db_lookup_template_from_name (name);
+                frame = (lglTemplateFrame *)template->frames->data;
+
+               rotate_label->priv->template = template;
+               lgl_template_frame_get_size (frame, &raw_w, &raw_h);
+
+               gtk_widget_set_sensitive (rotate_label->priv->rotate_check,
+                                         (raw_w != raw_h));
+
+               drawingarea_update (GTK_DRAWING_AREA (rotate_label->priv->rotate_drawingarea),
+                                   rotate_label->priv->template,
+                                   FALSE);
+       }
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+                                     (rotate_label->priv->rotate_check), FALSE);
+}
+
diff --git a/src/wdgt-rotate-label.h b/src/wdgt-rotate-label.h
new file mode 100644 (file)
index 0000000..3d8b412
--- /dev/null
@@ -0,0 +1,74 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  wdgt_rotate_label.h:  label rotate selection widget module header file
+ *
+ *  Copyright (C) 2001-2006  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __WDGT_ROTATE_LABEL_H__
+#define __WDGT_ROTATE_LABEL_H__
+
+#include <gtk/gtkvbox.h>
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_WDGT_ROTATE_LABEL (gl_wdgt_rotate_label_get_type ())
+#define GL_WDGT_ROTATE_LABEL(obj) \
+        (GTK_CHECK_CAST((obj), GL_TYPE_WDGT_ROTATE_LABEL, glWdgtRotateLabel ))
+#define GL_WDGT_ROTATE_LABEL_CLASS(klass) \
+        (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_WDGT_ROTATE_LABEL, glWdgtRotateLabelClass))
+#define GL_IS_WDGT_ROTATE_LABEL(obj) \
+        (GTK_CHECK_TYPE ((obj), GL_TYPE_WDGT_ROTATE_LABEL))
+#define GL_IS_WDGT_ROTATE_LABEL_CLASS(klass) \
+        (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_WDGT_ROTATE_LABEL))
+
+typedef struct _glWdgtRotateLabel         glWdgtRotateLabel;
+typedef struct _glWdgtRotateLabelClass    glWdgtRotateLabelClass;
+
+typedef struct _glWdgtRotateLabelPrivate  glWdgtRotateLabelPrivate;
+
+struct _glWdgtRotateLabel {
+       GtkVBox                    parent_widget;
+
+       glWdgtRotateLabelPrivate  *priv;
+};
+
+struct _glWdgtRotateLabelClass {
+       GtkVBoxClass parent_class;
+
+       void (*changed) (glWdgtRotateLabel  *wdgt_rotate_label,
+                        gpointer            user_data);
+};
+
+GType      gl_wdgt_rotate_label_get_type          (void) G_GNUC_CONST;
+
+GtkWidget *gl_wdgt_rotate_label_new               (void);
+
+gboolean   gl_wdgt_rotate_label_get_state         (glWdgtRotateLabel *rotate_label);
+
+void       gl_wdgt_rotate_label_set_state         (glWdgtRotateLabel *rotate_label,
+                                                  gboolean           state);
+
+void       gl_wdgt_rotate_label_set_template_name (glWdgtRotateLabel *rotate_label,
+                                                  gchar             *name);
+
+G_END_DECLS
+
+#endif
diff --git a/src/window.c b/src/window.c
new file mode 100644 (file)
index 0000000..33e3b7e
--- /dev/null
@@ -0,0 +1,616 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  window.c:  a gLabels app window
+ *
+ *  Copyright (C) 2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "window.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkframe.h>
+#include <gtk/gtkstatusbar.h>
+
+#include "ui.h"
+#include "ui-commands.h"
+#include "util.h"
+#include "xml-label.h"
+#include "prefs.h"
+#include "file.h"
+
+#include "debug.h"
+
+/*===========================================================================*/
+/* Private macros and constants.                                             */
+/*===========================================================================*/
+
+#define DEFAULT_WINDOW_WIDTH  788
+#define DEFAULT_WINDOW_HEIGHT 600
+
+#define CURSOR_INFO_WIDTH     150
+#define ZOOM_INFO_WIDTH        50
+
+/*===========================================================================*/
+/* Private globals                                                           */
+/*===========================================================================*/
+
+static GList *window_list = NULL;
+
+
+/*===========================================================================*/
+/* Local function prototypes                                                 */
+/*===========================================================================*/
+
+static void     gl_window_finalize     (GObject       *object);
+static void     gl_window_destroy      (GtkObject     *gtk_object);
+
+static void     set_window_title       (glWindow *window,
+                                       glLabel  *label);
+
+static gboolean window_delete_event_cb (glWindow      *window,
+                                       GdkEvent      *event,
+                                       gpointer       user_data);
+
+static void     selection_changed_cb   (glView        *view,
+                                       glWindow      *window);
+
+static void   context_menu_activate_cb (glView       *view,
+                                       gint          button,
+                                       guint32       activate_time,
+                                       glWindow     *window);
+
+static void     zoom_changed_cb        (glView        *view,
+                                       gdouble        zoom,
+                                       glWindow      *window);
+
+static void     pointer_moved_cb       (glView        *view,
+                                       gdouble        x,
+                                       gdouble        y,
+                                       glWindow      *window);
+
+static void     pointer_exit_cb        (glView        *view,
+                                       glWindow      *window);
+
+static void     name_changed_cb        (glLabel       *label,
+                                       glWindow      *window);
+
+static void     modified_changed_cb    (glLabel       *label,
+                                       glWindow      *window);
+
+\f
+/****************************************************************************/
+/* Boilerplate Object stuff.                                                */
+/****************************************************************************/
+G_DEFINE_TYPE (glWindow, gl_window, GTK_TYPE_WINDOW);
+
+
+static void
+gl_window_class_init (glWindowClass *class)
+{
+       GObjectClass   *object_class     = G_OBJECT_CLASS (class);
+       GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (class);
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       gl_window_parent_class = g_type_class_peek_parent (class);
+
+       object_class->finalize = gl_window_finalize;
+
+       gtk_object_class->destroy = gl_window_destroy;
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+static void
+gl_window_init (glWindow *window)
+{
+       GtkWidget        *vbox1;
+       GtkUIManager     *ui;
+       GtkWidget        *status_hbox;
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       vbox1 = gtk_vbox_new (FALSE, 0);
+       gtk_container_add (GTK_CONTAINER (window), vbox1);
+
+       window->ui = ui = gl_ui_new (window);
+       gtk_box_pack_start (GTK_BOX (vbox1),
+                           gtk_ui_manager_get_widget (ui, "/MenuBar"),
+                           FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (vbox1),
+                           gtk_ui_manager_get_widget (ui, "/MainToolBar"),
+                           FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (vbox1),
+                           gtk_ui_manager_get_widget (ui, "/DrawingToolBar"),
+                           FALSE, FALSE, 0);
+
+       window->hbox = gtk_hbox_new (FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (vbox1), window->hbox, TRUE, TRUE, 0);
+
+       window->sidebar = GL_UI_SIDEBAR (gl_ui_sidebar_new ());
+       gtk_box_pack_end (GTK_BOX (window->hbox), GTK_WIDGET (window->sidebar), FALSE, FALSE, 0);
+
+       window->property_bar = GL_UI_PROPERTY_BAR (gl_ui_property_bar_new ());
+       gtk_box_pack_start (GTK_BOX (vbox1), GTK_WIDGET (window->property_bar), FALSE, FALSE, 0);
+
+       status_hbox = gtk_hbox_new (FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (vbox1), status_hbox, FALSE, FALSE, 0);
+
+       window->status_bar = gtk_statusbar_new ();
+       gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (window->status_bar), FALSE);
+       gtk_box_pack_start (GTK_BOX (status_hbox),
+                           window->status_bar,
+                           TRUE, TRUE, 0);
+       window->zoom_info = gtk_label_new (NULL);
+       gtk_widget_set_size_request (window->zoom_info, ZOOM_INFO_WIDTH, -1);
+       window->zoom_info_frame = gtk_frame_new (NULL);
+       gtk_frame_set_shadow_type (GTK_FRAME(window->zoom_info_frame), GTK_SHADOW_IN);
+       gtk_container_add (GTK_CONTAINER(window->zoom_info_frame), window->zoom_info);
+       gtk_widget_show_all (window->zoom_info_frame);
+       gtk_box_pack_end (GTK_BOX (status_hbox),
+                         window->zoom_info_frame,
+                         FALSE, FALSE, 0);
+
+       window->cursor_info = gtk_label_new (NULL);
+       gtk_widget_set_size_request (window->cursor_info, CURSOR_INFO_WIDTH, -1);
+       window->cursor_info_frame = gtk_frame_new (NULL);
+       gtk_frame_set_shadow_type (GTK_FRAME(window->cursor_info_frame), GTK_SHADOW_IN);
+       gtk_container_add (GTK_CONTAINER(window->cursor_info_frame), window->cursor_info);
+       gtk_widget_show_all (window->cursor_info_frame);
+       gtk_box_pack_end (GTK_BOX (status_hbox),
+                         window->cursor_info_frame,
+                         FALSE, FALSE, 0);
+
+       gtk_window_set_default_size (GTK_WINDOW (window),
+                                    DEFAULT_WINDOW_WIDTH,
+                                    DEFAULT_WINDOW_HEIGHT);
+
+       g_signal_connect (G_OBJECT(window), "delete-event",
+                         G_CALLBACK(window_delete_event_cb), NULL);
+       
+       window->menu_tips_context_id =
+               gtk_statusbar_get_context_id (GTK_STATUSBAR (window->status_bar), "menu_tips");
+
+       window->print_settings = NULL;
+       window->merge_dialog = NULL;
+       window->context_menu = GTK_MENU (gtk_ui_manager_get_widget (ui, "/ContextMenu"));
+       window->empty_selection_context_menu =
+               GTK_MENU (gtk_ui_manager_get_widget (ui, "/EmptySelectionContextMenu"));
+
+       window->view = NULL;
+
+       window_list = g_list_append (window_list, window);
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+static void
+gl_window_finalize (GObject *object)
+{
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (object != NULL);
+       g_return_if_fail (GL_IS_WINDOW (object));
+
+       G_OBJECT_CLASS (gl_window_parent_class)->finalize (object);
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+static void
+gl_window_destroy (GtkObject *gtk_object)
+{
+       glWindow *window;
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (gtk_object != NULL);
+       g_return_if_fail (GL_IS_WINDOW (gtk_object));
+
+       window = GL_WINDOW (gtk_object);
+       window_list = g_list_remove (window_list, window);
+
+        if (window->ui) {
+               gl_ui_unref(window->ui);
+               window->ui = NULL;
+        }
+
+       if (GTK_OBJECT_CLASS (gl_window_parent_class)->destroy) {
+               GTK_OBJECT_CLASS (gl_window_parent_class)->destroy (gtk_object);
+       }
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+
+/****************************************************************************/
+/** Create a glabels window.                                                */
+/****************************************************************************/
+GtkWidget *
+gl_window_new (void)
+{
+       glWindow *window;
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       window = g_object_new (GL_TYPE_WINDOW,
+                              "title",    _("(none) - gLabels"),
+                              NULL);
+
+       gl_debug (DEBUG_WINDOW, "window=%p", window);
+       gl_debug (DEBUG_WINDOW, "view=%p", window->view);
+
+       gl_debug (DEBUG_WINDOW, "END");
+
+       return GTK_WIDGET(window);
+}
+
+/****************************************************************************/
+/** Create a glabels window from a label.                                   */
+/****************************************************************************/
+GtkWidget*
+gl_window_new_from_label (glLabel *label)
+{
+       glWindow *window;
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       window = GL_WINDOW (gl_window_new ());
+
+       gl_window_set_label (window, label);
+
+       gl_debug (DEBUG_WINDOW, "END");
+
+       return GTK_WIDGET(window);
+}
+
+/****************************************************************************/
+/** Create a glabels window from a glabels file.                            */
+/****************************************************************************/
+GtkWidget*
+gl_window_new_from_file (const gchar *filename)
+{
+       glWindow         *window;
+       glLabel          *label;
+       gchar            *abs_filename;
+       glXMLLabelStatus  status;
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       window = GL_WINDOW (gl_window_new ());
+
+       abs_filename = gl_util_make_absolute (filename);
+       label = gl_xml_label_open (abs_filename, &status);
+       g_free (abs_filename);
+
+       gl_window_set_label (window, label);
+
+       gl_debug (DEBUG_WINDOW, "END");
+
+       return GTK_WIDGET(window);
+}
+
+/****************************************************************************/
+/** Is window empty?                                                        */
+/****************************************************************************/
+gboolean
+gl_window_is_empty (glWindow    *window)
+{
+       g_return_val_if_fail (GL_IS_WINDOW (window), FALSE);
+
+       gl_debug (DEBUG_WINDOW, "return %d", (window->view == NULL) );
+       return ( window->view == NULL );
+}
+
+/****************************************************************************/
+/** Create view from label and place in window.                             */
+/****************************************************************************/
+void
+gl_window_set_label (glWindow    *window,
+                    glLabel     *label)
+{
+       gchar *string;
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (GL_IS_WINDOW (window));
+       g_return_if_fail (GL_IS_LABEL (label));
+
+       gl_label_clear_modified (label);
+
+       set_window_title (window, label);
+
+       if ( window->view != NULL ) {
+               gtk_widget_destroy (window->view);
+               window->view = NULL;
+       }
+
+       window->view = gl_view_new (label);
+       gtk_box_pack_start (GTK_BOX (window->hbox), window->view,TRUE, TRUE, 0);
+
+       gtk_widget_show_all (window->view);
+
+       gl_view_zoom_to_fit (GL_VIEW(window->view));
+
+       if (gl_prefs->grid_visible) {
+               gl_view_show_grid (GL_VIEW(window->view));
+       } else {
+               gl_view_hide_grid (GL_VIEW(window->view));
+       }
+
+       if (gl_prefs->markup_visible) {
+               gl_view_show_markup (GL_VIEW(window->view));
+       } else {
+               gl_view_hide_markup (GL_VIEW(window->view));
+       }
+
+       gl_ui_update_all (window->ui, GL_VIEW(window->view));
+
+       gl_ui_property_bar_set_view (window->property_bar, GL_VIEW(window->view));
+       gl_ui_sidebar_set_view (window->sidebar, GL_VIEW(window->view));
+
+       string = g_strdup_printf ("%3.0f%%",
+                                 100.0*gl_view_get_zoom (GL_VIEW(window->view)));
+       gtk_label_set_text (GTK_LABEL(window->zoom_info), string);
+       g_free (string);
+
+       g_signal_connect (G_OBJECT(window->view), "selection_changed",
+                         G_CALLBACK(selection_changed_cb), window);
+
+       g_signal_connect (G_OBJECT(window->view), "context_menu_activate",
+                         G_CALLBACK(context_menu_activate_cb), window);
+
+       g_signal_connect (G_OBJECT(window->view), "zoom_changed",
+                         G_CALLBACK(zoom_changed_cb), window);
+
+       g_signal_connect (G_OBJECT(window->view), "pointer_moved",
+                         G_CALLBACK(pointer_moved_cb), window);
+
+       g_signal_connect (G_OBJECT(window->view), "pointer_exit",
+                         G_CALLBACK(pointer_exit_cb), window);
+
+       g_signal_connect (G_OBJECT(label), "name_changed",
+                         G_CALLBACK(name_changed_cb), window);
+
+       g_signal_connect (G_OBJECT(label), "modified_changed",
+                         G_CALLBACK(modified_changed_cb), window);
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+/****************************************************************************/
+/** Return list of glabels windows.                                         */
+/****************************************************************************/
+const GList *
+gl_window_get_window_list (void)
+{
+       gl_debug (DEBUG_WINDOW, "");
+       return window_list;
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Set window title based on name and state of label.             */
+/*---------------------------------------------------------------------------*/
+static void 
+set_window_title (glWindow *window,
+                 glLabel  *label)
+{
+       gchar *name, *title;
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+       g_return_if_fail (label && GL_IS_LABEL (label));
+
+       name = gl_label_get_short_name (label);
+       g_return_if_fail (name != NULL);
+
+       if (gl_label_is_modified (label)) {
+               title = g_strdup_printf ("%s %s - gLabels",
+                                        name, _("(modified)"));
+       } else {
+               title = g_strdup_printf ("%s - gLabels", name);
+       }
+
+       gtk_window_set_title (GTK_WINDOW(window), title);
+
+       g_free (name);
+       g_free (title);
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+/*-------------------------------------------------------------------------*/
+/** PRIVATE.  Window "delete-event" callback.                              */
+/*-------------------------------------------------------------------------*/
+static gboolean
+window_delete_event_cb (glWindow      *window,
+                       GdkEvent      *event,
+                       gpointer       user_data)
+{
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_val_if_fail (window && GL_IS_WINDOW (window), TRUE);
+
+       gl_file_close (window);
+
+       gl_debug (DEBUG_WINDOW, "END");
+
+       return TRUE;
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  View "selection state changed" callback.                       */
+/*---------------------------------------------------------------------------*/
+static void 
+selection_changed_cb (glView   *view,
+                     glWindow *window)
+{
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+
+       gl_ui_update_selection_verbs (window->ui, view);
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  View "context menu activate" callback.                         */
+/*---------------------------------------------------------------------------*/
+static void
+context_menu_activate_cb (glView       *view,
+                         gint          button,
+                         guint32       activate_time,
+                         glWindow     *window)
+{
+        gl_debug (DEBUG_WINDOW, "START");
+
+        g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+
+        if (gl_view_is_selection_empty (view)) {
+
+               gtk_menu_popup (GTK_MENU (window->empty_selection_context_menu),
+                               NULL, NULL, NULL, NULL, button, activate_time);
+
+        } else {
+
+               gtk_menu_popup (GTK_MENU (window->context_menu),
+                               NULL, NULL, NULL, NULL, button, activate_time);
+
+        }
+
+        gl_debug (DEBUG_WINDOW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  View "zoom state changed" callback.                            */
+/*---------------------------------------------------------------------------*/
+static void 
+zoom_changed_cb (glView   *view,
+                gdouble   zoom,
+                glWindow *window)
+{
+       gchar *string;
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+
+       string = g_strdup_printf ("%3.0f%%", 100.0*zoom);
+       gtk_label_set_text (GTK_LABEL(window->zoom_info), string);
+       g_free (string);
+
+       gl_ui_update_zoom_verbs (window->ui, view);
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  View "pointer moved" callback.                                 */
+/*---------------------------------------------------------------------------*/
+static void
+pointer_moved_cb (glView   *view,
+                 gdouble   x,
+                 gdouble   y,
+                 glWindow *window)
+{
+       gchar *string;
+       gdouble units_per_point;
+       gint    units_precision;
+
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+
+       units_per_point = gl_prefs_get_units_per_point ();
+       units_precision = gl_prefs_get_units_precision ();
+
+       string = g_strdup_printf ("%.*f, %.*f",
+                                 units_precision, x*units_per_point,
+                                 units_precision, y*units_per_point);
+       gtk_label_set_text (GTK_LABEL(window->cursor_info), string);
+       g_free (string);
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  View "pointer exit" callback.                                  */
+/*---------------------------------------------------------------------------*/
+static void
+pointer_exit_cb (glView   *view,
+                glWindow *window)
+{
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (view && GL_IS_VIEW (view));
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+
+       gtk_label_set_text (GTK_LABEL(window->cursor_info), "");
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Label "name changed" callback.                                 */
+/*---------------------------------------------------------------------------*/
+static void 
+name_changed_cb (glLabel  *label,
+                glWindow *window)
+{
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+
+       set_window_title (window, label);
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
+/*---------------------------------------------------------------------------*/
+/** PRIVATE.  Label "modified state changed" callback.                       */
+/*---------------------------------------------------------------------------*/
+static void 
+modified_changed_cb (glLabel  *label,
+                    glWindow *window)
+{
+       gl_debug (DEBUG_WINDOW, "START");
+
+       g_return_if_fail (label && GL_IS_LABEL (label));
+       g_return_if_fail (window && GL_IS_WINDOW (window));
+
+       set_window_title (window, label);
+
+       gl_ui_update_modified_verbs (window->ui, label);
+
+       gl_debug (DEBUG_WINDOW, "END");
+}
+
diff --git a/src/window.h b/src/window.h
new file mode 100644 (file)
index 0000000..e5a63ab
--- /dev/null
@@ -0,0 +1,101 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  window.h:  a gLabels app window
+ *
+ *  Copyright (C) 2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#ifndef __WINDOW_H__
+#define __WINDOW_H__
+
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkuimanager.h>
+#include <gtk/gtkmenu.h>
+
+#include "view.h"
+#include "label.h"
+#include "ui-property-bar.h"
+#include "ui-sidebar.h"
+#include "print-op.h"
+#include "merge-properties-dialog.h"
+
+G_BEGIN_DECLS
+
+#define GL_TYPE_WINDOW (gl_window_get_type ())
+#define GL_WINDOW(obj) \
+        (GTK_CHECK_CAST((obj), GL_TYPE_WINDOW, glWindow ))
+#define GL_WINDOW_CLASS(klass) \
+        (GTK_CHECK_CLASS_CAST ((klass), GL_TYPE_WINDOW, glWindowClass))
+#define GL_IS_WINDOW(obj) \
+        (GTK_CHECK_TYPE ((obj), GL_TYPE_WINDOW))
+#define GL_IS_WINDOW_CLASS(klass) \
+        (GTK_CHECK_CLASS_TYPE ((klass), GL_TYPE_WINDOW))
+
+typedef struct _glWindow      glWindow;
+typedef struct _glWindowClass glWindowClass;
+
+struct _glWindow {
+       GtkWindow               parent_widget;
+
+       GtkUIManager            *ui;
+
+       GtkWidget               *view;
+
+       GtkWidget               *hbox;
+
+       glUIPropertyBar         *property_bar;
+       glUISidebar             *sidebar;
+
+       GtkWidget               *status_bar;
+       GtkWidget               *cursor_info;
+       GtkWidget               *cursor_info_frame;
+       GtkWidget               *zoom_info;
+       GtkWidget               *zoom_info_frame;
+
+       guint                    menu_tips_context_id;
+
+        glPrintOpSettings       *print_settings;
+       glMergePropertiesDialog *merge_dialog;
+       GtkMenu                 *context_menu;
+       GtkMenu                 *empty_selection_context_menu;
+};
+
+struct _glWindowClass {
+       GtkWindowClass          parent_class;
+};
+
+GType        gl_window_get_type          (void) G_GNUC_CONST;
+
+GtkWidget   *gl_window_new               (void);
+
+GtkWidget   *gl_window_new_from_file     (const gchar *filename);
+
+GtkWidget   *gl_window_new_from_label    (glLabel     *label);
+
+gboolean     gl_window_is_empty          (glWindow    *window);
+
+void         gl_window_set_label         (glWindow    *window,
+                                         glLabel     *label);
+
+const GList *gl_window_get_window_list   (void);
+
+G_END_DECLS
+
+#endif /* __WINDOW_H__ */
diff --git a/src/xml-label-04.c b/src/xml-label-04.c
new file mode 100644 (file)
index 0000000..89a94b6
--- /dev/null
@@ -0,0 +1,504 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  xml-label-04.c:  GLabels xml label compat module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "xml-label-04.h"
+
+#include <glib/gi18n.h>
+
+#include "label-text.h"
+#include "label-box.h"
+#include "label-line.h"
+#include "label-ellipse.h"
+#include "label-image.h"
+#include "label-barcode.h"
+#include <libglabels/db.h>
+#include <libglabels/xml.h>
+
+#include "util.h"
+#include "debug.h"
+
+static gboolean xml04_parse_media_description (xmlNodePtr node,
+                                              glLabel *label);
+static void     xml04_parse_object            (xmlNodePtr node,
+                                              glLabelObject *object);
+static void     xml04_parse_text_props        (xmlNodePtr node,
+                                              glLabelText *object);
+static void     xml04_parse_box_props         (xmlNodePtr node,
+                                              glLabelBox *object);
+static void     xml04_parse_line_props        (xmlNodePtr node,
+                                              glLabelLine *object);
+static void     xml04_parse_ellipse_props     (xmlNodePtr node,
+                                              glLabelEllipse *object);
+static void     xml04_parse_image_props       (xmlNodePtr node,
+                                              glLabelImage *object);
+static void     xml04_parse_barcode_props     (xmlNodePtr node,
+                                              glLabelBarcode *object);
+static void     xml04_parse_merge_properties  (xmlNodePtr node,
+                                              glLabel *label);
+
+\f
+/****************************************************************************/
+/* PRIVATE.  Parse xml doc structure and create label.                      */
+/****************************************************************************/
+glLabel      *gl_xml_label_04_parse      (xmlNodePtr       root,
+                                         glXMLLabelStatus *status)
+{
+       glLabel       *label;
+       xmlNodePtr    node;
+       GObject       *object;
+       gboolean      rotate_flag;
+
+       gl_debug (DEBUG_XML, "START");
+
+       *status = XML_LABEL_OK;
+
+       if (!xmlStrEqual (root->name, (xmlChar *)"Label")) {
+               g_message (_("Bad root node = \"%s\""), root->name);
+               *status = XML_LABEL_ERROR_OPEN_PARSE;
+               return NULL;
+       }
+
+       label = GL_LABEL (gl_label_new ());
+
+       rotate_flag = lgl_xml_get_prop_boolean (root, "rotate", FALSE);
+       gl_label_set_rotate_flag (label, rotate_flag);
+
+       for (node = root->xmlChildrenNode; node != NULL; node = node->next) {
+
+               gl_debug (DEBUG_XML, "node name = \"%s\"", node->name);
+
+               if (!xmlNodeIsText (node)) {
+                       if (xmlStrEqual (node->name, (xmlChar *)"Media_Type")) {
+                               if (!xml04_parse_media_description (node, label)) {
+                                       *status = XML_LABEL_UNKNOWN_MEDIA;
+                               }
+                       } else if (xmlStrEqual (node->name, (xmlChar *)"Text")) {
+                               object = gl_label_text_new (label);
+                               xml04_parse_object (node, GL_LABEL_OBJECT(object));
+                               xml04_parse_text_props (node, GL_LABEL_TEXT(object));
+                       } else if (xmlStrEqual (node->name, (xmlChar *)"Box")) {
+                               object = gl_label_box_new (label);
+                               xml04_parse_object (node, GL_LABEL_OBJECT(object));
+                               xml04_parse_box_props (node, GL_LABEL_BOX(object));
+                       } else if (xmlStrEqual (node->name, (xmlChar *)"Line")) {
+                               object = gl_label_line_new (label);
+                               xml04_parse_object (node, GL_LABEL_OBJECT(object));
+                               xml04_parse_line_props (node, GL_LABEL_LINE(object));
+                       } else if (xmlStrEqual (node->name, (xmlChar *)"Ellipse")) {
+                               object = gl_label_ellipse_new (label);
+                               xml04_parse_object (node, GL_LABEL_OBJECT(object));
+                               xml04_parse_ellipse_props (node,
+                                                          GL_LABEL_ELLIPSE(object));
+                       } else if (xmlStrEqual (node->name, (xmlChar *)"Image")) {
+                               object = gl_label_image_new (label);
+                               xml04_parse_object (node, GL_LABEL_OBJECT(object));
+                               xml04_parse_image_props (node, GL_LABEL_IMAGE(object));
+                       } else if (xmlStrEqual (node->name, (xmlChar *)"Barcode")) {
+                               object = gl_label_barcode_new (label);
+                               xml04_parse_object (node, GL_LABEL_OBJECT(object));
+                               xml04_parse_barcode_props (node,
+                                                          GL_LABEL_BARCODE(object));
+                       } else if (xmlStrEqual (node->name, (xmlChar *)"Merge_Properties")) {
+                               xml04_parse_merge_properties (node, label);
+                       } else {
+                               g_message (_("bad node =  \"%s\""), node->name);
+                       }
+               }
+       }
+
+       gl_debug (DEBUG_XML, "END");
+
+       return label;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse Media Description node.                                  */
+/*--------------------------------------------------------------------------*/
+static gboolean
+xml04_parse_media_description (xmlNodePtr node,
+                              glLabel    *label)
+{
+       xmlChar     *template_name;
+       lglTemplate *template;
+       gboolean     ret;
+
+       gl_debug (DEBUG_XML, "START");
+
+       template_name = xmlNodeGetContent (node);
+
+       template = lgl_db_lookup_template_from_name ((gchar *)template_name);
+       if (template == NULL) {
+               g_message ("Undefined template \"%s\"", template_name);
+               /* Get a default */
+               template = lgl_db_lookup_template_from_name (NULL);
+               ret = FALSE;
+       } else {
+               ret = TRUE;
+       }
+
+       gl_label_set_template (label, template);
+
+       lgl_template_free (template);
+       xmlFree (template_name);
+
+       gl_debug (DEBUG_XML, "END");
+
+       return ret;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Object Node                                          */
+/*--------------------------------------------------------------------------*/
+static void
+xml04_parse_object (xmlNodePtr    object_node,
+                   glLabelObject *object)
+{
+       gdouble x, y;
+
+       gl_debug (DEBUG_XML, "START");
+
+       x = lgl_xml_get_prop_double (object_node, "x", 0);
+       y = lgl_xml_get_prop_double (object_node, "y", 0);
+
+       gl_label_object_set_position (object, x, y);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Label->Text Node Properties                          */
+/*--------------------------------------------------------------------------*/
+static void
+xml04_parse_text_props (xmlNodePtr    object_node,
+                       glLabelText   *object)
+{
+       xmlChar         *font_family;
+       gdouble          font_size;
+       PangoWeight      font_weight;
+       gboolean         font_italic_flag;
+       glColorNode     *color_node;
+       PangoAlignment   align;
+       xmlNodePtr       line_node, text_node;
+       glTextNode      *node_text;
+       GList           *nodes, *lines;
+       gdouble          w, h, x, y;
+       xmlChar         *string;
+
+       gl_debug (DEBUG_XML, "START");
+
+       font_family = xmlGetProp (object_node, (xmlChar *)"font_family");
+       font_size = lgl_xml_get_prop_double (object_node, "font_size", 0);
+       string = xmlGetProp (object_node, (xmlChar *)"font_weight");
+       font_weight = gl_util_string_to_weight ((gchar *)string);
+       xmlFree (string);
+       font_italic_flag = lgl_xml_get_prop_boolean (object_node, "font_italic", FALSE);
+
+       string = xmlGetProp (object_node, (xmlChar *)"justify");
+       align = gl_util_string_to_align ((gchar *)string);
+       xmlFree (string);
+
+       color_node = gl_color_node_new_default ();
+       color_node->color = lgl_xml_get_prop_uint (object_node, "color", 0);
+
+       gl_label_object_set_font_family (GL_LABEL_OBJECT(object), (gchar *)font_family);
+       gl_label_object_set_font_size (GL_LABEL_OBJECT(object), font_size);
+       gl_label_object_set_font_weight (GL_LABEL_OBJECT(object), font_weight);
+       gl_label_object_set_font_italic_flag (GL_LABEL_OBJECT(object), font_italic_flag);
+       gl_label_object_set_text_color (GL_LABEL_OBJECT(object), color_node);
+       gl_label_object_set_text_alignment (GL_LABEL_OBJECT(object), align);
+       
+       gl_color_node_free (&color_node);
+
+       lines = NULL;
+       for (line_node = object_node->xmlChildrenNode; line_node != NULL;
+            line_node = line_node->next) {
+
+               if (xmlStrEqual (line_node->name, (xmlChar *)"Line")) {
+
+                       gl_debug (DEBUG_XML, "->Line node");
+
+                       nodes = NULL;
+                       for (text_node = line_node->xmlChildrenNode;
+                            text_node != NULL; text_node = text_node->next) {
+
+                               if (xmlStrEqual (text_node->name, (xmlChar *)"Field")) {
+                                       gl_debug (DEBUG_XML, "->Line->Field node");
+                                       node_text = g_new0 (glTextNode, 1);
+                                       node_text->field_flag = TRUE;
+                                       node_text->data =
+                                               (gchar *)xmlGetProp (text_node, (xmlChar *)"name");
+                                       nodes =
+                                           g_list_append (nodes, node_text);
+                               } else if (xmlNodeIsText (text_node)) {
+                                       gl_debug (DEBUG_XML, "->Line->\"literal\" node");
+                                       node_text = g_new0 (glTextNode, 1);
+                                       node_text->field_flag = FALSE;
+                                       node_text->data =
+                                               (gchar *)xmlNodeGetContent (text_node);
+                                       gl_debug (DEBUG_XML, "text = \"%s\"",
+                                                 node_text->data);
+                                       nodes =
+                                           g_list_append (nodes, node_text);
+                               } else {
+                                       g_message ("Unexpected Text Line child: \"%s\"",
+                                                  text_node->name);
+                               }
+
+                       }
+                       lines = g_list_append (lines, nodes);
+
+               } else if (!xmlNodeIsText (line_node)) {
+                       g_message ("Unexpected Text child: \"%s\"",
+                                  line_node->name);
+               }
+
+       }
+
+       gl_label_text_set_lines (object, lines);
+
+       gl_text_node_lines_free (&lines);
+       xmlFree (font_family);
+
+       /* Adjust location.  In 0.4.x, text was anchored at x,y */
+       gl_label_object_get_position (GL_LABEL_OBJECT(object), &x, &y);
+       gl_label_object_get_size (GL_LABEL_OBJECT(object), &w, &h);
+       switch (align) {
+       case PANGO_ALIGN_LEFT:
+               /* nothing */
+               break;
+       case PANGO_ALIGN_CENTER:
+               x -= w/2.0;
+               gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+               break;
+       case PANGO_ALIGN_RIGHT:
+               x -= w;
+               gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+               break;
+       default:
+               /* should not happen */
+               break;
+       }
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Label->Box Node Properties                           */
+/*--------------------------------------------------------------------------*/
+static void
+xml04_parse_box_props (xmlNodePtr    node,
+                      glLabelBox    *object)
+{
+       gdouble w, h, line_width;
+       glColorNode *line_color_node;
+       glColorNode *fill_color_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       w = lgl_xml_get_prop_double (node, "w", 0);
+       h = lgl_xml_get_prop_double (node, "h", 0);
+
+       line_width = lgl_xml_get_prop_double (node, "line_width", 0);
+
+       line_color_node = gl_color_node_new_default ();
+       line_color_node->color = lgl_xml_get_prop_uint (node, "line_color", 0);
+       
+       fill_color_node = gl_color_node_new_default ();
+       fill_color_node->color = lgl_xml_get_prop_uint (node, "fill_color", 0);
+
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), w, h);
+       gl_label_object_set_line_width (GL_LABEL_OBJECT(object), line_width);
+       gl_label_object_set_line_color (GL_LABEL_OBJECT(object), line_color_node);
+       gl_label_object_set_fill_color (GL_LABEL_OBJECT(object), fill_color_node);
+
+       gl_color_node_free (&line_color_node);
+       gl_color_node_free (&fill_color_node);
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Label->Line Node Properties                          */
+/*--------------------------------------------------------------------------*/
+static void
+xml04_parse_line_props (xmlNodePtr    node,
+                       glLabelLine *object)
+{
+       gdouble w, h, line_width;
+       glColorNode *line_color_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       w = lgl_xml_get_prop_double (node, "dx", 0);
+       h = lgl_xml_get_prop_double (node, "dy", 0);
+
+       line_width = lgl_xml_get_prop_double (node, "line_width", 0);
+
+       line_color_node = gl_color_node_new_default ();
+       line_color_node->color = lgl_xml_get_prop_uint (node, "line_color", 0);
+
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), w, h);
+       gl_label_object_set_line_width (GL_LABEL_OBJECT(object), line_width);
+       gl_label_object_set_line_color (GL_LABEL_OBJECT(object), line_color_node);
+
+       gl_color_node_free (&line_color_node);
+       
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Label->Ellipse Node Properties                       */
+/*--------------------------------------------------------------------------*/
+static void
+xml04_parse_ellipse_props (xmlNodePtr     node,
+                          glLabelEllipse *object)
+{
+       gdouble w, h, line_width;
+       glColorNode *line_color_node;
+       glColorNode *fill_color_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       w = lgl_xml_get_prop_double (node, "w", 0);
+       h = lgl_xml_get_prop_double (node, "h", 0);
+
+       line_width = lgl_xml_get_prop_double (node, "line_width", 0);
+
+       line_color_node = gl_color_node_new_default ();
+       line_color_node->color = lgl_xml_get_prop_uint (node, "line_color", 0);
+       
+       fill_color_node = gl_color_node_new_default ();
+       fill_color_node->color = lgl_xml_get_prop_uint (node, "fill_color", 0);
+
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), w, h);
+       gl_label_object_set_line_width (GL_LABEL_OBJECT(object), line_width);
+       gl_label_object_set_line_color (GL_LABEL_OBJECT(object), line_color_node);
+       gl_label_object_set_fill_color (GL_LABEL_OBJECT(object), fill_color_node);
+
+       gl_color_node_free (&line_color_node);
+       gl_color_node_free (&fill_color_node);
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Label->Image Node Properties                         */
+/*--------------------------------------------------------------------------*/
+static void
+xml04_parse_image_props (xmlNodePtr    node,
+                        glLabelImage  *object)
+{
+       gdouble w, h;
+       glTextNode *filename;
+
+       gl_debug (DEBUG_XML, "START");
+
+       filename = g_new0 (glTextNode, 1);
+       filename->field_flag = FALSE;
+       filename->data = (gchar *)xmlGetProp (node, (xmlChar *)"filename");
+       gl_label_image_set_filename (object, filename);
+       gl_text_node_free (&filename);
+
+       w = lgl_xml_get_prop_double (node, "w", 0);
+       h = lgl_xml_get_prop_double (node, "h", 0);
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), w, h);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Label->Barcode Node Properties                       */
+/*--------------------------------------------------------------------------*/
+static void
+xml04_parse_barcode_props (xmlNodePtr    node,
+                          glLabelBarcode *object)
+{
+       xmlChar       *id;
+       gboolean       text_flag;
+       glColorNode   *color_node;
+       gdouble        scale;
+       xmlNodePtr     child;
+       glTextNode    *text_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       color_node = gl_color_node_new_default ();
+       color_node->color = lgl_xml_get_prop_uint (node, "color", 0);
+
+       id = xmlGetProp (node, (xmlChar *)"style");
+
+       text_flag = lgl_xml_get_prop_boolean (node, "text", FALSE);
+       scale = lgl_xml_get_prop_double (node, "scale", 1.0);
+       if (scale == 0.0) {
+               scale = 0.5; /* Set to a valid value */
+       }
+       gl_label_barcode_set_props (object, (gchar *)id, text_flag, TRUE, 0);
+       gl_label_object_set_line_color (GL_LABEL_OBJECT(object), color_node);
+
+       child = node->xmlChildrenNode;
+       text_node = g_new0 (glTextNode, 1);
+       if (xmlStrEqual (child->name, (xmlChar *)"Field")) {
+               text_node->field_flag = TRUE;
+               text_node->data       = (gchar *)xmlGetProp (child, (xmlChar *)"name");
+       } else if (xmlNodeIsText (child)) {
+               text_node->field_flag = FALSE;
+               text_node->data       = (gchar *)xmlNodeGetContent (child);
+       } else {
+               g_message ("Unexpected Barcode child: \"%s\"", child->name);
+       }
+       gl_label_barcode_set_data (object, text_node);
+
+       gl_color_node_free (&color_node);
+       gl_text_node_free (&text_node);
+       xmlFree (id);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML merge properties tag.                                */
+/*--------------------------------------------------------------------------*/
+static void
+xml04_parse_merge_properties (xmlNodePtr node,
+                             glLabel    *label)
+{
+       glMerge               *merge;
+       xmlChar               *string;
+
+       gl_debug (DEBUG_XML, "START");
+
+       string = xmlGetProp (node, (xmlChar *)"type");
+       merge = gl_merge_new ((gchar *)string);
+       xmlFree (string);
+
+       string = xmlGetProp (node, (xmlChar *)"src");
+       gl_merge_set_src (merge, (gchar *)string);
+       xmlFree (string);
+
+       gl_label_set_merge (label, merge);
+
+       g_object_unref (G_OBJECT(merge));
+
+       gl_debug (DEBUG_XML, "END");
+}
diff --git a/src/xml-label-04.h b/src/xml-label-04.h
new file mode 100644 (file)
index 0000000..be11baf
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  xml-label-04.h:  GLabels xml label compat module header file
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __XML_LABEL_04_H__
+#define __XML_LABEL_04_H__
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#include "xml-label.h"
+
+G_BEGIN_DECLS
+
+extern glLabel      *gl_xml_label_04_parse      (xmlNodePtr       root,
+                                                glXMLLabelStatus *status);
+
+G_END_DECLS
+
+
+#endif /* __XML_LABEL_04_H__ */
diff --git a/src/xml-label.c b/src/xml-label.c
new file mode 100644 (file)
index 0000000..07452b2
--- /dev/null
@@ -0,0 +1,1805 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  label.c:  GLabels xml label module
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+
+#include <config.h>
+
+#include "xml-label.h"
+
+#include <glib/gi18n.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/xinclude.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+
+#include "label.h"
+#include "label-object.h"
+#include "label-text.h"
+#include "label-box.h"
+#include "label-line.h"
+#include "label-ellipse.h"
+#include "label-image.h"
+#include "label-barcode.h"
+#include "base64.h"
+#include "xml-label-04.h"
+#include <libglabels/db.h>
+#include <libglabels/xml-template.h>
+#include <libglabels/xml.h>
+#include "util.h"
+
+#include "debug.h"
+
+/*========================================================*/
+/* Private macros and constants.                          */
+/*========================================================*/
+#define COMPAT01_NAME_SPACE "http://snaught.com/glabels/0.1/"
+#define COMPAT04_NAME_SPACE "http://snaught.com/glabels/0.4/"
+#define COMPAT20_NAME_SPACE "http://snaught.com/glabels/2.0/"
+
+/*========================================================*/
+/* Private types.                                         */
+/*========================================================*/
+
+/*========================================================*/
+/* Private globals.                                       */
+/*========================================================*/
+
+/*========================================================*/
+/* Private function prototypes.                           */
+/*========================================================*/
+
+static glLabel       *xml_doc_to_label         (xmlDocPtr         doc,
+                                               glXMLLabelStatus *status);
+
+static glLabel       *xml_parse_label          (xmlNodePtr        root,
+                                               glXMLLabelStatus *status);
+
+static void           xml_parse_objects        (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_object_text    (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_object_box     (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_object_ellipse (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_object_line    (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_object_image   (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_object_barcode (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_merge_fields   (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_data           (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_pixdata        (xmlNodePtr        node,
+                                               glLabel          *label);
+
+static void           xml_parse_toplevel_span  (xmlNodePtr        node,
+                                               glLabelObject    *object);
+
+static void           xml_parse_affine_attrs   (xmlNodePtr        node,
+                                               glLabelObject    *object);
+
+static void           xml_parse_shadow_attrs   (xmlNodePtr        node,
+                                               glLabelObject    *object);
+
+static xmlDocPtr      xml_label_to_doc         (glLabel          *label,
+                                               glXMLLabelStatus *status);
+
+static void           xml_create_objects       (xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabel          *label);
+
+static void           xml_create_object_text   (xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabelObject    *object);
+
+static void           xml_create_object_box    (xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabelObject    *object);
+
+static void           xml_create_object_line   (xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabelObject    *object);
+
+static void           xml_create_object_ellipse(xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabelObject    *object);
+
+static void           xml_create_object_image  (xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabelObject    *object);
+
+static void           xml_create_object_barcode(xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabelObject    *object);
+
+static void           xml_create_merge_fields  (xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabel          *label);
+
+static void           xml_create_data          (xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabel          *label);
+
+static void           xml_create_pixdata       (xmlNodePtr        root,
+                                               xmlNsPtr          ns,
+                                               glLabel          *label,
+                                               gchar            *name);
+
+static void           xml_create_toplevel_span (xmlNodePtr        node,
+                                               xmlNsPtr          ns,
+                                               glLabelText      *object_text);
+
+static void           xml_create_affine_attrs  (xmlNodePtr        node,
+                                               glLabelObject    *object);
+
+static void           xml_create_shadow_attrs  (xmlNodePtr        node,
+                                               glLabelObject    *object);
+
+
+/****************************************************************************/
+/* Open and read label from xml file.                                       */
+/****************************************************************************/
+glLabel *
+gl_xml_label_open (const gchar      *utf8_filename,
+                  glXMLLabelStatus *status)
+{
+       xmlDocPtr  doc;
+       glLabel   *label;
+       gchar     *filename;
+
+       gl_debug (DEBUG_XML, "START");
+
+       filename = g_filename_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
+       g_return_val_if_fail (filename, NULL);
+
+#ifndef HAVE_XML_PARSE_HUGE
+       doc = xmlParseFile (filename);
+#else
+        doc = xmlReadFile (filename, NULL, XML_PARSE_HUGE);
+#endif
+       if (!doc) {
+               g_message (_("xmlParseFile error"));
+               *status = XML_LABEL_ERROR_OPEN_PARSE;
+               return NULL;
+       }
+
+       xmlXIncludeProcess (doc);
+       xmlReconciliateNs (doc, xmlDocGetRootElement (doc));
+
+       label = xml_doc_to_label (doc, status);
+
+       xmlFreeDoc (doc);
+
+       if (label) {
+               gl_label_set_filename (label, utf8_filename);
+               gl_label_clear_modified (label);
+       }
+
+       g_free (filename);
+       gl_debug (DEBUG_XML, "END");
+
+       return label;
+}
+
+/****************************************************************************/
+/* Read label from xml buffer.                                              */
+/****************************************************************************/
+glLabel *
+gl_xml_label_open_buffer (const gchar      *buffer,
+                         glXMLLabelStatus *status)
+{
+       xmlDocPtr  doc;
+       glLabel   *label;
+
+       gl_debug (DEBUG_XML, "START");
+
+#ifndef HAVE_XML_PARSE_HUGE
+       doc = xmlParseDoc ((xmlChar *) buffer);
+#else
+        doc = xmlReadDoc ((xmlChar *) buffer, NULL, NULL, XML_PARSE_HUGE);
+#endif
+       if (!doc) {
+               g_message (_("xmlParseDoc error"));
+               *status = XML_LABEL_ERROR_OPEN_PARSE;
+               return NULL;
+       }
+
+       label = xml_doc_to_label (doc, status);
+
+       xmlFreeDoc (doc);
+
+       if (label) {
+               gl_label_clear_modified (label);
+       }
+
+       gl_debug (DEBUG_XML, "END");
+
+       return label;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse xml doc structure and create label.                      */
+/*--------------------------------------------------------------------------*/
+static glLabel *
+xml_doc_to_label (xmlDocPtr         doc,
+                 glXMLLabelStatus *status)
+{
+       xmlNodePtr  root;
+       glLabel    *label;
+
+       gl_debug (DEBUG_XML, "START");
+
+       LIBXML_TEST_VERSION;
+
+       *status = XML_LABEL_OK;
+
+       root = xmlDocGetRootElement (doc);
+       if (!root || !root->name) {
+               g_message (_("No document root"));
+               *status = XML_LABEL_ERROR_OPEN_PARSE;
+               return NULL;
+       }
+
+        /* Try compatability mode 0.1 */
+        if (xmlSearchNsByHref (doc, root, (xmlChar *)COMPAT01_NAME_SPACE))
+       {
+                g_message (_("Importing from glabels 0.1 format"));
+                g_message ("TODO");
+                label = NULL; /* TODO */
+                return label;
+        }
+
+        /* Try compatability mode 0.4 */
+        if (xmlSearchNsByHref (doc, root, (xmlChar *)COMPAT04_NAME_SPACE))
+       {
+                g_message (_("Importing from glabels 0.4 format"));
+                label = gl_xml_label_04_parse (root, status);
+                return label;
+        }
+
+        /* Test for current namespaces. */
+        if ( !xmlSearchNsByHref (doc, root, (xmlChar *)COMPAT20_NAME_SPACE) &&
+             !xmlSearchNsByHref (doc, root, (xmlChar *)LGL_XML_NAME_SPACE) )
+        {
+                g_message (_("Unknown glabels Namespace -- Using %s"),
+                           LGL_XML_NAME_SPACE);
+        }
+
+        label = xml_parse_label (root, status);
+        if (label)
+        {
+                gl_label_set_compression (label, xmlGetDocCompressMode (doc));
+        }
+
+       gl_debug (DEBUG_XML, "END");
+
+       return label;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse xml root node and create label.                          */
+/*--------------------------------------------------------------------------*/
+static glLabel *
+xml_parse_label (xmlNodePtr        root,
+                glXMLLabelStatus *status)
+{
+       xmlNodePtr   child_node;
+       glLabel     *label;
+       lglTemplate *template;
+
+       gl_debug (DEBUG_XML, "START");
+
+       *status = XML_LABEL_OK;
+
+       if (!lgl_xml_is_node (root, "Glabels-document")) {
+               g_message (_("Bad root node = \"%s\""), root->name);
+               *status = XML_LABEL_ERROR_OPEN_PARSE;
+               return NULL;
+       }
+
+       label = GL_LABEL(gl_label_new ());
+
+       /* Pass 1, extract data nodes to pre-load cache. */
+       for (child_node = root->xmlChildrenNode; child_node != NULL; child_node = child_node->next) {
+               if (lgl_xml_is_node (child_node, "Data")) {
+                       xml_parse_data (child_node, label);
+               }
+       }
+
+       /* Pass 2, now extract everything else. */
+       for (child_node = root->xmlChildrenNode;
+             child_node != NULL;
+            child_node = child_node->next) {
+
+               if (lgl_xml_is_node (child_node, "Template")) {
+                       template = lgl_xml_template_parse_template_node (child_node);
+                       if (!template) {
+                               g_object_unref (label);
+                               *status = XML_LABEL_UNKNOWN_MEDIA;
+                               return NULL;
+                       }
+                       lgl_db_register_template (template);
+                       gl_label_set_template (label, template);
+                       lgl_template_free (template);
+               } else if (lgl_xml_is_node (child_node, "Objects")) {
+                       xml_parse_objects (child_node, label);
+               } else if (lgl_xml_is_node (child_node, "Merge")) {
+                       xml_parse_merge_fields (child_node, label);
+               } else if (lgl_xml_is_node (child_node, "Data")) {
+                       /* Handled in pass 1. */
+               } else {
+                       if (!xmlNodeIsText (child_node)) {
+                               g_message (_("bad node in Document node =  \"%s\""),
+                                          child_node->name);
+                               g_object_unref (label);
+                               *status = XML_LABEL_ERROR_OPEN_PARSE;
+                               return NULL;
+                       }
+               }
+       }
+
+       gl_debug (DEBUG_XML, "END");
+
+       return label;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse Objects node.                                            */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_objects (xmlNodePtr  node,
+                  glLabel    *label)
+{
+       gboolean    rotate_flag;
+       xmlNodePtr  child;
+
+       gl_debug (DEBUG_XML, "START");
+
+       rotate_flag = lgl_xml_get_prop_boolean (node, "rotate", FALSE);
+       gl_label_set_rotate_flag (label, rotate_flag);
+
+       for (child = node->xmlChildrenNode; child != NULL; child = child->next) {
+
+               if (lgl_xml_is_node (child, "Object-text")) {
+                       xml_parse_object_text (child, label);
+               } else if (lgl_xml_is_node (child, "Object-box")) {
+                       xml_parse_object_box (child, label);
+               } else if (lgl_xml_is_node (child, "Object-ellipse")) {
+                       xml_parse_object_ellipse (child, label);
+               } else if (lgl_xml_is_node (child, "Object-line")) {
+                       xml_parse_object_line (child, label);
+               } else if (lgl_xml_is_node (child, "Object-image")) {
+                       xml_parse_object_image (child, label);
+               } else if (lgl_xml_is_node (child, "Object-barcode")) {
+                       xml_parse_object_barcode (child, label);
+               } else {
+                       if (!xmlNodeIsText (child)) {
+                               g_message (_("bad node =  \"%s\""), child->name);
+                               break;
+                       }
+               }
+       }
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Objects->Object-text Node                            */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_object_text (xmlNodePtr  node,
+                      glLabel    *label)
+{
+       GObject          *object;
+       gdouble           x, y;
+       gdouble           w, h;
+       gchar            *string;
+       PangoAlignment    align;
+       gboolean          auto_shrink;
+       xmlNodePtr        child;
+
+       gl_debug (DEBUG_XML, "START");
+
+       object = gl_label_text_new (label);
+
+       /* position attrs */
+       x = lgl_xml_get_prop_length (node, "x", 0.0);
+       y = lgl_xml_get_prop_length (node, "y", 0.0);
+       gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+
+       /* implied size attrs */
+       w = lgl_xml_get_prop_length (node, "w", 0);
+       h = lgl_xml_get_prop_length (node, "h", 0);
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), w, h);
+
+       /* justify attr */
+       string = lgl_xml_get_prop_string (node, "justify", NULL);
+       align = gl_util_string_to_align (string);
+       g_free (string);
+       gl_label_object_set_text_alignment (GL_LABEL_OBJECT(object), align);
+
+       /* auto_shrink attr */
+       auto_shrink = lgl_xml_get_prop_boolean (node, "auto_shrink", FALSE);
+       gl_label_text_set_auto_shrink (GL_LABEL_TEXT(object), auto_shrink);
+
+       /* affine attrs */
+       xml_parse_affine_attrs (node, GL_LABEL_OBJECT(object));
+
+       /* shadow attrs */
+       xml_parse_shadow_attrs (node, GL_LABEL_OBJECT(object));
+
+       /* Process children */
+       for (child = node->xmlChildrenNode; child != NULL; child = child->next) {
+               if (lgl_xml_is_node (child, "Span")) {
+                       xml_parse_toplevel_span (child, GL_LABEL_OBJECT(object));
+                       break;
+               } else {
+                       if (!xmlNodeIsText (child)) {
+                               g_message ("Unexpected Object-text child: \"%s\"",
+                                          child->name);
+                       }
+               }
+       }
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Objects->Object-box Node                             */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_object_box (xmlNodePtr  node,
+                     glLabel    *label)
+{
+       GObject      *object;
+       gdouble       x, y;
+       gdouble       w, h;
+       gdouble       line_width;
+       glColorNode  *line_color_node;
+       gchar        *string;
+       glColorNode  *fill_color_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       object = gl_label_box_new (label);
+
+       /* position attrs */
+       x = lgl_xml_get_prop_length (node, "x", 0.0);
+       y = lgl_xml_get_prop_length (node, "y", 0.0);
+       gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+
+       /* size attrs */
+       w = lgl_xml_get_prop_length (node, "w", 0);
+       h = lgl_xml_get_prop_length (node, "h", 0);
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), w, h);
+
+       /* line attrs */
+       line_width = lgl_xml_get_prop_length (node, "line_width", 1.0);
+       gl_label_object_set_line_width (GL_LABEL_OBJECT(object), line_width);
+       
+       line_color_node = gl_color_node_new_default ();
+       string = lgl_xml_get_prop_string (node, "line_color_field", NULL);
+       if ( string ) {
+               line_color_node->field_flag = TRUE;
+               line_color_node->key = string;
+       } else {
+               line_color_node->color = lgl_xml_get_prop_uint (node, "line_color", 0);
+       }
+       gl_label_object_set_line_color (GL_LABEL_OBJECT(object), line_color_node);
+       gl_color_node_free (&line_color_node);
+
+
+       /* fill attrs */
+       fill_color_node = gl_color_node_new_default ();
+       string = lgl_xml_get_prop_string (node, "fill_color_field", NULL);
+       if ( string ) {
+               fill_color_node->field_flag = TRUE;
+               fill_color_node->key = string;
+       } else {
+               fill_color_node->color = lgl_xml_get_prop_uint (node, "fill_color", 0);
+       }
+       gl_label_object_set_fill_color (GL_LABEL_OBJECT(object), fill_color_node);
+       gl_color_node_free (&fill_color_node);
+       
+       /* affine attrs */
+       xml_parse_affine_attrs (node, GL_LABEL_OBJECT(object));
+
+       /* shadow attrs */
+       xml_parse_shadow_attrs (node, GL_LABEL_OBJECT(object));
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Objects->Object-ellipse Node                         */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_object_ellipse (xmlNodePtr  node,
+                         glLabel    *label)
+{
+       GObject     *object;
+       gdouble      x, y;
+       gdouble      w, h;
+       gdouble      line_width;
+       glColorNode *line_color_node;
+       gchar       *string;
+       glColorNode *fill_color_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       object = gl_label_ellipse_new (label);
+
+       /* position attrs */
+       x = lgl_xml_get_prop_length (node, "x", 0.0);
+       y = lgl_xml_get_prop_length (node, "y", 0.0);
+       gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+
+       /* size attrs */
+       w = lgl_xml_get_prop_length (node, "w", 0);
+       h = lgl_xml_get_prop_length (node, "h", 0);
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), w, h);
+
+       /* line attrs */
+       line_width = lgl_xml_get_prop_length (node, "line_width", 1.0);
+       gl_label_object_set_line_width (GL_LABEL_OBJECT(object), line_width);
+
+       line_color_node = gl_color_node_new_default ();
+       string = lgl_xml_get_prop_string (node, "line_color_field", NULL);
+       if ( string ) {
+               line_color_node->field_flag = TRUE;
+               line_color_node->key = string;
+       } else {
+               line_color_node->color = lgl_xml_get_prop_uint (node, "line_color", 0);         
+       }
+       gl_label_object_set_line_color (GL_LABEL_OBJECT(object), line_color_node);
+       gl_color_node_free (&line_color_node);
+
+
+       /* fill attrs */
+       fill_color_node = gl_color_node_new_default ();
+       string = lgl_xml_get_prop_string (node, "fill_color_field", NULL);
+       if ( string ) {
+               fill_color_node->field_flag = TRUE;
+               fill_color_node->key = string;
+       } else {
+               fill_color_node->color = lgl_xml_get_prop_uint (node, "fill_color", 0);
+       }
+       gl_label_object_set_fill_color (GL_LABEL_OBJECT(object), fill_color_node);
+       gl_color_node_free (&fill_color_node);
+
+       /* affine attrs */
+       xml_parse_affine_attrs (node, GL_LABEL_OBJECT(object));
+
+       /* shadow attrs */
+       xml_parse_shadow_attrs (node, GL_LABEL_OBJECT(object));
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Objects->Object-line Node                            */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_object_line (xmlNodePtr  node,
+                      glLabel    *label)
+{
+       GObject     *object;
+       gdouble      x, y;
+       gdouble      dx, dy;
+       gdouble      line_width;
+       glColorNode *line_color_node;
+       gchar       *string;
+
+       gl_debug (DEBUG_XML, "START");
+
+       object = gl_label_line_new (label);
+
+       /* position attrs */
+       x = lgl_xml_get_prop_length (node, "x", 0.0);
+       y = lgl_xml_get_prop_length (node, "y", 0.0);
+       gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+
+       /* length attrs */
+       dx = lgl_xml_get_prop_length (node, "dx", 0);
+       dy = lgl_xml_get_prop_length (node, "dy", 0);
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), dx, dy);
+
+       /* line attrs */
+       line_width = lgl_xml_get_prop_length (node, "line_width", 1.0);
+       gl_label_object_set_line_width (GL_LABEL_OBJECT(object), line_width);
+       
+       line_color_node = gl_color_node_new_default ();
+       string = lgl_xml_get_prop_string (node, "line_color_field", NULL);
+       if ( string ) {
+               line_color_node->field_flag = TRUE;
+               line_color_node->key = string;
+       } else {
+               line_color_node->color = lgl_xml_get_prop_uint (node, "line_color", 0);         
+       }
+       gl_label_object_set_line_color (GL_LABEL_OBJECT(object), line_color_node);
+       gl_color_node_free (&line_color_node);
+
+       /* affine attrs */
+       xml_parse_affine_attrs (node, GL_LABEL_OBJECT(object));
+
+       /* shadow attrs */
+       xml_parse_shadow_attrs (node, GL_LABEL_OBJECT(object));
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Objects->Object-image Node                           */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_object_image (xmlNodePtr  node,
+                       glLabel    *label)
+{
+       GObject      *object;
+       gdouble       x, y;
+       gdouble       w, h;
+       gchar        *string;
+       glTextNode   *filename;
+
+       gl_debug (DEBUG_XML, "START");
+
+       object = gl_label_image_new (label);
+
+       /* position attrs */
+       x = lgl_xml_get_prop_length (node, "x", 0.0);
+       y = lgl_xml_get_prop_length (node, "y", 0.0);
+       gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+
+       /* src or field attr */
+       string = lgl_xml_get_prop_string (node, "src", NULL);
+       if ( string ) {
+               filename = g_new0 (glTextNode, 1);
+               filename->field_flag = FALSE;
+               filename->data = g_strdup ((gchar *)string);
+               gl_label_image_set_filename (GL_LABEL_IMAGE(object), filename);
+               gl_text_node_free (&filename);
+               xmlFree (string);
+       } else {
+               string = lgl_xml_get_prop_string (node, "field", NULL);
+               if ( string ) {
+                       filename = g_new0 (glTextNode, 1);
+                       filename->field_flag = TRUE;
+                       filename->data = g_strdup ((gchar *)string);
+                       gl_label_image_set_filename (GL_LABEL_IMAGE(object), filename);
+                       gl_text_node_free (&filename);
+                       xmlFree (string);
+               } else {
+                       g_message ("Missing Object-image src or field attr");
+               }
+       }
+
+       /* size attrs */
+       w = lgl_xml_get_prop_length (node, "w", 0);
+       h = lgl_xml_get_prop_length (node, "h", 0);
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), w, h);
+
+       /* affine attrs */
+       xml_parse_affine_attrs (node, GL_LABEL_OBJECT(object));
+
+       /* shadow attrs */
+       xml_parse_shadow_attrs (node, GL_LABEL_OBJECT(object));
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML Objects->Object-barcode Node                         */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_object_barcode (xmlNodePtr  node,
+                         glLabel    *label)
+{
+       GObject            *object;
+       gdouble             x, y;
+       gdouble             w, h;
+       gchar              *string;
+       glTextNode         *text_node;
+       gchar              *id;
+       gboolean            text_flag;
+       gboolean            checksum_flag;
+       glColorNode        *color_node;
+       guint               format_digits;
+
+       gl_debug (DEBUG_XML, "START");
+
+       object = gl_label_barcode_new (label);
+
+       /* position attrs */
+       x = lgl_xml_get_prop_length (node, "x", 0.0);
+       y = lgl_xml_get_prop_length (node, "y", 0.0);
+       gl_label_object_set_position (GL_LABEL_OBJECT(object), x, y);
+
+       /* size attrs */
+       w = lgl_xml_get_prop_length (node, "w", 0);
+       h = lgl_xml_get_prop_length (node, "h", 0);
+       gl_label_object_set_size (GL_LABEL_OBJECT(object), w, h);
+
+       /* prop attrs */
+       id = lgl_xml_get_prop_string (node, "style", NULL);
+       text_flag = lgl_xml_get_prop_boolean (node, "text", FALSE);
+       checksum_flag = lgl_xml_get_prop_boolean (node, "checksum", TRUE);
+       format_digits = lgl_xml_get_prop_uint (node, "format", 10);
+       gl_label_barcode_set_props (GL_LABEL_BARCODE(object),
+                                   (gchar *)id, text_flag, checksum_flag, format_digits);
+       g_free (id);
+       
+       color_node = gl_color_node_new_default ();
+       string = lgl_xml_get_prop_string (node, "color_field", NULL);
+       if ( string ) {
+               color_node->field_flag = TRUE;
+               color_node->key = string;
+       } else {
+               color_node->color = lgl_xml_get_prop_uint (node, "color", 0);           
+       }
+       gl_label_object_set_line_color (GL_LABEL_OBJECT(object), color_node);
+       gl_color_node_free (&color_node);
+
+       /* data or field attr */
+       string = lgl_xml_get_prop_string (node, "data", NULL);
+       if ( string ) {
+               text_node = g_new0 (glTextNode, 1);
+               text_node->field_flag = FALSE;
+               text_node->data = string;
+               gl_label_barcode_set_data (GL_LABEL_BARCODE(object), text_node);
+               gl_text_node_free (&text_node);
+       } else {
+               string = lgl_xml_get_prop_string (node, "field", NULL);
+               if ( string ) {
+                       text_node = g_new0 (glTextNode, 1);
+                       text_node->field_flag = TRUE;
+                       text_node->data = string;
+                       gl_label_barcode_set_data (GL_LABEL_BARCODE(object), text_node);
+                       gl_text_node_free (&text_node);
+               } else {
+                       g_message ("Missing Object-barcode data or field attr");
+               }
+       }
+
+       /* affine attrs */
+       xml_parse_affine_attrs (node, GL_LABEL_OBJECT(object));
+
+       /* shadow attrs */
+       xml_parse_shadow_attrs (node, GL_LABEL_OBJECT(object));
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML merge fields tag.                                    */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_merge_fields (xmlNodePtr  node,
+                       glLabel    *label)
+{
+       gchar      *string;
+       glMerge    *merge;
+
+       gl_debug (DEBUG_XML, "START");
+
+       string = lgl_xml_get_prop_string (node, "type", NULL);
+       merge = gl_merge_new (string);
+       g_free (string);
+
+        if (merge)
+        {
+                string = lgl_xml_get_prop_string (node, "src", NULL);
+                gl_merge_set_src (merge, string);
+                g_free (string);
+
+                gl_label_set_merge (label, merge);
+
+                g_object_unref (G_OBJECT(merge));
+        }
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML data tag.                                            */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_data (xmlNodePtr  node,
+               glLabel    *label)
+{
+       xmlNodePtr  child;
+
+       gl_debug (DEBUG_XML, "START");
+
+       for (child = node->xmlChildrenNode; child != NULL; child = child->next) {
+
+               if (lgl_xml_is_node (child, "Pixdata")) {
+                       xml_parse_pixdata (child, label);
+               } else {
+                       if (!xmlNodeIsText (child)) {
+                               g_message (_("bad node in Data node =  \"%s\""),
+                                          child->name);
+                       }
+               }
+       }
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse XML pixbuf data tag.                                     */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_pixdata (xmlNodePtr  node,
+                  glLabel    *label)
+{
+       gchar      *name, *base64;
+       guchar     *stream;
+       guint       stream_length;
+       gboolean    ret;
+       GdkPixdata *pixdata;
+       GdkPixbuf  *pixbuf;
+       GHashTable *pixbuf_cache;
+
+       gl_debug (DEBUG_XML, "START");
+
+       name = lgl_xml_get_prop_string (node, "name", NULL);
+       base64 = lgl_xml_get_node_content (node);
+
+       stream = gl_base64_decode ((gchar *)base64, &stream_length);
+       pixdata = g_new0 (GdkPixdata, 1);
+       ret = gdk_pixdata_deserialize (pixdata, stream_length, stream, NULL);
+
+       if (ret) {
+               pixbuf = gdk_pixbuf_from_pixdata (pixdata, TRUE, NULL);
+
+               pixbuf_cache = gl_label_get_pixbuf_cache (label);
+               gl_pixbuf_cache_add_pixbuf (pixbuf_cache, (gchar *)name, pixbuf);
+       }
+
+       g_free (name);
+       g_free (base64);
+
+       g_free (stream);
+       g_free (pixdata);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse top-level Span tag.                                      */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_toplevel_span  (xmlNodePtr        node,
+                         glLabelObject    *object)
+{
+       gchar            *font_family;
+       gdouble           font_size;
+       PangoWeight       font_weight;
+       gboolean          font_italic_flag;
+       glColorNode      *color_node;
+       gdouble           text_line_spacing;
+       gchar            *string;
+       GList            *lines, *text_nodes;
+       xmlNodePtr        child;
+       glTextNode       *text_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       /* Font family attr */
+       font_family = lgl_xml_get_prop_string (node, "font_family", "Sans");
+       gl_label_object_set_font_family (object, font_family);
+       g_free (font_family);
+
+       /* Font size attr */
+       font_size = lgl_xml_get_prop_double (node, "font_size", 0.0);
+       gl_label_object_set_font_size (object, font_size);
+
+       /* Font weight attr */
+       string = lgl_xml_get_prop_string (node, "font_weight", NULL);
+       font_weight = gl_util_string_to_weight (string);
+       g_free (string);
+       gl_label_object_set_font_weight (object, font_weight);
+
+       /* Font italic flag attr */
+       font_italic_flag = lgl_xml_get_prop_boolean (node, "font_italic", FALSE);
+       gl_label_object_set_font_italic_flag (object, font_italic_flag);
+
+       /* Text color attr */
+       color_node = gl_color_node_new_default ();
+       string = lgl_xml_get_prop_string (node, "color_field", NULL);
+       if ( string ) {
+               color_node->field_flag = TRUE;
+               color_node->key = string;
+       } else {
+               color_node->color = lgl_xml_get_prop_uint (node, "color", 0);           
+       }
+       gl_label_object_set_text_color (object, color_node);
+       gl_color_node_free (&color_node);
+       
+
+       /* Text line spacing attr  */
+       text_line_spacing = lgl_xml_get_prop_double (node, "line_spacing", 1.0);
+       gl_label_object_set_text_line_spacing (object, text_line_spacing); 
+
+       /* Now descend children, and build lines of text nodes */
+       lines = NULL;
+       text_nodes = NULL;
+       for (child = node->xmlChildrenNode; child != NULL; child = child->next) {
+
+               if (xmlNodeIsText (child)) {
+                       gchar *data = lgl_xml_get_node_content (child); 
+
+                       /* Hack: if the first char is LF, it's an xml formatting string */
+                       if (data[0] != '\n') { 
+                               /* Literal text */
+                               text_node = g_new0 (glTextNode, 1);
+                               text_node->field_flag = FALSE;
+                               text_node->data = g_strdup ((gchar *)data);
+                               text_nodes = g_list_append (text_nodes, text_node);
+                       }
+                       g_free (data);
+
+               } else if (lgl_xml_is_node (child, "Span")) {
+
+                       g_message ("Unexpected rich text (not supported, yet!)");
+
+               } else if (lgl_xml_is_node (child, "Field")) {
+
+                       /* Field node */
+                       string = lgl_xml_get_prop_string (child, "name", NULL);
+                       text_node = g_new0 (glTextNode, 1);
+                       text_node->field_flag = TRUE;
+                       text_node->data = string;
+                       text_nodes = g_list_append (text_nodes, text_node);
+
+               } else if (lgl_xml_is_node (child, "NL")) {
+
+                       /* Store line. */
+                       lines = g_list_append (lines, text_nodes);
+                       text_nodes = NULL;
+
+               } else {
+                       g_message ("Unexpected Span child: \"%s\"", child->name);
+               }
+
+       }
+       if ( text_nodes ) {
+               /* Store last line. */
+               lines = g_list_append (lines, text_nodes);
+               text_nodes = NULL;
+       }
+       gl_label_text_set_lines (GL_LABEL_TEXT(object), lines);
+       gl_text_node_lines_free (&lines);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse affine attributes.                                       */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_affine_attrs (xmlNodePtr        node,
+                       glLabelObject    *object)
+{
+       gdouble           a[6];
+        cairo_matrix_t    matrix;
+
+       a[0] = lgl_xml_get_prop_double (node, "a0", 0.0);
+       a[1] = lgl_xml_get_prop_double (node, "a1", 0.0);
+       a[2] = lgl_xml_get_prop_double (node, "a2", 0.0);
+       a[3] = lgl_xml_get_prop_double (node, "a3", 0.0);
+       a[4] = lgl_xml_get_prop_double (node, "a4", 0.0);
+       a[5] = lgl_xml_get_prop_double (node, "a5", 0.0);
+
+        cairo_matrix_init (&matrix, a[0], a[1], a[2], a[3], a[4], a[5]);
+
+       gl_label_object_set_matrix (object, &matrix);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Parse shadow attributes.                                       */
+/*--------------------------------------------------------------------------*/
+static void
+xml_parse_shadow_attrs (xmlNodePtr        node,
+                       glLabelObject    *object)
+{
+       gboolean         shadow_state;
+       gdouble          shadow_x;
+       gdouble          shadow_y;
+       glColorNode     *shadow_color_node;
+       gdouble          shadow_opacity;
+       gchar           *string;
+
+       shadow_state = lgl_xml_get_prop_boolean (node, "shadow", FALSE);
+       gl_label_object_set_shadow_state (object, shadow_state);
+
+       if (shadow_state)
+       {
+               shadow_x = lgl_xml_get_prop_length (node, "shadow_x", 0.0);
+               shadow_y = lgl_xml_get_prop_length (node, "shadow_y", 0.0);
+               gl_label_object_set_shadow_offset (object, shadow_x, shadow_y);
+               
+               shadow_color_node = gl_color_node_new_default ();
+               string = lgl_xml_get_prop_string (node, "shadow_color_field", NULL);
+               if ( string ) {
+                       shadow_color_node->field_flag = TRUE;
+                       shadow_color_node->key = string;
+               } else {
+                       shadow_color_node->color = lgl_xml_get_prop_uint (node, "shadow_color", 0);             
+               }
+               gl_label_object_set_shadow_color (object, shadow_color_node);
+               gl_color_node_free (&shadow_color_node);
+
+               shadow_opacity = lgl_xml_get_prop_double (node, "shadow_opacity", 1.0);
+               gl_label_object_set_shadow_opacity (object, shadow_opacity);
+       }
+}
+
+/****************************************************************************/
+/* Save label to xml label file.                                            */
+/****************************************************************************/
+void
+gl_xml_label_save (glLabel          *label,
+                  const gchar      *utf8_filename,
+                  glXMLLabelStatus *status)
+{
+       xmlDocPtr doc;
+       gint      xml_ret;
+       gchar     *filename;
+
+       gl_debug (DEBUG_XML, "START");
+
+       doc = xml_label_to_doc (label, status);
+
+       filename = g_filename_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
+       if (!filename)
+               g_message (_("Utf8 conversion error."));
+       else {
+               xmlSetDocCompressMode (doc, gl_label_get_compression (label));
+               xml_ret = xmlSaveFormatFile (filename, doc, TRUE);
+               xmlFreeDoc (doc);
+               if (xml_ret == -1) {
+
+                       g_message (_("Problem saving xml file."));
+                       *status = XML_LABEL_ERROR_SAVE_FILE;
+
+               } else {
+
+                       gl_label_set_filename (label, utf8_filename);
+                       gl_label_clear_modified (label);
+
+               }
+               g_free (filename);
+       }
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/****************************************************************************/
+/* Save label to xml buffer.                                                */
+/****************************************************************************/
+gchar *
+gl_xml_label_save_buffer (glLabel          *label,
+                         glXMLLabelStatus *status)
+{
+       xmlDocPtr  doc;
+       gint       size;
+       guchar    *buffer;
+
+       gl_debug (DEBUG_XML, "START");
+
+       doc = xml_label_to_doc (label, status);
+
+       xmlDocDumpMemory (doc, &buffer, &size);
+       xmlFreeDoc (doc);
+
+       gl_label_clear_modified (label);
+
+       gl_debug (DEBUG_XML, "END");
+
+       return (gchar *)buffer;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Convert label to xml doc structure.                            */
+/*--------------------------------------------------------------------------*/
+static xmlDocPtr
+xml_label_to_doc (glLabel          *label,
+                 glXMLLabelStatus *status)
+{
+       xmlDocPtr   doc;
+       xmlNsPtr    ns;
+       glMerge    *merge;
+
+       gl_debug (DEBUG_XML, "START");
+
+       LIBXML_TEST_VERSION;
+
+       doc = xmlNewDoc ((xmlChar *)"1.0");
+       doc->xmlRootNode = xmlNewDocNode (doc, NULL, (xmlChar *)"Glabels-document", NULL);
+
+       ns = xmlNewNs (doc->xmlRootNode, (xmlChar *)LGL_XML_NAME_SPACE, NULL);
+       xmlSetNs (doc->xmlRootNode, ns);
+
+       lgl_xml_template_create_template_node (label->template, doc->xmlRootNode, ns);
+
+       xml_create_objects (doc->xmlRootNode, ns, label);
+
+       merge = gl_label_get_merge (label);
+       gl_debug (DEBUG_XML, "merge=%p", merge);
+       if (merge != NULL) {
+               xml_create_merge_fields (doc->xmlRootNode, ns, label);
+               g_object_unref (G_OBJECT(merge));
+       }
+
+       xml_create_data (doc->xmlRootNode, ns, label);
+
+       gl_debug (DEBUG_XML, "END");
+
+       *status = XML_LABEL_OK;
+       return doc;
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Objects Node                                           */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_objects (xmlNodePtr  root,
+                   xmlNsPtr    ns,
+                   glLabel    *label)
+{
+       xmlNodePtr     node;
+       GList         *p;
+       glLabelObject *object;
+
+       gl_debug (DEBUG_XML, "START");
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Objects", NULL);
+       lgl_xml_set_prop_string (node, "id", "0");
+       lgl_xml_set_prop_boolean (node, "rotate", label->rotate_flag);
+
+       for (p = label->objects; p != NULL; p = p->next) {
+
+               object = GL_LABEL_OBJECT(p->data);
+
+               if ( GL_IS_LABEL_TEXT(object) ) {
+                       xml_create_object_text (node, ns, object);
+               } else if ( GL_IS_LABEL_BOX(object) ) {
+                       xml_create_object_box (node, ns, object);
+               } else if ( GL_IS_LABEL_ELLIPSE(object) ) {
+                       xml_create_object_ellipse (node, ns, object);
+               } else if ( GL_IS_LABEL_LINE(object) ) {
+                       xml_create_object_line (node, ns, object);
+               } else if ( GL_IS_LABEL_IMAGE(object) ) {
+                       xml_create_object_image (node, ns, object);
+               } else if ( GL_IS_LABEL_BARCODE(object) ) {
+                       xml_create_object_barcode (node, ns, object);
+               } else {
+                       g_message ("Unknown label object");
+               }
+
+       }
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Objects->Object-text Node                              */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_object_text (xmlNodePtr     root,
+                       xmlNsPtr       ns,
+                       glLabelObject *object)
+{
+       xmlNodePtr        node;
+       gdouble           x, y;
+       gdouble           w, h;
+       PangoAlignment    align;
+       gboolean          auto_shrink;
+
+       gl_debug (DEBUG_XML, "START");
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Object-text", NULL);
+
+       /* position attrs */
+       gl_label_object_get_position (object, &x, &y);
+       lgl_xml_set_prop_length (node, "x", x);
+       lgl_xml_set_prop_length (node, "y", y);
+
+       /* size attrs */
+       gl_label_object_get_raw_size ( object, &w, &h);
+       lgl_xml_set_prop_length (node, "w", w);
+       lgl_xml_set_prop_length (node, "h", h);
+
+       /* justify attr */
+       align = gl_label_object_get_text_alignment (object);
+       lgl_xml_set_prop_string (node, "justify", gl_util_align_to_string (align));
+
+       /* auto_shrink attr */
+       auto_shrink = gl_label_text_get_auto_shrink (GL_LABEL_TEXT (object));
+       lgl_xml_set_prop_boolean (node, "auto_shrink", auto_shrink);
+
+       /* affine attrs */
+       xml_create_affine_attrs (node, object);
+
+       /* shadow attrs */
+       xml_create_shadow_attrs (node, object);
+
+       /* Add children */
+       xml_create_toplevel_span (node, ns, GL_LABEL_TEXT(object));
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Objects->Object-box Node                               */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_object_box (xmlNodePtr     root,
+                      xmlNsPtr       ns,
+                      glLabelObject *object)
+{
+       xmlNodePtr        node;
+       gdouble           x, y;
+       gdouble           w, h;
+       gdouble           line_width;
+       glColorNode      *line_color_node;
+       glColorNode *fill_color_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Object-box", NULL);
+
+       /* position attrs */
+       gl_label_object_get_position (object, &x, &y);
+       lgl_xml_set_prop_length (node, "x", x);
+       lgl_xml_set_prop_length (node, "y", y);
+
+       /* size attrs */
+       gl_label_object_get_size (object, &w, &h);
+       lgl_xml_set_prop_length (node, "w", w);
+       lgl_xml_set_prop_length (node, "h", h);
+
+       /* line attrs */
+       line_width = gl_label_object_get_line_width (GL_LABEL_OBJECT(object));
+       lgl_xml_set_prop_length (node, "line_width", line_width);
+       
+       line_color_node = gl_label_object_get_line_color (GL_LABEL_OBJECT(object));
+       if (line_color_node->field_flag)
+       {
+               lgl_xml_set_prop_string (node, "line_color_field", line_color_node->key);
+       }
+       else
+       {
+               lgl_xml_set_prop_uint_hex (node, "line_color", line_color_node->color);
+       }
+       gl_color_node_free (&line_color_node);
+
+       /* fill attrs (color or field) */
+       fill_color_node = gl_label_object_get_fill_color (GL_LABEL_OBJECT(object));
+       if (fill_color_node->field_flag)
+       {
+               lgl_xml_set_prop_string (node, "fill_color_field", fill_color_node->key);
+       }
+       else
+       {
+               lgl_xml_set_prop_uint_hex (node, "fill_color", fill_color_node->color);
+       }
+       gl_color_node_free (&fill_color_node);
+
+       /* affine attrs */
+       xml_create_affine_attrs (node, object);
+
+       /* shadow attrs */
+       xml_create_shadow_attrs (node, object);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Objects->Object-ellipse Node                           */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_object_ellipse (xmlNodePtr     root,
+                          xmlNsPtr       ns,
+                          glLabelObject *object)
+{
+       xmlNodePtr        node;
+       gdouble           x, y;
+       gdouble           w, h;
+       gdouble           line_width;
+       glColorNode      *line_color_node;
+       glColorNode *fill_color_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Object-ellipse", NULL);
+
+       /* position attrs */
+       gl_label_object_get_position (object, &x, &y);
+       lgl_xml_set_prop_length (node, "x", x);
+       lgl_xml_set_prop_length (node, "y", y);
+
+       /* size attrs */
+       gl_label_object_get_size (object, &w, &h);
+       lgl_xml_set_prop_length (node, "w", w);
+       lgl_xml_set_prop_length (node, "h", h);
+
+       /* line attrs */
+       line_width = gl_label_object_get_line_width (GL_LABEL_OBJECT(object));
+       lgl_xml_set_prop_length (node, "line_width", line_width);
+       
+       line_color_node = gl_label_object_get_line_color (GL_LABEL_OBJECT(object));
+       if (line_color_node->field_flag)
+       {
+               lgl_xml_set_prop_string (node, "line_color_field", line_color_node->key);
+       }
+       else
+       {
+               lgl_xml_set_prop_uint_hex (node, "line_color", line_color_node->color);
+       }
+       gl_color_node_free (&line_color_node);
+
+
+       /* fill attrs (color or field) */
+       fill_color_node = gl_label_object_get_fill_color (GL_LABEL_OBJECT(object));
+       if (fill_color_node->field_flag)
+       {
+               lgl_xml_set_prop_string (node, "fill_color_field", fill_color_node->key);
+       }
+       else
+       {
+               lgl_xml_set_prop_uint_hex (node, "fill_color", fill_color_node->color);
+       }
+       gl_color_node_free (&fill_color_node);
+
+       /* affine attrs */
+       xml_create_affine_attrs (node, object);
+
+       /* shadow attrs */
+       xml_create_shadow_attrs (node, object);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Objects->Object-line Node                              */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_object_line (xmlNodePtr     root,
+                       xmlNsPtr       ns,
+                       glLabelObject *object)
+{
+       xmlNodePtr        node;
+       gdouble           x, y;
+       gdouble           dx, dy;
+       gdouble           line_width;
+       glColorNode      *line_color_node;
+
+       gl_debug (DEBUG_XML, "START");
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Object-line", NULL);
+
+       /* position attrs */
+       gl_label_object_get_position (object, &x, &y);
+       lgl_xml_set_prop_length (node, "x", x);
+       lgl_xml_set_prop_length (node, "y", y);
+
+       /* length attrs */
+       gl_label_object_get_size (object, &dx, &dy);
+       lgl_xml_set_prop_length (node, "dx", dx);
+       lgl_xml_set_prop_length (node, "dy", dy);
+
+       /* line attrs */
+       line_width = gl_label_object_get_line_width (GL_LABEL_OBJECT(object));
+       lgl_xml_set_prop_length (node, "line_width", line_width);
+       
+       line_color_node = gl_label_object_get_line_color (GL_LABEL_OBJECT(object));
+       if (line_color_node->field_flag)
+       {
+               lgl_xml_set_prop_string (node, "line_color_field", line_color_node->key);
+       }
+       else
+       {
+               lgl_xml_set_prop_uint_hex (node, "line_color", line_color_node->color);
+       }
+       gl_color_node_free (&line_color_node);
+
+
+       /* affine attrs */
+       xml_create_affine_attrs (node, object);
+
+       /* shadow attrs */
+       xml_create_shadow_attrs (node, object);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Objects->Object-image Node                             */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_object_image (xmlNodePtr     root,
+                        xmlNsPtr       ns,
+                        glLabelObject *object)
+{
+       xmlNodePtr        node;
+       gdouble           x, y;
+       gdouble           w, h;
+       glTextNode       *filename;
+
+       gl_debug (DEBUG_XML, "START");
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Object-image", NULL);
+
+       /* position attrs */
+       gl_label_object_get_position (object, &x, &y);
+       lgl_xml_set_prop_length (node, "x", x);
+       lgl_xml_set_prop_length (node, "y", y);
+
+       /* size attrs */
+       gl_label_object_get_size (object, &w, &h);
+       lgl_xml_set_prop_length (node, "w", w);
+       lgl_xml_set_prop_length (node, "h", h);
+
+       /* src OR field attr */
+       filename = gl_label_image_get_filename (GL_LABEL_IMAGE(object));
+       if (filename->field_flag) {
+               lgl_xml_set_prop_string (node, "field", filename->data);
+       } else {
+               lgl_xml_set_prop_string (node, "src", filename->data);
+       }
+       gl_text_node_free (&filename);
+
+       /* affine attrs */
+       xml_create_affine_attrs (node, object);
+
+       /* shadow attrs */
+       xml_create_shadow_attrs (node, object);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Objects->Object-barcode Node                           */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_object_barcode (xmlNodePtr     root,
+                          xmlNsPtr       ns,
+                          glLabelObject *object)
+{
+       xmlNodePtr        node;
+       gdouble           x, y;
+       gdouble           w, h;
+       glTextNode       *text_node;
+       gchar            *id;
+       gboolean          text_flag;
+       gboolean          checksum_flag;
+       glColorNode      *color_node;
+       guint             format_digits;
+
+       gl_debug (DEBUG_XML, "START");
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Object-barcode", NULL);
+
+       /* position attrs */
+       gl_label_object_get_position (object, &x, &y);
+       lgl_xml_set_prop_length (node, "x", x);
+       lgl_xml_set_prop_length (node, "y", y);
+
+       /* size attrs */
+       gl_label_object_get_raw_size (object, &w, &h);
+       lgl_xml_set_prop_length (node, "w", w);
+       lgl_xml_set_prop_length (node, "h", h);
+
+       /* Barcode properties attrs */
+       gl_label_barcode_get_props (GL_LABEL_BARCODE(object),
+                                   &id, &text_flag, &checksum_flag, &format_digits);
+       lgl_xml_set_prop_string (node, "style", id);
+       lgl_xml_set_prop_boolean (node, "text", text_flag);
+       lgl_xml_set_prop_boolean (node, "checksum", checksum_flag);
+       
+       g_free (id);
+       
+       color_node = gl_label_object_get_line_color (GL_LABEL_OBJECT(object));
+       if (color_node->field_flag)
+       {
+               lgl_xml_set_prop_string (node, "color_field", color_node->key);
+       }
+       else
+       {
+               lgl_xml_set_prop_uint_hex (node, "color", color_node->color);
+       }
+       gl_color_node_free (&color_node);
+
+
+       /* data OR field attr */
+       text_node = gl_label_barcode_get_data (GL_LABEL_BARCODE(object));
+       if (text_node->field_flag) {
+               lgl_xml_set_prop_string (node, "field", text_node->data);
+               lgl_xml_set_prop_int (node, "format", format_digits);
+       } else {
+               lgl_xml_set_prop_string (node, "data", text_node->data);
+       }
+       gl_text_node_free (&text_node);
+
+       /* affine attrs */
+       xml_create_affine_attrs (node, object);
+
+       /* shadow attrs */
+       xml_create_shadow_attrs (node, object);
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Label Merge Fields Node                                */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_merge_fields (xmlNodePtr  root,
+                        xmlNsPtr    ns,
+                        glLabel    *label)
+{
+       xmlNodePtr  node;
+       gchar      *string;
+       glMerge    *merge;
+
+       gl_debug (DEBUG_XML, "START");
+
+       merge = gl_label_get_merge (label);
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Merge", NULL);
+
+       string = gl_merge_get_name (merge);
+       lgl_xml_set_prop_string (node, "type", string);
+       g_free (string);
+
+       string = gl_merge_get_src (merge);
+       lgl_xml_set_prop_string (node, "src", string);
+       g_free (string);
+
+       g_object_unref (G_OBJECT(merge));
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Label Data Node                                        */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_data (xmlNodePtr  root,
+                xmlNsPtr    ns,
+                glLabel    *label)
+{
+       xmlNodePtr  node;
+       GList      *name_list, *p;
+       GHashTable *pixbuf_cache;
+
+       gl_debug (DEBUG_XML, "START");
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Data", NULL);
+
+       pixbuf_cache = gl_label_get_pixbuf_cache (label);
+       name_list = gl_pixbuf_cache_get_name_list (pixbuf_cache);
+
+       for (p = name_list; p != NULL; p=p->next) {
+               xml_create_pixdata (node, ns, label, p->data);
+       }
+
+       gl_pixbuf_cache_free_name_list (name_list);
+
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Add XML Label Data Pixbuf Node                                 */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_pixdata (xmlNodePtr  root,
+                   xmlNsPtr    ns,
+                   glLabel    *label,
+                   gchar      *name)
+{
+       xmlNodePtr  node;
+       GHashTable *pixbuf_cache;
+       GdkPixbuf  *pixbuf;
+       GdkPixdata *pixdata;
+       guchar     *stream;
+       guint       stream_length;
+       gchar      *base64;
+
+       gl_debug (DEBUG_XML, "START");
+
+       pixbuf_cache = gl_label_get_pixbuf_cache (label);
+
+       pixbuf = gl_pixbuf_cache_get_pixbuf (pixbuf_cache, name);
+       if ( pixbuf != NULL ) {
+
+               pixdata = g_new0 (GdkPixdata, 1);
+               gdk_pixdata_from_pixbuf (pixdata, pixbuf, FALSE);
+               stream = gdk_pixdata_serialize (pixdata, &stream_length);
+               base64 = gl_base64_encode (stream, stream_length);
+
+               node = xmlNewChild (root, ns, (xmlChar *)"Pixdata", (xmlChar *)base64);
+               lgl_xml_set_prop_string (node, "name", name);
+               lgl_xml_set_prop_string (node, "encoding", "Base64");
+
+               gl_pixbuf_cache_remove_pixbuf (pixbuf_cache, name);
+
+               g_free (pixdata);
+               g_free (stream);
+               g_free (base64);
+       }
+
+
+       gl_debug (DEBUG_XML, "END");
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Create top-level Span node.                                    */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_toplevel_span (xmlNodePtr        root,
+                         xmlNsPtr          ns,
+                         glLabelText      *object_text)
+{
+       xmlNodePtr        node;
+       gchar            *font_family;
+       gdouble           font_size;
+       PangoWeight       font_weight;
+       gboolean          font_italic_flag;
+       glColorNode      *color_node;
+       PangoAlignment    align;
+       gdouble           text_line_spacing;
+       GList            *lines, *p_line, *p_node;
+       glTextNode       *text_node;
+       xmlNodePtr        child;
+
+       node = xmlNewChild (root, ns, (xmlChar *)"Span", NULL);
+
+       /* All span attrs at top level. */
+       font_family = gl_label_object_get_font_family (GL_LABEL_OBJECT(object_text));
+       font_size = gl_label_object_get_font_size (GL_LABEL_OBJECT(object_text));
+       text_line_spacing = gl_label_object_get_text_line_spacing (GL_LABEL_OBJECT(object_text));
+       font_weight = gl_label_object_get_font_weight (GL_LABEL_OBJECT(object_text));
+       font_italic_flag = gl_label_object_get_font_italic_flag (GL_LABEL_OBJECT(object_text));
+       
+       color_node = gl_label_object_get_text_color (GL_LABEL_OBJECT(object_text));
+       if (color_node->field_flag)
+       {
+               lgl_xml_set_prop_string (node, "color_field", color_node->key);
+       }
+       else
+       {
+               lgl_xml_set_prop_uint_hex (node, "color", color_node->color);
+       }
+       gl_color_node_free (&color_node);
+       
+       align = gl_label_object_get_text_alignment (GL_LABEL_OBJECT(object_text));
+       lgl_xml_set_prop_string (node, "font_family", font_family);
+       lgl_xml_set_prop_double (node, "font_size", font_size);
+       lgl_xml_set_prop_string (node, "font_weight", gl_util_weight_to_string (font_weight));
+       lgl_xml_set_prop_boolean (node, "font_italic", font_italic_flag);
+       
+       lgl_xml_set_prop_double (node, "line_spacing", text_line_spacing);
+
+       /* Build children. */
+       lines = gl_label_text_get_lines (GL_LABEL_TEXT(object_text));
+       for (p_line = lines; p_line != NULL; p_line = p_line->next) {
+
+               for (p_node = (GList *) p_line->data; p_node != NULL;
+                    p_node = p_node->next) {
+                       text_node = (glTextNode *) p_node->data;
+
+                       if (text_node->field_flag) {
+                               child = xmlNewChild (node, ns, (xmlChar *)"Field", NULL);
+                               lgl_xml_set_prop_string (child, "name", text_node->data);
+                       } else {
+                               xmlNodeAddContent (node, (xmlChar *)text_node->data);
+                       }
+
+               }
+
+               if ( p_line->next ) {
+                       child = xmlNewChild (node, ns, (xmlChar *)"NL", NULL);
+               }
+
+       }
+
+       gl_text_node_lines_free (&lines);
+       g_free (font_family);
+
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Create affine attributes.                                      */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_affine_attrs (xmlNodePtr        node,
+                        glLabelObject    *object)
+{
+        cairo_matrix_t matrix;
+
+       gl_label_object_get_matrix (object, &matrix);
+
+       lgl_xml_set_prop_double (node, "a0", matrix.xx);
+       lgl_xml_set_prop_double (node, "a1", matrix.yx);
+       lgl_xml_set_prop_double (node, "a2", matrix.xy);
+       lgl_xml_set_prop_double (node, "a3", matrix.yy);
+       lgl_xml_set_prop_double (node, "a4", matrix.x0);
+       lgl_xml_set_prop_double (node, "a5", matrix.y0);
+}
+
+/*--------------------------------------------------------------------------*/
+/* PRIVATE.  Create shadow attributes.                                      */
+/*--------------------------------------------------------------------------*/
+static void
+xml_create_shadow_attrs (xmlNodePtr        node,
+                        glLabelObject    *object)
+{
+       gboolean          shadow_state;
+       gdouble           shadow_x;
+       gdouble           shadow_y;
+       glColorNode      *shadow_color_node;
+       gdouble           shadow_opacity;
+
+       shadow_state = gl_label_object_get_shadow_state (object);
+
+       if (shadow_state)
+       {
+               lgl_xml_set_prop_boolean (node, "shadow", shadow_state);
+
+               gl_label_object_get_shadow_offset (object, &shadow_x, &shadow_y);
+               lgl_xml_set_prop_length (node, "shadow_x", shadow_x);
+               lgl_xml_set_prop_length (node, "shadow_y", shadow_y);
+               
+               shadow_color_node = gl_label_object_get_shadow_color (object);
+               if (shadow_color_node->field_flag)
+               {
+                       lgl_xml_set_prop_string (node, "shadow_color_field", shadow_color_node->key);
+               }
+               else
+               {
+                       lgl_xml_set_prop_uint_hex (node, "shadow_color", shadow_color_node->color);
+               }
+               gl_color_node_free (&shadow_color_node);
+
+               shadow_opacity = gl_label_object_get_shadow_opacity (object);
+               lgl_xml_set_prop_double (node, "shadow_opacity", shadow_opacity);
+       }
+}
+
+
diff --git a/src/xml-label.h b/src/xml-label.h
new file mode 100644 (file)
index 0000000..5c5f0c3
--- /dev/null
@@ -0,0 +1,55 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ *  (GLABELS) Label and Business Card Creation program for GNOME
+ *
+ *  xml-label.h:  GLabels xml label module header file
+ *
+ *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
+ *
+ *  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
+ */
+#ifndef __XML_LABEL_H__
+#define __XML_LABEL_H__
+
+#include "label.h"
+
+G_BEGIN_DECLS
+
+
+typedef enum {
+       XML_LABEL_UNKNOWN_MEDIA = 1,
+       XML_LABEL_OK = 0,
+       XML_LABEL_ERROR_OPEN_PARSE = -10,
+       XML_LABEL_ERROR_SAVE_FILE = -20,
+} glXMLLabelStatus;
+
+
+extern glLabel      *gl_xml_label_open          (const gchar * filename,
+                                                glXMLLabelStatus *status);
+extern glLabel      *gl_xml_label_open_buffer   (const gchar * buffer,
+                                                glXMLLabelStatus *status);
+
+extern void          gl_xml_label_save          (glLabel * label,
+                                                const gchar * filename,
+                                                glXMLLabelStatus *status);
+extern gchar        *gl_xml_label_save_buffer   (glLabel * label,
+                                                glXMLLabelStatus *status);
+
+
+G_END_DECLS
+
+
+#endif /* __XML_LABEL_H__ */